ros2_control 透過公開命名的狀態和命令介面,將控制器演算法與硬體通訊分離。硬體外掛知道如何讀取感測器並寫入致動器;控制器負責消耗和宣稱介面;控制器管理器協調生命週期並執行控制更新。
該架構使控制器可重複使用,但不保證驅動程式是確定性的,也不會使機器人安全。介面名稱、單元、生命週期、所有權、更新時間和故障行為都必須與真實裝置一致。載入外掛只是除錯的開始。
本指南應與 ROS 2 即時控制指南 及 關節控制模式指南一起使用。請按照與已部署 ROS 和 ros2_control 版本相匹配的檔案分支操作。
將架構作為責任邊界
控制器應根據引用和測量狀態計算命令,而不應嵌入供應商協議細節。硬體元件應在物理裝置與約定介面之間進行轉換,而無需決定機器人任務。資源管理器和控制器管理器連線這些方面,並強制執行生命週期和宣告。
記錄哪個層擁有縮放、偏移、飽和、看門狗、故障復位和模式轉換。如果兩個層都應用限制或轉換,模擬和硬體之間的行為可能不同。如果雙方都不擁有,看似有效的命令可能會未被檢查地到達裝置。

遵循讀-更新-寫入迴圈
典型的控制週期讀取硬體狀態,更新活動控制器並寫入結果命令。測量週期應保持一致傳遞,以便控制器處理時序。更新使用的狀態對應於軟體呼叫前的物理取樣時間。
儀器分別讀取、控制器更新和寫入。記錄觀察到的最嚴重時長、抖動、超載和資料年齡。 ros2_control 架構檔案 解釋了角色;安裝的驅動程式和匯流排決定實際時序。
| 層 | 擁有者 | 必須曝光 | 典型失效 |
|---|---|---|---|
| 硬體元件 | 裝置通訊 | 狀態介面和命令介面 | 超時或單位錯誤 |
| 資源管理器 | 資源與生命週期 | 可用及聲稱的介面 | 名稱或州名不匹配 |
| 財務主管 | 控制器生命週期與環路 | 控制器狀態與時序 | 啟用或被突破 |
| 控制器 | 控制法 | 所需介面和引用 | 無效模式或飽和 |
| 機器人應用 | 目標與營運狀態 | 有效性與後備 | 不安全的過渡 |
狀態介面和命令介面具有不同的權限
狀態介面攜帶測量或派生值,如位置、速度、作用力、溫度或裝置狀態。命令介面攜帶請求值,如位置、速度、作用力或自定義裝置命令。僅僅匹配名稱並不能確定單位、符號、距離或更新語意。
為每個關節和感測器建立介面契約。包括單元、方向、纏繞行為、有效距離、源時間戳、不可用值行為和物理所有者。在啟用閉環控制前,驗證靜止和小範圍已知運動中的數值。
URDF ros2_control 標籤是一個可執行的合約
機器人描述會標識硬體元件類型、外掛、參數、關節、感測器和介面。 ros2_control 塊中的關節名稱必須與控制器期望的機器人模型保持一致。拼寫差異可能導致控制器載入但無法呼叫其資源。
將 xacro 生成的輸出視為被測試設定。歸檔渲染後的 URDF 和參數檔案,而不僅僅是源宏。在啟動真實致動器前,驗證重複名稱、外掛類、介面設定、限制和初始值。

從硬體拓撲中選擇系統、致動器或感測器
系統元件通常代表複雜的多自由度硬體,共享通訊或傳輸。致動器代表更簡單的可指令裝置,通常只有一個自由度。感測器暴露只讀裝置狀態。選擇影響的是組織結構,而非物理能力本身。
目前的 硬體介面類型檔案描述 了這些類別和 URDF 結構。將分支與部署匹配,因為 API 和功能會不斷演進。不要將一條匯流排拆分成多個外掛,導致它們在沒有明確協調器的情況下爭奪同一連線。
| 元件類型 | 典型硬體 | 閱讀 | 寫 | 設計問題 |
|---|---|---|---|---|
| 系統 | 機械臂或聯手 | 多州 | 多重命令 | 溝通是共享的嗎? |
| 致動器 | 獨立馬達或閥門 | 可選或地方州 | 裝置命令 | 擁有權是模組化的嗎? |
| 感測器 | IMU 或力感測器 | 感測器狀態 | 沒有 | 誰來打時間戳和驗證? |
| 模擬元件 | 模擬或積分測試 | 生成狀態 | 接管指揮權 | 哪些故障被建模了? |
| 自定義拓撲 | 廠商專用裝置集 | 合約相關 | 合約相關 | 共享的故障如何被控制? |
生命週期區分了裝載與安全操作
硬體和控制器會傳遞生命週期狀態。載入證明程式碼和設定可以例項化;啟用則賦予操作參與。定義設定、啟用、停用、清理和錯誤對物理裝置的含義,包括制動、驅動啟用和保留命令。
測試設定失敗、部分硬體可用性以及錯誤後重新啟用。控制器不應在陳舊狀態或不相容的驅動模式下啟用。讓 HMI 分別顯示硬體狀態、控制器狀態和機器人執行狀態。
命令介面需要互斥佔用宣告
控制器聲稱擁有他們所需的命令介面。兩個獨立的控制器通常不能同時擁有相同的命令資源。當多個控制器的主張不衝突,或支援的鏈明確定義引用流動時,可以共存。
切換前,檢查需求介面和宣告介面。定義過渡的嚴格性、超時和後備行為。位置控制器和工作控制器可能需要超出軟體宣告的物理驅動模式變更;將該變更與限制和驗證狀態協調。
更新速度並不保證時間
設定的更新速率是一個目標排程。核心排程、致動器工作、記憶體故障、驅動阻塞、匯流排延遲和慢速控制器決定是否能滿足截止日期。平均頻率看起來正確,而偶爾的長週期會破壞快速節點的穩定性。
測量週期分佈及每個環路段在全紀錄、網路和感測器負載下的狀態。將非即時服務和參數工作與控制路徑分離。使用 即時指南 設計記憶體、排程和資料交換證據。
保持硬體 I/O 的邊界和可觀測性
讀寫呼叫應有檔案化的上界和故障結果。網路驅動程式需要截止日期、序列處理和裝置狀態檢查。將舊狀態當作全新返回可能比報告錯誤更危險,因為控制器會從虛假的狀態繼續。
透過適當的狀態或診斷方法暴露通訊資料時效、丟包、驅動器故障、飽和度和溫度,同時不阻斷環路。判斷一個故障的關節是否導致元件停止或導致效能下降,並使該選擇與系統安全分析保持一致。
除錯名稱、生命週期、主張和時間順序
當機器人不移動時,首先將渲染的 URDF 名稱與列出的硬體介面進行比較。然後檢查硬體生命週期、控制器類型和狀態、所需介面以及實際宣告。只有在所有權正確後, Gain 的調優或軌跡行為才應成為主要嫌疑點。
控制器管理器檔案和 ROS 2 控制 CLI 會暴露控制器和硬體狀態。將輸出與紀錄一起儲存,以便重建間歇性的啟用或衝突。
從模擬硬體到載入運動的委託
從模式和外掛測試開始,然後模擬元件或模擬器,裝置無驅動通訊,低功耗單關節運動,最後在代表性負載下的協調運動。每個階段應引入定義的故障並驗證預期狀態轉換。
模擬可以測試名稱、宣告和控制器邏輯,但不能測試匯流排抖動、編碼器佈線、制動、熱極限或真實故障程式碼。保持各階段相同的介面契約,並列出模擬未重現的所有行為。
建立獨立的整合門和控制驗收門
整合驗收驗證元件載入、生命週期、介面值、主張、切換、超時、重啟和診斷。控制驗收驗證跟蹤、干擾反應、飽和、極限以及在有效負載和溫度上的穩定性。分離它們防止控制症狀掩蓋損壞的介面。
歸檔確切的 ROS 發行版、 ros2_control 包、硬體韌體、各 URDF、參數和測試結果。每個版本都使用簡明的除錯清單。
評估“ros2_control 硬體介面與控制器管理器”時,還應儲存模型版本、機器人設定、校正檔案、測試日期和全部試驗記錄。
只有把這些持續投入與單位成功任務的價值比較,才能判斷方案是否適合擴大。
- 確認渲染的名稱、單位和標誌。
- 檢查硬體和控制器生命週期狀態。
- 確認所需和已宣稱介面。
- 測量負載下的讀-更新-寫時序。
- 注入通訊、重啟和模式切換失敗。
常見問題
ros2_control 是駕駛員嗎?
不是。它是一個將控制器邏輯連線到硬體外掛的框架;外掛或較低的庫實現裝置通訊。
狀態介面和命令介面有什麼區別?
狀態介面會暴露測量值或派生值,而命令介面則接受請求值,因此需要受控的所有權。
為什麼控制器已經載入,但機器人卻沒有移動?
控制器可能處於非啟用狀態,無法呼叫介面,連線的名稱不匹配,或面對非啟用或故障的硬體元件。
多個控制器可以同時執行嗎?
當它們的介面宣告相容或明確的鏈式設計支援時,是的。必須解決命令所有權衝突。
update_rate 讓迴圈是即時的嗎?
不。它設定目標速率;有界排程、程式碼路徑、驅動程式、記憶體和硬體通訊必須分別測量。
ros2_control 整合邊界
ros2_control 提供軟體架構和生命週期機制。它本身並不保證即時效能、控制器穩定性、硬體正確性或功能安全。