# URDF 是什么？机器人 URDF 文件结构、关节力矩与速度限制、SolidWorks 转 URDF 与并联机构限制

> 原文链接：https://robotics.hellobike.com/wiki/what-is-urdf
> 频道：wiki | 更新日期：2026-11-05 | 标签：URDF是什么, URDF文件, URDF模型, SolidWorks转URDF, 机器人仿真
> 核心摘要：URDF（Unified Robot Description Format）是 ROS 生态描述机器人连杆、关节、惯量与碰撞几何的 XML 格式。本文讲清文件结构、limit 里的力矩与速度、为什么 URDF 不能直接描述并联闭链，以及 SolidWorks 转 URDF、URDF 转 MJCF 的做法。

# URDF 是什么？

**一句话回答：URDF（Unified Robot Description Format，统一机器人描述格式）是 ROS 生态用来描述机器人“长什么样、怎么动”的 XML 文件，定义每个连杆（link）的质量惯量、外观和碰撞形状，以及连杆之间关节（joint）的类型、轴向和运动限制。** RViz 可视化、MoveIt 运动规划、Gazebo / Isaac Sim / MuJoCo 仿真都能读取 URDF。

## 文件结构

一个最小的 URDF 由 `robot` 根节点、若干 `link` 和连接它们的 `joint` 组成：

```xml
<robot name="two_link_arm">
  <link name="base_link">
    <inertial>
      <mass value="2.0"/>
      <inertia ixx="0.01" ixy="0" ixz="0" iyy="0.01" iyz="0" izz="0.01"/>
    </inertial>
    <visual><geometry><box size="0.1 0.1 0.1"/></geometry></visual>
    <collision><geometry><box size="0.1 0.1 0.1"/></geometry></collision>
  </link>
  <link name="link1"/>
  <joint name="joint1" type="revolute">
    <parent link="base_link"/>
    <child link="link1"/>
    <origin xyz="0 0 0.1" rpy="0 0 0"/>
    <axis xyz="0 0 1"/>
    <limit lower="-3.14" upper="3.14" effort="30" velocity="2.0"/>
  </joint>
</robot>
```

| 元素 | 作用 |
| :--- | :--- |
| `link` | 刚体连杆；`inertial` 给质量与惯性张量，`visual` 给外观网格，`collision` 给碰撞几何 |
| `joint` | 连接父子连杆；`origin` 定义相对位姿，`axis` 定义转轴或移动方向 |
| 关节类型 | `revolute`（有限位转动）、`continuous`（无限位转动）、`prismatic`（直线移动）、`fixed`（固定）、`floating`、`planar` |

大型机器人的 URDF 一般用 **xacro** 宏生成，避免重复书写左右对称的腿和手臂。

## URDF 里有关节力矩和速度信息吗？

**有上限，没有实时状态。** `joint` 下的 `<limit>` 字段包含：

- `effort`：关节最大力矩（转动关节，N·m）或最大力（移动关节，N）；
- `velocity`：关节最大速度（rad/s 或 m/s）；
- `lower` / `upper`：关节位置上下限。

URDF 不描述电机模型、减速比、摩擦辨识结果或实时的力矩与速度读数。这些要靠厂商 SDK 读取，或写进仿真器自己的格式，例如 MJCF 的 actuator。

## 为什么 URDF 不能描述并联机构？

URDF 要求连杆和关节构成一棵**树**，每个连杆只能有一个父关节，所以不能直接表达闭链，例如并联腿、四连杆、Delta 机构。常见处理方式：

- 用 `mimic` 关节近似从动关节；
- 换用支持闭链约束的格式，如 MuJoCo 的 MJCF（equality 约束）或 SDF；
- 在仿真器里额外添加约束，把树状 URDF 的末端“焊”在一起。

## SolidWorks 怎么转 URDF？

ROS 官方维护 [solidworks_urdf_exporter](https://github.com/ros/solidworks_urdf_exporter) 插件：在装配体里按树状结构指定每个连杆和关节的坐标系与转轴，插件导出 URDF 和 STL 网格。导出后建议检查三点：

1. 惯量是否来自真实材料属性，而不是默认密度；
2. 碰撞几何最好换成简化的凸包或基本体，能明显加快仿真；
3. 关节 `limit` 是否填了真实的力矩与速度上限。

## URDF 和 MJCF、USD 是什么关系？

| 格式 | 主要生态 | 特点 |
| :--- | :--- | :--- |
| URDF | ROS / MoveIt / Gazebo | 通用描述，树状结构，仿真参数少 |
| MJCF | MuJoCo | 支持执行器、肌腱、闭链约束与接触参数 |
| USD | NVIDIA Isaac Sim | 场景级格式，支持材质、物理与传感器 |

MuJoCo 可以直接编译加载 URDF，但正式仿真通常转成 MJCF 再补执行器参数，步骤见 [MuJoCo Menagerie：URDF 转 MJCF 指南](/tutorials/mujoco-menagerie-urdf-to-mjcf-guide)。

## 去哪找现成的机器人 URDF

- [机器人仿真资产库](/sim-assets/)：主流人形、四足与机械臂的官方 URDF / MJCF / USD 链接
- [MuJoCo Menagerie](/sdks/google-deepmind-mujoco-menagerie)：DeepMind 维护的高质量 MJCF 模型集
- 在网页里预览 URDF：[urdf-loaders](/sdks/gkjohnson-urdf-loaders)

## 原始参考来源 (Sources)

- [ROS Wiki · urdf/XML/joint（joint 与 limit 字段定义）](https://wiki.ros.org/urdf/XML/joint)
- [ROS Wiki · urdf/XML/link（inertial / visual / collision）](https://wiki.ros.org/urdf/XML/link)
- [ROS 2 Documentation · URDF Tutorials](https://docs.ros.org/en/rolling/Tutorials/Intermediate/URDF/URDF-Main.html)
- [ros/solidworks_urdf_exporter（SolidWorks 导出插件）](https://github.com/ros/solidworks_urdf_exporter)