Wiki
運行第一個RRBot實例
本文由簡體中文內容確定性轉換,並受版本化術語表保護。
先運行官方實例,建立“命令確實經過控制器進入硬件插件”的證據,再自己寫包。
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整體工作過程 · 下一篇:從零創建學習工作區