Skip to content

Wiki

状态广播与机器人显示

About 3 min read

Existing English translations were reused. 16 current source blocks remain in Simplified Chinese, without triggering paid translation.

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