本专栏旨在通过对ROS的系统学习,掌握ROS底层基本分布式原理,并具有机器人建模和应用ROS进行实际项目的开发和调试的工程能力。
🚀详情:《ROS从入门到精通》
统一(标准化)机器人描述格式(Unified Robot Description Format, URDF)以XML标签文件的方式描述机器人的部分结构——例如底盘、摄像头、激光雷达、机械臂以及不同关节的自由度,该描述文件可被C++内置解释器转换成可视化的机器人模型,是 ROS 中实现机器人仿真的重要组件。
关于xml文件的基本语法格式请参考ROS从入门到精通1-3:ROS运行管理与常用配置文件

urdf中为保证XML语法的完整性,使用robot作为根标签,其他所有标签都必须包含在robot标签内,在该标签内可通过name属性设置机器人模型的名称。
urdf中的link标签用于描述机器人某个刚性部件(连杆)的外观和物理属性,例如机器人底座、轮子、激光雷达、摄像头等。在link标签内可以设计该部件的形状、尺寸、颜色、惯性矩阵、碰撞参数等一系列属性。

其常见子标签阐述如下
可视标签visual用于描述连杆的外观信息,其下还有子标签
geometry标签
geometry标签用于描述连杆形状
- 子标签:盒状
box,属性:长x、宽y、高z- 子标签:圆柱状
cylinder,属性:半径radius、高度length- 子标签:球状
sphere,属性:半径radius- 子标签:皮肤
mesh,属性:皮肤资源路径filename,格式为package:///.../file
origin标签
origin标签用于描述偏移量与倾斜弧度
- 属性:笛卡尔坐标xyz,欧拉角坐标rpy(单位弧度)
material标签
material标签用于描述材料属性
- 属性:名称name
- 子标签: 颜色
color,属性:RGBA色系rgba
collision标签用于描述连杆碰撞属性
inertial标签用于描述连杆惯性矩阵
urdf中的joint标签用于描述机器人关节的运动学、动力学、安全极限等属性(该属性在模型中不可见),机器人的两个连杆间以关节形式连接,不同关节有不同运动形式——旋转、滑动、固定等,例如安装在底座上的轮子可以360°旋转,而摄像头则可能是完全固定在底座上。

joint标签有属性
- 旋转关节continuous,可绕单轴无限旋转
- 旋转关节revolute,可绕单轴有限旋转
- 平动关节prismatic,可沿某轴线有限平动
- 平面关节planer,可在平面正交方向上平移或旋转
- 浮动关节floating,可进行平移、旋转运动
- 固定关节fixed,不允许运动的特殊关节
joint标签常见子标签:
parent,属性:父连杆名称linkchild,属性:子连杆名称linkorigin,属性:笛卡尔坐标xyz,欧拉角坐标rpy(单位弧度)axis,属性笛卡尔坐标xyz分别生成长方体、圆柱与球体的机器人部件
<robot name="simple">
<link name="base_link">
<visual>
<geometry>
<sphere radius="0.3" />
geometry>
<origin xyz="0 0 0" rpy="0 0 0" />
<material name="black">
<color rgba="0.7 0.5 0 0.5" />
material>
visual>
link>
robot>

制作一个简单机器人:先定义连杆,再定义关节将连杆连接起来。
<robot name="robot">
<link name="base_link">
<visual>
<geometry>
<box size=".2 .3 .1"/>
geometry>
<origin rpy="0 0 0" xyz="0 0 0.05"/>
<material name="white">
<color rgba="1 1 1 1"/>
material>
visual>
link>
<link name="wheel1_link">
<visual>
<geometry>
<cylinder length="0.05" radius="0.05"/>
geometry>
<origin rpy="0 1.5 0" xyz="0.1 0.1 0"/>
<material name="black">
<color rgba="0 0 0 1"/>
material>
visual>
link>
<link name="wheel2_link">
<visual>
<geometry>
<cylinder length="0.05" radius="0.05"/>
geometry>
<origin rpy="0 1.5 0" xyz="-0.1 0.1 0"/>
<material name="black"/>
visual>
link>
<link name="wheel3_link">
<visual>
<geometry>
<cylinder length="0.05" radius="0.05"/>
geometry>
<origin rpy="0 1.5 0" xyz="0.1 -0.1 0"/>
<material name="black"/>
visual>
link>
<link name="wheel4_link">
<visual>
<geometry>
<cylinder length="0.05" radius="0.05"/>
geometry>
<origin rpy="0 1.5 0" xyz="-0.1 -0.1 0"/>
<material name="black"/>
visual>
link>
<joint name="wheel1_joint" type="fixed">
<parent link="base_link"/>
<child link="wheel1_link"/>
<origin xyz="0 0 0"/>
joint>
<joint name="wheel2_joint" type="fixed">
<parent link="base_link"/>
<child link="wheel2_link"/>
<origin xyz="0 0 0"/>
joint>
<joint name="wheel3_joint" type="fixed">
<parent link="base_link"/>
<child link="wheel3_link"/>
<origin xyz="0 0 0"/>
joint>
<joint name="wheel4_joint" type="fixed">
<parent link="base_link"/>
<child link="wheel4_link"/>
<origin xyz="0 0 0"/>
joint>
robot>

以案例二为例进行工具演示。
安装检查工具
sudo apt install liburdfdom-tools
检查某个urdf文件
check_urdf robot.urdf
检查结果如下:

运行以下语句
urdf_to_graphiz robot.urdf
evince robot.pdf
即可查看urdf文件结构

🔥 更多精彩专栏: