小车启动,终端运行程序,rviz中会显示URDF模型。
打开终端输入以下指令进入docker,
./docker_ros2.sh
出现以下界面就是进入docker成功,现在即可通过指令控制小车,

加载URDF和生成一个模拟控制器并且启动rviz,终端输入,
xxxxxxxxxxros2 launch yahboomcar_description display_launch.py
然后,用鼠标调整视角,滑动刚才生成的模拟控制器,即可看的小车的轮胎/相机在变化,

l1_Joint:控制左前轮
l2_Joint:控制左后轮
r1_Joint:控制右前轮
r2_Joint:控制右后轮
arm1_Joint:控制云台1
arm2_Joint:控制云台2
Randomize:随机发布数值到各个joint
Center:所有的Joint归中
代码位置,
xxxxxxxxxx/root/yahboomcar_ws/src/yahboomcar_description/launch
display_launch.py
xfrom ament_index_python.packages import get_package_share_pathfrom launch import LaunchDescriptionfrom launch.actions import DeclareLaunchArgumentfrom launch.substitutions import Command, LaunchConfigurationfrom launch_ros.actions import Nodefrom launch_ros.parameter_descriptions import ParameterValuedef generate_launch_description(): urdf_tutorial_path = get_package_share_path('yahboomcar_description') default_model_path = urdf_tutorial_path / 'urdf/Raspbot-V2.urdf' default_rviz_config_path = urdf_tutorial_path / 'rviz/raspbotv2.rviz' model_arg = DeclareLaunchArgument(name='model', default_value=str(default_model_path), description='Absolute path to robot urdf file') robot_description = ParameterValue(Command(['xacro ', LaunchConfiguration('model')]), value_type=str) rviz_arg = DeclareLaunchArgument(name='rvizconfig', default_value=str(default_rviz_config_path), description='Absolute path to rviz config file') robot_state_publisher_node = Node( package='robot_state_publisher', executable='robot_state_publisher', parameters=[{'robot_description': robot_description}] ) joint_state_publisher_gui_node = Node( package='joint_state_publisher_gui', executable='joint_state_publisher_gui' ) tf_base_footprint_to_base_link = Node( package='tf2_ros', executable='static_transform_publisher', arguments=['0', '0', '0.05', '0.0', '0.0', '0.0', 'base_footprint', 'base_link'], ) rviz_node = Node( package='rviz2', executable='rviz2', name='rviz2', output='screen', arguments=['-d', LaunchConfiguration('rvizconfig')], ) return LaunchDescription([ model_arg, joint_state_publisher_gui_node, robot_state_publisher_node, tf_base_footprint_to_base_link, rviz_arg, rviz_node ])/root/yahboomcar_ws/src/yahboomcar_description/urdf/Raspbot-V2.urdfURDF,全称为 Unified Robot Description Format ,翻译为中文为 统一机器人描述性格式,是一种使用xml格式描述的机器人模型文件,类似于D-H参数。
xxxxxxxxxx<?xml version="1.0" encoding="utf-8"?>
第一行为xml必填项,描述了xml的版本信息。
xxxxxxxxxx<robot name="RaspbotV2"></robot>第二行描述了当前的机器人名称;当前机器人所有信息均包含在【robot】标签内。
link与joint的关系:两个link之间通过关节连接起来,想象成手臂有小臂(link)和大臂(link)通过肘关节(joint)连接。
1)、简介
在URDF描述性语言中,link是用来描述物理特性的,
Links还可以描述连杆尺寸(size)\颜色(color)\形状(shape)\惯性矩阵(inertial matrix)\碰撞参数(collision properties)等,每个Link会成为一个坐标系。
2)、示例代码
xxxxxxxxxx<link name="base_link"> <inertial> <origin xyz="0.013209067968915 0.000305835286849597 0.034565647785585" rpy="0 0 0" /> <mass value="0.315736522899678" /> <inertia ixx="0.000126930677782624" ixy="-1.93570093947537E-07" ixz="-3.2159760519397E-08" iyy="0.000217028578454845" iyz="3.16386759318505E-07" izz="0.000309637617387382" /> </inertial> <visual> <origin xyz="0 0 0" rpy="0 0 0" /> <geometry> <mesh filename="package://yahboomcar_description/meshes/base_link.STL" /> </geometry> <material name=""> <color rgba="0.203921568627451 0.203921568627451 0.203921568627451 1" /> </material> </visual> <collision> <origin xyz="0 0 0" rpy="0 0 0" /> <geometry> <mesh filename="package://yahboomcar_description/meshes/base_link.STL" /> </geometry> </collision> </link>3)、标签介绍
origin:描述的是位姿信息; xyz 属性描述的是在大环境中的坐标位置, rpy 属性描述的是自身的姿态。
mess:描述的是link的质量。
inertia:惯性参考系,由于转动惯性矩阵的对称性,只需要6个上三角元素 ixx, ixy, ixz, iyy, iyz, izz作为属性。
geometry:标签描述的是形状; mesh 属性主要的功能是去加载纹理文件的, filename 属性纹理路径的文件地址
material:标签描述的是材质; name 属性为必填项,可以为空,可以重复 。通过【color】标签中的 rgba
属性来描述红、绿、蓝、透明度,中间用空格分隔。
1)、简介
描述两个关节之间的关系,运动位置和速度限制,运动学和动力学属性。关节类型有以下几种:
2)、示例代码
xxxxxxxxxx <joint name="arm1_Joint" type="revolute"> <limit effort="100" velocity="1" lower="-1.57" upper="1.57"/> <origin xyz="0.058 0 0.0575" rpy="0 0 0" /> <parent link="base_link" /> <child link="arm1_Link" /> <axis xyz="0 0 1" /> <limit lower="0" upper="0" effort="0" velocity="0" /> </joint>在【joint】标签中 name 属性是 必填项,描述关节的名称,并且是唯一。在【joint】标签中 type 属性,对应填写六大关节类型。
3)、标签介绍