将机器人姿态同步到 RViz 中显示
当使用 MoveIt2 或 Gazebo 进行路径规划和仿真时,通常需要获取物理机器人的实时位姿作为参考。此功能实时采集机器人的关节状态数据,并将其发布到 /joint_states 话题,从而实现机器人真实位姿的同步。发布到该话题的数据可被 MoveIt2、Gazebo 和 RViz 等工具订阅并用于 显示当前机器人状态、规划路径或驱动仿真。
前置条件
在开始之前,请确保:
设置机器人 IP
编辑 gbt_driver/config/robot_config.yaml 文件,设置 robot_ip_address 字段为实际的机器人 IP 地址:
bash
vi gbt_driver/config/robot_config.yamlyaml
robot_ip_address: "192.168.x.x" # 修改为实际机器人IP启动机器人状态同步
使用以下命令启动 RViz 并同步显示机械臂状态:
bash
source install/setup.bash
ros2 launch gbt_driver gbt_bridge.launch.py robot_type:=<机器人型号>支持的机器人型号
C5A- 5 公斤负载协作机器人C7A- 7 公斤负载协作机器人C12A- 12 公斤负载协作机器人C16A- 16 公斤负载协作机器人
示例
对于 C5A 型号:
bash
source install/setup.bash
ros2 launch gbt_driver gbt_bridge.launch.py robot_type:=C5A其他型号的机器人启动方式类似:
bash
# C7A 机器人
ros2 launch gbt_driver gbt_bridge.launch.py robot_type:=C7A
# C12A 机器人
ros2 launch gbt_driver gbt_bridge.launch.py robot_type:=C12A
# C16A 机器人
ros2 launch gbt_driver gbt_bridge.launch.py robot_type:=C16A验证同步状态
方法 1:查看 RViz 显示
启动后,RViz 窗口会自动打开,您可以看到:
- 机器人的 URDF 模型
- 实时更新的关节状态
方法 2:查看话题数据
在另一个终端中查看 /joint_states 话题:
bash
source install/setup.bash
ros2 topic echo /joint_states您应该能看到类似以下输出:
header:
stamp:
sec: 1234567890
nanosec: 123456789
frame_id: ''
name:
- joint1
- joint2
- joint3
- joint4
- joint5
- joint6
position:
- 0.0
- 0.1
- 0.2
- 0.3
- 0.4
- 0.5
...方法 3:查看详细反馈状态(可选)
如需获取更详细的机器人状态信息(包括报警码、伺服状态等),可以额外启动 robot_status 节点:
bash
source install/setup.bash
ros2 launch gbt_driver gbt_feedback.launch.py然后查看 /gbt_driver/feedback_states 话题:
bash
ros2 topic echo /gbt_driver/feedback_states故障排查
无法连接到机器人
- 检查机器人 IP 地址是否正确配置
- 检查网络连接:
ping <机器人IP> - 确认机器人控制器已上电
RViz 中机器人姿态不更新
- 检查
/joint_states话题是否正常发布:bashros2 topic hz /joint_states - 确认机器人处于可操作状态(非报警状态)
模块导入错误
如遇 ModuleNotFoundError: No module named 'Agilebot' 错误,请确保已安装 SDK:
bash
pip install Agilebot.Robot.SDK.A-*.whl