第1章 · URDF基础入门
各位好,我是你们这门课的工程师讲师。咱们直接进入正题——URDF,全称 Unified Robot Description Format。说白了,它就是ROS世界里用来描述机器人长什么样的“身份证”。你想想看,要让机器人动起来,总得先告诉电脑它有几条胳膊、关节在哪、长什么形状吧?URDF就是干这个的。
我个人习惯把URDF看作机器人的“乐高说明书”。每一块零件(连杆)怎么拼,每个活动关节(关节)怎么转,全写在XML文件里。我记得刚接触ROS那会儿,看着一堆标签有点懵,但后来发现,只要掌握几个核心标签,你就能搭出任意复杂的机器人模型。
▲ URDF 核心三要素:连杆、关节、XML描述
什么是URDF?
URDF 是一种基于 XML 的机器人描述格式。它用 <link> 描述刚体(比如机械臂的臂管、基座),用 <joint> 描述两个刚体之间的连接方式(旋转、平移、固定)。
我在项目里见过不少新手把 URDF 当成“画图工具”,其实它更像一个结构化数据文件。你给它一个模型,它就能被 Rviz 可视化,被 MoveIt! 做运动规划,被 Gazebo 做物理仿真。说白了,它是整个机器人软件栈的“地基”。
URDF 文件结构
一个标准的 URDF 文件,根标签是 <robot>,里面包含若干 <link> 和 <joint>。我习惯把结构拆成三块:
- 头部声明:XML 版本、编码、robot 名称。
- 连杆定义:每个 link 包含视觉、碰撞、惯性参数。
- 关节定义:每个 joint 指定类型、父子 link、原点、轴、极限。
举个例子,一个最简单的单连杆模型,你只需要一个 link,连 joint 都不需要。嗯,这里要注意:没有关节的机器人就是一个“铁疙瘩”,但用来理解文件结构刚刚好。
XML 语法基础(快速上手)
URDF 用的是标准 XML,所以你得知道几个基本规则:
- 标签必须成对出现,或者自闭合(比如
<geometry />)。 - 属性值用双引号括起来。
- 大小写敏感——
<Link>和<link>是两码事。
我曾经在调试一个六轴机械臂时,因为把 xyz 写成了 Xyz,Rviz 直接不显示模型。找了半小时……从那以后我写 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 部分。但如果你要做仿真或运动规划,碰撞和惯性就必不可少。
我个人习惯把惯性参数先随便填一个,等模型调通了再精确测量。你想想看,如果一开始就纠结转动惯量,可能连模型都显示不出来,那多打击信心。
如何验证你的模型?
把上面的代码保存为 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 表达。下一章我们会深入连杆与关节的细节,到时候你会看到机器人怎么“长出”关节来。