ROS设计的灵魂就在于其分布式计算。一个well-written的节点不需要考虑在哪台机器上运行,它允许实
时分配计算量以最大化的利用系统资源。(有一个特例——驱动节点必须运行在跟硬件设备有物理连接的机器上)。在多个机器人上使用ROS是很简单的一件事,
你只需要记住一下几点:
- 你只需要一个master,只要在一个机器上运行它就可以了。
-
所有节点都必须通过配置 ROS_MASTER_URI连接到同一个master。
-
任意两台机器间任意两端口都必须要有完整的、双向连接的网络。(参考ROS/NetworkSetup).
-
每台机器都必须向其他机器广播其能够解析的名字。(参考 ROS/NetworkSetup).
下面开始介绍2台turtlebot如何相互通信:
一,准备工作
1,准备2台安装了ubuntu+ROS平台的笔记本或者台式机
2, 一个路由器
3,turtlebot底盘
二、设置ubuntu
将2台笔记本中ubuntu的网络适配器,改成桥接模式(必须先安装好ubuntu虚拟机),这样确保两个ROS系统同在一个网段中(同在局域网中),搭建好局域网。将其中一台作为主机(可以看做服务器),另一台作为从机(客户端)。
三、通信搭建
为了使主机(服务器)和从机(客户端)能够相互通信,先配置好IP地址,是他们能够在局域网中相互通信。
首先,在 terminal中使用命令:ifconfig
确定两台笔记本的IP,一般会出现以下内容:
http://s2/mw690/003AldHwzy6K0sQGVa1c1&690
就可以在eth0看到
笔记本的IP为:192.168.1.102(这是单个网卡,如果多个网卡的话,选取其中一个IP地址进行通信就可以)。假设主机的IP是192.168.1.102
,从机的IP也是通过以上方式查看,假设从机IP地址为192.168.1.103 ,那么我们就可以进行配置了,配置教程官网也给出,其实并不需要那么复杂。对于初学者来说,一下配置和运行测试就可以了。
1,首先在主机和从机上输入一下命令:
sudo gedit ~/.bashrc
2, 然后在主机的bashrc 文件最后加入一下内容(主机):
export ROS_MASTER_URI=http://192.168.1.102:11311
export ROS_IP=192.168.1.102
这里解释一下:ROS_MASTER_URI是主机IP
,ROS_IP是自己的IP。也就是如果是在当做主机(服务的)的笔记本的bashrc中加,那么ROS_MASTER_URI和ROS_IP的IP地址都是一样的,就是以上内容;如果是在当做从机的笔记本中的bashrc中加,ROS_MASTER_URI是主机IP
,ROS_IP是自己的IP,从机的加入内容如下:
export ROS_MASTER_URI=http://192.168.1.102:11311
export ROS_IP=192.168.1.103
这样保存好,在当做主机(服务器)的笔记本中启动
roscore,如果启动成功,就配置成功了,如果失败,则检查以上步骤是否配置失败。
四、测试
1,在主机中启动roscore,然后启动listener节点:
rosrun rospy_tutorials
listener.py
2,在从机中,直接启动talker节点:
rosrun rospy_tutorials talker.py
现在你可以看到主机上的listener正在接收来自从机器talker发布的消息:
http://s8/mw690/003AldHwzy6K0ulrEAT47&690
http://s4/mw690/003AldHwzy6K0ulU9V1c3&690
如果出现错误,可能还是配置问题,最好是ping一下两个笔记本的IP地址。
2.测试
从机运行
rostopic pub -r10 /hello std_msgs/String "hello"
主机运行
rostopic echo /hello
http://s10/mw690/003AldHwgy6K1uYsalXd9&690
对于如果多台机器通信问题,如果超过3台通信是否采用这种方式可行,这个我没有测试并不知道,我想应该是没有什么问题的。
最好特别感谢佘学长的讲解和指导,如果大家有更多问题,可以关注一下佘学长的网站。
----------------------------------------------------------------
欢迎大家转载我的文章。
转载请注明:转自听雨轩_Mrfu
博客地址是:http://blog.sina.com.cn/u/3285404150