URDF文件简述
URDF(Unified Robot Description Format,统一机器人描述格式)是ROS中非常重要的机器人模型描述格式,URDF 是一种基于XML 规范、用于描述机器人结构的格式。根据该格式的设计者所言,设计这一格式的目的在于提供一种尽可能通用(as general as possible)的机器人描述规范。从机构学角度讲,机器人通常被建模为由连杆和关节组成的结构。连杆是带有质量属性的刚体,而关节是连接、限制两个刚体相对运动的结构。关节也被成为运动副。通过关节将连杆依次连接起来,就构成了一个个运动链(也就是这里所定义的机器人模型)。一个URDF 文档即描述了这样的一系列关节与连杆的相对关系、惯性属性、几何特点和碰撞模型。具体来说,包括:
- 机器人模型的运动学与动力学描述
- 机器人的几何表示
- 机器人的碰撞模型
URDF的常用参数
标签 link
link标签用于描述机器人某个刚体部分的外观和物理属性,包括尺寸(size)、颜色(color)、形状(shape)、惯性矩阵(inertial matrix)、碰撞参数(collision properties)等。
visual标签用于描述机器人LINK 部分的外观参数。inertial标签用于描述link 的惯性参数,而collision标签用于描述link 的碰撞属性。
标签joint
joint标签用于描述机器人关节运动学和动力学属性,包括关节涌动的位置和速度限制。根据机器人的关节运动形式可以将其分为六种类型。
实例URDF文件
<?xml version='1.0'?>
<robot name="mybot">
<!--**************base_link***************** -->
<link name="base_link">
<visual>
<origin xyz="0 0 0" rpy="0 0 0"/>
<geometry>
<box size="0.30 0.25 0.15"/>
</geometry>
<material name="yellow">
<color rgba="1 0.4 0 1"/>
</material>
</visual>
<collision>
<origin xyz="0 0 0" rpy="0 0 0"/>
<geometry>
<box size="0.30 0.25 0.15"/>
</geometry>
</collision>
<inertial>
<mass value="20"/>
<inertia ixx="0.525" ixy="0.0" ixz="0.0" iyy="1.191666" iyz="0.0" izz="1.4166666"/>
</inertial>
</link>
<gazebo reference="base_link">
<material>Gazebo/Gray</material>
</gazebo>
配置过程问题记录:
运行Gazebo出现cmd /opt/ros/melodic/lib/gazebo_ros/gzserver类似错误
执行命令重启服务器:
killall gzserver
urdf文件中定义gazebo插件的指令添加位置
直接代码片段:
<robot>
......
......
<!--**************base_footprint***************** -->
<link name="base_footprint">
<visual>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<box size="0.001 0.001 0.001" />
</geometry>
</visual>
</link>
<!--**************base_footprint_joint*********** -->
<joint name="base_footprint_joint" type="fixed">
<origin xyz="0 0 0" rpy="0 0 0" />
<parent link="base_footprint"/>
<child link="base_link" />
</joint>
<gazebo reference="base_footprint_joint">
<turnGravityOff>false</turnGravityOff>
</gazebo>
<!--置于文件末端,在robot定义范围内-->
<gazebo>
<plugin name="skid_steer_drive_controller" filename="libgazebo_ros_skid_steer_drive.so">
<alwaysOn>true</alwaysOn>
<robotNamespace>/</robotNamespace>
<updateRate>100</updateRate>
<leftFrontJoint>left_front_joint</leftFrontJoint>
<rightFrontJoint>right_front_joint</rightFrontJoint>
<leftRearJoint>left_back_joint</leftRearJoint>
<rightRearJoint>right_back_joint</rightRearJoint>
<wheelSeparation>0.200</wheelSeparation>
<wheelDiameter>0.120</wheelDiameter>
<torque>1</torque>
<commandTopic>cmd_vel</commandTopic>
<odometryTopic>odom</odometryTopic>
<odometryFrame>odom</odometryFrame>
<robotBaseFrame>base_footprint</robotBaseFrame>
<broadcastTF>1</broadcastTF>
</plugin>
</gazebo>
</robot>
rosdep update连接不上的解决方法:
尝试了非常多的方法,使用本地文件更新的方法是最有效的,附上连接(为大佬点赞):
本地文件安装法
要注意一点:很多教程说不需要update这一步,确实,如果说没有使用ROS更多的功能的话确实不需要,甚至我自己在没有更新成功的情况下学习完古月ROS入门教程的21讲都没有遇到什么需要rosdep update
这一步来解决的。但是在后期进一步学习ROS的仿真的时候就必须要解决这问题。
相关XML文件格式记录
这里给出了XML的基础语法连接,还要好好研读学习。
XML基本语法