• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

ROS分布式多机通讯的配置与实现

人工智能 十啵 2260次浏览 0个评论

ROS是一种分布式软件框架,节点之间通过松耦合的方式进行组合,在很多应用场景下,节点可以运行在不同的计算平台上,通过Topic、Service进行通信。但是ROS中只允许存在一个Master,在多机系统中Master只能运行在一台机器上,其他机器需要通过ssh的方式和Master取得联系。所以在多机ROS系统中需要进行一些配置。   我们以两台计算机为例,介绍分布式多机通信的配置步骤,其中计算机ubuntu作为主机运行Master,计算机shibopi-desktop作为从机运行节点。   我的Ubuntu用的是ubuntu 16.04LTS, shibopi-desktop用的是ubuntu mate16.04,所以下面两者的颜色和界面有所差异。  

设置IP地址

  首先需要确定ROS多机系统中的所有计算机处于同一网络,然后分别在计算机ubuntu、shibopi-desktop上使用ifconfig命令查看计算机的局域网IP地址   为了防止每次开机分配的IP地址变化,这里建议为俩机分配固定IP,一劳永逸,下面我使用的这两个IP是我分配好的。   ubuntu:192.168.8.88   在这里插入图片描述   shibopi-desktop:192.168.8.197   在这里插入图片描述   分别在两台计算机系统的/etc/hosts文件中加入对方的IP地址和对应的计算机名: 再ubuntu上:  

$ sudo gedit /etc/hosts

  打开后添加一行:  

192.168.8.197 shibopi-desktop

  在shibopi-desktop上:  

<span style="font-size: 16px;"><code class="prism language-bash has-numbering">$ <span class="token function">sudo</span> gedit /etc/hosts
</code></span>

  打开后添加一行:  

192.168.8.88 ubuntu

  设置完毕后,分别在两台计算机上使用ping命令测试网络是否连通   ROS分布式多机通讯的配置与实现   在这里插入图片描述   如果双向网络都畅通,就说明底层网络的通信已经没问题,接下来设置ROS相关的环境变量。 因为树莓派3B+的运算能力有限,我会把ros master和图形化工具都在电脑上面运行  

设置ROS_MASTER_URI

  因为系统中只能存在一个Master,所以从机shibopi-desktop需要知道Master的位置。ROS Master的位置可以使用环境变量ROS_MASTER_URI进行定义,在从机shibopi-desktop上使用如下命令设置ROS_MASTER_URI:  

<span style="font-size: 16px;"><code class="prism language-bash has-numbering">$ <span class="token function">export</span> ROS_MASTER_URI<span class="token operator">=</span>http:/ubuntu:11311
</code></span>

  但是以上设置只能在输入的终端中生效,为了让所有打开的终端都能识别,最好使用如下命令将环境变量的设置加入终端的配置文件中。  

<span style="font-size: 16px;"><code class="prism language-bash has-numbering">$ <span class="token keyword">echo</span> <span class="token string">"export ROS_MASTER_URI=http://ubuntu:11311"</span> <span class="token operator">>></span> ~/.bzshrc
</code></span>

多机通信测试

  现在ROS多机系统已经配置完成,下面使用小乌龟例程进行测试。 首先在主机ubuntu上运行小乌龟的仿真器:  

<span style="font-size: 16px;"><code class="prism language-bash has-numbering">$ roscore
$ rosrun turtlesim turtlesim_node
</code></span>

  然后在从机shibopi-desktop上使用“rostopic list”命令查看ROS系统中的话题列表 (下面的arduino话题是我控制小车的)   在这里插入图片描述   可以看到,现在从机已经可以与Master取得联系。在从机shibopi-desktop上发布一只小乌龟的速度控制消息:  

<span style="font-size: 16px;"><code class="prism language-bash has-numbering">$ rostopic pub -r 10 /turtle1/cmd_vel geometry_msgs/Twist <span class="token string">"linear:
x: 0.5
y: 0.0
z: 0.0
angular:
x: 0.0
y: 0.0
z: 0.5"
</span></code></span>

  此时,主机ubuntu中的小乌龟应该就开始移动了,ROS多机系统配置成功。   在实际应用中,可能需要使用两个以上的计算平台,可以使用相同的方法进行配置,主机运行Master,其他从机通过设置ROS_MASTER_URI环境变量确定Master位置即可。   推荐: 为了方便连接我们的树莓派机器人,建议买一块微型路由器,我用的是这一款:GL.iNet 在某宝和某东都能买得到,体积很小巧,可以直接放在机器人上。 当然也可以让树莓派发出热点我们连接,我只是觉得用这个小路由器很方便,可以中继其他wifi,让我们连着它下载东西很方便,树莓派热点的话下载东西很麻烦。   在这里插入图片描述   PS: 编辑时有显示屏像这样很方便:(但是还需要外界外接键盘鼠标)   在这里插入图片描述   不想用显示屏可以看我这篇博客: 使用xrdp远程连接树莓派Ubuntu mate系统   在这里插入图片描述   如果没有屏幕的情况下想直接开机进入桌面:   修改/etc/lightdm 下的lightdm.conf文件 如果没有则自己创建一个 内容为:(name是你电脑的用户名)  

<span style="font-size: 16px;"><code class="prism language-cpp has-numbering">[SeatDefaults]
autologin<span class="token operator">-</span>user<span class="token operator">=</span>name
</code></span>


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明ROS分布式多机通讯的配置与实现
喜欢 (0)

您必须 登录 才能发表评论!

加载中……