跳到正文

Wiki

多介面與硬體型別

約 4 分鐘閱讀

本文由簡體中文內容確定性轉換,並受版本化術語表保護。

一個關節可以宣告多種介面,但“介面存在”與“允許同時使用”是兩回事。

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 總覽 · 上一篇:差速底盤物理模擬 · 下一篇:從零編寫控制器