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