首先,致谢易科(ExBot)和ROSWiki中文社区。
主要有两种类型:局域网和因特网。(2019年4月更新)
通过网页快速了解Linux(Ubuntu)
和ROS机器人操作系统,请参考实验楼在线系统如下:
初级教程可参考:https://www.shiyanlou.com/courses/854 邀请码:U23ERF8H
中级教程可参考:https://www.shiyanlou.com/courses/938 邀请码:U9SVZMKH
重要参考文献:
Running ROS across multiple machines
http://wiki.ros.org/ROS/Tutorials/MultipleMachines
ARM端和PC端ROS通讯
http://www.roswiki.com/read.php?tid=312&fid=9
首先,配置主PC机(master):
修改IP地址等,
$ hostname //可以查看主机名
$ hostname rosxx //临时修改主机名
$ sudo gedit /etc/hosts
在文件中添加PC(listener)地址,如:
192.168.3.201 ros1 //pc1 hostname
192.168.3.202 ros2 //pc2 hostname
具体如下图所示:
然后,修改bashrc
$ gedit ~/.bashrc
在最下端添加:
export ROS_HOSTNAME=RelayBot-CSLG
export ROS_MASTER_URI=http://192.168.3.200:11311
如下图所示:
添加完成后,注销重新登陆一下。
PC-ros1:
ros1类似,具体如下图所示:
PC-ros2:
在ros2配置与ros1类似,不详细上图,配置完成后。
在主PC启动roscore,然后启动openni2,在ros2下,启动rqt_image_view,就可以看到camera视频,
如下图所示。
在主PC或ros1,ros2都可以用rostopic list。
ros2笔记本上有usb摄像头,这里注意格式mjpeg还是yuyv等,在ros2启动usb_cam
在主PC可以看到,如下图所示的结果:
也可以由主机启动节点,控制ros1,ros2的Arduino底盘运动等,这里需要注意所有PC上的node不能重名,
可以远程键盘控制小车运动等。
参考原文:http://wiki.ros.org/ROS/Tutorials/MultipleRemoteMachines
描述:本教程扩展了之前的教程(跨多台机器运行ROS),以包括对远程ROS网络的讨论。该教程侧重于多台计算机通过同一本地网络连接的情况,即它们都共享相同的公共IP地址(参见下面的图2)。这将讨论扩展到远程联网的机器,即通过单独的互联网热点相互连接的机器,或者每台机器都有自己的公共IP地址(见图3)。
本教程介绍了ROS范围之外的问题,例如Internet协议,网络,调制解调器设置,ISP问题等。本节简要介绍这些问题及其重要性的快速回顾。
正如之前的教程中所讨论的,ROS是为分布式计算而设计的,其中许多连接组件(机器人,计算机,移动设备等)如此处所示联网。
图1:ROS网络
由于所有这些组件共享相同的调制解调器(或热点),它们形成本调制解调器的本地网络,因此该网络被称为本地 ROS网络,其中所有连接的组件具有相同的公共IP地址,这是调制解调器的IP地址。在调制解调器处阻止每个远程查询(从Internet)到该网络的任何组件。这是Internet和安全协议的基本特性,可保护本地组件免受黑客攻击和其他威胁。
图2:本地ROS网络
在本地ROS网络中,每个组件都使用其唯一的本地IP地址进行标识(参见图2)。这些是用于在多个本地计算机上运行ROS的IP地址,如上一个教程中所述
在许多机器人应用中,例如室外机器人,需要机器人覆盖大面积区域并与操作员分开。例子包括农业机器人,搜救机器人等。在这些情况下,机器人和操作员可能不共享相同的调制解调器(或互联网热点),而是分别连接到互联网,然后彼此远程连接。此设置称为远程 ROS网络。
图2:远程ROS网络
图2还显示了远程ROS网络的挑战。我们不能再使用本地IP地址(如上一个教程中所建议的)来识别组件,因为每个组件都驻留在单独的本地网络中。此外,我们也不能使用他们的公共IP地址,因为这些IP地址是指他们的调制解调器而不是他们的组件。
例如,如果图2中的笔记本电脑试图使用机器人的公共IP地址联系机器人,则无法这样做,因为该IP地址是指机器人的调制解调器而不是机器人本身,反之亦然。
因此,需要将该连接从调制解调器转发到其内部组件,从而促进ROS 的要求,从而建立成功的远程ROS网络。这带来了对PortForwarding的需求
已经有许多方法来建立远程ROS网络,其中一些包括云机器人,第三方Web解决方案,Android和/或组合。可以在此处找到对这些努力的广泛回顾。本教程重点介绍如何使用PortForwarding作为启用远程ROS网络的工具。PortForwarding比其他方法有其优点和局限性。这些总结如下:
基于云的解决方案通过云传输ROS消息的内容来促进远程ROS网络。这需要双向数据转换,或者rosmsg-webformat-rosmsg桥接每个 rosmsg通过云传输。
一个简单的调用者/监听器应用程序包含很少的rosmsgs,因此它可能需要很少的桥梁,但复杂的户外机器人应用程序可能包含数百甚至数千个rosmsgs,每个rosmsgs都需要通过云传输单个桥。
图4:用于远程ROS网络的PortForwarding与基于云的解决方案
此外,如果对系统进行任何更改或修改(引入新的传感器,修改机器人硬件等),也需要新的桥接器。
端口转发提供了另一种方法,如图4所示,它打开了一个远程ROS-to-ROS连接,可以远程传输应用程序中的所有rosmsgs,无需任何转换或桥接。PF还支持任何未来的系统更改或更新。
不幸的是,Portforwarding的使用有其局限性,但可以管理这些限制:
下一节将详细介绍配置,故障排除和克服为远程ROS网络实施PortForwarding所面临的挑战所需的步骤。
按给定顺序处理以下步骤非常重要:ISP =>调制解调器=>操作系统=> ROS =>动态IP。后续步骤中的某些设置取决于先前步骤的成功实施。对于某些人来说,以下步骤可能听起来微不足道/多余,但为了获得最佳效果,建议您按照此处的建议执行操作。以下部分显示配置/故障排除步骤的概要/摘要。有关屏幕截图和说明的详细逐行步骤,请参阅随附的文章。(此后,这将被称为“论文”)
配置步骤:
可选(但建议):获取调制解调器的固定公共IP地址。
验证步骤(验证您的网络上是否允许PF ):
在此阶段,您的ISP启用/允许Portforwarding,接下来我们需要配置调制解调器,以便允许远程查询转发到您的机器人(或ROS网络中的其他组件,见图1和图3)
配置步骤:
在您的浏览器/应用程序上,登录您的调制解调器,导航到防火墙设置=>启用端口转发,DMZ和其他过滤设置
可选(但建议):设置本地IP地址和端口范围(有关详细信息,请参阅“纸张”)
图5:PortForwarding的调制解调器配置
验证步骤(验证您的调制解调器/路由器是否成功允许PF):
在浏览器上,打开PortChecker网站并检查所选portNumber的状态
在此阶段,您的ISP已允许/启用Portforwarding,并且您的调制解调器/路由器已正确配置为将查询转发到您的计算机。接下来,我们需要配置您的系统,以便根据ROS 网络要求识别远程ROS网络的所有成员并与之交互(参见图1和图3)。对远程ROS网络的每个成员(机器人,笔记本电脑等)进行以下步骤。
现在,让我们假设所有公共/本地IP地址都是固定的。固定的公共IP可以由ISP授予,固定的本地IP在调制解调器的主页中定义/保留。动态IP将在稍后介绍。
配置步骤:
在hosts文件中,定义ROS网络中所有组件的所有公共/本地IP地址和主机名。
可选(但建议):定义尽可能多的定义,无论是本地/远程网络,还是固定/移动调制解调器等(参见图6)
图6:多个网络配置的主机定义
验证步骤(验证主机是否为PF正确定义):
要验证主机名和IP地址是否已正确配置,我们将使用三个测试; Ping测试,SSH测试和netcat测试。选择这些测试来验证ROS网络要求是否满足,即:1)每个成员可以通过其IP 公共地址(Ping)识别网络中的所有其他成员,2)每个成员可以访问网络中的其他成员( SSH),以及3)每个成员可以充当网络中的服务器和/或客户端(netcat)。
Ping测试
SSH测试
netcat测试
在此阶段,您的ISP已启用/允许PF,您的调制解调器/路由器已正确配置,并且您的网络的每个成员都已配置为通过PortForwarding远程识别并与网络的所有其他成员进行交互。接下来,我们需要在每台机器中配置ROS以方便远程ROS nework。之前的教程从这一点开始。配置步骤:
在网络的ROSmaster成员中,打开终端...
运行此命令:export ROS_MASTER_URI = ROSmaster_local_IP:11311(将ROSmaster_local_IP替换为ROSmaster机器的本地 IP地址)
运行此命令:export ROS_MASTER_URI = ROSmaster_public_IP:11311(将ROSmaster_public_IP替换为ROSmaster计算机的公共 IP地址)
现在,远程网络中的每台机器都知道哪台机器是ROSmaster,这是ROS网络要求的另一个要求。
验证步骤:
再一次,将进行三次测试以验证所有配置是否正确,并且再一次,这些测试将在远程ROS网络的每个成员上运行。
最小网络测试(验证ROSmaster是否被大家认可)
至于每个成员都可以识别ROSmaster,在确保所有先前的STEPS成功后,转到ROSmaster机器,并运行:roscore
在网络的任何成员中,打开终端并运行:rostopic列表
讲话者/听者测试(验证所有成员可以充当服务器/客户端)
机器人交互测试(用实际机器人验证)
如果到目前为止一切正常,那么恭喜,远程ROS网络正在通过PortForwarding运行!接下来,您需要通过使用真实机器人进行测试来进一步验证它。以Turtlebot的互动为例。
某些ISP可能无法向订户提供固定的公共IP。相反,它们会为其IP提供一系列值,例如173.17.XXX.XXX,其中XXX的范围可以从000到255.这显然会使上面讨论的设置和配置步骤复杂化,因为步骤2到4需要每次更改IP地址时都会重新访问。解决方案是通过使用环境脚本和云解决方案(具有讽刺意味!)自动执行此步骤,如图7所示。
图7:自动更新IP以克服动态IP地址
当前的IP定义(类似于hosts文件中的定义)将存储在云存储设施中,例如Dropbox或其他。每个成员都可以访问该文件,并可以读取/写入该文件。ROSmaster中的环境脚本将检查当前的IP值并通过网络自动更新配置。自治程度可由用户定义。
配置步骤(自动更新IP地址)
实际的脚本和进一步的讨论可以在论文(及其随附的Github页面)中找到,以下是自动更新算法和逻辑。
将IP地址与存储在云中hosts文件中的值进行比较。
更新主机值
可以通过tweeking脚本(以及注释/取消注释某些特定行)来定义Autonomy的程度(完全自主或用户验证)