URDF(Unified Robot Description Format,统一机器人描述格式)概述
URDF 是一种基于 XML 的文件格式,专门用于在 ROS(机器人操作系统)生态中描述机器人的几何结构、运动学、动力学以及视觉/碰撞属性。它把机器人抽象为链接(link)和关节(joint)的树状层级,配合惯性、材质、传感器等信息,为仿真、可视化和控制提供统一的数据来源。
1. 主要组成元素
| 元素 | 作用 | 常见子标签 |
|---|---|---|
<robot> |
文件根节点,定义机器人名称 | - |
<link> |
描述刚体部件(单个连杆) | <visual>(外观)、<collision>(碰撞体)、<inertial>(质量、惯性) |
<joint> |
描述两个 link 之间的运动约束 | <parent>、<child>、<origin>、<axis>、<limit>、<dynamics> |
<visual> |
机器人在 RViz 等可视化工具中的外观 | <geometry>(box、cylinder、mesh 等)、<material> |
<collision> |
碰撞检测使用的简化几何体 | 同 <visual> 的 <geometry> |
<inertial> |
质量、质心、惯性张量 | <mass>、<origin>、<inertia> |
<transmission>(可选) |
关联关节与驱动器(motor) | <type>、<actuator>、<joint> |
<sensor>(可选) |
描述附加的传感器信息 | <camera>、<laser> 等 |
单位约定:长度使用米(m),角度使用弧度(rad),质量使用千克(kg)。
2. 文件结构示例(简化)
<robot name="tiny_robot">
<!-- 链接 1 -->
<link name="base_link">
<visual>
<geometry>
<box size="0.5 0.5 0.1"/>
</geometry>
<material name="gray"/>
</visual>
<collision>
<geometry>
<box size="0.5 0.5 0.1"/>
</geometry>
</collision>
<inertial>
<mass value="5.0"/>
<origin xyz="0 0 0"/>
<inertia ixx="0.1" ixy="0" ixz="0"
iyy="0.1" iyz="0" izz="0.1"/>
</inertial>
</link>
<!-- 关节 1:base_link 与 arm_link 之间的旋转关节 -->
<joint name="shoulder_joint" type="revolute">
<parent link="base_link"/>
<child link="arm_link"/>
<origin xyz="0 0 0.05" rpy="0 0 0"/>
<axis xyz="0 0 1"/>
<limit effort="10" velocity="1.0"
lower="-1.57" upper="1.57"/>
</joint>
<!-- 链接 2 -->
<link name="arm_link">
<visual>
<geometry>
<cylinder radius="0.05" length="0.4"/>
</geometry>
<material name="blue"/>
</visual>
<!-- 省略 collision、inertial -->
</link>
</robot>
该示例展示了 机器人根节点 → 两个 link → 一个 revolute 关节 的基本结构,涵盖了视觉、碰撞和惯性信息。
3. 常用配套工具
| 工具 | 功能 | 说明 |
|---|---|---|
| Xacro | XML 宏预处理器,简化重复代码 | 通过变量、宏生成可复用的 URDF,提升可维护性 |
| robot_state_publisher | 根据 URDF 自动发布 TF 变换 | 让 ROS 中的其他节点能够获取每个 link 的位姿 |
| rviz / Gazebo | 可视化与仿真 | 读取 URDF 渲染机器人模型,或在 Gazebo 中进行物理仿真 |
| urdf_parser_py | Python 解析库 | 便于在脚本中读取、修改 URDF 内容 |
4. URDF 的优势与局限
优势
- 统一标准:在 ROS 生态内被广泛接受,几乎所有工具链(RViz、MoveIt、Gazebo)均直接支持。
- 可读性强:基于 XML,结构清晰,易于手工编辑和版本管理。
- 模块化:通过
<link>、<joint>的层次化组织,可灵活描述从单臂到全身机器人的各种结构。
局限
- 仅支持树形结构:不支持闭环(闭链)机器人,需要额外的 SRDF 或 URDF with fixed joints 进行补偿。
- 几何表达有限:复杂曲面只能通过外部 mesh(STL/DAE)文件引用,内部不提供高级 CAD 功能。
- 缺少动力学细节:如弹簧、阻尼等高级动力学参数只能在 transmission 或自定义插件中实现。
5. 应用场景
- 机器人建模:在研发阶段快速搭建模型,供仿真和可视化使用。
- 运动规划:MoveIt! 读取 URDF 生成运动学链,计算逆运动学、路径规划。
- 真实机器人部署:通过
robot_state_publisher将 URDF 中的结构映射到实际硬件的 TF 树,实现感知与控制的统一坐标系。 - 跨平台共享:研究团队可通过 URDF 文件共享机器人结构,降低重复建模成本。
6. 参考资源
- 官方 ROS Wiki(URDF XML 规范)
- 阿里云技术文章对 URDF 结构的系统阐述
- CSDN 最新教程对 URDF 各标签的详细解释
- Delft University 公开课 PPT(结构化概览)
- ROS2 官方文档对 URDF 与 Xacro 的结合使用
总结:URDF 是 ROS 生态中描述机器人形态与运动学的核心 XML 格式。它通过层次化的 <link> 与 <joint> 定义机器人结构,并配合视觉、碰撞、惯性等子标签提供完整的仿真与控制信息。配合 Xacro、robot_state_publisher 等工具,URDF 能实现从概念模型到真实机器人系统的无缝衔接。
声明:文章均为AI生成,请谨慎辨别信息的真伪和可靠性!