目录:
- 前言
- 硬件连接
- 组网配置
- 1、获取hostname和IP
- 2、在主机添加从机的host信息
- 3、在从机1中配置
- 4、在从机2中配置
- 测试
- test1 话题订阅
- test2 rqt_plot可视化传感器信息
- 最后
前言
实验室最近购买了两台小电脑,一台是x86的miniPC,另外一台是Nvidia的Orin,因为工位上不想摆那么多的鼠标键盘以及也没地方放那么多的显示器,所以很多时候都是通过远程登陆的方式进行访问的。远程登陆有一个问题,如果只是把小电脑当服务器使用那自然是没问题,但是很多时候我们需要在ROS平台上调试我们的其他设备,这个时候就需要用ROS分布式组网了。分布式组网非常简单,我们只需要配置一下即可,下面记录一下配置过程
环境说明:我自己的电脑使用的是window中的wsl,miniPC和NV Orin上运行的都是Ubuntu20.04
wsl: Ubuntu 20.04,IP: 192.168.1.233
miniPC: Ubuntu 20.04,IP:192.168.1.5
Nvidia Orin: Ubuntu 20.04 IP:192.168.1.7
硬件连接
首先通过一个网关,把这三台电脑组成一个局域网。这个非常简单,把网线接到网关上即可,然后通过ifconfig
命令读取每个电脑上获取的ip地址。
另外,如果不知道怎么把WSL的地址暴露在局域网中的可以参考我博客中的上一篇文章。
如果成功连接之后,我们直接在我们的终端远程登陆我们其他两台小电脑,后面方便进行ROS组网配置
组网配置
我们这里是把x86miniPC设置为ROS中的Master节点,我的主机以及Nv Orin都设置成从机。
注意:之前我这边试过直接通过ip来解析从机,没有在主机中配置从机的host信息,发现这样会导致在从机中虽然可以通过rostopic list
看到主机发布的话题,但是rostopic echo
还有rviz
都没有办法接收不到主机中话题的消息。所以下面还是按部就班来进行配置
1、获取hostname和IP
首先通过hostname
命令获取各个计算机的名字,以及各个计算机在局域网中的IP地址
2、在主机添加从机的host信息
系统会先检查自己的Hosts文件中是否有这个地址映射关系,如果有则调用这个IP地址映射,如果没有再向已知的DNS服务器提出域名解析。也就是说Hosts的请求级别比DNS高。
在主机中的/etc/hosts
文件中填入如下信息:这里包含了每个机器的IP和hostname
3、在从机1中配置
同样地,先在/etc/hosts
文件中加入主机的host信息,分别添加自己的IP和hostname、ros主机的IP和hostname、另外一台从机的IP和hostname
然后在从机中环境变量设置ROS master地址及本机hostname,加入如下内容
$ sudo vim ~/.zshrc
4、在从机2中配置
同样地,先在/etc/hosts
文件中加入主机的host信息,分别添加自己的IP和hostname、ros主机的IP和hostname、另外一台从机的IP和hostname
然后在从机中环境变量设置ROS master地址及本机hostname,加入如下内容
$ sudo vim ~/.zshrc
到此,组网配置就完成了,下面进行实验看看是否已经起效
测试
test1 话题订阅
首先,我们在ROS master主机启动roscore
然后我们在从机2中播放一个数据集
最后我们在从机1中看看能否收到从机1中播放的话题消息
可以看到在从机2中播放的话题消息中从机1中通过rostopic list
是可以探查到的,下面我们通过rostopic echo
来看看是否能够接收到话题的消息,这里我们读取一下IMU的数据
可以看到话题中的消息也可以正常读取,说明我们的组网已经成功。整个终端操作界面如下:
test2 rqt_plot可视化传感器信息
我们在我们的从机1中插入一个陀螺仪,然后把陀螺仪的节点启动起来,然后在主机中订阅消息,并且在从机这边启动一个rqt_plot
来可视化一下陀螺仪的数据曲线
首先在我们的ros从机中启动IMU的串口节点,读取IMU模块的数据并且发布出来
启动完成之后,我们在ros主机中看看是否已经有相关的话题
可以看到,在主机端这里是可以看到IMU节点已经启动成功了,下面我在自己电脑这个从机2端,启动一个rqt_plot
来可视化一下IMU的数据
可以看到rqt_plot
读取数据也是没有问题的,后面我们就可以愉快地调试了。整个终端控制如下:
最后
可以看到,ROS平台真的非常方便,只需要几句话就可以把组网完成,后面我们可以基于这个组网实现多机器人SLAM系统!