第1章 URDF基础入门
各位同学好,我是你们这门课的老朋友。今天咱们从最基础的东西聊起——URDF。你可能会问,学机器人为什么要先搞懂一个描述文件?嗯,我当年刚入行时也这么想。直到第一次在项目里被各种坐标变换搞到头大,才明白:没有清晰的模型描述,后面所有规划都是空中楼阁。
1.1 什么是URDF?
URDF,全称是Unified Robot Description Format,统一机器人描述格式。说白了,它就是一套专门用来描述机器人长什么样的 XML 语言。你想想看,一个机器人有多少个关节?每个关节能怎么动?连杆的尺寸、质量、惯性矩是多少?这些信息,URDF 都能帮你写清楚。
我个人习惯把 URDF 比作机器人的「身份证」加「体检报告」。它不光告诉系统你长什么样,还告诉系统你有多重、重心在哪、哪里能弯。没有它,ROS 里的可视化、运动学、路径规划全都玩不转。
1.2 URDF在机器人开发中的作用
我在项目中遇到过不少新手,上来就写规划代码,结果在 RViz 里机器人要么散架,要么关节乱转。为什么?因为 URDF 没写对。它的作用,我总结成三点:
- 可视化基础 —— 在 RViz 里看到机器人模型,全靠 URDF 提供几何和外观信息。
- 运动学计算 —— 正解、逆解、雅可比矩阵,都需要知道连杆长度和关节类型。
- 碰撞与规划 —— MoveIt! 做路径规划时,要判断机器人会不会撞到东西,URDF 里的碰撞模型就是判断依据。
你想想看,如果连机器人的尺寸都是错的,规划出来的路径你敢让真机跑吗?反正我是不敢。
1.3 第一个URDF文件:简单连杆
光说不练假把式。咱们直接上手写一个最简单的 URDF —— 一个孤零零的连杆。它没有关节,就是一个长方体。但别小看它,这是所有复杂模型的起点。
<?xml version="1.0"?>
<robot name="my_first_link">
<link name="base_link">
<visual>
<geometry>
<box size="0.2 0.1 0.05"/>
</geometry>
<origin xyz="0 0 0" rpy="0 0 0"/>
<material name="blue">
<color rgba="0 0 1 1"/>
</material>
</visual>
<collision>
<geometry>
<box size="0.2 0.1 0.05"/>
</geometry>
<origin xyz="0 0 0" rpy="0 0 0"/>
</collision>
<inertial>
<mass value="0.5"/>
<inertia ixx="0.001" ixy="0" ixz="0" iyy="0.001" iyz="0" izz="0.001"/>
</inertial>
</link>
</robot>
这段代码干了什么呢?它定义了一个叫 base_link 的连杆,长20厘米、宽10厘米、高5厘米,蓝色,质量0.5公斤。注意看,<visual> 是给眼睛看的,<collision> 是给碰撞检测用的,<inertial> 是给物理引擎用的。三者可以不一样,但一般建议保持一致,省得后面出幺蛾子。
1.4 知识体系总览
下面这张图帮你理清本章的核心逻辑。URDF 不是孤立的知识点,它连接着可视化、运动学和规划三大模块。
从这张图你能看到,URDF 处于中心位置。左边是可视化,中间是运动学,右边是路径规划。三者都依赖 URDF 提供的数据。所以,把 URDF 学扎实了,后面的路会顺很多。
1.5 如何验证你的URDF?
写完了怎么知道对不对?ROS 提供了一个命令行工具:check_urdf。你可以在终端里这样用:
# 假设你的文件叫 my_first_link.urdf
check_urdf my_first_link.urdf
如果一切正常,它会输出机器人的关节和连杆信息。如果有错误,它会告诉你哪一行有问题。我个人习惯每写一个标签就检查一次,别等到写了几百行再查,那时候找 bug 找到哭。
urdf_to_graphiz 把 URDF 转换成一张图,直观看到连杆和关节的树状结构。尤其适合检查多关节机器人的父子关系。
好了,第一章的内容就到这里。记住,URDF 是机器人的「骨架」,骨架正了,后面的肌肉(运动学)和神经(规划)才能长对地方。下一章咱们会深入 URDF 的核心标签,把每个标签的细节掰开揉碎讲清楚。