URDF 入门指南:创建你的第一个机器人模型
最近在学习 ROS 机器人开发,发现 URDF(Unified Robot Description Format) 是描述机器人模型的必备技能。作为一个刚入门的新手,记录下如何用 URDF 创建一个简单的两节机械臂模型。
URDF 基础概念
URDF 是 ROS 中用来描述机器人物理结构和运动特性的 XML 格式文件。它主要包含以下几个核心元素:
- link 标签:定义机器人的刚性部件,相当于机器人的'骨骼'
- joint 标签:定义 link 之间的连接方式和运动特性
- visual 标签:定义部件的可视化外观
- collision 标签:定义部件的碰撞属性
创建两节机械臂模型
我们要创建一个由两个长方体组成的简单机械臂:
- 基座 (base_link):长 30cm 的立方体,固定在坐标系原点
- 机械臂 (arm_link):长 20cm 的立方体,通过旋转关节连接到基座
1. 定义基座 (base_link)
基座是机械臂的固定部分,我们用一个立方体表示。在 URDF 中,几何形状可以用 box、cylinder、sphere 等基本形状描述。这里使用 box,并设置尺寸为 0.3 米 (30cm) 的立方体。
2. 定义机械臂 (arm_link)
机械臂部分同样使用 box 几何体,尺寸设为 0.2 米 (20cm) 的立方体。为了让机械臂能够旋转,我们需要在基座和机械臂之间添加一个旋转关节。
3. 创建旋转关节 (arm_joint)
关节类型选择"revolute"(旋转关节),这是 URDF 中最常用的关节类型之一。需要设置以下参数:
- 旋转轴 (axis):这里设为 Z 轴
- 限制 (limit):设置关节的运动范围,比如 -90 度到 90 度
- 父 link 和子 link:分别连接到 base_link 和 arm_link
以下是完整的 URDF 代码示例:
<robot name="simple_arm">
<link name="base_link">
<visual>
<geometry>
<box size="0.3 0.3 0.3"/>
</geometry>
</visual>
</link>
<link name="arm_link">
<visual>
<geometry>
<box size="0.2 0.2 0.2"/>
</geometry>
</visual>
</link>
<joint name="arm_joint" type="revolute">
<parent link="base_link"/>
<child link="arm_link"/>
<axis xyz="0 0 1"/>
<limit lower="-1.57" upper="1.57" effort="0" velocity="0"/>
</joint>
</robot>
URDF 文件结构解析
完整的 URDF 文件遵循标准的 XML 结构:
- 以 robot 标签作为根元素
- 在 robot 标签内依次定义各个 link 和 joint
- 每个 link 包含 visual 和 collision 子标签
- 每个 joint 需要明确定义 parent 和 child link
常见问题与调试技巧
刚开始学习 URDF 时容易遇到几个典型问题:
- 单位混淆:URDF 中长度单位是米,角度单位是弧度,容易与厘米和度数混淆
- 坐标系错误:每个 link 都有自己的坐标系,要清楚它们之间的转换关系
- 关节类型选择不当:根据实际运动需求选择 fixed(固定)、revolute(旋转)、prismatic(平移) 等类型
- 可视化问题:可以用 RViz 工具检查模型是否正确显示
进阶学习建议
掌握基础 URDF 后,可以继续学习:
- 添加更多关节和连杆构建复杂机械结构
- 使用 mesh 文件导入自定义 3D 模型
- 添加传感器和物理属性
- 学习 xacro 宏语言简化 URDF 编写

