ROS是一个分布式的计算环境。一个正在运行的ROS可以在多个机器人之间分布成几十甚至上百个节点。取决于系统的配置方式,任何节点可能需要随时与任何其他节点进行通信,为实现使用同一个master控制多台机器人上的ROS节点,多台机器之间实现通信需要满足以下几点网络配置要求:
1.机器之间的所有端口都能实现双向连接;
2.每台机器都必须向其他机器广播其能够解析的名字;
3.所有节点都必须通过配置 ROS_MASTER_URI连接到同一个master。

根据以上的三点要求进行如下设置,也算是对所学的知识进行总结。记录一下在实现两个ROS操作系统之间的通信,一台是Ubuntu18.04-- melodic版的ROS操作系统,另一台是Ubuntu16.04–kinetic版
以下操作需在系统联网的情况下进行:

一、绑定ip和主机名

首先要求主从机连接同一个局域网,然后分别打开自己终端获得IP地址和主机名。

1.1获取ip地址和主机名

终端输入ifconfig查看IP地址;输入hostname查看主机名。

ifconfig


其中一台主机IP地址如上图所示是:192.168.232.130 ;另一台为 172.21.144.200

hostname


主机名即@后面的字符。

1.2绑定过程中的报错

未安装vim导致找不到该命令,输入以下命令安装即可。

sudo apt-get install vim

1.3进行绑定

修改hosts文件的目的是将两电脑的ip和主机名绑定,两台电脑之间通过hostname就能找到对方。没有这一步的时候,你直接去ping 对方主机名时,结果是无法解析对方主机名。
分别再两台电脑的hosts文件中,从第三行开始插入刚刚查到的对方电脑的ip地址和主机名hostname,注意中间用按tap隔开
进入hosts文件的命令:

vim /etc/hosts

或是

sudo gedit /etc/hosts

后面就要执行vim相关命令输入ip地址和主机名hostname,然后保存退出。

1.4重启网络

sudo /etc/init.d/networking restart

二、下载包和解决报错

2.1输入以下命令进行下载

两台电脑都要下载以下两个包。
第一个是下载同步包;第二个是下载ssh服务器。

sudo apt-get install chrony
sudo apt-get install openssh-server

2.2安装出现报错


原因:当运行apt相关命令时,系统将会自动创建几个自锁文件,用于防止其他进程占用本文件使用的数据。根据报错的提示可知,在执行该下载指令时,可能存在其他进程也在使用相关的数据,而当一个apt-get命令没有终止时,自锁文件就还存在,这将会阻止其他命令运行apt-get相关操作,因此执行下面的删除自锁文件命令,才能解决该问题。

sudo rm /var/cache/apt/archives/lock
sudo rm /var/lib/dpkg/lock

2.3查看ssh是否启动

在两台电脑的终端输入以下命令检查是否启动启动了ssh

ps -e|grep ssh

看到sshd那说明ssh-server已经启动了,没启动就输入下面命令进行重启。

 sudo /etc/init.d/ssh restart

三、开始通信并检测

3.1检测通信

设置完成后,在两台电脑上分别使用ping命令测试网络是否联通。
其中ping是用来检测本机与网络中另一主机之间网络是否联通的命令,如果两台主机之间ping不通,则表明这两台主机不能建立起连接。

ping 172.21.144.200
ping 192.168.232.130

出现如下说明网络通了。

或是在各自终端输入对方的电脑名,例如zjc-virtual-machine来ping一下spark。

ping spark
ping zjc-virtual-machine


两台电脑上都出现了上面这样的数据传输,说明双向网络能正常联通,底层网络的通信就可以实现。

当然,如果碰到输入ping hostname而一直无法相应时,说明没有ping通,检查一下该hostname对应的ip地址是否变动了。

3.2设置ROS_MASTER_URI

1.从机上设置
在两台电脑中选择其中一台作为主机器人,并设置一个ROS master,从机器人上需要对该Master进行定义才能找到它的位置。因此在从机上使用如下命令设置ROS_MASTER_URI。

export ROS_MASTER_URI=http://zjc-virtual-machine:11311

本次以台式机作为主机。为了实现所有终端都能识别Master的位置,最好使用如下命令在配置文件中添加环境变量。配置文件位于主文件的下,名为“.bashrc”打开该文件,在最后输入以下两行环境变量。

export ROS_HOSTNAME=spark #从机IP或名称
export ROS_MASTER_URI=http://zjc-virtual-machine:11311 #主机ip或名称

2.主机上设置

export ROS_HOSTNAME=zjc-virtual-machine #主机IP或名称
export ROS_MASTER_URI=http://zjc-virtual-machine:11311 #主机ip或名称

四、多机器人通信测试

4.1用小乌龟历程进行测试

上面的步骤都设置完成后,下面使用小乌龟历程进行测试。
首先在主机上运行小乌龟的仿真器。

roscore
rosrun turtlesim turtlesim_nod

然后在从机上使用“rostopic list”命令查看ROS系统中的话题列表。

rostopic list

从机上打开小乌龟键盘控制节点,然后控制小乌龟运动。

rosrun turtlesim turtle_teleop_key

4.2注意事项

注意:机器人在重启后再连接局域网或是其他的热点,注意IP地址的变化,一旦改变就要修改hosts和./bashrc的IP地址,不改变就会出现下面的报错。输入roscore如果出现报错,可以尝试重新启动机器人然后再输入roscore。

续篇:

ROS学习笔记-多机器人通信(2)-从机改回主机
ROS学习笔记-多机器人通信(3)报错(ssh: connect to host hostname port 22: No route to host)解决后远程访问终于实现。
ROS学习笔记-多机器人通信(4)-远程打开rviz
ROS学习笔记-多机器人通信(5)-快速实现台式机和Spark机器人之间的通信

references:

感谢以下参考博客的分享。
1.ROS多机器人通信
2.Ubuntu中Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend)问题的解决
3.Ubuntu中E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用) E: 无法锁定管理目录(/var/lib/dpkg/),是否有其他进程正占用它?
4.ROS 教程之 network:多台计算机之间网络通信(1)
5.Ubuntu下vim快捷命令
6.ssh用法及命令
7.ROS远程控制(PC机+TX2进行ROS远程通讯)
8.Ubuntu环境下SSH的安装及使用
9.ROS在多机器人上的使用

ROS学习笔记-多机器人通信(1)-实现两台机器通信相关推荐

  1. ROS学习笔记之——机器人航向角的求解

    最近在做项目的时候,需要测量移动机器人的航向角,为此写下本博文,来作为学习笔记.本博文的主要内容来自于网上的各种资料,并附上参考链接. 目录 四元数 欧拉角 轴角 四元数(Quaternion)的定义 ...

  2. ROS学习笔记(八): ROS通信架构

    ROS学习笔记(八): ROS通信架构 文章目录 01 Node & Master 1.1 Node 1.2 Master 1.3 启动master和node 1.4 rosrun和rosno ...

  3. ROS学习笔记基础2(基础知识和ROS架构)

    ROS学习笔记1(基础知识和ROS架构) 文章目录 ROS学习笔记1(基础知识和ROS架构) 1. 什么是ROS 2. ROS和其他机器人平台有什么不同 3. ROS架构组成 3.1 文件系统级别 3 ...

  4. ROS学习笔记(一)补充篇 参考创客制造

    我将ROS的CPP部分分成7个部分: 1.基础的node param 2.动态调节参数 3.关于TF变换 4.actionlib 5.插件技术 6.movebase 7.nodelet技术 前言 相比 ...

  5. ROS学习笔记六:理解ROS服务和参数

    ROS学习笔记六:理解ROS服务和参数 主要介绍ROS服务和参数,同时使用命令行工具rosservice和rosparam. ROS service service是节点之间互相通信的另一种方式,se ...

  6. ROS学习笔记五:理解ROS topics

    ROS学习笔记五:理解ROS topics 本节主要介绍ROS topics并且使用rostopic和rqt_plot命令行工具. 例子展示 roscore 首先运行roscore系列服务,这是使用R ...

  7. ROS学习笔记四:理解ROS节点

    ROS学习笔记四:理解ROS节点 本节主要介绍ROS图形概念,讨论ROS命令行工具roscore.rosnode和rosrun. 要求 要求已经在Linux系统中安装一个学习用的ros软件包例子: s ...

  8. ROS学习笔记之——robot_localization包

    之前博客已经介绍过robot_pose_ekf功能包以及(extended)kalman滤波的原理< ROS学习笔记之--EKF (Extended Kalman Filter) node 扩展 ...

  9. ROS学习笔记之小乌龟跟随

    ROS学习笔记之小乌龟跟随 说明:整个案例是跟着赵虚左老师的视频和文档资料学习的,特此感谢赵虚左老师和Autolabor官方 文档地址 视频地址 学习案例之前的预备知识:TF坐标变换 大体实现流程: ...

最新文章

  1. 进程线程006 Windows线程切换-线程优先级
  2. VTK:Rendering之Rainbow
  3. 全量复制 增量复制 异步复制
  4. Http 持久连接与 HttpClient 连接池
  5. Python的多行输入与多行输出
  6. (转)十分钟搞定你自己的多图片/文件服务器
  7. 练习:----计算阶乘按钮
  8. 前端Docker教程
  9. YOLO系列详解:YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5
  10. 站群软件-免费站群软件
  11. 智遥工作流软件,转下一步时数据保存解析
  12. pnpm : 无法加载文件 C:\Users\86183\AppData\Roaming\npm\pnpm.ps1,因为在此系统上禁止运行脚本。
  13. Android:方向传感器
  14. Remix 完全本地化部署
  15. 网易云计算机专业课程,网易云课堂推出在线中国大学MOOC课程
  16. 1、zstack协议栈
  17. 北京大学光华管理学院开通CnOpenData试用
  18. PHP 8.0 连接 MS SQL Server
  19. 使用python实现mysql测试数据的准备(大批量导入数据)
  20. 大话设计模式读书笔记

热门文章

  1. Props 的只读性
  2. Spring基础—装配bean(一)
  3. 互联网人养娃行为大赏
  4. java 兔子的生娃问题
  5. SwapIdc高仿小鸟云模板/手机和解决方案页面
  6. BUUCTF:被劫持的神秘礼物
  7. PCB射频电路四大基础特性
  8. python用递归方式实现最大公约数_Python - 最大公约数算法
  9. 清理蓝藻的机器人_蓝藻打捞机 蓝藻打捞设备 蓝藻清除机 绿藻打捞设备 水华清除机...
  10. 做SEO,如何分析竞争对手网站-趣味seo