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控制週期