《ROS理论与实践》学习笔记(四)URDF机器人建模
- 课程内容
- 1.URDF建模方法
- 2.机器人建模功能包创建
- 3.检查urdf模型结构
- 本讲作业
- 结语
在学习《ROS理论与实践》课程时,记录了学习过程中的编程练习,课后作业以及发现的问题,后续会对尚未解决的问题继续分析并更新,纯小白,仅供参考。
本次学习笔记关于课程中的第五讲:URDF机器人建模 。主要学习了ROS的URDF建模方法。
课程内容
1.URDF建模方法
描述机器人某个刚体部分的外观和物理属性
描述两个link之间的关系,包括关节运动的位置和速度限制
关节类型 | 描述 |
---|
continuous | 旋转关节 ,可绕单轴无限旋转 |
rebolute | 旋转关节,有旋转角度极限 |
prismatic | 滑动关节,右位置极限 |
planar | 平面关节,允许在平面正交方向上平移或旋转 |
floating | 浮动关节,允许平移、旋转运动 |
fixed | 固定关节 |
机器人模型顶层标签<robot name&#61;"xxx">
<link> ... link>
<link> ... link>
<joint> ... joint>
<joint> ... joint>
robot>
2.机器人建模功能包创建
$ catkin_create_pkg mybot_description urdf xacro
文件夹名称 | 功能 |
---|
urdf | 存放机器人模型的urdf或xacro文件 |
meshes | 放置urdf中引用的模型渲染文件 |
launch | 保存相关启动文件 |
config | 保存rviz的配置文件 |
3.检查urdf模型结构
$ urdf_to_graphiz mybot_base.urdf
本讲作业
创建一个自己的机器人模型
urdf模型文件如下&#xff1a;
<robot name&#61;"mybot">
<link name&#61;"base_link">
<visual>
<origin xyz&#61;" 0 0 0" rpy&#61;"0 0 0" />
<geometry>
<cylinder length&#61;"0.05" radius&#61;"0.20"/>
geometry>
<material name&#61;"yellow">
<color rgba&#61;"1 0.4 0 1"/>
material>
visual>
link>
<joint name&#61;"left_motor_joint" type&#61;"fixed">
<origin xyz&#61;"-0.1 0.11 0" rpy&#61;"0 0 0"/>
<parent link&#61;"base_link"/>
<child link&#61;"left_motor_link"/>
<axis xyz&#61;"0 1 0"/>
joint>
<link name&#61;"left_motor_link">
<visual>
<origin xyz&#61;"0 0 0" rpy&#61;"1.5707 0 0" />
<geometry>
geometry>
<material name&#61;"white">
<color rgba&#61;"1 1 1 0.9"/>
material>
visual>
link>
<joint name&#61;"left_wheel_joint" type&#61;"continuous">
<origin xyz&#61;"0 0.1025 0" rpy&#61;"0 0 0"/>
<parent link&#61;"left_motor_link"/>
<child link&#61;"left_wheel_link"/>
<axis xyz&#61;"0 1 0"/>
joint>
<link name&#61;"left_wheel_link">
<visual>
<origin xyz&#61;"0 0 0" rpy&#61;"1.5707 0 0" />
<geometry>
geometry>
<material name&#61;"white">
<color rgba&#61;"1 1 1 0.9"/>
material>
visual>
link>
<joint name&#61;"right_motor_joint" type&#61;"fixed">
<origin xyz&#61;"-0.1 -0.11 0" rpy&#61;"0 0 0"/>
<parent link&#61;"base_link"/>
<child link&#61;"right_motor_link"/>
<axis xyz&#61;"0 1 0"/>
joint>
<link name&#61;"right_motor_link">
<visual>
<origin xyz&#61;"0 0 0" rpy&#61;"1.5707 0 0" />
<geometry>
geometry>
<material name&#61;"white">
<color rgba&#61;"1 1 1 0.9"/>
material>
visual>
link>
<joint name&#61;"right_wheel_joint" type&#61;"continuous">
<origin xyz&#61;"0 -0.1025 0" rpy&#61;"0 0 0"/>
<parent link&#61;"right_motor_link"/>
<child link&#61;"right_wheel_link"/>
<axis xyz&#61;"0 1 0"/>
joint>
<link name&#61;"right_wheel_link">
<visual>
<origin xyz&#61;"0 0 0" rpy&#61;"1.5707 0 0" />
<geometry>
geometry>
<material name&#61;"white">
<color rgba&#61;"1 1 1 0.9"/>
material>
visual>
link>
<joint name&#61;"front_caster_joint" type&#61;"continuous">
<origin xyz&#61;"0.18 0 -0.025" rpy&#61;"0 0 0"/>
<parent link&#61;"base_link"/>
<child link&#61;"front_caster_link"/>
<axis xyz&#61;"0 1 0"/>
joint>
<link name&#61;"front_caster_link">
<visual>
<origin xyz&#61;"0 0 -0.025" rpy&#61;"1.5707 0 0"/>
<geometry>
geometry>
<material name&#61;"black">
<color rgba&#61;"0 0 0 0.95"/>
material>
visual>
link>
<link name&#61;"camera_link">
<visual>
<origin xyz&#61;" 0 0 0 " rpy&#61;"0 0 0" />
<geometry>
<box size&#61;"0.03 0.04 0.04" />
geometry>
<material name&#61;"black">
<color rgba&#61;"0 0 0 0.95"/>
material>
visual>
link>
<joint name&#61;"camera_joint" type&#61;"fixed">
<origin xyz&#61;"0.17 0 0.025" rpy&#61;"0 0 0"/>
<parent link&#61;"base_link"/>
<child link&#61;"camera_link"/>
joint>
<link name&#61;"kinect_link">
<visual>
<origin xyz&#61;"0 0 0" rpy&#61;"0 0 1.5708"/>
<geometry>
<mesh filename&#61;"package://mybot_description/meshes/kinect.dae" />
geometry>
visual>
link>
<joint name&#61;"kinect_joint" type&#61;"fixed">
<origin xyz&#61;"0.11 0 0.06" rpy&#61;"0 0 0"/>
<parent link&#61;"base_link"/>
<child link&#61;"kinect_link"/>
joint>
robot>
launch文件代码如下&#xff1a;
<launch>
<param name&#61;"robot_description" textfile&#61;"$(find mybot_description)/urdf/mybot_all.urdf" />
<param name&#61;"use_gui" value&#61;"true"/>
<node name&#61;"joint_state_publisher" pkg&#61;"joint_state_publisher" type&#61;"joint_state_publisher" />
<node name&#61;"robot_state_publisher" pkg&#61;"robot_state_publisher" type&#61;"state_publisher" />
<node name&#61;"rviz" pkg&#61;"rviz" type&#61;"rviz" args&#61;"-d $(find mybot_description)/config/mybot_urdf.rviz" required&#61;"true" />
launch>
运行效果&#xff1a;
$ roslaunch mybot_description display_mybot_all_urdf.launch
结语
本讲主要学习了urdf的建模方法&#xff0c;并完成了自己的机器人模型的建模。