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