Skip to content

Wiki

多接口与硬件类型

About 4 min read

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 总览 · 上一篇:差速底盘物理仿真 · 下一篇:从零编写控制器