跳到正文

Wiki

執行第一個RRBot例項

約 4 分鐘閱讀

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

先執行官方例項,建立“命令確實經過控制器進入硬體外掛”的證據,再自己寫包。

1.示例 1:啟動官方 RRBot

1.1.程式目標

執行兩個旋轉關節,檢視控制器是否 active、命令介面是否 claimed,然後傳送目標。

終端 1:

source /opt/ros/humble/setup.bash
source ~/ros2_control_demos_ws/install/setup.bash
ros2 launch ros2_control_demo_example_1 rrbot.launch.py gui:=false

先使用 gui:=false 觀察後臺元件。在 Ubuntu 圖形桌面中需要 RViz 時,把它改為 gui:=true;無圖形桌面時,繼續通過命令列檢查介面和反饋。

終端 2,source 同一個工作區後執行:

ros2 control list_controllers
ros2 control list_hardware_components
ros2 control list_hardware_interfaces
ros2 topic info /forward_position_controller/commands -v

1.2.執行輸出與執行順序

控制器列表應包含兩個 active 例項:joint_state_broadcaster 和 forward_position_controller。命令介面為 joint1/position、joint2/position,應顯示 available、claimed。

available 表示介面可以被框架使用;claimed 表示某個控制器已經獲得該命令介面。宣告在 YAML 中並不等於控制器已經載入或啟用。

2.示例 2:傳送位置目標並觀察反饋

ros2 topic pub --once /forward_position_controller/commands \
  std_msgs/msg/Float64MultiArray "{data: [0.4, -0.2]}"
ros2 topic echo /joint_states

不要只看 position 陣列。先對照 name 陣列,確認哪一個值屬於哪個關節。JointState 的關節排列順序不應靠猜測。

2.1.預期現象

傳送目標後,joint1 應從初始位置向 0.4 rad 靠近,joint2 應向 -0.2 rad 靠近。通過連續觀察反饋確認方向和收斂趨勢;不要求在固定牆上時間採到某個精確小數。

為什麼沒有立刻達到 0.4 和 -0.2?當前固定提交的硬體配置中 example_param_hw_slowdown 為 100;模擬 read 每輪只走剩餘誤差的一小部分。它不是 Gazebo 動力學,也不是序列埠失靈。

2.2.一條命令經過哪些檔案

rrbot.launch.py 启动 robot_state_publisher 和 ros2_control_node
  → Xacro 展开硬件描述
  → ResourceManager 加载 RRBot 硬件插件
  → spawner 加载并激活两个控制器
  → Topic 回调收到 Float64MultiArray
  → ForwardCommandController::update 写入命令接口
  → RRBot 的 read 逐渐更新模拟状态
  → broadcaster 发布 JointState

3.示例 3:確認 RViz 顯示的依據

如果開啟 RViz,選擇與模型對應的 Fixed Frame,新增 RobotModel 和 TF。RViz 讀取模型及 TF,不會直接讀取硬體外掛中的 C++ vector。

不要同時啟動 joint_state_publisher_gui 來給同一機器人釋出 /joint_states。它會讓你無法分清顯示來自硬體反饋還是手動滑塊。

4.常見問題

  • 沒有 /controller_manager 服務:先看啟動終端中 URDF、外掛和 YAML 的報錯。
  • 控制器 inactive:檢視介面名稱、硬體狀態和啟用日誌。
  • Topic 存在卻不動:確認型別、訂閱者、命令陣列長度,以及當前 active 的控制器。
  • 反饋緩慢變化:先檢視模擬引數和更新頻率,不能只憑速度判斷失敗。

5.對應底層原始碼

依次閱讀 ros2_control_demos/example_1/bringup/launch/rrbot.launch.py、ros2_control_demos/example_1/bringup/config/rrbot_controllers.yaml、ros2_control_demos/example_1/hardware/rrbot.cpp。先定位檔案之間的關係,再閱讀函式體。


返回 Humble 總覽 · 上一篇:ros2_control整體工作過程 · 下一篇:從零建立學習工作區