ROS分布式部署通信

   

目录

   

一、概念

二、设置 ROS 分布式网络

1. 环境要求

2. 主机(Master)设置 

3. 从机(节点设备)设置

4. 测试是否正常通信

三、进阶启动多从机节点(launch)。


一、概念

        ROS 分布式通信用于在多台计算机之间共享 ROS 话题(topics)、服务(services)和参数(parameters)。这在机器人系统中非常常见,例如:一台主控电脑(主机) 运行计算任务,多个机器人或设备(从机) 负责执行任务。        

        ROS 使用 ROS Master(roscore) 作为中央协调节点,所有 ROS 进程(节点) 需要与 Master 通信:ROS Master 运行在一台主机上,其他设备 通过 ROS_MASTER_URI 连接到 Master,节点之间直接 P2P点对点通信(数据流不经过 Master)

        适用场景:假设我们有一台PC虚拟机和一台树莓派,它们都运行相同的操作系统,并处于同一局域网中。在这种配置下,我们可以将树莓派连接到小车,利用树莓派来控制小车的运动。由于ROS采用基于节点的通信机制,我们可以将主节点运行在PC虚拟机上,而将树莓派上运行小车底盘控制节点。树莓派的主要职责是控制小车的运动,而其他计算任务和算法则由PC虚拟机上的节点来完成。这样,PC虚拟机作为控制中心,负责协调和处理其他任务,树莓派只需专注于执行小车的控制功能,无需承担其他计算任务。这种方式能够高效地分配任务,确保系统的协同工作,从而实现智能控制。

        解决问题:当从机数量增加时,这种分布式架构的优势更加明显。每个从机只需要专注于执行自己的基本任务,例如控制硬件或处理低层任务,而其他复杂的计算任务、算法处理等则由主机来完成。这样,不仅可以减轻从机的负担,还能够将计算密集型的任务集中在主机上,提升整个系统的效率和可扩展性。随着从机数量的增加,主机作为控制中心,能够协调更多的从机,确保系统的高效运行,而不需要为每个从机单独处理算法和计算任务。

        当我们使用第三方插件来进行地图建模或视频采集时,如果这些任务都在树莓派上运行,由于树莓派的硬件资源有限,可能会导致性能下降,甚至无法满足某些任务的需求。为了解决这个问题,我们可以采用分布式架构,将这些资源消耗较大的插件迁移到PC端运行,这样可以避免树莓派的性能瓶颈,确保系统的流畅运行。具体来说,树莓派可以专注于进行传感器数据采集和控制任务,而计算密集型的任务,如地图建模和视频处理,可以交给PC端处理,从而提高整个系统的效率,避免因树莓派资源不足导致的性能问题。

二、设置 ROS 分布式网络

1. 环境要求

确保所有计算机:

(1)都在同一局域网内。

(2)可以通过 ping 互相访问

(3)安装相同版本的 ROS(推荐 Ubuntu + ROS Noetic)

2. 主机(Master)设置 

        选定一台机器作为主机,在主机(假设 IP 为 192.168.1.100)上,使用命令:vi ~/.bashrc,修改文件夹中以下的内容。注意ROS_MASTER_URI填写的谁的ip,谁就是主机(来运行roscore)。

# 指定 ROS Master(roscore 运行的机器)的 IP 地址和端口号(默认 11311)
export ROS_MASTER_URI=http://192.168.1.100:11311  
# 指定当前设备的 IP 地址,让其他设备可以找到它
export ROS_IP=192.168.1.100    
# 设置当前设备的主机名(可选,通常与 ROS_IP 相同)                
export ROS_HOSTNAME=192.168.1.100               

使用命令:source ~/.bashrc刷新,然后在主机上启动 roscore

3. 从机(节点设备)设置

在从机(假设 IP 为 192.168.1.101)上,使用命令:vi ~/.bashrc修改文件夹中以下的内容。

export ROS_MASTER_URI=http://192.168.1.100:11311 #主机的ip地址
export ROS_IP=192.168.1.101  #自身的ip地址
export ROS_HOSTNAME=192.168.1.101 #自定义

        使用命令:source ~/.bashrc刷新,然后使用命令rostopic list进行测试连接,如果能看到 roscore 发布的 /rosout 话题,说明连接成功。

4. 测试是否正常通信

 注意:这里使用话题来测试通信,无论是主机发布话题还是从机发布话题都是可以的,这里我们使用主机来发布话题。

在主机上运行roscore后,在 主机(192.168.1.100)上运行:

rostopic pub /test_topic std_msgs/String "Hello from Master" -r 1
/*
rostopic pub —— 发布(publish)一个 ROS 话题。
/test_topic —— 话题名称,这里是 /test_topic,可以自定义。
std_msgs/String —— 消息类型,这里是 std_msgs 包中的 String 类型(即字符串消息)。
"Hello from Master" —— 要发布的消息内容,这里是 "Hello from Master"。
-r 1 —— 设置发布频率,-r 1 表示每秒发布 1 次消息。

*/

从机(192.168.1.101)上运行:

rostopic echo /test_topic

如果从机能收到 "Hello from Master",说明分布式通信成功!

三、进阶启动多从机节点(launch)。

        适用场景:多个机器人在不同的物理或虚拟环境中协作完成任务。每个机器人可能有不同的传感器、执行器,并需要与其他机器人共享信息。在这种场景中,你可以使用 launch 文件来配置每个机器人的节点和它们在不同机器上的位置,确保每个机器人能够通过 ROS_MASTER_URI 连接到同一个 ROS Master,实现跨机器的节点通信。注意:确保从机已经被登录或者为SSH 免密登录,否则 roslaunch 不能远程启动。

(1)选定一台机器作为 Master(比如 192.168.1.100),在主机上编写launch文件,如下所示,在主机上运行roscore

<launch>
    <!-- 定义两个机器人,每个机器人通过其地址连接 -->
    <machine name="robot1" address="192.168.1.101" env-loader="/home/user/.bashrc"/>
    <machine name="robot2" address="192.168.1.102" env-loader="/home/user/.bashrc"/>
    
    <!-- 在 robot1 上运行节点 -->
    <node machine="robot1" pkg="my_package" type="robot_node" name="robot1_node"/>
    
    <!-- 在 robot2 上运行节点 -->
    <node machine="robot2" pkg="my_package" type="robot_node" name="robot2_node"/>
</launch>


<!-- 
name="robot1" 和 name="robot2" —— 定义两台远程机器人,分别命名为 robot1 和 robot2。
address="192.168.1.101" 和 address="192.168.1.102" —— 指定 IP 地址,表明 robot1 运行在 192.168.1.101,robot2 运行在 192.168.1.102。
env-loader="/home/user/.bashrc" —— 加载环境变量,ROS 需要依赖 ~/.bashrc 里的 ROS_MASTER_URI 和 ROS_IP 等环境变量,确保远程机器能正确找到 ROS Master。

<node> 表示在 ROS 中启动一个 节点。
machine="robot1" 和 machine="robot2" —— 指定在哪台机器上运行该节点。
pkg="my_package" —— ROS 包名,表示这个节点属于 my_package 包。
type="robot_node" —— 可执行文件名,即 my_package 包中的 robot_node 这个可执行程序。
name="robot1_node" 和 name="robot2_node" —— 指定 ROS 节点名称
-->

(2)确保 Master 机器的 .bashrc 里有正确的环境变量。

export ROS_MASTER_URI=http://192.168.1.100:11311
export ROS_IP=192.168.1.100

(3)在远程机器 (robot1robot2) 上配置环境变量.bashrc

robot1(192.168.1.101):

export ROS_MASTER_URI=http://192.168.1.100:11311
export ROS_IP=192.168.1.101  # robot1 的 IP

robot2(192.168.1.102):

export ROS_MASTER_URI=http://192.168.1.100:11311
export ROS_IP=192.168.1.102  # robot2 的 IP

(4)在 Master 机器上运行 launch 文件。

cd ~/catkin_ws
source devel/setup.bash
roslaunch my_package my_launch_file.launch

(5)查看是否成功。

robot1robot2 上分别运行rosnode list命令,检查节点是否正确启动,出现下面节点,说明节点已成功运行!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/983705.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

qt open3dAlpha重建

qt open3dAlpha重建 效果展示二、流程三、代码效果展示 二、流程 创建动作,链接到槽函数,并把动作放置菜单栏 参照前文 三、代码 1、槽函数实现 void on_actionAlpha_triggered();//alpha重建 void MainWindow::

我的三维引擎独立开发之路:坚持与迷茫

今天终于解决了&#xff0c;之前开发的基于threeceisum开发的融合引擎Merge3D,引用threejs版本过低的问题&#xff0c;也算又前进了一步&#xff01; 有人说&#xff0c;直接用最新版本不就行了&#xff0c;哎关键之前版本怎么办哪&#xff0c;很多不兼容性&#xff0c;需要一个…

【ArcGIS】地理坐标系

文章目录 一、坐标系理论体系深度解析1.1 地球形态的数学表达演进史1.1.1 地球曲率的认知变化1.1.2 参考椭球体参数对比表 1.2 地理坐标系的三维密码1.2.1 经纬度的本质1.2.2 大地基准面&#xff08;Datum&#xff09;的奥秘 1.3 投影坐标系&#xff1a;平面世界的诞生1.3.1 投…

数据分析人员需要掌握sql到什么程度?

学习SQL三个层次 熟悉基本的增删改查语句及函数&#xff0c;包括select、where、group by、having、order by、delete、insert、join、update等&#xff0c;可以做日常的取数或简单的分析&#xff08;该水平已经超过90%非IT同事&#xff09;;掌握并熟练使用高阶语法&#xff0…

简洁实用的3个免费wordpress主题

高端大气动态炫酷的免费企业官网wordpress主题 非常简洁的免费wordpress主题&#xff0c;安装简单、设置简单&#xff0c;几分钟就可以搭建好一个wordpress网站。 经典风格的免费wordpress主题 免费下载 https://www.fuyefa.com/wordpress

golang从入门到做牛马:第一篇-我与golang的缘分,go语言简介

还记得2018年的夏天,刚毕业的我不知道该做些什么,于是自学了一周的go语言,想要找一份go语言工作的代码,当时的go还没有go mod来管理依赖包,在北京找了一个月的工作,找到了一个小公司做了后端开发,当然使用go语言开发,带着兴奋劲,年轻身体也好,边努力学习,边工作。 时…

【Python编程】高性能Python Web服务部署架构解析

一、FastAPI 与 Uvicorn/Gunicorn 的协同 1. 开发环境&#xff1a;Uvicorn 直接驱动 作用&#xff1a;Uvicorn 作为 ASGI 服务器&#xff0c;原生支持 FastAPI 的异步特性&#xff0c;提供热重载&#xff08;--reload&#xff09;和高效异步请求处理。 启动命令&#xff1a; u…

Sentinel 笔记

Sentinel 笔记 1 介绍 Sentinel 是阿里开源的分布式系统流量防卫组件&#xff0c;专注于 流量控制、熔断降级、系统保护。 官网&#xff1a;https://sentinelguard.io/zh-cn/index.html wiki&#xff1a;https://github.com/alibaba/Sentinel/wiki 对比同类产品&#xff1…

JQuery 语法 $

jQuery 语法是通过选取 HTML 元素, 并对选取的元素执⾏某些操作 JQuery 选择器 jQuery 中所有选择器都以 $ 开头&#xff1a;$(). JQuery事件 事件由三部分组成: 1. 事件源: 哪个元素触发的 2. 事件类型: 是点击, 选中, 还是修改? 3. 事件处理程序: 进⼀步如何处理. …

算法每日一练 (9)

&#x1f4a2;欢迎来到张胤尘的技术站 &#x1f4a5;技术如江河&#xff0c;汇聚众志成。代码似星辰&#xff0c;照亮行征程。开源精神长&#xff0c;传承永不忘。携手共前行&#xff0c;未来更辉煌&#x1f4a5; 文章目录 算法每日一练 (9)最小路径和题目描述解题思路解题代码…

2025/3/8 第 27 场 蓝桥入门赛 题解

1. 38红包【算法赛】 签到题&#xff1a; 算倍数就行了 #include <bits/stdc.h> using namespace std; int main() {int ans0;for(int i1;i<2025;i){if(i % 3 0)ans;else if(i % 8 0)ans;else if(i % 38 0)ans;}cout<<ans<<endl;return 0; } 2. 祝福…

《白帽子讲 Web 安全》之深入同源策略(万字详解)

目录 引言 一、同源策略基础认知 &#xff08;一&#xff09;定义 &#xff08;二&#xff09;作用 &#xff08;三&#xff09;作用机制详解 二、同源策略的分类 &#xff08;一&#xff09;域名同源策略 &#xff08;二&#xff09;协议同源策略 &#xff08;三&…

基于SpringBoot的商城管理系统(源码+部署教程)

运行环境 数据库&#xff1a;MySql 编译器&#xff1a;Intellij IDEA 前端运行环境&#xff1a;node.js v12.13.0 JAVA版本&#xff1a;JDK 1.8 主要功能 基于Springboot的商城管理系统包含管理端和用户端两个部分&#xff0c;主要功能有&#xff1a; 管理端 首页商品列…

FFmpeg-chapter7和chapter8-使用 FFmpeg 解码视频(原理篇和实站篇)

解码流程如下图 流程&#xff1a;首先&#xff0c;通过 avcodec_alloc_context3(nullptr) 分配一个 AVCodecContext 结构体&#xff0c;然后使用 avcodec_parameters_to_context 将参数复制到上下文中&#xff0c;接着通过 avcodec_find_decoder 查找指定的解码器&#xff0c;并…

【银河麒麟高级服务器操作系统实例】虚拟机桥接网络问题分析及处理

更多银河麒麟操作系统产品及技术讨论&#xff0c;欢迎加入银河麒麟操作系统官方论坛 https://forum.kylinos.cn 了解更多银河麒麟操作系统全新产品&#xff0c;请点击访问 麒麟软件产品专区&#xff1a;https://product.kylinos.cn 开发者专区&#xff1a;https://developer…

10 【HarmonyOS NEXT】 仿uv-ui组件开发之Avatar头像组件开发教程(一)

温馨提示&#xff1a;本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦&#xff01; 目录 第一篇&#xff1a;Avatar 组件基础概念与设计1. 组件概述2. 接口设计2.1 形状类型定义2.2 尺寸类型定义2.3 组件属性接口 3. 设计原则4. 使用…

C++20 DR11:数组 `new` 可以推导出数组大小

文章目录 背景与动机C20 的改进示例代码编译器支持总结 在 C20 中&#xff0c;DR11 提案&#xff08;P1009R2&#xff09;引入了一项重要的语言特性改进&#xff1a;数组 new 表达式可以自动推导数组大小。这一改进极大地简化了动态数组的创建过程&#xff0c;使代码更加简洁易…

STM32-I2C通信外设

目录 一&#xff1a;I2C外设简介 二&#xff1a;I2C外设数据收发 三&#xff1a;I2C的复用端口 四&#xff1a;主机发送和接收 五&#xff1a;硬件I2C读写MPU6050 相关函数&#xff1a; 1.I2C_ GenerateSTART 2.I2C_ GenerateSTOP 3.I2C_ AcknowledgeConfig 4.I2C…

OpenManus:开源版Manus的快速安装及使用「喂饭教程」

OpenManus&#xff1a;开源版Manus的快速安装及使用「喂饭教程」 OpenManus是什么&#xff1f;OpenManus的核心理念1. 安装2. 配置2.1 线上模型2.2 本地模型 3. 运行项目常见问题&#xff1a;如何设置项目执行的Steps&#xff1f; OpenManus是什么&#xff1f; OpenManus是由 …

专业工具,提供多种磁盘分区方案

随着时间的推移&#xff0c;电脑的磁盘空间往往会越来越紧张&#xff0c;许多人都经历过磁盘空间不足的困扰。虽然通过清理垃圾文件可以获得一定的改善&#xff0c;但随着文件和软件的增多&#xff0c;磁盘空间仍然可能显得捉襟见肘。在这种情况下&#xff0c;将其他磁盘的闲置…