跳到正文

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