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文件结构
咱们直接上手。一个最简单的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可以带视觉、碰撞、惯性参数。后面几章咱们会一个一个拆开讲。
上图就是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。别一上来就搞完整机器人,容易把自己绕晕。后面几章咱们会慢慢把轮子、关节、传感器都加上。