0. 简介
众所周知,ROS 2是具有不同架构的ROS的更新版本。这两个网络是分开的,在ROS和ROS 2的节点之间没有直接的通信。而ros1_bridge包则是提供了一个网桥,可以在ROS和ROS 2之间交换消息。桥接器管理所需的所有转换,并在两个网络之间发送消息。
1. ros1_bridge使用
这个例子展示了如何使用MATLAB®的键盘命令控制Gazebo中的TurtleBot3。凉亭模拟器仅在ROS 1网络中可用。您可以使用ros1_bridge将Gazebo主题(如’/odom’或’/cmd_vel’)交换为ROS 2。
下图描述了使用ros1_bridge在ROS 1和ROS 2网络之间的消息交换。“/odom”主题包含从ROS 1网络和Gazebo发送的nav_msgs/Odometry消息。ROS 2节点订阅了从ROS 1桥接过来的/odom主题,并发布了一个基于机器人姿态的’/cmd_vel’消息。然后网桥接收’/cmd_vel’消息并将其发布到ROS 1网络上。
2. 使用ROS2来控制TurtleBot3
在虚拟机桌面,单击Gazebo Empty.。这个Gazebo World 包含一个Turtlebot机器人,它在ROS 1网络上发布和订阅消息。
单击“ROS Bridge”快捷方式。这个桥接为ROS 2网络上的所有ROS 1主题设置发布者和订阅者。
在终端窗口中,其中ros1_bridge桥接已经启动并正在运行。
打开另一个终端并输入以下命令
export ROS_DOMAIN_ID=25
source /opt/ros/foxy/setup.bash
现在检查一下Gazebo主题是否出现在ROS 2中
ros2 topic list
/odom主题以查看正在发布的消息
ros2 topic echo /odom
下面我们就可以在主机上的MATLAB中,使用’ROS_DOMAIN_ID’环境变量将ROS 2网络的正确域ID设置为25,以匹配机器人模拟器ROS桥设置,并运行ros2主题列表,以验证来自机器人模拟器的主题在MATLAB中可见。
setenv("ROS_DOMAIN_ID","25");
ros2 topic list
/clock
/gazebo/link_states
/gazebo/model_states
/gazebo/performance_metrics
/imu
/joint_states
/odom
/parameter_events
/rosout
/rosout_agg
/scan
/tf