第1章 URDF基础入门

各位同学好,我是你们这门课的老朋友。今天咱们从最基础的东西聊起——URDF。你可能会问,学机器人为什么要先搞懂一个描述文件?嗯,我当年刚入行时也这么想。直到第一次在项目里被各种坐标变换搞到头大,才明白:没有清晰的模型描述,后面所有规划都是空中楼阁。

1.1 什么是URDF?

URDF,全称是Unified Robot Description Format,统一机器人描述格式。说白了,它就是一套专门用来描述机器人长什么样的 XML 语言。你想想看,一个机器人有多少个关节?每个关节能怎么动?连杆的尺寸、质量、惯性矩是多少?这些信息,URDF 都能帮你写清楚。

我个人习惯把 URDF 比作机器人的「身份证」加「体检报告」。它不光告诉系统你长什么样,还告诉系统你有多重、重心在哪、哪里能弯。没有它,ROS 里的可视化、运动学、路径规划全都玩不转。

核心要点: URDF 是 ROS 生态里机器人建模的基石。它用树状结构描述机器人的连杆(link)和关节(joint),每个连杆可以有视觉、碰撞和惯性属性。

1.2 URDF在机器人开发中的作用

我在项目中遇到过不少新手,上来就写规划代码,结果在 RViz 里机器人要么散架,要么关节乱转。为什么?因为 URDF 没写对。它的作用,我总结成三点:

  • 可视化基础 —— 在 RViz 里看到机器人模型,全靠 URDF 提供几何和外观信息。
  • 运动学计算 —— 正解、逆解、雅可比矩阵,都需要知道连杆长度和关节类型。
  • 碰撞与规划 —— MoveIt! 做路径规划时,要判断机器人会不会撞到东西,URDF 里的碰撞模型就是判断依据。

你想想看,如果连机器人的尺寸都是错的,规划出来的路径你敢让真机跑吗?反正我是不敢。

💡 我的经验: 刚开始学的时候,别急着写复杂的 URDF。先从一个连杆开始,跑通了再慢慢加。我曾经一口气写了个六轴机械臂的 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> 是给物理引擎用的。三者可以不一样,但一般建议保持一致,省得后面出幺蛾子。

⚠️ 避坑指南: 我曾经在项目里把 visual 和 collision 的尺寸写成了不同值,结果 RViz 里看着好好的,一跑规划就报错说机器人自碰撞。查了半天才发现是碰撞模型比视觉模型大了一圈。所以,除非你有特殊需求,否则让 visual 和 collision 保持一致。

1.4 知识体系总览

下面这张图帮你理清本章的核心逻辑。URDF 不是孤立的知识点,它连接着可视化、运动学和规划三大模块。

URDF 模型 可视化 RViz 显示 / 模型预览 运动学 正解 / 逆解 / 雅可比 路径规划 碰撞检测 / 轨迹生成 URDF 核心三要素 连杆 (link) · 关节 (joint) · 树状结构

从这张图你能看到,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 的核心标签,把每个标签的细节掰开揉碎讲清楚。