使用ROS实现多机通讯
ROS的通信机制不仅可以在进程间之间通讯,而且可以在不同设备间进行通讯,只需要简单几句语句,即可实现多电脑之间的Topic共享,远程控制等功能。本文指导如何通过绑定IP和主机名实现主从通讯,包括下载包、网络检测、ROS环境配置和小乌龟历程测试。实现双向通讯
一、绑定IP和主机名
要实现多机通信,首先要求主从电脑连接同一个局域网(WIFI),然后分别打开终端查看对应的IP地址和主机名
1.1 获取IP和主机名
终端输入ifconfig
即可查看IP地址;hostname
查看主机名字。
我使用的主机为ubuntu的虚拟机,从机为nuc13。
1.2 修改hosts文件进行绑定
修改hosts文件的目的是将电脑的IP和主机名绑定,这样两台电脑之间就可以通过hostname找到对方了。如果没有绑定,直接去ping对方主机名是无法解析对方主机名的。分别对两个电脑的/etc/hosts
文件,从第三行开始插入对方电脑的ip地址和主机名hostname.
在电脑A中插入以下加粗的指令
127.0.0.1 localhost
127.0.0.1 [hostname_A]
[IP_A] [hostname_A]
[IP_B] [hostname_B]
在电脑B中插入以下加粗的指令
127.0.0.1 localhost
127.0.0.1 [hostname_B]
[IP_B] [hostname_B]
[IP_A] [hostname_A]
1.3 重启网络
sudo /etc/init.d/networking restart
二、开始通讯并检测
2.1检测通讯
<span style="color:#000000"><code class="language-dos">设置完之后,可以简单的通过<span style="color:#0000ff">ping</span>命令测试网络是否联通。<span style="color:#0000ff">ping</span>是用来检测本机与网络中的另一主机之间网络是否联通。
```
主机侧: <span style="color:#0000ff">ping</span> <span style="color:#880000">192</span>.<span style="color:#880000">168</span>.<span style="color:#880000">31</span>.<span style="color:#880000">171</span> //或者<span style="color:#0000ff">ping</span> isvl-NUC13ANKi7
从机侧: <span style="color:#0000ff">ping</span> <span style="color:#880000">192</span>.<span style="color:#880000">168</span>.<span style="color:#880000">31</span>.<span style="color:#880000">189</span> //或者<span style="color:#0000ff">ping</span> ubuntu
```
</code></span>
ping成功后会出现以下数据传输结果。双向网络能正常联通,则底层网络通信实现
2.2设置ROS_MASTER_URI
在两台电脑中选择其中一台作为主机器人(master),并设置对应的ROS master,在从机上设置ROS_MASTER_URI。
直接在./bashrc配置文件中添加环境变量。
sudo gedit ~/.bashrc
在主机上设置
<span style="color:#000000"><code class="language-bash"><span style="color:#0000ff">export</span> ROS_HOSTNAME=192.169.31.189 <span style="color:#008000"># 主机IP或名称</span>
<span style="color:#0000ff">export</span> ROS_MASTER_URI=http://192.168.31.189:11311 <span style="color:#008000">#主机ip或名称</span>
</code></span>
在从机上设置
<span style="color:#000000"><code class="language-bash"><span style="color:#0000ff">export</span> ROS_HOSTNAME=192.169.31.191 <span style="color:#008000"># 从机IP或名称</span>
<span style="color:#0000ff">export</span> ROS_MASTER_URI=http://192.168.31.189:11311 <span style="color:#008000">#主机ip或名称</span>
</code></span>
source ~/.bashrc
2.3 多机器人通信测试,使用turtlesim小乌龟测试
在主机上运行小乌龟仿真
<span style="color:#000000"><code class="language-undefined">roscorerosrun turtlesim turtlesim_node
</code></span>
在从机上运行键盘控制器,控制主机的小乌龟运动
<span style="color:#000000"><code class="language-undefined">rosrun turtlesim turtle_teleop_key
</code></span>
三、结论
ROS中所谓的主从机,并不是只有主机能控制从机,从机不能控制主机。实际上是一个双向通信的过程,只不过是roscore的位置是在主机上运行的。
注意: 如果网络ping通过了,但是数据没有传输,可能原因是电脑防火墙问题。