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控制週期 · 下一篇:命令轉發與控制模式