跳到主要内容

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,可高效构建从简单到复杂的机器人仿真系统,满足科研、教育和工程开发需求。