第1章 · URDF基础入门
什么是URDF?机器人描述格式的起源与核心思想。
各位好,我是你们这门课的老朋友。做机器人仿真这么多年,我越来越觉得——URDF 就像机器人的“身份证”。没有它,你的机器人就是个没名没姓的铁疙瘩。今天咱们就来聊聊,URDF 到底是个啥,它从哪来,以及它背后那个简单的要命的核心思想。
1.1 从一段“痛苦”的经历说起
我记得刚入行那会儿,团队里做导航的同事天天抱怨:“这个轮子到底装在哪?底盘高度是多少?” 每个人手里一份 Excel 表格,标着各种尺寸,但一放到仿真里就乱套。后来我们统一用 URDF 描述机器人,所有信息都写在一个文件里。嗯,世界清净了。
说白了,URDF 就是 Unified Robot Description Format(统一机器人描述格式)的缩写。它用 XML 语言把机器人的身体结构、关节、传感器、甚至外观颜色,全都说清楚。你想想看,一个机器人有多少个连杆?关节怎么转?轮子半径多大?这些信息,URDF 全包了。
<link>,每个活动关节是一个 <joint>,父子关系构成一棵树。
1.2 起源:为什么会有URDF?
大概在 2008 年左右,ROS 刚刚起步。那时候大家描述机器人各用各的格式——有人用 XML,有人写脚本,还有人直接在代码里硬编码尺寸。我见过最离谱的,是把机器人参数写在 Excel 里,然后手动转成 C++ 结构体……
所以 ROS 社区决定搞一个统一标准。URDF 就这么诞生了。它借鉴了当时一些工业机器人描述语言的经验,但更轻量、更贴近科研和教学。我个人觉得,URDF 最大的贡献不是语法多漂亮,而是让“仿真”和“真机”用同一套参数。你调好的模型,直接拿去跑 Gazebo,再也不用二次翻译。
1.3 URDF 的核心思想:树、坐标、复用
URDF 的设计哲学其实特别朴素。我总结成三个词:
- 树形结构 —— 机器人从基座开始,每个零件挂在上一个零件下面。没有环,没有交叉,就是一棵树。
- 坐标变换 —— 每个
<joint>定义了两个连杆之间的相对位置和旋转。你想想看,只要知道每个关节的变换,整个机器人的姿态就全算出来了。 - 可复用 —— 虽然原生 URDF 不支持变量和宏,但后来 Xacro 补上了这个短板(后面章节会细讲)。但即便只用纯 URDF,你也可以通过
<include>等方式组织文件。
1.4 一个最简单的URDF长什么样?
别急着写复杂模型。咱们先看一个只有两个连杆和一个关节的“哑铃”模型。你感受一下结构:
<?xml version="1.0"?>
<robot name="my_first_robot">
<link name="base_link">
<visual>
<geometry>
<cylinder length="0.2" radius="0.05"/>
</geometry>
</visual>
</link>
<joint name="joint1" type="fixed">
<parent link="base_link"/>
<child link="top_link"/>
<origin xyz="0 0 0.15" rpy="0 0 0"/>
</joint>
<link name="top_link">
<visual>
<geometry>
<sphere radius="0.08"/>
</geometry>
</visual>
</link>
</robot>
你看,<robot> 是根标签,里面包着 <link> 和 <joint>。每个 link 定义外观(visual),joint 定义父子关系。就这么简单。我刚开始学的时候,觉得这玩意儿跟搭积木一样——一个零件一个零件往上堆。
1.5 为什么 URDF 至今仍是主流?
有人可能会问:现在都 2025 年了,为什么还在用 URDF?其实我也用过其他格式,比如 SDF、MJCF。但 URDF 在 ROS 生态里太深了。你随便找一个开源机器人,几乎都有 URDF 文件。而且它足够简单——一个文本编辑器就能改,不需要编译,不需要数据库。
我个人习惯把 URDF 比作“机器人的简历”。它不完美,但招聘方(ROS、Gazebo、MoveIt)都认它。你想想看,生态的力量有多强大。
| 特性 | URDF | SDF | MJCF |
|---|---|---|---|
| ROS 原生支持 | ✅ 一等公民 | ✅ 支持 | 需转换 |
| 学习曲线 | 低 | 中 | 中高 |
| 动态仿真 | 需配合 Gazebo | 原生支持 | 原生支持 |
| 可读性 | 高(XML 直观) | 中 | 中 |
| 适用场景 | ROS 机器人原型 | 复杂仿真环境 | 物理引擎调优 |
▲ 不同机器人描述格式的简单对比。URDF 在 ROS 领域依然是最通用的选择。
1.6 本章小结
URDF 不是什么高深的东西。它就是一套用 XML 写机器人“骨架”的规则。核心思想是树形结构 + 坐标变换。起源是为了让 ROS 生态里的机器人能互相理解。你只要记住:link 是骨头,joint 是关节,剩下的都是细节。
下一章我们会把 URDF 放到 ROS 的大背景里,看看它到底怎么跟节点、话题、TF 玩到一起。不过别急,先把今天的概念消化掉。嗯,咱们慢慢来。