URDF 和 SDFormat 是具有重疊元素但作用範圍不同的 XML 機器人描述格式。 URDF 是許多用於單一機器人的連桿和關節的 ROS 工具的核心。 SDFormat 可以描述模型、燈光、感測器、外掛、物理屬性以及完整的模擬世界。
這兩種格式都無法保證物理真實度。視覺幾何、碰撞幾何和慣性屬性可能存在分歧;座標系語意可能透過轉換而改變;感測器速率和雜訊可能不真實。選擇單一事實來源策略,檢查每個工具消耗的生成模型。
本指南應與 TF2 座標係指南 及 虛擬除錯指南結合使用。分別驗證結構、框架、物理和感測器。
根據消費者和驗證範圍選擇
列出每個消費者: robot_state_publisher、運動學、規劃、視覺化、控制、模擬器、世界編輯器和資產管道。記錄每個使用者接受的格式和版本。一個通用檔案可以積累工具專用擴充,單個使用者無法一致解讀。
定義哪些行為必須與物理機器人相匹配。運動學規劃可能需要關節和碰撞幾何;控制器測試需要傳輸和介面;模擬可能需要慣性、摩擦、接觸、感測器雜訊和世界條件。

URDF 以運動學樹為中心
URDF 描述透過關節連線的鏈路,通常儲存視覺、碰撞和慣性屬性。其樹結構與 robot_state_publisher 及許多 ROS 工具保持一致。 Xacro 增加了可重用生成功能,但屬於預處理語言,而非執行時機器人模型。
ROS 2 URDF 教程解釋了生態系統。歸檔渲染得很 URDF,因為宏、參數和包路徑決定了實際被消耗的檔案。
| 需求 | URDF 優勢 | SDFormat 優勢 | 驗證 |
|---|---|---|---|
| ROS 運動樹 | 廣泛的工具支援 | 可能需要轉換 | 關節與框架測試 |
| 模擬世界 | 需要擴充 | 原生世界結構 | 生成與環境測試 |
| 多型號 | 外部發射邏輯 | 世界模型與巢狀模型 | 識別與位姿測試 |
| 感測器與物理 | 工具專用標籤 | 原生元素較豐富 | 速率、雜訊與接觸測試 |
| 單源生成 | Xacro 或模板 | 模板或生成 | 比較生成成品的差異 |
SDFormat 包含世界和物理上下文
SDFormat 描述模型,也可以描述包含重力、物理引擎設定、燈光、道路、地形、外掛和多個實體的世界。這使得它適合超越單一機器人的可復現模擬場景。
SDFormat 規範有版本限制。記錄規範版本和模擬器釋出。有效檔案仍可能依賴模擬器專用外掛行為,且這些行為不具備移植性。
分別稽核視覺、碰撞與慣性屬性
視覺幾何影響外觀;碰撞幾何影響接觸和規劃;慣性屬性影響動力學。重複使用一個詳細網格對三者可能速度緩慢且物理不準確。一個視覺正確的模型可能包含零或不合理的慣性。
檢查質量、質心和慣性張量是否對稱且物理值正。將碰撞範圍與真實機器人進行比較,驗證簡化形狀不會產生不可能的間隙或接觸。

座標系和位姿語意可能在轉換中改變
URDF 關節原點和連桿座標系定義了一棵樹。SDFormat 支援更豐富的位姿關係與座標系語意。轉換可能引入規範連桿(canonical link)、巢狀模型座標系,或產生看起來與來源不同的解析後位姿。
在兩種表示中都變換已知的點和軸。檢查感測器光學座標系、基座座標系、工具座標系和關節零點。生成在預期位置的模型仍然可以旋轉一個感測器或偏移其碰撞幾何。
| 測試層 | 比較 | 常見的隱性錯誤 | 接受證據 |
|---|---|---|---|
| 結構 | 連桿圖與關節圖 | 固定關節被丟棄 | 名稱與拓撲差異 |
| 框架 | 已知位姿與軸 | 反向位姿或解析後位姿 | 變換驗證點 |
| 物理 | 質量、慣性與碰撞 | 預設值或無效值 | 動態反應 |
| 感測器 | 頻率、雜訊、延遲和座標系 | 外掛預設設定 | 記錄的輸出 |
| 世界 | 重力、摩擦力與位置 | 版本相關設定 | 情景迴歸 |
使用 SDFormat 世界來實現可復現的場景
世界應指定影響測試的環境因素:重力、地面、摩擦、光照、模型、初始姿態和物理設定。外部發射指令碼可以增加變異性,但其參數和種子必須保留在情景記錄中。
將可複用的機器人模型與世界特定位置分離。避免在機器人資產中嵌入一個倉庫假設。版本模型和世界獨立使用,並對相容的組合進行迴歸測試。
驗證感測器的行為,而不僅僅是存在
感測器元件可以定義類型、更新率、姿態、雜訊以及渲染或物理參數。外掛將模擬器資料與 ROS 連線起來。出現的主題證明的是連線性,而非取樣時間、視場、雜訊或影格是否與物理裝置匹配。
將模擬輸出與感測器合約進行比較。測量速率、時間戳、延遲、frame_id、距離限制和雜訊分佈。使用 SDFormat 感測器規範 來獲取宣告版本。
將 Gazebo 擴充視為顯式依賴關係
URDF 通常包含材料、摩擦、感測器和外掛的涼亭擴充標籤。當 ROS 工具消耗 URDF 且 Gazebo 需要額外資料時,它們非常實用。它們還將原始碼與特定的轉換和模擬器行為耦合。
記錄每個擴充,並測試其他 URDF 使用者是否安全忽略。儘可能將僅模擬器的設定分組生成。升級後無聲忽略的參數可以改變動態,而不會導致 XML 失效。
檢查生成的 SDFormat
當 Gazebo 生成 URDF 時,轉換生成 SDFormat 表示。固定節點可根據規則減少或保留,擴充對映。生成的輸出決定模擬器行為,而非源 URDF 節點。
使用 Gazebo URDF 生成檔案 和轉換檢查工具來處理已部署版本。差異生成 SDFormat 是在升級和審查警告後生成的,而不是假設成功生成意味著完全保真。
保持一個語意源和生成目標
一個實用專案可以維護幾何體、關節、感測器和辨識符號的規範參數,然後為其使用者生成 URDF 和 SDFormat 目標。這減少了重複的手動值,同時允許格式特定的功能。
生成器成為可信工具鏈的一部分。固定版本、測試輸出並禁止手工編輯生成檔案。當某一格式無法表達某一特徵時,應明確記錄該偏差,而不是隱藏在未公開的補丁中。
進行結構、框架、物理和感測器迴歸分析
解析每個生成的模型,比較名稱和拓撲結構,驗證座標變換,模擬已知的自由落體或擺錘行為,檢查接觸點並回放感測器測試。包含模型生成、控制器連線和簡短任務場景。
基準截圖有助於檢查外觀,但不足以驗證數值幾何或物理行為。應儲存帶公差的數值基線,並調查每一項轉換器警告。更換模擬器後,可能需要基於物理理由有意更新基線。
根據調試驗收證據選擇格式
當主要合約是 ROS 機器人結構且支援的擴充足夠時,使用 URDF。當世界、巢狀模型、感測器和模擬器物理是主要時,使用原生 SDFormat。許多系統透過受控生成使用這兩者。
基於測試範圍而非副檔名來確定接受度。
評估“URDF 與 SDFormat 在機器人模型與模擬中的比較”時,還應儲存模型版本、機器人設定、校正檔案、測試日期和全部試驗記錄。
- 列出所有消費者版本和支援的格式版本。
- 分別保留視覺、碰撞和慣性證據。
- 每次轉換後都檢查座標系。
- 用數值測試物理和感測器。
- 對生成器及其生成成品一併進行版本管理。
常見問題
專案必須只選擇 URDF 還是隻選擇 SDFormat?
不是。許多專案保留語意源,生成工具專用的 URDF 和 SDFormat 生成產物。
URDF 能描述感測器嗎?
專門針對模擬器的擴充可以新增感測器,但原生支援和可移植性取決於使用工具。
成功的 Gazebo 生成能證明轉換是正確的嗎?
不會。影格、慣性、碰撞、外掛和感測器設定仍然可能出錯或被忽略。
robot_state_publisher 能直接讀取 SDFormat 嗎?
其正常合約為 URDF;為該消費者使用支援的轉換或生成 URDF。
模型迴歸應該先測試什麼?
先從連桿和關節識別開始,接著檢查座標系、慣性與碰撞行為、感測器以及完整場景。
機器人模型保真度邊界
機器人模型是與工具鏈和測試目的相關的近似值。在使用模擬結果進行操作宣告前,先驗證生成的生成產物與物理測量結果。