Wiki
多介面與硬體型別
本文由簡體中文內容確定性轉換,並受版本化術語表保護。
一個關節可以宣告多種介面,但“介面存在”與“允許同時使用”是兩回事。
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 總覽 · 上一篇:差速底盤物理模擬 · 下一篇:從零編寫控制器