① 多机通信需要所有的ROS主控都处于同一个网络下
所有ROS主控都处于同一个网络的方法很简单,让他们都连同一个网络就好了,有如下两种网络连接方案
网络提供者 | ROS主机 | ROS从机1 | ROS从机2 | |
---|---|---|---|---|
方案1 | ROS主机 | 发出WiFi | 连接WiFi | 连接WiFi |
方案2 | 第三方路由器 | 连接WiFi | 连接WiFi | 连接WiFi |
本ROS小车采用方案1,网络连接模型如下:
ROS小车开机会发射WiFi信号,使用宿主机连接ROS小车发射的WiFi即可,虚拟机设置为桥接模式
② 在.bashrc
文件里设置多机通信的环境
ROS 主机的.bashrc
文件:
export ROS_MASTER_URI=http://192.168.0.100:11311
export ROS_HOSTNAME=192.168.0.100
ROS 从机的.bashrc
文件:
export ROS_MASTER_URI=http://192.168.0.100:11311
export ROS_HOSTNAME=192.168.0.140
注:
①ROS_MASTER_URI ros主机的 IP 地址
②ROS_HOSTNAME 当前虚拟机的 IP 地址,需要查询本机IP地址后再来填写
③小车的IP已设置为静态IP
④.bashrc
文件里是没有这两句的,需要手动在文件尾添加这两句
1、ros从机程序的运行依赖于ros主机的rosmaster(多机通信的时候,同样只需要一个rosmaster,这个rosmaster必须是由ros主机提供的)
2、ROS_MASTER_URI和ROS_HOSTNAME两个IP地址需要同网段,同网段是指IP地址的前三个数段相同
3、不建议使用localhost,建议使用具体的IP地址(指export ROS_HOSTNAME=192.168.0.140
这句不要写成export ROS_HOSTNAME=hn
,理论上可行,但具体操作会出bug)
4、从机的本机IP地址没设置对,依然可以访问到rosmaster,但不能输入控制信息
5、如果是虚拟机,网络模式需要设置为桥接模式
6、多机通信无法查看/订阅本地不存在的消息数据类型定义的话题