Wiki
多接口与硬件类型
Existing English translations were reused. 21 current source blocks remain in Simplified Chinese, without triggering paid translation.
一个关节可以声明多种接口,但“接口存在”与“允许同时使用”是两回事。
1.示例 1:运行官方多接口 RRBot
先停止其它实例,再进入已 source demos 的终端:
ros2 launch ros2_control_demo_example_3 rrbot_system_multi_interface.launch.py gui:=false
另一个 source 同一工作区的终端:
ros2 control list_controllers
ros2 control list_hardware_interfaces
该实例由环境准备与源码地图的构建命令包含。模式切换实验应以所用提交中的 YAML 和下述源码为依据,逐项检查接口占用、切换结果与硬件模式。
1.1.先看配置,再选控制器
打开官方包的 config/rrbot_multi_interface_forward_controllers.yaml,记录实际控制器名称、joints 和 interface_name。不要凭其它版本截图中的名称执行切换。
2.为什么需要 prepare 与 perform 两阶段
控制器提出接口切换请求
→ prepare_command_mode_switch 检查是否允许这种组合
→ 框架协调资源和控制器状态
→ perform_command_mode_switch 执行已批准的硬件模式切换
prepare_command_mode_switch(start_interfaces, stop_interfaces) 接收完整接口名列表,先检查硬件是否支持请求。perform_command_mode_switch() 位于执行切换的路径中,应快速完成,避免在这里做长时间通信握手。
框架能协调接口占用,设备是否支持位置与速度同时控制仍由硬件能力决定。不能只因为两个接口名字不同,就认定同时写入一定合理。
3.示例 2:选择 System、Actuator 或 Sensor
| 类型 | 典型组织方式 | 官方实例线索 |
|---|---|---|
| System | 一条通信链路管理多个关节和传感器 | example_1、example_4 |
| Actuator | 执行器具有独立通信与生命周期 | example_6 |
| Sensor | 只向上提供状态,不接收执行命令 | example_5 的外部传感器 |
选择取决于设备通信边界和管理需求,不是“机器人整体一定 System、电机一定 Actuator”。同一条总线上的多个电机可以由一个 System 统一管理。
4.示例 3:阅读一个模式检查函数
在源码阅读目录定位:
cd ~/ros2_control_demos_ws/src/ros2_control_demos
rg -n 'prepare_command_mode_switch|perform_command_mode_switch' example_3/hardware
阅读时回答四个问题:允许启动哪些接口?停止哪些接口?是否要求同组关节一致?遇到不属于自己的接口时怎样处理?
4.1.本节最重要的边界
硬件生命周期负责组件是否配置和可运行;控制模式切换负责运行时采用哪种命令语义。这两个维度不能相互替代。
源码:ros2_control_demos/example_3/hardware/rrbot_system_multi_interface.cpp、ros2_control/hardware_interface/include/hardware_interface/system_interface.hpp。
返回 Humble 总览 · 上一篇:差速底盘物理仿真 · 下一篇:从零编写控制器