ROS学习笔记-多机器人通信(1)-实现两台机器通信
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)-实现两台机器通信相关推荐
- ROS学习笔记之——机器人航向角的求解
最近在做项目的时候,需要测量移动机器人的航向角,为此写下本博文,来作为学习笔记.本博文的主要内容来自于网上的各种资料,并附上参考链接. 目录 四元数 欧拉角 轴角 四元数(Quaternion)的定义 ...
- ROS学习笔记(八): ROS通信架构
ROS学习笔记(八): ROS通信架构 文章目录 01 Node & Master 1.1 Node 1.2 Master 1.3 启动master和node 1.4 rosrun和rosno ...
- ROS学习笔记基础2(基础知识和ROS架构)
ROS学习笔记1(基础知识和ROS架构) 文章目录 ROS学习笔记1(基础知识和ROS架构) 1. 什么是ROS 2. ROS和其他机器人平台有什么不同 3. ROS架构组成 3.1 文件系统级别 3 ...
- ROS学习笔记(一)补充篇 参考创客制造
我将ROS的CPP部分分成7个部分: 1.基础的node param 2.动态调节参数 3.关于TF变换 4.actionlib 5.插件技术 6.movebase 7.nodelet技术 前言 相比 ...
- ROS学习笔记六:理解ROS服务和参数
ROS学习笔记六:理解ROS服务和参数 主要介绍ROS服务和参数,同时使用命令行工具rosservice和rosparam. ROS service service是节点之间互相通信的另一种方式,se ...
- ROS学习笔记五:理解ROS topics
ROS学习笔记五:理解ROS topics 本节主要介绍ROS topics并且使用rostopic和rqt_plot命令行工具. 例子展示 roscore 首先运行roscore系列服务,这是使用R ...
- ROS学习笔记四:理解ROS节点
ROS学习笔记四:理解ROS节点 本节主要介绍ROS图形概念,讨论ROS命令行工具roscore.rosnode和rosrun. 要求 要求已经在Linux系统中安装一个学习用的ros软件包例子: s ...
- ROS学习笔记之——robot_localization包
之前博客已经介绍过robot_pose_ekf功能包以及(extended)kalman滤波的原理< ROS学习笔记之--EKF (Extended Kalman Filter) node 扩展 ...
- ROS学习笔记之小乌龟跟随
ROS学习笔记之小乌龟跟随 说明:整个案例是跟着赵虚左老师的视频和文档资料学习的,特此感谢赵虚左老师和Autolabor官方 文档地址 视频地址 学习案例之前的预备知识:TF坐标变换 大体实现流程: ...
最新文章
- 进程线程006 Windows线程切换-线程优先级
- VTK:Rendering之Rainbow
- 全量复制 增量复制 异步复制
- Http 持久连接与 HttpClient 连接池
- Python的多行输入与多行输出
- (转)十分钟搞定你自己的多图片/文件服务器
- 练习:----计算阶乘按钮
- 前端Docker教程
- YOLO系列详解:YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5
- 站群软件-免费站群软件
- 智遥工作流软件,转下一步时数据保存解析
- pnpm : 无法加载文件 C:\Users\86183\AppData\Roaming\npm\pnpm.ps1,因为在此系统上禁止运行脚本。
- Android:方向传感器
- Remix 完全本地化部署
- 网易云计算机专业课程,网易云课堂推出在线中国大学MOOC课程
- 1、zstack协议栈
- 北京大学光华管理学院开通CnOpenData试用
- PHP 8.0 连接 MS SQL Server
- 使用python实现mysql测试数据的准备(大批量导入数据)
- 大话设计模式读书笔记