ROS1 Noetic主从机通信使用详解

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 这篇文章详细介绍了在ROS1 Noetic环境下配置主从机通信的步骤,包括获取IP和主机名、设置`/etc/hosts`文件、配置ROS环境变量以及测试通信是否成功。同时,文章还提供了一些ROS环境变量的相关知识和参考资料链接。

作者: Herman Ye @Auromix
测试环境: Ubuntu20.04 ROS1 Noetic
更新日期: 2023/12/27
注1: @Auromix 是一个机器人爱好者开源组织。
注2: 由于笔者水平有限,以下内容可能存在事实性错误。

本文分为设置步骤相关知识参考资料三部分。
如果你只希望设置,请参考设置步骤
如果你希望了解相关概念,请参考相关知识
如果你希望深入了解ROS的环境变量设置和多机通讯,请参考参考资料

设置步骤

此时认为机器人是ROS1 Master所在的机器,机器人作为主机,远程PC作为从机,完成主从机通信。

1.获取机器人和PC的IP和HOSTNAME

  • 机器人端

登录到机器人并执行以下步骤:

1.查询机器人IP

hostname -I

2.查询机器人用户名

hostname

此时假设获取到的机器人ip192.168.50.141hostnameherman_robot

  • PC端

登录到PC端并执行以下步骤:

1.查询PC端IP

hostname -I

2.查询PC端用户名

hostname

此时假设获取到的PC端ip192.168.50.168hostnamehermanye

Computer HOSTNAME IP
Robot herman_robot 192.168.50.141
PC hermanye 192.168.50.168

2. 设置机器人

登录到机器人并执行以下步骤:

  • 添加到系统的host
sudo nano /etc/hosts
# Add pc to /etc/hosts
# My PC
192.168.50.168 hermanye
  • 测试host设置
ping hermanye
ping 192.168.50.168
  • 设置ROS环境变量
sudo nano ~/.bashrc
# Add these to ~/.bashrc
# My ROS MASTER
export ROS_MASTER_URI=http://192.168.50.141:11311/
# MY IP
export ROS_IP=192.168.50.141

3. 设置PC端

登录到PC端并执行以下步骤:

  • 添加到系统的host
sudo nano /etc/hosts
# Add robot to /etc/hosts
# My ROBOT
192.168.50.141 herman_robot
  • 测试host设置
ping herman_robot
ping 192.168.50.141
  • 设置ROS环境变量
sudo nano ~/.bashrc
# Add these to ~/.bashrc
# My ROS MASTER
export ROS_MASTER_URI=http://192.168.50.141:11311/
# MY IP
export ROS_IP=192.168.50.168

4.刷新并测试

在Linux系统中,当你修改了/etc/hosts文件后,系统会立即识别这些更改,无需手动刷新。
但你无法强制所有已经运行的程序立即刷新它们的主机名解析结果。如果你需要立即应用/etc/hosts的更改,你可能需要重启相关的程序。

  1. 关闭所有ROS相关的节点

  2. 刷新环境变量

source ~/.bashrc
  1. 测试Topic通讯
    在机器人上启动roscore并运行以下命令:
rosrun turtlesim turtlesim_node

在PC端上运行:

rosrun turtlesim turtle_teleop_key

通过PC端的键盘控制机器人端的Turtlesim,看是否能正常移动。

  1. 测试Service通讯
    在刚才的基础上,在PC端运行:
rosservice call /reset

检查小乌龟是否重置状态回到初始点。

  1. 反向测试
    反之亦然,通过类似的操作来检测机器人到PC端的通信是否正常。

相关知识

查看当前机器的局域网IP地址

hostname -I

查看当前机器的hostname

hostname

/etc/hosts

/etc/hosts是一个操作系统文件,用于将主机名映射到IP地址。在网络请求中,系统首先会检查这个文件,然后才会尝试使用DNS来解析主机名。这个文件可以用于重定向网络请求,或者在没有DNS服务器的情况下设置网络配置。

ROS_MASTER_URI

ROS_MASTER_URI是一个必需的设置,它告诉节点在哪里可以找到ROS1的master。它应该设置为master的XML-RPC URI。当使用localhost时,应该非常小心,因为这可能会导致远程启动的节点出现意外的行为。

export ROS_MASTER_URI=http://hermanye20:11311/

XML-RPC URI

XML-RPC是一个远程过程调用(Remote Procedure Call,RPC)的分布式计算协议,通过XML将调用函数封装,并使用HTTP协议作为传送机制。
XML-RPC URI是一个统一资源标识符,用于定位网络上的资源,特别是在XML-RPC协议中。XML-RPC是一种使用HTTP作为传输协议,XML作为编码方式的远程过程调用协议。

在ROS1中,ROS_MASTER_URI就是一个XML-RPC URI,它告诉节点在哪里可以找到master。例如,一个典型的ROS_MASTER_URI可能是这样的:http://localhost:11311

这个URI中,http是协议,localhost是主机名,11311是端口号。这个URI表示master在本地机器的11311端口上运行。

ROS_IP/ROS_HOSTNAME

ROS_IP和ROS_HOSTNAME是可选的环境变量,用于设置ROS节点或工具的声明网络地址。
这两个选项是互斥的,如果两者都设置了,ROS_HOSTNAME将优先使用。
如果你正在指定一个IP地址,使用ROS_IP,如果你正在指定一个主机名,使用ROS_HOSTNAME。
当一个ROS组件向master或其他组件报告一个URI时,将使用这个值。
只有在你的计算机有多个地址,并需要强制ROS使用特定的一个时,才需要这个设置。
除了’localhost’,它不会影响实际的绑定地址,因为ROS组件绑定到所有可用的网络接口。如果值设置为localhost,ROS组件将只绑定到环回接口。这将阻止远程组件能够与你的本地组件通信。

export ROS_HOSTNAME=hermanye20
export ROS_IP=192.168.50.168

参考资料

https://wiki.ros.org/ROS/EnvironmentVariables
https://wiki.ros.org/ROS/Tutorials/MultipleMachines
https://wiki.ros.org/ROS/NetworkSetup
http://www.faqs.org/docs/securing/chap9sec95.html

目录
相关文章
|
存储 缓存 算法
【ROS】如何让ROS中节点获取数据 III --参数服务器通信及ros常用工具指令介绍
相较于之前的通信模型,参数服务器是最为简单的。在之前的模型中,ROSMASTER都是扮演一个帮二者连接在一起的桥梁。
263 0
|
24天前
|
传感器 存储 Ubuntu
Azure Kinect DK + ROS1 Noetic使用教程
本文是Azure Kinect DK在Ubuntu20.04下配合ROS1 Noetic使用的教程,内容包括一键安装脚本、硬件介绍、安装SDK相关软件包、设置Udev规则、SDK基本测试、DK ROS基本测试,以及存在的一些重要缺陷和相关参考文献。教程详细指导了如何配置和使用Azure Kinect DK,提供了安装步骤和解决常见问题的方法。
25 1
Azure Kinect DK + ROS1 Noetic使用教程
|
24天前
|
Ubuntu Apache
Ubuntu20.04下一键安装ROS1 Noetic
本文提供了一个简化在Ubuntu 20.04系统上安装ROS1 Noetic过程的一键安装脚本工具,该脚本通过优化配置和使用清华大学镜像源,加速了国内用户的下载速度,并自动完成环境设置和依赖安装,同时提供了详细的使用说明和源码。
136 0
Ubuntu20.04下一键安装ROS1 Noetic
|
1月前
ROS 2 - Gazebo 通信入门教程
ROS 2 - Gazebo 通信入门教程
51 0
|
4月前
|
Ubuntu
【ubuntu】ubuntu20.04安装ros noetic(亲测有效,附操作步骤)
【ubuntu】ubuntu20.04安装ros noetic(亲测有效,附操作步骤)
|
4月前
|
机器人 C++ Python
[ROS2] --- 通信接口
[ROS2] --- 通信接口
[ROS2] --- 通信接口
|
消息中间件 算法 机器人
【ROS】如何让ROS中节点实现数据交换Ⅰ--ROS话题通信
比较常用的目前就这一些,之后的命令现用现学就好了
229 1
|
Ubuntu 索引
Ubuntu 安装 ROS 详细教程(以最后一个ROS1版本Noetic为例)
Ubuntu 安装 ROS 详细教程(以最后一个ROS1版本Noetic为例)
1467 0
[ROS通信机制] ---话题通信
[ROS通信机制] ---话题通信
130 0
[ROS通信机制] ---话题通信
|
存储 API 容器
[ROS通信机制] --- 参数服务器
[ROS通信机制] --- 参数服务器
173 0
[ROS通信机制] --- 参数服务器

推荐镜像

更多