ROS1和ROS2使用桥接工具通信
前提:主从机在同一局域网内,可以互相ping通
我的两个设备其中一个无法连接wifi,ubuntu老生常谈的问题.....,获得新的技能:手机蓝牙提供网络,两个设备连接手机蓝牙就可以连接网络并且处于同一个局域网内。
我的主机为ROS1 noetic
从机为ROS2 foxy
安装依赖
主机ROS1 Noetic安装依赖
sudo apt-get install ros-noetic-ros1-bridge
从机ROS2 foxy安装依赖
sudo apt-get install ros-foxy-ros1-bridge
配置环境,在主机和从机的~/.bashrc中输入:
# 主机(ROS Noetic)
export ROS1_INSTALL_PATH=/opt/ros/noetic
source $ROS1_INSTALL_PATH/setup.bash# 从机(ROS 2 Foxy)
export ROS2_INSTALL_PATH=/opt/ros/foxy
source $ROS2_INSTALL_PATH/setup.bash
保存后,执行 source ~/.bashrc使得配置生效
网络连接
两个设备解析主机名需要配置网络,在~/.bashrc下添加
#主机添加本机的IP (使用ip addr查询)
export ROS_IP=192.168.1.XX
export ROS_MASTER_URI=http://192.168.1.XX:11311#在从机添加
export ROS_MASTER_URI=http://192.168.1.XX:11311 # 指向主机的 IP
export ROS_IP=192.168.1.yy # 设置本机 IP
启动桥接
主机上启动ros master
roscore
从机上启动桥接节点
ros2 run ros1_bridge dynamic_bridge --bridge-all-topics
测试通信
主机上启动发布节点
rosrun rospy_tutorials talker
从机上启动订阅节点
source /opt/ros/noetic/setup.bash
source /opt/ros/foxy/setup.bash
source ~/ros2_ws/install/setup.bash # 如果你是从源码编译的 ros1_bridgeros2 run demo_nodes_cpp listener
测试桥接是否成功
主机上发送信息
rostopic pub /test_topic std_msgs/String "data: 'hello from ROS1'" -r 1
从机上查看是否有/test_topic相关话题
ros2 topic list
如果有就可以订阅该话题
ros2 topic echo /test_topic
如果能收到数据说明桥接成功