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控制周期 · 下一篇:命令转发与控制模式