《ROS理论与实践》学习笔记URDF机器人建模
Posted Sakurazzy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《ROS理论与实践》学习笔记URDF机器人建模相关的知识,希望对你有一定的参考价值。
《ROS理论与实践》学习笔记(四)URDF机器人建模
在学习《ROS理论与实践》课程时,记录了学习过程中的编程练习,课后作业以及发现的问题,后续会对尚未解决的问题继续分析并更新,纯小白,仅供参考。
本次学习笔记关于课程中的第五讲:URDF机器人建模 。主要学习了ROS的URDF建模方法。
课程内容
1.URDF建模方法
- < link >
描述机器人某个刚体部分的外观和物理属性 - < joint >
描述两个link之间的关系,包括关节运动的位置和速度限制
关节类型 | 描述 |
---|---|
continuous | 旋转关节 ,可绕单轴无限旋转 |
rebolute | 旋转关节,有旋转角度极限 |
prismatic | 滑动关节,右位置极限 |
planar | 平面关节,允许在平面正交方向上平移或旋转 |
floating | 浮动关节,允许平移、旋转运动 |
fixed | 固定关节 |
- < robot >
机器人模型顶层标签<robot name="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模型文件如下:
<?xml version="1.0" ?>
<robot name="mybot">
<link name="base_link">
<visual>
<origin xyz=" 0 0 0" rpy="0 0 0" />
<geometry>
<cylinder length="0.05" radius="0.20"/>
</geometry>
<material name="yellow">
<color rgba="1 0.4 0 1"/>
</material>
</visual>
</link>
<joint name="left_motor_joint" type="fixed">
<origin xyz="-0.1 0.11 0" rpy="0 0 0"/>
<parent link="base_link"/>
<child link="left_motor_link"/>
<axis xyz="0 1 0"/>
</joint>
<link name="left_motor_link">
<visual>
<origin xyz="0 0 0" rpy="1.5707 0 0" />
<geometry>
<cylinder radius="0.04" length = "0.18"/>
</geometry>
<material name="white">
<color rgba="1 1 1 0.9"/>
</material>
</visual>
</link>
<joint name="left_wheel_joint" type="continuous">
<origin xyz="0 0.1025 0" rpy="0 0 0"/>
<parent link="left_motor_link"/>
<child link="left_wheel_link"/>
<axis xyz="0 1 0"/>
</joint>
<link name="left_wheel_link">
<visual>
<origin xyz="0 0 0" rpy="1.5707 0 0" />
<geometry>
<cylinder radius="0.06" length = "0.025"/>
</geometry>
<material name="white">
<color rgba="1 1 1 0.9"/>
</material>
</visual>
</link>
<joint name="right_motor_joint" type="fixed">
<origin xyz="-0.1 -0.11 0" rpy="0 0 0"/>
<parent link="base_link"/>
<child link="right_motor_link"/>
<axis xyz="0 1 0"/>
</joint>
<link name="right_motor_link">
<visual>
<origin xyz="0 0 0" rpy="1.5707 0 0" />
<geometry>
<cylinder radius="0.04" length = "0.18"/>
</geometry>
<material name="white">
<color rgba="1 1 1 0.9"/>
</material>
</visual>
</link>
<joint name="right_wheel_joint" type="continuous">
<origin xyz="0 -0.1025 0" rpy="0 0 0"/>
<parent link="right_motor_link"/>
<child link="right_wheel_link"/>
<axis xyz="0 1 0"/>
</joint>
<link name="right_wheel_link">
<visual>
<origin xyz="0 0 0" rpy="1.5707 0 0" />
<geometry>
<cylinder radius="0.06" length = "0.025"/>
</geometry>
<material name="white">
<color rgba="1 1 1 0.9"/>
</material>
</visual>
</link>
<joint name="front_caster_joint" type="continuous">
<origin xyz="0.18 0 -0.025" rpy="0 0 0"/>
<parent link="base_link"/>
<child link="front_caster_link"/>
<axis xyz="0 1 0"/>
</joint>
<link name="front_caster_link">
<visual>
<origin xyz="0 0 -0.025" rpy="1.5707 0 0"/>
<geometry>
<cylinder radius="0.025" length = "0.01"/>
</geometry>
<material name="black">
<color rgba="0 0 0 0.95"/>
</material>
</visual>
</link>
<link name="camera_link">
<visual>
<origin xyz=" 0 0 0 " rpy="0 0 0" />
<geometry>
<box size="0.03 0.04 0.04" />
</geometry>
<material name="black">
<color rgba="0 0 0 0.95"/>
</material>
</visual>
</link>
<joint name="camera_joint" type="fixed">
<origin xyz="0.17 0 0.025" rpy="0 0 0"/>
<parent link="base_link"/>
<child link="camera_link"/>
</joint>
<link name="kinect_link">
<visual>
<origin xyz="0 0 0" rpy="0 0 1.5708"/>
<geometry>
<mesh filename="package://mybot_description/meshes/kinect.dae" />
</geometry>
</visual>
</link>
<joint name="kinect_joint" type="fixed">
<origin xyz="0.11 0 0.06" rpy="0 0 0"/>
<parent link="base_link"/>
<child link="kinect_link"/>
</joint>
</robot>
launch文件代码如下:
<launch>
<param name="robot_description" textfile="$(find mybot_description)/urdf/mybot_all.urdf" />
<!-- 设置GUI参数,显示关节控制插件 -->
<param name="use_gui" value="true"/>
<!-- 运行joint_state_publisher节点,发布机器人的关节状态 -->
<node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" />
<!-- 运行robot_state_publisher节点,发布tf -->
<node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher" />
<!-- 运行rviz可视化界面 -->
<node name="rviz" pkg="rviz" type="rviz" args="-d $(find mybot_description)/config/mybot_urdf.rviz" required="true" />
</launch>
运行效果:
$ roslaunch mybot_description display_mybot_all_urdf.launch
结语
本讲主要学习了urdf的建模方法,并完成了自己的机器人模型的建模。
以上是关于《ROS理论与实践》学习笔记URDF机器人建模的主要内容,如果未能解决你的问题,请参考以下文章