跳到正文

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