ROS(二) 在多个电脑上运行ROS
来源:互联网 发布:广州大学网络教学平台 编辑:程序博客网 时间:2024/06/06 15:38
一、概述
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(二) 在多个电脑上运行ROS
- ROS下多个kinect在一台电脑上同时运行
- ROS在多机器人上的运行
- ros 多个电脑通信
- ROS多机通信/在多台机器上使用ROS系统/多台电脑使用同一个主节点ROS master/ROS多机ssh通信
- ROS教程(二十二):ROS在多机器人上的使用
- Ubuntu 16 ORB_SLAM2使用KinectV2在ROS上运行总结
- ROS学习(二):在ubuntu 16.04安装ROS Kinetic
- 虚拟机上运行ROS 问题及其解决方案
- ROS多个工作空间
- Ros(二)ROS基础概念
- 在多台PC上进行ROS通讯-学习笔记
- 在多台PC上进行ROS通讯-学习笔记
- 在ROS中添加多个机器人模型
- 在ROS中添加多个机器人模型
- 在ROS indigo下运行ORB-SLAM2
- 在ROS中运行Hello world!
- ROS 多台电脑之间进行通信
- 一步步编写跨平台串口调试助手
- struct utname结构体使用
- Java中对象序列化与反序列化
- 用python写spark代码
- CentOS下MySQL忘记root密码解决方法【转载】
- ROS(二) 在多个电脑上运行ROS
- C++ 格式化输出
- iOS首次启动app定位调整,“始终”--> “使用应用程序期间”
- word 无法启动转换器wps32修复工具
- MySQL5.6新特性之crash-safe
- 类的构造函数(一)
- ios字符串替换
- android的消息处理机制(图+源码分析)——Looper,Handler,Message
- android格式化手机号的功能