ROS(二) 在多个电脑上运行ROS

一、概述

ROS设计的灵魂就在于其分布式计算。一个well-written的节点不需要考虑在哪台机器上运行,它允许实时分配计算量以最大化的利用系统资源。(有一个特例——驱动节点必须运行在跟硬件设备有物理连接的机器上)。

二、网络配置

假设我们想在两台电脑上分别运行talker / listener,那么首先得配置一下网络。

1、电脑的名称-主机名(hostname):分别在两台电脑上运行$ hostname 就可以看各自的主机名了。你会发现主机名就是命令提示符中@之后的名称。如果嫌名字太长想修改名字怎么做呢?hostname保存在/etc/hostname文件中,只要修改它就可以了。

$ sudo chmod 777 /etc/hostname  //修改权限
$ vim /etc/hostname //如果没有安装vim或者不会使用,可以去查一查
$ sudo chmod 644 /etc/hostname  //再改回去

我把主机名分别改成turtlebot 和turtlebot-big了

2、ip地址:分别在两台电脑上运行$ ip addr 就可以看到ip地址了。这里假设
turtlebot 的ip为 192.168.0.76,
turtlebot-big的ip为192.168.0.45

3、按照http://wiki.ros.org/cn/ROS/Tutorials/MultipleMachines教程,我们现在应该试试连接另一台电脑了,在主机名为turtlebot的电脑上ping另一台电脑,首先我们ping另一台电脑的ip

$ ping 192.168.0.45

如果返回数据,说明两台电脑是可以ping通的,如果不返回数据,说明两台电脑无法连通,那么必须先花时间解决这个问题。

在ping对方的ip可以返回数据的基础上,我们试试ping对方的主机名

$ ping turtlebot-big

提示说unknow host turtlebot-big,那么我们ping自己应该通吧

$ ping turtlebot

也提示提示说unknow host turtlebot。

大概可以想到了是电脑无法解析主机名,也就是无法把hostname和ip对应起来。在主机名为turtlebot的电脑上打开/etc/hosts,添加一行127.0.1.1 turtlebot,再添加一行192.168.0.45 turtlebot-big。在主机名为turtlebot-big的电脑上打开/etc/hosts,添加两行127.0.1.1 turtlebot-big 192.168.0.76 turtlebot 如此一来便可以ping通了。如果你的ip地址是动态获取的,那么可能每次联网时都不一样,注意一下这个问题。

可以把这个电脑上的talker或listenner传到另一台电脑,ubuntu之间传输文件,传目录加上 -r

$ rcp [-r] 要传的文件或目录 目标主机名或ip:目录
$ rcp -r beginner_tutorials/ turltebot-big:/home/hgj

4、进一步检查
可以ping能只能说明在电脑之间可以获取到ICMP包,这还不够,我们要确认可以通过所有端口进行通信,但一共65000个端口,也不能全检测一遍,所以就任意选择几个端口进行测试。
例如,选择1234端口,1024以下的端口需要超级管理员的权限。在turtlebot电脑上netcat -l 1234 在另一台电脑上,netcat turtlebot-big 1234 ,然后再反过来测试。

三、跨机器运行的talker / listener

1、启动master
我们需要选择一台机器运行master,这里我们选turtlebot-big. 启动master的第一步是:

$ ssh turtlebot-big
$ roscore

2、启动listener

$ ssh turtlebot-big
$ export ROS_MASTER_URI=http://turtlebot-big:11311
$ rosrun beginner_tutorials listener.py

3、启动talker
现在我们要在turtlebot机器上启动talker,同样通过配置ROS_MASTER_URI来使用turtloebot-big机器上的master:

$ ssh turtlebot
$ export ROS_MASTER_URI=http://turtlebot-big:11311
$ rosrun beginner_tutorials talker.py

在第二步和第三步如果识别不了beginner_tutorials包的话,就source ~/catkin_ws/devel/setup.bash

如果没有问题的话,就可以看到在机器turtlebot-big正在接收turtlebot机器传过来的消息了。

参考:
http://wiki.ros.org/cn/ROS/Tutorials/MultipleMachines

你可能感兴趣的:(ROS)