我是靠谱客的博主 爱撒娇钢铁侠,最近开发中收集的这篇文章主要介绍通过ROS进行多机协同控制,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

远程通讯的建立

ros 本身就是一个分布式节点通讯架构,使节点之间进行信息通讯是其重要的作用。一般来说,我们都是在一个系统里进行ros系统的运行通讯的,其实一直这么做就有点让ros 的分布式通讯机制显得格局小了。其实ROS的这种分布式通讯机制是可以衍衍生到整个局域网的,处在同一个局域网中的设备都能进行通讯。下面就是对ros的多机通讯测试的说明:

在做这个之前,需要了解一下ROS的几个通讯配置,即ROS_MASTER_URIROS_IP

  • URI 是什么,因为我不是做网络通讯的,讲不出多么正确的定义,知道它是个标识就行了,即身份标识。
  • ROS_MASTER_URI 是 ROS 启动 roscore 时的地址,就是 master 的 地址。
  • ROS_IP 为本地的 ip 地址

而这个两者的意义或者作用在哪?——通讯上,更准确的是 远程通讯

  • 有拉回到本片文章所说的 同于局域网张同时协同控制多个设备,控制的想法就是 利用电脑(作为ros master 的运行者)作为主机,而处在局域网中的 其他 ros 机器人(比如A 、B 、C 等)作为从机机器人。
  • 此时ROS_MASTER_URI的地址就是主机的,即电脑

(1)连接到同一个wifi

  • 提示:两设备连接到同一个wifi后,使用ifconfig 查看两设备的各自 ip地址,最好再使用 ping + ip 方式 相互ping 一下,ping 通的情况下,后面的操作才能成功。

(2)如下方为例:

主机(虚拟机) ip :192.168.1.1
从机(jetson tx2) ip :192.168.1.2

(3)在主机和从机的环境配置文件 ~/.bashrc中添加:
11311 这个是端口号,roscore运行时的默认串口
主机:

export ROS_MASTER_URI=http://192.168.1.1:11311
export ROS_IP=192.168.1.1

从机

export ROS_MASTER_URI=http://192.168.1.1:11311
export ROS_IP=192.168.1.2

就是保证同一个master 地址

如何嫌使用ip麻烦,可以在 /etc/hosts 中声明

sudo gedit /etc/hosts

加入:

192.168.1.2	follow
192.168.1.1	master

中间使用 tab 键间隔,保存后,在使用ip时只需要用后面的名字就好了。

在测试中,我建议还是使用 jetson tx2 作为运行 master 的一方,因为使用了export ROS_MASTER_URI 后roscore的运行会被固定在这个ip上,但是当没有这个ip(也就是没有同一个wifi时),roscore就运行不了。这会给虚拟机独自运行产生不便。

启发

利用以上的方法,在同一局域网中,可以添加多个机器人,让一个机器人作为master运行者,其他只需设定ROS_MASTER_URIROS_IP 就可以实现多机器人系统控制了。

出现的问题

虚拟机的 ubuntu 能够 ping 通 处在同一局域网的 jetson tx2 设备,但是jetson tx2 只能 ping 通虚拟机所在主机window下的ip,但是ping 不通虚拟机的ip,从而导致了在进行ros通讯测试时,虚拟机只能作为一个订阅者接收到jetson tx2 作为发布者发送的消息,而虚拟机作为发布者时,jetson tx2作为订阅者却什么都接收不到。
通俗的讲,在同一局域网中,虚拟机找得到jetson tx2,但是jetson tx2找不到虚拟机
已经排除问题:
(1)windows的防火墙已关闭,ubuntu 的防护墙也关闭
(2)虚拟机使用net模式

解决

最终在csdn中提问得到了回答,虚拟机需要设置成桥接模式才行。

最后

以上就是爱撒娇钢铁侠为你收集整理的通过ROS进行多机协同控制的全部内容,希望文章能够帮你解决通过ROS进行多机协同控制所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部