Skip to content

Wiki

硬件与控制器生命周期

About 3 min read

Existing English translations were reused. 17 current source blocks remain in Simplified Chinese, without triggering paid translation.

硬件组件与控制器分别管理自己的生命周期。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控制周期