跳到正文

Wiki

狀態廣播與機械人顯示

約 3 分鐘閱讀

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

RViz 依據模型和 TF 顯示機械人,不能直接讀取硬件插件的 C++ 數組。

1.示例 1:查看發佈關係

ros2 topic info /joint_states -v
ros2 topic echo /joint_states --once
ros2 topic info /robot_description -v
ros2 topic info /tf -v
ros2 topic info /tf_static -v

1.1.數據流

硬件 read → 状态接口
  → joint_state_broadcaster::update
  → JointState
  → robot_state_publisher 计算关节变换
  → TF
  → RViz

broadcaster 使用控制器接口體系,但不寫關節命令。停用命令控制器後,廣播器仍可能 active。

2.示例 2:顯示自己的機械人

在 Ubuntu 圖形桌面中:

source /opt/ros/jazzy/setup.bash
source ~/ros2_control_jazzy_ws/install/setup.bash
rviz2

Fixed Frame 選 world,添加 RobotModel 和 TF;模型描述選擇 /robot_description。描述發佈早於 RViz 啓動時,訂閲 durability 使用 Transient Local 以取得保存的模型消息。

發送位置目標,觀察連桿和 JointState 是否一致。無圖形桌面時先檢查 Topic 與 TF,顯示步驟在可運行 RViz 的桌面中完成。

3.示例 3:不要按數組位置猜關節

name 數組決定 position、velocity 等數組的對應關係。某些狀態量未提供時,對應字段可以為空。教學硬件沒有測得 effort,就不能根據位置運動猜出力矩反饋。

3.1.排查順序

現象 先檢查
模型存在但不動 JointState 數值和關節名稱
模型來回跳 是否有多個 /joint_states 發佈者
TF 缺少連接 Fixed Frame、根 link、時間戳
仿真報時間錯誤 use_sim_time 與 /clock
模型不出現 描述內容、訂閲 QoS、解析日誌

不要同時用 joint_state_publisher_gui 為同一控制機械人發佈狀態,這會干擾反饋來源。

源碼:ros2_controllers/joint_state_broadcaster/src/joint_state_broadcaster.cpp。觀察接口選擇、消息初始化與 update,理解廣播器怎樣組織狀態。


返回 Jazzy 總覽 · 上一篇:read-update-write控制週期 · 下一篇:命令轉發與控制模式