小车启动,终端运行程序,rviz中会显示URDF模型。
打开终端输入以下指令进入docker,
./docker_ros2.sh
出现以下界面就是进入docker成功,现在即可通过指令控制小车,
加载URDF和生成一个模拟控制器并且启动rviz,终端输入,
xxxxxxxxxx
ros2 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_path
from launch import LaunchDescription
from launch.actions import DeclareLaunchArgument
from launch.substitutions import Command, LaunchConfiguration
from launch_ros.actions import Node
from launch_ros.parameter_descriptions import ParameterValue
def 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.urdf
URDF,全称为 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)、标签介绍