1 · URDF基础入门

什么是URDF? 说白了,URDF就是机器人的“身份证+骨架说明书”。全称是 Unified Robot Description Format,统一机器人描述格式。它用XML告诉ROS你的机器人长什么样、胳膊怎么连、轮子装在哪。

我最早接触URDF的时候,觉得它就是个“高级配置文件”。但后来发现,没有URDF,ROS根本不知道你的机器人是啥——就像你让一个人去拿杯子,却不告诉他手在哪。

URDF在ROS中的作用

在ROS生态里,URDF几乎是所有感知、规划、控制模块的起点。举个例子:

  • 可视化 —— RViz通过URDF画出机器人3D模型,你才能看到它动。
  • 碰撞检测 —— MoveIt! 用URDF里的碰撞模型避开障碍物。
  • 仿真 —— Gazebo读取URDF才知道轮子该转多快。

我个人习惯把URDF比作“机器人的简历”——HR(ROS)先看简历,再分配任务。没有简历,一切免谈。

💡 一句话总结: URDF是ROS世界里机器人的“通用语言”,所有工具都靠它理解你的机器人。

第一个URDF文件结构

咱们直接上手。一个最简单的URDF文件,描述一个“单连杆机器人”(其实就是一块板子)。

<?xml version="1.0"?>
<robot name="my_first_robot">
    <link name="base_link">
        <visual>
            <geometry>
                <box size="0.4 0.2 0.1"/>
            </geometry>
        </visual>
    </link>
</robot>

嗯,这里要注意:<robot> 是根标签,name 随便起。里面只有一个 link,名字叫 base_link。它有一个视觉部分,画了个长方体,长0.4米、宽0.2米、高0.1米。

你可能会问:“就这?机器人不都有关节吗?” 没错,但咱们从最简开始。我刚开始学的时候,连这个文件都写不对——少了个斜杠,RViz直接报错。后来我养成习惯:写完先检查XML闭合。

✏️ 避坑指南: 我曾经因为 <box size="0.4 0.2 0.1"/> 里用了逗号,结果模型显示不出来。记住:空格分隔,不要逗号。

核心标签速览

标签作用必填?
<robot>根元素,包裹所有描述是
<link>定义刚体部件(形状、惯性、碰撞)至少一个
<joint>连接两个link,定义运动关系可选(单link可无)
<visual>外观显示(几何、材质)推荐
<geometry>形状:box, cylinder, sphere, mesh视觉/碰撞内必填

你想想看,一个机器人就是一堆link通过joint串起来。每个link可以带视觉、碰撞、惯性参数。后面几章咱们会一个一个拆开讲。

<robot> <link> 刚体 <joint> 连接 visual collision inertial origin / axis 🔷 一个 robot 包含多个 link 和 joint,link 又可定义 visual / collision / inertial

上图就是URDF的骨架逻辑。一个 <robot> 下面挂着 <link> 和 <joint>。link 里再细分视觉、碰撞、惯性。joint 则定义连接方式和坐标变换。

⚠️ 新手最容易翻车的地方: 文件名必须以 .urdf 结尾,而且不能有中文路径。我曾经在桌面建了个“机器人模型”文件夹,结果ROS死活不认——改成英文就好了。

怎么用这个文件?

保存成 first.urdf,然后在终端里:

# 检查URDF语法
check_urdf first.urdf

# 在RViz里显示
rosrun urdf_tutorial display.launch model:=first.urdf

如果一切顺利,你会看到一个灰色方块躺在RViz里。那一刻,嗯,还挺有成就感的。

我个人建议:从最简单的单link开始,一步步加joint。别一上来就搞完整机器人,容易把自己绕晕。后面几章咱们会慢慢把轮子、关节、传感器都加上。