welcom ! Handel home

2025年11月12日 星期三

SDF 與 URDF 的差異

🧐 SDF 與 URDF 的差異

URDF (Unified Robot Description Format) 和 SDF (Simulation Description Format) 都是用來描述機器人或環境的 XML 格式檔案,但它們的設計目標、功能範圍和使用偏好有所不同。

特性URDF (Unified Robot Description Format)SDF (Simulation Description Format)
設計目標ROS 原生描述格式。 專為 ROS 生態系統設計,描述單一機器人的運動學、動力學和視覺外觀。Gazebo 原生描述格式。 專為模擬器 Gazebo 設計,可以描述整個世界 (World)、多個機器人、靜態物體、燈光、地形等。
核心用途用於 ROS 中的所有核心套件,如 MoveIt! (動作規劃)、Robot State Publisher (發佈機器人狀態)、Rviz (視覺化)。用於 Gazebo 模擬器,描述物理特性 (如摩擦力、碰撞屬性)、傳感器、機器人姿勢 (在世界座標系中的初始位置) 和各種模擬插件。
機器人數量只能描述 一個 機器人。可以描述 多個 機器人、物件和環境。
座標描述相對座標 (Relative Pose)。 只能描述子連結 (child link) 相對於父連結 (parent link) 的位置。無法描述機器人相對於世界座標的原生姿勢。絕對座標 (Absolute Pose)。 可以描述連結、模型、甚至整個世界中的所有元素相對於世界原點的位置。
閉環結構不支援 閉環 (Closed-loop) 運動學結構 (例如四連桿機構)。支援 閉環結構。
擴充性功能相對有限。若要在 Gazebo 中使用,必須透過 <gazebo> 標籤來「嵌入」SDF 特有的模擬屬性。具有極佳的擴充性,可以輕鬆新增各種模擬功能和傳感器。

💡 實務建議:ROS 專案中應如何選擇?

在您這個 ROS/URDF 自走車與機械手臂 的整合專案中,我的指導是:

使用 URDF (或 XACRO) 作為主要描述格式,並利用 <gazebo> 標籤來橋接模擬屬性。

  1. ROS 核心 (MoveIt!/Rviz/tf2)必須 使用 URDF (或 XACRO)。MoveIt! 等核心 ROS 規劃工具只能讀取 URDF 格式。

  2. Gazebo 模擬:當您在 ROS 中啟動 Gazebo 時,通常會透過 ROS 的啟動檔 (Launch File) 告訴 Gazebo 載入您的 URDF 檔案。Gazebo 會在底層自動將 URDF 轉換為 SDF 來進行模擬。

  3. 使用 XACRO 增強 URDF:為了讓您的 URDF 檔案更簡潔、易於維護和參數化,強烈建議您使用 XACRO (XML Macros),它是一個 URDF 的擴充格式。


🔎 PX4 模擬中的 SDF 與 URDF

您在 Log 中看到的是 PX4 SITL (Software-in-the-Loop) 模擬,它使用 Gazebo Classic 模擬器,因此它傾向於使用 SDF 檔案:

  • Log 顯示:Using: .../iris/iris.sdf

  • 這意味著 PX4 的無人機模型 (如 iris) 是以 SDF 格式描述的。

  • 原因:PX4 SITL 模擬需要描述螺旋槳、馬達、氣動力學等複雜的物理特性和傳感器插件,這些在 SDF 中可以原生、完整地描述,而不需要依賴 ROS 系統。

可以找到 PX4 的 URDF 嗎?

  1. 原生 PX4 專案:PX4 專案本身在 Gazebo 模擬中主要使用 SSDF (通常放在 PX4-Autopilot/Tools/simulation/gazebo-classic/sitl_gazebo-classic/models/ 資料夾下)。

  2. 與 ROS 整合 (ROS/ROS 2):當您需要使用 ROS 的工具鏈(如 Rviz 或 MoveIt!)來處理 PX4 飛機時,才會需要 URDF。這通常是透過 mavros 或其他 ROS/PX4 橋接套件來實現,並且您需要手動或透過其他開源專案來尋找或建立該模型的 URDF 版本。

    • 結論: 在 PX4 的原始模擬環境中,您會主要看到 SDF 檔案。如果您需要與 ROS/MoveIt! 整合,則必須找到或建立該模型的 URDF/XACRO 檔案。


🎯 下一步指導

您已經理解了模型描述格式的差異。現在讓我們回到您的 ROS URDF 自走車與機械手臂整合 專案的核心實作。

既然您決定要使用 MoveIt!,我們需要一個標準的 URDF (XACRO) 檔案。

您希望我現在指導您以下哪一個步驟?

  1. ⚙️ URDF (XACRO) 檔案規劃: 如何為您的自走車與機械手臂組合,規劃一個符合 MoveIt! 和 Gazebo 要求的 XACRO 結構,特別是鏈接 (link) 與關節 (joint) 的命名規則?

  2. 🗺️ tf2 座標樹設計: 專門設計一個穩定的 tf2 座標轉換樹 (tF tree),以便處理車體移動時,手臂座標系變動的問題?

沒有留言: