Skip to main content

1.6ros_gz_bridge

ros_gz_bridge

此部分代码来自官方文档https://gazebosim.org/docs/latest/ros2_integration/

根据你的Gazebo中的Topic灵活修改。

数据流向

  • 摄像头 → /camera 话题 → 你的视觉算法节点
  • 你的算法节点 → /cmd_vel 话题 → 机器人运动控制

这个项目中涉及到2种通信信息格式的转换:

从ROS2_Gazebo流出的传感器数据,需要转为Python能处理的数据格式。

内置摄像头插件:会自动将摄像头数据发布到 /camera 话题

启动后可以通过rviz2查看接收到的图片。

从算法节点流入ROS2_Gazebo的控制信息,需要是ROS2_Gazebo能理解的数据格式。

运动控制插件gz::sim::systems::DiffDrive 插件会监听 /cmd_vel 话题来控制机器人运动

我们把需要执行的命令写入到Makefile里,便于后续执行。

Makefile
.PHONY: world sim img cam vel bridge go left right stop rv node start

# 启动完整世界
world:
gz sim -r world.sdf


# 桥接摄像头和控制话题 (simple.sdf 的 /camera和/cmd_vel)
bridge:
ros2 run ros_gz_bridge parameter_bridge /camera@sensor_msgs/msg/Image@gz.msgs.Image /cmd_vel@geometry_msgs/msg/Twist]gz.msgs.Twist

start:
colcon build --packages-select learning_node
ros2 run learning_node node_helloworld

# 单独桥接摄像头 (simple.sdf 的 /camera)
cam:
ros2 run ros_gz_bridge parameter_bridge /camera@sensor_msgs/msg/Image@gz.msgs.Image
# 启动 rviz2
rv:
rviz2

# 单独桥接控制话题 (simple.sdf 的 /cmd_vel)
vel:
ros2 run ros_gz_bridge parameter_bridge /cmd_vel@geometry_msgs/msg/Twist]gz.msgs.Twist

# 前进
go:
ros2 topic pub -1 /cmd_vel geometry_msgs/msg/Twist "{linear: {x: 1.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.0}}"
ros2 topic pub -1 /cmd_vel geometry_msgs/msg/Twist "{linear: {x: 0.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.0}}"

# 左转
left:
ros2 topic pub -1 /cmd_vel geometry_msgs/msg/Twist "{linear: {x: 0.5, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.5}}"
ros2 topic pub -1 /cmd_vel geometry_msgs/msg/Twist "{linear: {x: 0.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.0}}"

# 右转
right:
ros2 topic pub -1 /cmd_vel geometry_msgs/msg/Twist "{linear: {x: 0.5, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: -0.5}}"
ros2 topic pub -1 /cmd_vel geometry_msgs/msg/Twist "{linear: {x: 0.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.0}}"

# 停止
stop:
ros2 topic pub -1 /cmd_vel geometry_msgs/msg/Twist "{linear: {x: 0.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.0}}"

调试命令

# 查看GZ中的话题
gz topic -l

# 查看ros2中活跃的话题
ros2 topic list

# 查看图像话题数据
ros2 topic echo /camera/image
# 查看速度控制话题
ros2 topic echo /model/my_robot/cmd_vel