跳到正文

Wiki

硬體與控制器生命週期

約 3 分鐘閱讀

本文由簡體中文內容確定性轉換,並受版本化術語表保護。

硬體元件與控制器分別管理自己的生命週期。active 狀態是框架狀態,不是裝置已使能的獨立證明。

1.各回調承擔什麼工作

回撥 教學後端 真實裝置適配時的職責
on_init 檢查兩關節與介面 校驗名稱、地址和配置
on_configure 初始化模型 建立通訊、取得可信反饋
on_activate 對齊初始目標 確認模式、故障和使能條件
on_deactivate 保持模擬位置 按裝置協議停止或保持
on_cleanup 釋放已配置資源 關閉通訊和執行緒
on_error 按狀態機處理錯誤 停止輸出並記錄故障原因

裝置通訊有延遲時,握手過程應有有限等待與明確狀態。不能在 write 中無限等裝置回覆。

2.示例 1:先只停用控制器

ros2 control set_controller_state forward_position_controller inactive
ros2 control list_controllers
ros2 control list_hardware_components

控制器 inactive 不代表硬體也 inactive。狀態廣播器還可以繼續讀取反饋。

3.示例 2:分別改變硬體狀態

確保命令控制器已 inactive 後:

ros2 control set_hardware_component_state MiniSystem inactive
ros2 control list_hardware_components
ros2 control list_hardware_interfaces
ros2 control set_hardware_component_state MiniSystem active
ros2 control set_controller_state forward_position_controller active

恢復時先檢查硬體,再啟用控制器。每一步都檢視實際狀態,不能把停止命令釋出與停用硬體等同。

3.1.返回值說明

生命週期回撥返回 CallbackReturn;read、write 返回 hardware_interface::return_type;控制器 update 返回 controller_interface::return_type。它們表達不同層的結果。

SUCCESS、FAILURE、ERROR 的後續處理受狀態機和回撥實現影響。出現 ERROR 後,檢視元件狀態和介面可用性,再決定恢復步驟。

3.2.為什麼啟用時不沿用舊目標

位置反饋為 0.4,而舊目標為 -0.8 時,直接啟用可能產生突然運動。教學外掛先把目標與反饋對齊。速度和力矩裝置則需要各自明確的啟停策略,不能機械套用位置保持。

原始碼:ros2_control/hardware_interface/src/hardware_component.cpp、ros2_control/controller_manager/src/controller_manager.cpp。找到元件狀態切換與控制器介面釋放的路徑。


返回 Jazzy 總覽 · 上一篇:狀態介面與命令介面原始碼 · 下一篇:read-update-write控制週期