Skip to main content

Gazebo

Gazebo 中的 URDF、XACRO 与 SDF:机器人建模核心格式解析

一、URDF(Unified Robot Description Format):机器人结构描述的基础

定义:URDF 是 ROS(机器人操作系统)中用于描述机器人三维结构、关节连接和运动学特性的 XML 格式,由 ROS 社区开发,广泛用于机器人仿真与控制。

核心组成与应用场景
  1. 关键元素

    • Link(连杆):定义机器人的刚性部件,包含几何形状(如 box、cylinder、mesh)、质量、惯性矩阵等物理属性。
    • Joint(关节):连接两个连杆,支持旋转(revolute)、滑动(prismatic)、固定(fixed)等运动类型,可设置运动范围和动力学参数。
    • Visual(视觉模型):描述连杆的外观,用于仿真可视化。
    • Collision(碰撞模型):定义连杆的碰撞形状,用于物理引擎计算。
  2. 示例片段

<robot name="my_robot">
<link name="base_link">
<inertial>
<mass value="1.0"/>
<!-- 惯性矩阵省略 -->
</inertial>
<visual>
<geometry><box size="0.2 0.2 0.1"/></geometry>
</visual>
<collision>
<geometry><box size="0.2 0.2 0.1"/></geometry>
</collision>
</link>
<joint name="base_to_wheel" type="revolute">
<parent link="base_link"/>
<child link="wheel_link"/>
<axis xyz="0 1 0"/>
</joint>
</robot>
  1. 优缺点
    • 优点:结构简单,与 ROS 生态深度集成,适合描述刚体机器人的运动学模型。
    • 缺点:缺乏对传感器、灯光等仿真环境元素的描述,复杂模型编写繁琐。

二、XACRO(XML Macro):URDF 的高级扩展工具

定义:XACRO 是基于 URDF 的宏语言,通过变量定义、参数化建模和模块复用,简化复杂机器人模型的编写,本质是 URDF 的预处理格式。

核心特性与应用
  1. 关键功能

    • 变量与参数化:通过<property><param>定义可复用的数值(如长度、质量),避免重复编写。

    • 宏定义(Macro):将重复模块封装为宏,如定义轮子模型后多次实例化:

      <macro name="wheel" params="name xyz rpy">
      <!-- 轮子模型定义 -->
      </macro>
      <wheel name="left_wheel" xyz="0.1 0.05 0" rpy="0 0 0"/>
    • 条件编译:通过<if> <else>根据参数动态生成模型,适合多版本机器人配置。

  2. 优势

    • 代码复用:减少重复代码,如四足机器人的四条腿可通过宏实例化,只需修改参数。
    • 维护性:集中管理全局参数(如机器人高度、关节限制),修改一处即可应用于整个模型。

三、SDF(Simulation Description Format):Gazebo 仿真的专属格式

定义:SDF 是 Gazebo 物理引擎使用的场景描述格式,支持机器人模型、环境元素(如地形、光源)、传感器和物理规则的完整定义,由 Open Robotics 开发。

核心组成与 Gazebo 集成
  1. 关键元素(对比 URDF)

    • World(世界):包含多个模型、物理引擎配置(如重力、摩擦系数)、环境属性(如天空盒、风速)。
    • Model(模型):可包含多个 Link 和 Joint,与 URDF 结构类似,但扩展了传感器(如 Camera、LiDAR)和动态属性(如关节电机控制参数)。
    • Plugin(插件):通过 C++/Python 插件扩展功能,如定义关节控制器、传感器数据输出接口。
  2. SDF 与 URDF 的关系

    • 兼容与扩展:SDF 可直接导入 URDF 模型,但 URDF 缺乏的传感器、物理引擎参数需在 SDF 中补充。
    • 示例对比:URDF 定义机器人结构,SDF 在此基础上添加 Gazebo 特有的仿真参数(如关节阻尼、传感器噪声模型)。
  3. 典型结构

<sdf version="1.9">
<world name="default">
<include>
<uri>model://my_robot</uri> <!-- 引用机器人模型 -->
</include>
<physics name="default_physics">
<gravity>0 0 -9.81</gravity>
<ode>
<solver>
<type>quick</type>
</solver>
</ode>
</physics>
<model name="my_robot">
<!-- 机器人Link和Joint定义,类似URDF -->
<sensor name="camera_sensor" type="camera">
<pose>0 0 0.5 0 0 0</pose>
<camera>
<horizontal_fov>1.57</horizontal_fov>
<image>
<width>640</width>
<height>480</height>
</image>
</camera>
</sensor>
</model>
</world>
</sdf>

四、三者的关系与应用场景总结

格式核心功能适用场景与 Gazebo 的关系
URDF机器人运动学与结构描述ROS 机器人控制、运动规划可导入 Gazebo,但缺乏仿真细节
XACROURDF 的参数化与模块化工具复杂机器人模型开发、多版本配置预处理为 URDF 后导入 Gazebo
SDF完整仿真场景描述(含物理引擎参数)Gazebo 仿真、传感器模拟、环境搭建Gazebo 原生支持,推荐用于仿真

五、实际应用流程(以 Gazebo 仿真为例)

  1. 使用 XACRO 编写参数化的 URDF 模型,定义机器人结构(如机械臂连杆、关节)。
  2. 通过 XACRO 预处理生成标准 URDF,或直接在 SDF 中引用 URDF 模型。
  3. 在 SDF 中补充 Gazebo 特有的元素:
    • 物理引擎配置(如 ODE、Bullet)、传感器模型(如激光雷达、IMU)。
    • 添加环境模型(如地面、障碍物)和插件(如关节位置控制器)。
  4. 启动 Gazebo 加载 SDF 文件,实现机器人在虚拟环境中的物理仿真与交互。

六、工具与资源推荐

通过灵活组合 URDF、XACRO 和 SDF,可高效构建从简单到复杂的机器人仿真系统,满足科研、教育和工程开发需求。