URDFUnified Robot Description Format)是 ROS 生态中用于描述机器人结构的 XML 格式,定义 link、joint、坐标变换、几何、惯量和关节限位等模型信息。

它是很多机器人软件的共同输入:Pinocchio 可以从 URDF 构建运动学/动力学 model,MoveIt 可以用 URDF 构建 robot model 和碰撞几何,仿真器也常用它渲染机器人和初始化关节树。

核心问题

机器人软件需要一个机器可读的结构模型,回答:

  • 机器人有哪些 link 和 joint?
  • 相邻 link 之间的固定原点、旋转轴和运动类型是什么?
  • 每个关节的上下限、速度或 effort 限制是多少?
  • 用于可视化、碰撞和动力学计算的几何与惯量是什么?

没有一致的 URDF,FKIK、碰撞检查和可视化就可能在不同软件里使用不同的“机器人”。

核心结构

URDF 主要由 link 和 joint 组成:

  • link 描述机器人刚体段,可包含 visual、collision 和 inertial。
  • joint 连接父 link 与子 link,定义 origin、axis、type 和 limit。
  • origin 定义坐标系偏置;axis 定义关节运动方向。
  • limit 定义位置、速度、effort 等约束。

工程中常用 Xacro 生成 URDF。Xacro 是模板/宏机制,最终仍要展开为具体 URDF 后交给下游库使用。

工程用途

URDF 在运动学与控制链路中通常承担“结构真相源”的角色:

  • PinocchioKDL 根据 URDF 生成运动学链,计算 FK 和 Jacobian。
  • MoveIt PlanningScene 使用 URDF/SRDF 的 collision geometry 做碰撞检查。
  • MoveIt RobotState 使用 robot model 中的 joint/link 信息更新当前位姿。
  • IK 和 servo 配置依赖 group、tip frame、base frame 与 joint limit 的一致性。

边界与常见坑

URDF 只描述机器人模型,不描述“控制策略”。它不会自动提供 IK、servo、安全状态机或硬件驱动。

常见错误包括:

  • frame 名称、joint 顺序、axis 方向或零位与实机不一致。
  • collision mesh 太粗或太细,导致碰撞检查误报、漏报或耗时过高。
  • visual mesh 单位或原点正确,但 collision/inertial 原点错误。
  • URDF 中 hard limit 与控制器、MoveIt joint_limits.yaml 或硬件实际限位不一致。
  • 末端工具、相机、夹爪等 TCP 偏置没有建模,导致 IK 看似收敛但实机末端偏移。

相关术语