第1章 · URDF基础入门

各位好,我是你们这门课的工程师讲师。咱们直接进入正题——URDF,全称 Unified Robot Description Format。说白了,它就是ROS世界里用来描述机器人长什么样的“身份证”。你想想看,要让机器人动起来,总得先告诉电脑它有几条胳膊、关节在哪、长什么形状吧?URDF就是干这个的。

我个人习惯把URDF看作机器人的“乐高说明书”。每一块零件(连杆)怎么拼,每个活动关节(关节)怎么转,全写在XML文件里。我记得刚接触ROS那会儿,看着一堆标签有点懵,但后来发现,只要掌握几个核心标签,你就能搭出任意复杂的机器人模型。

URDF 模型 连杆 (link) 关节 (joint) XML 语法 + 属性 几何/惯性/碰撞 类型/父子/极限

▲ URDF 核心三要素:连杆、关节、XML描述

什么是URDF?

URDF 是一种基于 XML 的机器人描述格式。它用 <link> 描述刚体(比如机械臂的臂管、基座),用 <joint> 描述两个刚体之间的连接方式(旋转、平移、固定)。

我在项目里见过不少新手把 URDF 当成“画图工具”,其实它更像一个结构化数据文件。你给它一个模型,它就能被 Rviz 可视化,被 MoveIt! 做运动规划,被 Gazebo 做物理仿真。说白了,它是整个机器人软件栈的“地基”。

💡 一句话总结: URDF 就是机器人的“骨架 + 关节说明书”,所有上层控制都依赖它。

URDF 文件结构

一个标准的 URDF 文件,根标签是 <robot>,里面包含若干 <link> 和 <joint>。我习惯把结构拆成三块:

  • 头部声明:XML 版本、编码、robot 名称。
  • 连杆定义:每个 link 包含视觉、碰撞、惯性参数。
  • 关节定义:每个 joint 指定类型、父子 link、原点、轴、极限。

举个例子,一个最简单的单连杆模型,你只需要一个 link,连 joint 都不需要。嗯,这里要注意:没有关节的机器人就是一个“铁疙瘩”,但用来理解文件结构刚刚好。

XML 语法基础(快速上手)

URDF 用的是标准 XML,所以你得知道几个基本规则:

  • 标签必须成对出现,或者自闭合(比如 <geometry />)。
  • 属性值用双引号括起来。
  • 大小写敏感——<Link> 和 <link> 是两码事。

我曾经在调试一个六轴机械臂时,因为把 xyz 写成了 Xyz,Rviz 直接不显示模型。找了半小时……从那以后我写 URDF 都格外注意大小写。

✏️ 避坑指南: 我建议你每次写完 URDF,都用 check_urdf 命令检查一下语法。这工具能帮你揪出 90% 的低级错误。

第一个URDF模型:单连杆

咱们直接上手写一个。下面这个文件定义了一个叫 my_first_link 的连杆,形状是圆柱体,半径 0.1 米,长度 0.5 米。颜色我选了浅蓝色,方便在 Rviz 里看清。

<?xml version="1.0" encoding="utf-8"?>
<robot name="single_link_robot">
    <link name="base_link">
        <visual>
            <geometry>
                <cylinder length="0.5" radius="0.1" />
            </geometry>
            <origin xyz="0 0 0" rpy="0 0 0" />
            <material name="blue">
                <color rgba="0.2 0.6 1.0 1.0" />
            </material>
        </visual>
        <collision>
            <geometry>
                <cylinder length="0.5" radius="0.1" />
            </geometry>
        </collision>
        <inertial>
            <mass value="1.0" />
            <inertia ixx="0.01" ixy="0" ixz="0" iyy="0.01" iyz="0" izz="0.01" />
        </inertial>
    </link>
</robot>

你看,结构很清楚:<visual> 定义显示外观,<collision> 定义碰撞边界,<inertial> 定义物理属性。对于纯可视化,你甚至可以只写 visual 部分。但如果你要做仿真或运动规划,碰撞和惯性就必不可少。

我个人习惯把惯性参数先随便填一个,等模型调通了再精确测量。你想想看,如果一开始就纠结转动惯量,可能连模型都显示不出来,那多打击信心。

⚠️ 注意: 单连杆模型没有关节,所以它不能动。但别急,下一章我们加上关节,它就能旋转了。这个例子主要是让你感受 URDF 的“骨架感”。

如何验证你的模型?

把上面的代码保存为 single_link.urdf,然后在终端运行:

# 安装工具(如果还没装)
sudo apt install ros-<你的ROS版本>-urdf-tutorial

# 检查URDF
check_urdf single_link.urdf

# 用Rviz可视化
rosrun urdf_tutorial display.launch model:=single_link.urdf

如果一切顺利,你会看到 Rviz 里出现一个蓝色的圆柱体。那一刻,你就算正式踏入机器人建模的大门了。我记得我第一次看到自己写的 URDF 在 Rviz 里显示出来,还挺有成就感的。

🔧 实用技巧: 你可以用 urdf_to_graphviz 把模型结构转成图片,看看父子关系对不对。对于复杂机器人,这招特别管用。

好了,这一章的内容就是这些。URDF 基础入门其实不复杂,核心就是理解 link 和 joint 的 XML 表达。下一章我们会深入连杆与关节的细节,到时候你会看到机器人怎么“长出”关节来。