welcom ! Handel home

2025年2月5日 星期三

ROS 中 SDF vs URDF 應用說明

Robot Operating System (ROS) 中,SDF (Simulation Description Format)URDF (Unified Robot Description Format) 是兩種用來描述機器人的模型格式。兩者的主要區別如下:


1. URDF (Unified Robot Description Format)

URDF 是 ROS 主要用來描述機器人的 XML 格式。它定義了機器人的結構連結 (links)關節 (joints) 以及慣性、碰撞、視覺模型等資訊。

URDF 主要特點

  • 主要用於 ROS 生態系統,特別是 RViz (可視化)MoveIt! (運動規劃)
  • 簡單且輕量,適用於大多數機器人應用。
  • 支援關節限制 (joint limits)、慣性 (inertial properties)、碰撞模型 (collision)、視覺模型 (visual)
  • 透過 xacro(XML Macro)簡化模型建立,提高可讀性與重複使用性。
  • 不支援 高級物理屬性,例如摩擦係數、彈性等。

URDF 使用範例

xml
<robot name="simple_robot"> <link name="base_link"> <visual> <geometry> <box size="1 1 1"/> </geometry> <material name="blue"/> </visual> </link> </robot>

2. SDF (Simulation Description Format)

SDF 是 Gazebo 模擬器主要使用的機器人描述格式。它提供比 URDF 更完整的機器人建模能力,特別是在物理模擬方面。

SDF 主要特點

  • 更強大的物理引擎支持,包括 摩擦力、彈性、流體動力學、光照屬性等。
  • 支援多機器人模擬(URDF 只能描述單一機器人)。
  • 更靈活的坐標系統,允許自由定義連結與關節的座標。
  • 多版本支持(比 URDF 更靈活)。
  • 適用於 Gazebo,但不像 URDF 那樣深度集成到 ROS。

SDF 使用範例

xml
<robot name="simple_robot"> <link name="base_link"> <visual> <geometry> <box> <size>1 1 1</size> </box> </geometry> </visual> <collision> <geometry> <box> <size>1 1 1</size> </box> </geometry> </collision> </link> </robot>

3. URDF vs. SDF 比較

特性URDFSDF
主要用途ROS (RViz, MoveIt!)Gazebo 模擬
支援的模擬特性基本的物理屬性(慣性、碰撞)進階物理屬性(摩擦、彈性、流體)
多機器人支持不支援支援
語法靈活性比較受限更靈活,支援更複雜的結構
擴展性透過 xacro 來提升可讀性支援內建多層次結構
座標系統受限於樹狀結構支援自由座標系統
Gazebo 支持需轉換成 SDF 格式原生支持

4. 何時使用 URDF 或 SDF?

  • 使用 URDF

    • 如果只在 ROS (RViz, MoveIt!) 進行視覺化或運動規劃。
    • 機器人模型較簡單,不需要進階物理屬性。
    • ROS 生態系統內的開發,如機器人導航、控制等。
  • 使用 SDF

    • 需要在 Gazebo 進行物理模擬
    • 需要 更細緻的物理屬性(例如摩擦力、彈性等)。
    • 需要 模擬多台機器人更複雜的場景

5. URDF 轉換成 SDF

因為 Gazebo 使用 SDF,但 ROS 使用 URDF,所以經常需要轉換格式,這可以透過 gz sdfgz urdf 指令來完成:

bash
gz sdf -p model.urdf > model.sdf

或使用 ROS 提供的插件:

bash
rosrun gazebo_ros spawn_model -file model.urdf -urdf -model my_robot

6. 總結

  • URDF 是 ROS 主要使用的機器人描述格式,適合視覺化與控制。
  • SDF 是 Gazebo 主要使用的模擬格式,支援更強的物理屬性與多機器人建模。
  • 如果需要同時使用 ROS 與 Gazebo,通常先寫 URDF,然後轉換成 SDF

沒有留言: