ROS 教程之 network:多台计算机之间网络通信(2)
在上一篇文章中我们已经搭建好了两台计算机间通信的条件,但是每次都需要在新的终端里输入一长串export ROS_MASTER_URI之类的。实际弄起来的时候也不方便,因此在本文中,我们更进一步,简化两台计算机通信的操作。并通过两个例子,让你感受感受ROS这种分布式架构和网络通信的强大,使得你的两台计算机就像一台计算机一样处理程序。通过网络通信,所有的节点你可以运行在任意一台电脑上。
一、修改.bashrc文件
修改这个文件的目的是为了配置ROS的环境变量,ROS必须知道有哪些机器在运行,因此的知道每一台机器的名字,这可以通过设置ROS_HOSTNAME环境变量为每一台机器本身的主机名来完成。另外,必须给ROS提供master节点的URI,在上一章中我们也看到了,各个节点都是通过这个URI指向master,也就是指向运行roscore的那个节点。
在两台电脑上都使用下面的命令来编辑.bashrc文件:
gedit ~/.bashrc
在台式机这边在bashrc文件的最后添加:
export ROS_HOSTNAME=desktop_hostname
export ROS_MASTER_URI=http://laptop_hostname:11311
在笔记本那边,最后添加:
export ROS_HOSTNAME=laptop_hostname
export ROS_MASTER_URI=http://laptop_hostname:11311
注意:我们这里的添加方式里面ROS_MASTER_URI都是指向的笔记本的主机名,说明是在笔记本上运行roscore.
二、开始测试网络通信了 -- enjoy time!
下面我们来一个简单的遥控程序,笔记本上发出控制指令遥控台式机上的一个小渔龟:
1.首先在我们的笔记本上,也就是移动机器人那一端开启roscore
2.然后在台式机上启动小渔龟的仿真节点:
rosrun turtlesim turtlesim_node
3.然后在笔记本上新开一个终端,遥控小渔龟:
rosrun turtlesim draw_square
这时候你就可以看到台式机上的小渔龟正在走正方形了。
当然我们也可以试试《Ros by Example 1》的move_base例程,在台式机上用rviz进行观察:
在笔记本上:
运行 roscore
然后新开一个终端输入:
roslaunch rbx1_bringup fake_turtlebot.launch
在笔记本上再新开一个终端输入:
roslaunch rbx1_nav fake_move_base_blank_map.launch
在台式机上运行Rviz:
rosrun rviz rviz -d `rospack find rbx1_nav`/nav.rviz
然后在笔记本一端进行move_base控制:
rosrun rbx1_nav move_base_square.py
你将看到台式机上的RVIZ正在监控:
总结:至此,ROS的networking系列完成了,通过network,使得两台计算机运行着不同的ROS节点,两个计算机相当于一个计算机了。通常在使用过程中,把RViz这种特耗CPU的东西放到了台式机上,减轻了机载计算机的负担。LZ在自己的实验室项目中是在台式机上运行rviz,指定移动机器人的移动目标点,机载笔记本上运行着定位和路径规划的主要算法。
文章为原创,
请注重博主劳动成果,
错误请指出,转载请注明。
--白巧克力
reference:
1.ROS NETWORKING : a good tutorial
ROS 教程之 network:多台计算机之间网络通信(2)的更多相关文章
- 基于WSAAsyncSelect模型的两台计算机之间的通信
任务目标 编写Win32程序模拟实现基于WSAAsyncSelect模型的两台计算机之间的通信,要求编程实现服务器端与客户端之间双向数据传递.客户端向服务器端发送"请输出从1到1000内所有 ...
- 多台计算机之间的ssh无密钥登录
在很多分布式系统中,我们最常遇到的一个问题是,需要在服务器集群上保证多台机器之间的SSH无密钥登录.以Hadoop为例,为了方便,我们需要在master和slaves之间配置密钥登录,这样我们启动Ha ...
- 集群中配置多台计算机之间ssh无密码登录的一种简便方法
当我们在配置多台计算,使之可以相互使用无密码登录-ssh,之前都是一台一台的配置,现在一台A上添加B,然后在另一台B上再次添加A,这样使得 authorized_keys中的内容相同,但时并不是完全相 ...
- ROS 教程之 navigation :在 catkin 环境下创建costmap layer plugin
在做机器人导航的时候,肯定见到过global_costmap和local_costmap.global_costmap是为了全局路径规划服务的,如从这个房间到那个房间该怎么走.local_costma ...
- ROS 教程之 vision : 用各种摄像头获取图像
可能有很多人想在ROS下学习视觉,先用摄像头获取图像,再用opencv做相应算法处理,可是ROS下图像的采集可不像平常的read一下那么简单,需要借助外部package的使用.而摄像头即可以用笔记本自 ...
- Chrome教程之NetWork面板分析网络请求
官方文档:https://developers.google.com/web/tools/chrome-devtools/network/ 最近打算写一写Chrome教程文档,不知道大家最感兴趣的是什 ...
- Fiddldr 教程之:HTTP协议详解(转)
原文地址:http://www.cnblogs.com/TankXiao/archive/2012/02/13/2342672.html HTTP协议详解 当今web程序的开发技术真是百家争鸣,ASP ...
- DNS域欺骗攻击详细教程之Linux篇
.DNS域欺骗攻击原理 DNS欺骗即域名信息欺骗是最常见的DNS安全问题.当一 个DNS服务器掉入陷阱,使用了来自一个恶意DNS服务器的错误信息,那么该DNS服务器就被欺骗了.DNS欺骗会使那些易受攻 ...
- Wireshark数据抓包教程之Wireshark的基础知识
Wireshark数据抓包教程之Wireshark的基础知识 Wireshark的基础知识 在这个网络信息时代里,计算机安全始终是一个让人揪心的问题,网络安全则有过之而无不及.Wireshark作为国 ...
随机推荐
- Python max() 方法
描述 Python max() 方法返回字符串中最大的字母(26个字母中最大的是Z). 语法 max() 方法语法: max(S) 参数 S -- 字符串. 返回值 返回字符串中最大的字母. 实例 以 ...
- linux查看与开启sshd服务
1.首先通过物理终端进入到linux上,手工检查ssh发现没运行/etc/init.d/sshd statussshd is stopped 手工启动服务,发现报告权限错误./etc/init.d/s ...
- Apache 隐藏 index.php,如将 tp5.com/index.php/hello/123 变成 tp5.com/hello/123
以Apache为例,需要在index.php入口文件的同级添加.htaccess文件,内容如下: <IfModule mod_rewrite.c> Options +Follo ...
- Android开发12——Andorid中操作数据库的insert的两种方法以及nullColumnHack
一.发现问题 先看两种方法插入数据 public void save(Person p){ SQLiteDatabase db = dbHelper.getWritableDatabase(); db ...
- Extjs DateTime 日期时间选择控件 (非点击日期强制选择) 支持4.0以上
Extjs的日期控件,仅仅能支持到日期选择,对时间的选择并不完好.而网上下载的控件,都是基于Ext.form.dateField 开发.在选中日期后自己主动选择,并隐藏此选择窗体. 在经过一番改造后, ...
- [ci] jenkins的Timestamper插件-让日志显示时间
jenkins的Timestamper插件-让jenkins console带时间戳 安装插件 配置pipline,使用timestamp - 官网有说怎么用: 即用timestamps{} 包裹所有 ...
- 2>/dev/null
2>/dev/null是如果你的命今出错的话,错误报告直接输出到黑洞里不会显示在屏幕上. ls -al 1>list.txt 2>list.err #将显示的数据,正确的输出到lis ...
- Freemarker-2.3.22 Demo - No04_条件判断
package No04_条件判断; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStream ...
- VC++ 进度条的使用
进度条控件封装在CProcessCtrl类中 1.SetRange和SetRange32方法来设置进度条显示范围. 语法格式: void SetRange(short nLower, short nU ...
- LeetCode: Integer to Roman 解题报告
Integer to Roman Given an integer, convert it to a roman numeral. Input is guaranteed to be within t ...