1、URDF入门:什么是URDF、URDF在机器人开发中的作用、URDF文件结构概览

各位同学好,我是你们这门课的讲师。做了十几年机器人,从轮式底盘到六轴机械臂都折腾过。今天咱们聊聊URDF——这个每个机器人工程师都绕不开的东西。

URDF,全称是Unified Robot Description Format,统一机器人描述格式。说白了,它就是一套用XML语言写的“机器人说明书”。你想想看,你要跟别人描述一个机器人长什么样,关节怎么动,传感器装在哪——URDF就是干这个的。

一句话总结:URDF = 机器人的“身份证” + “骨架图” + “运动学说明书”。

1.1 为什么我们需要URDF?

我记得刚入行那会儿,团队里做导航的同事和做机械设计的同事经常吵架。机械设计给了SolidWorks模型,导航那边要的是能在ROS里跑的东西。两边数据格式对不上,每次都得手动转换,特别痛苦。

URDF的出现,说白了就是解决了这个痛点。它把机器人的几何信息、运动学信息、视觉信息统一到一个文件里。这样,无论是做仿真、做导航、做控制,大家都能用同一套数据。

具体来说,URDF在机器人开发中干这几件事:

  • 可视化——在Rviz里看到机器人长什么样,不用真机也能调试
  • 运动学计算——正解、逆解、雅可比矩阵,都靠URDF里的关节定义
  • 碰撞检测——规划路径时,知道机器人会不会撞到东西
  • 仿真接口——Gazebo等仿真器直接读取URDF,省去重复建模

我的经验:有一次做移动机械臂项目,机械设计改了三次底盘尺寸。要是没有URDF,每次都得重新写代码适配。有了URDF,改几个数字就搞定。所以,前期花时间把URDF写规范,后面能省十倍的时间。

1.2 URDF文件长什么样?

咱们直接看一个最简单的例子。这是一个两轮差速底盘的部分URDF:

<robot name="my_robot">
  <link name="base_link">
    <visual>
      <geometry>
        <box size="0.4 0.3 0.1"/>
      </geometry>
      <origin xyz="0 0 0" rpy="0 0 0"/>
    </visual>
  </link>

  <joint name="left_wheel_joint" type="continuous">
    <parent link="base_link"/>
    <child link="left_wheel"/>
    <origin xyz="-0.15 0.2 0" rpy="0 0 0"/>
    <axis xyz="0 1 0"/>
  </joint>
</robot>

嗯,这里要注意几个关键点:

  • <robot>是根标签,name属性就是机器人的名字
  • <link>定义刚体部件,比如底盘、轮子、手臂
  • <joint>定义连接关系,告诉系统两个link怎么连在一起

1.3 URDF的核心结构

URDF文件的结构其实不复杂。我习惯把它想象成一棵“树”:

核心原则:URDF必须是一棵无环的树形结构。每个link只能有一个父节点,但可以有多个子节点。

咱们用一张图来理解这个结构:

URDF 树形结构示意图 base_link (根) left_wheel right_wheel torso (躯干) arm (手臂) gripper (夹爪) 每个节点代表一个 link,连线代表 joint。根节点 base_link 是整棵树的起点。

1.4 两个核心元素:Link 和 Joint

URDF里最重要的两个概念,就是link和joint。我刚开始学的时候也搞混过,这里帮你理清楚:

元素 含义 包含内容 类比
Link 刚体部件 几何形状、颜色、碰撞模型、惯性参数 人的“骨头”
Joint 连接关系 父link、子link、位置、旋转轴、运动类型 人的“关节”

我曾经踩过的坑:刚开始写URDF时,我把joint的origin写错了。结果在Rviz里一看,轮子悬在半空中。后来排查了半天才发现,joint的origin是相对于父link的坐标系,不是世界坐标系。这个细节特别容易搞反。

1.5 常见的Joint类型

Joint有几种类型,选错了机器人动起来就不对。我整理了一个表格:

类型 自由度 运动方式 典型应用
fixed 0 固定不动 传感器支架、装饰件
revolute 1 旋转(有限角度) 机械臂关节
continuous 1 旋转(无限角度) 车轮
prismatic 1 直线滑动 升降台、滑轨
floating 6 全自由运动 无人机、水下机器人
planar 3 平面运动 AGV底盘简化模型

我的建议:刚开始做URDF时,先用fixed和revolute这两种就够了。等把基础结构搭好,再慢慢加其他类型。一口吃不成胖子,URDF也是。

1.6 本章小结

咱们这一章就讲这些。你记住三件事就行:

  1. URDF是机器人的XML描述文件,负责告诉系统“机器人长什么样、怎么动”
  2. 核心结构是树形,根节点是base_link,往下通过joint挂载子link
  3. 两个基本元素:link(部件)和joint(连接),搞懂它们就入门了