要实现多个设备通信,先要使多个设备链接在同一个局域网下,然后通过配置使设备之间能够互相识别。设备无线网卡具有AP模式的情况下(可以通过iwlist
查询),可以配置成Ad-hoc模式和Hotspot模式,实测发现Ad-hoc模式会出现无法连接或搜索不到的问题,因此更倾向于使用热点Hotspot
模式,配置时发现在配置成功后要重启再连接才会生效。在完成两台设备之间的联网后,需要进行以下操作:
1. 修改hosts文件
这一步的目的是为了让两台设备之间能够互相识别,通过以下命令打开hosts
文件:
sudo vim /etc/hosts
并在hosts
文件中添加以下内容(每台设备都要添加):
192.168.1.105 master_hostname #用于打开master的设备
192.168.1.104 device1_hostname #其它设备
192.168.1.103 devuce2_hostname
其中不同设备的192.168.1.105等ip可以通过ifconfig
命令来查看,后面的master_hostname等设备名可以通过hostname
命令来查看。
2. 安装同步包
通过以下命令安装同步包和ssh服务端,有时安装服务端会失败,需要先卸载ssh客户端后重新将两者安装即可。
sudo apt-get install chrony
sudo apt-get install openssh-server
3. 检查是否通信成功
可以先通过ssh
+本设备hostname,再使用ping
+另一设备hostname来判断。例如本设备hostname为miniPC,另一设备hostname为laptop(通过hostname
命令查询得到的),则在本设备使用
ssh miniPC
ping laptop
在另一台设备也使用同样的方法判断是否双边通信已经建立成功。使用ps -e|grep ssh
命令可以查看ssh服务是否启动,若什么都没有出现,则需要使用sudo /etc/init.d/ssh restart
命令来重启服务,然后再使用ps -e|grep ssh
就可以看到有sshd的字样,代表启动成功。ping
另一台设备时若无响应则应检查两台设备之间的网络连接是否正常(是否在同一局域网以及是否都已经更改了hosts
文件)。
4. 启动节点
在以上通信建立完成后,设备之间已经能进行相互通信,仍以miniPC和laptop为例,在用来产生master节点管理器的设备上,通过sudo vim ~/.bashrc
命令在.bashrc
文件中添加以下内容:
export ROS_HOSTNAME=miniPC
export ROS_MASTER_URI=https://miniPC:11311
在另一设备上的.bashrc
文件中添加以下内容:
export ROS_HOSTNAME=laptop
export ROS_MASTER_URI=https://miniPC:11311
.bashrc
文件中加入该命令是在终端启动时执行命令,不需要每次开启一个新终端都要执行一次。
添加成功后在mini PC上运行节点,在laptop中使用rostopic list
可以看到mini PC上的主题,并且可以对其进行订阅、可视化等操作。
参考:
ROS多机器人通信详细讲解,ros机器人讲解
Ubuntu 下建立WiFi热点的方法
ubuntu16.04开起wifi热点