1 · URDF基础入门
URDF,全称 Unified Robot Description Format,统一机器人描述格式。说白了,它就是 ROS 世界里用来描述机器人长什么样的“身份证”。你想想看,要让机器人动起来,总得先告诉系统它有几条腿、几个轮子、关节怎么转吧?URDF 就是干这个的。
我最早接触 URDF 是在做一个差速轮小车的时候。那时候觉得不就是写个 XML 嘛,结果一上来就把轮子的坐标搞反了,小车在 rviz 里直接“劈叉”。嗯,从那以后我养成了一个习惯——先画草图,再写 URDF。
URDF 文件结构
一个标准的 URDF 文件,根标签是 <robot>,里面主要包含两类子标签:<link> 和 <joint>。我个人习惯把 link 想象成“骨头”,joint 想象成“关节”。骨头和关节连在一起,就组成了完整的骨架。
<robot name="my_robot">
<link name="base_link">
<visual>
<geometry>
<box size="0.4 0.3 0.1"/>
</geometry>
</visual>
</link>
<joint name="left_wheel_joint" type="continuous">
<parent link="base_link"/>
<child link="left_wheel"/>
<origin xyz="0.2 0.15 0" rpy="0 0 0"/>
</joint>
</robot>
你看,结构非常清晰。每个 link 可以定义视觉、碰撞、惯性属性;每个 joint 则连接两个 link,并指定相对位置和旋转。
link 与 joint 的概念
link 是刚体部件,比如底盘、轮子、机械臂的连杆。它本身不产生运动,只提供几何和物理属性。
joint 是运动约束,它决定了两个 link 之间的相对运动方式。ROS 里支持多种 joint 类型:
| 类型 | 自由度 | 典型用途 |
|---|---|---|
| revolute | 旋转 (有角度限制) | 关节臂、舵机 |
| continuous | 旋转 (无限制) | 车轮、转台 |
| prismatic | 平移 | 伸缩杆、滑轨 |
| fixed | 无运动 | 刚性连接 (如传感器支架) |
| floating | 6自由度 | 全向移动基座 (很少用) |
坐标系与变换树
每个 link 都有一个自己的坐标系。joint 里的 <origin> 定义了子 link 相对于父 link 的位姿。所有 link 的坐标系通过 joint 连接起来,就形成了一棵“变换树”(TF tree)。
我记得有一次调试四轮小车,左后轮的坐标系原点写错了符号,结果小车在 rviz 里一直原地转圈。后来用 tf_echo 一查,发现轮子坐标系跑到了车身外面。所以,坐标系偏移一定要反复核对。
变换树是 ROS 里非常核心的概念。每个 link 坐标系之间的变换关系,由 joint 的 origin 和 axis 共同决定。你可以用 view_frames 或 tf2_tools 把整棵树打印出来,一目了然。
<inertial> 标签,哪怕质量设成 0.001 都行,但不能缺。
好了,这一章我们聊了 URDF 是什么、文件骨架、link/joint 的概念,还有坐标系变换树。你想想看,其实 URDF 就是搭积木——link 是积木块,joint 是连接销,变换树就是积木的装配图。下一章我们会深入 link 标签的每个细节,到时候再细聊。