3 · 第一个URDF文件

创建最简单的机器人模型(单连杆)· 用 urdf_to_graphiz 可视化

说实话,很多教程一上来就让你写一个完整的机器人,底盘、轮子、传感器全塞进去。我个人习惯相反——先做一个“能跑起来”的最小模型。哪怕只是一个孤零零的连杆,只要它能被解析、被可视化,你就已经迈出了最扎实的一步。

这一章,我们就来写第一个URDF文件。它只有一个连杆,没有关节,没有运动学。听起来简单?嗯,但这里面藏着不少细节。我当年第一次写URDF时,连标签大小写都搞错过,折腾了半小时才发现……

第一个URDF文件 单连杆 link 可视化 graphiz 验证 & 调试 最小可工作模型 → 建立信心 + 打通工具链

3.1 单连杆模型长什么样?

说白了,一个连杆就是机器人身上的一个刚体部件。它可以是一块金属、一个外壳,甚至只是一个抽象的参考坐标系。在URDF里,我们用 <link> 标签来描述它。

下面这个例子,定义了一个名叫 base_link 的连杆。它有一个视觉外观(一个圆柱体),以及一个碰撞形状(也是圆柱体)。

<?xml version="1.0"?>
<robot name="my_first_robot">
    <link name="base_link">
        <visual>
            <geometry>
                <cylinder length="0.2" radius="0.1"/>
            </geometry>
            <origin xyz="0 0 0" rpy="0 0 0"/>
        </visual>
        <collision>
            <geometry>
                <cylinder length="0.2" radius="0.1"/>
            </geometry>
        </collision>
    </link>
</robot>
💡 个人习惯: 我每次新建URDF文件,都会先写一个极简的link,然后立刻用工具验证。这样能最快发现语法错误,而不是等到写了上百行再回头找bug。

3.2 保存文件 & 命名规范

把上面的代码保存为 first_robot.urdf。我个人建议文件名全部小写,用下划线分隔。虽然URDF解析器不强制,但团队协作时统一风格能省很多麻烦。

元素要求我的经验
文件名小写 + .urdf 后缀别用空格!我曾经被空格坑过,后来一律用下划线
robot name字母开头,无特殊符号最好和项目名一致,方便识别
link name语义清晰,如 base_link我习惯用 snake_case

3.3 使用 urdf_to_graphiz 可视化

URDF 自带了一个命令行小工具叫 urdf_to_graphiz。它能根据你的URDF文件生成一张结构图,展示连杆和关节的树状关系。虽然我们现在只有一个连杆,但跑一下这个工具,能确认你的文件被正确解析了。

在终端里运行:

urdf_to_graphiz first_robot.urdf

如果一切正常,你会看到类似这样的输出:

Created file first_robot.gv
Created file first_robot.pdf

✅ 看到这两个文件生成,就说明你的URDF语法没问题,工具链也通了。我第一次成功跑出PDF时,还挺有成就感的——虽然只是一个圆柱体。

打开 first_robot.pdf(或者用任何能打开 .gv 的工具),你会看到一个单独的方框,里面写着 base_link。没有关节,没有连线,就一个孤零零的节点。但别小看它——这是你亲手搭建的第一个机器人模型。

⚠️ 我曾经踩过的坑: 如果你运行 urdf_to_graphiz 时报错 “Error: no element found”,八成是XML格式问题。检查第一行 <?xml version="1.0"?> 有没有写对,或者文件是不是保存成了UTF-8 with BOM。我那次就是编辑器偷偷加了BOM,折腾了十分钟。

3.4 验证模型的其他方法

除了 graphiz,你还可以用 check_urdf 命令做基础检查:

check_urdf first_robot.urdf

它会输出连杆数量、关节数量,以及一些基本统计。对于单连杆模型,输出大概是这样:

robot name: my_first_robot
---------- Successfully Parsed XML ----------
Number of links: 1
Number of joints: 0
---------- link: base_link

看到 “Successfully Parsed XML” 就放心了。我个人习惯把 check_urdf 和 urdf_to_graphiz 组合使用,一个查数据,一个看结构,互补。

3.5 关于坐标系和原点

你可能注意到了,我们在 <origin> 里写了 xyz="0 0 0" rpy="0 0 0"。对于单连杆来说,这个原点就是连杆自身的参考系中心。圆柱体的几何中心就在 (0,0,0),没有旋转。

你想想看,如果以后给这个连杆加上关节,关节的位置就是相对于这个原点来定义的。所以一开始就把原点搞清楚,后面会省很多事。

🔧 一个小练习: 试着把圆柱体的半径改成 0.2,长度改成 0.4,重新运行 urdf_to_graphiz 和 check_urdf。观察输出有什么变化?——其实结构图完全一样,因为graphiz只显示拓扑,不显示尺寸。但 check_urdf 会正常解析新的几何参数。

好了,第一个URDF文件已经跑通了。你有了一个可以被解析、被可视化的单连杆模型。虽然它不会动,但它是你机器人模型的基石。下一章我们会深入连杆的各个细节,但今天先享受一下“Hello World”级别的成就感吧。