由于在我们使用ROS进行机器人开发的时候,比如,调试智能车,硬件资源有限或者不能直接进行开发、计算的时候,我们常常会进行主从机配置。
节点可以运行在不同的计算平台上,但是ROS中 只允许存在一个Master ,在多机系统中Master只能运行在一台机器上,其他机器需要通过ssh的方式和Master取得联系。
以两台计算机为例,介绍分布式多机通信的配置步骤:( 主机:ucar_mini,从机:xiaolong-Inspiron-5580 )
一、设置IP地址
1.首先需要确定ROS多机系统中的所有计算机处于同一网络。
ifconfig
查看主机地址:
ifconfig
查看从机地址:
2.在主机系统的/etc
目录下hosts文件中加入从机的IP地址和对应的计算机名:
在从机系统的/etc
目录下hosts文件中加入主机的IP地址和对应的计算机名:
3.设置完毕后,分别在两台计算机上使用ping命令测试网络是否连通。
下图表示双向网络都畅通,说明底层网络的通信已经没问题。(ping后面可以加IP也可以加名字)
二、设置ROS_MASTER_URI
因为系统中只能存在一个Master,所以从机需要知道Master的位置。
在从机的.bashrc
隐藏文件(ctrl+h打开
)中添加如下内容:
ROS_HOSTNAME添加的是从机地址;ROS_MASTER_URI添加的是主机地址。
三、多机通信测试
1.我们可以通过ssh切换到主机终端,实现在从机上对主机的控制。
2.在主机终端启动master和小海龟节点,在从机终端启动键盘节点进行控制。(这个时候可能会发现数据传输的比较慢或者受计算机性能的影响而使控制效果比较差)
四、拓展
当我们的小车主板计算资源不是很好的时候,我们就可以使用这个ssh远程控制,从而在主机上启动master,而在从机上进行各种计算,rviz可视化等(当然我们的多机通信不局限于两台计算机设备)。同时,我们也可以通过NFS和VNC进行远程调试。
本文内容参考:
《ROS机器人开发实践》——胡春旭
如有错误或者不足之处,欢迎大家留言指正!