当前位置: 首页 > news >正文

【ROS】分布式通信架构

【ROS】分布式通信架构

  • 前言
  • 环境要求
  • 主机设置(Master)
  • 从机设置(Slave)
  • 主机与从机通信测试
  • 本文示例
    • 启动ROS智能车激光雷达节点
    • 本地计算机配置与订阅

前言

在使用 ROS 时,我们常常会遇到某些设备计算能力不足的情况。例如,一辆搭载 ROS 的智能车,可能无法独立完成所有计算任务。此时,可以通过 ROS 的分布式通信架构,让其他设备协助其完成部分功能。


  • 什么是 ROS 分布式通信?

ROS 支持多个设备协同工作。通过网络连接,它们可以组成一个更大的 ROS 系统,实现节点之间的通信与协作。

  • 主机(Master):负责管理整个 ROS 系统,协调各个节点。
  • 从机(Slave):通过网络连接到主机,参与数据通信和处理任务。

本文示例说明

  • ROS 智能车(主机):运行激光雷达节点,发布激光数据。
  • 本地计算机(从机):运行 rviz,订阅并显示智能车的激光雷达数据。

通过这个例子,我们将介绍如何搭建一个简单的 ROS 分布式通信系统,让多台设备协同完成任务。


参考资料:

  • ROS分布式部署通信

环境要求

  1. 所有设备需处于同一局域网中
  2. 各设备之间通过 IP 地址互相 ping 通,确保网络连接正常
  3. 建议安装相同版本的 ROS,以避免不必要的兼容性问题(ROS1 和 ROS2 各版本之间通常也具备一定兼容性)

主机设置(Master)

本文中,主机为 ROS 智能车,运行环境为 Ubuntu 18.04 + ROS Melodic

在 ROS 分布式系统中,主机就是运行 roscore 的设备roscore 可以理解为 ROS 的“心脏”,即使有多个设备参与,一整个 ROS 系统也只需要一个 roscore 实例。

下面先通过命令行手动设置环境变量,测试无误后可将其写入 ~/.bashrc 中以便自动加载。

# 设置 ROS Master 的地址(即运行 roscore 的设备 IP,端口默认 11311)
export ROS_MASTER_URI=http://<ROS智能车IP>:11311  # 设置当前设备的 IP 地址(确保其他设备能访问到它)
export ROS_IP=<ROS智能车IP>   # 可选项:设置当前设备的主机名,通常与 ROS_IP 一致
export ROS_HOSTNAME=<ROS智能车IP>

设置完成后,运行 roscore,并观察终端输出中的 ROS_MASTER_URI。只要它与我们之前通过 export 设置的地址一致,说明配置成功。

在这里插入图片描述

测试无误后,将上述环境变量写入主机的 ~/.bashrc 文件,以便每次开机自动加载


从机设置(Slave)

本文中,从机为本地计算机,运行环境为 WSL2 + Ubuntu 20.04 + ROS Noetic

在 ROS 的分布式系统中,从机依赖主机运行的 roscore 来完成 ROS 通信。可以理解为从机共享主机的“心脏”,协同处理任务,共同构成一个完整的 ROS 系统。

我们先通过命令行手动设置以下环境变量,测试无误后再将其写入 ~/.bashrc,实现自动加载:

# 设置 ROS Master 的地址(即主机设备 IP,端口默认 11311)
export ROS_MASTER_URI=http://<主机设备IP>:11311  # 设置当前设备的 IP 地址(确保其他设备能访问到它)
export ROS_IP=<本地计算机IP>   # 可选项:设置当前设备的主机名,通常与 ROS_IP 一致
export ROS_HOSTNAME=<本地计算机IP>

配置完成后,运行 rostopic list,检查终端输出中的当前正在运行的节点。如果能看到主机上的 roscore 发布的 rosout 话题,说明配置成功。

在这里插入图片描述
测试无误后,将上述环境变量添加到从机的 ~/.bashrc 文件中,以便每次开机自动加载


主机与从机通信测试

- 在主机上发布话题(确保 roscore 正在运行):

rostopic pub /test_topic std_msgs/String "Hello from Master" -r 1

- 在从机上订阅该话题:

rostopic echo /test_topic

如果从机能够接收到数据(如下图),则说明主机与从机的通信正常。

在这里插入图片描述


本文示例

启动ROS智能车激光雷达节点

在 ROS 智能车上启动激光雷达节点,该节点将负责发布激光雷达的数据。
在这里插入图片描述

本地计算机配置与订阅

在本地计算机上的 ROS 系统中,启动 rviz,并订阅来自智能车的激光雷达数据。
在这里插入图片描述

相关文章:

【ROS】分布式通信架构

【ROS】分布式通信架构 前言环境要求主机设置&#xff08;Master&#xff09;从机设置&#xff08;Slave&#xff09;主机与从机通信测试本文示例启动ROS智能车激光雷达节点本地计算机配置与订阅 前言 在使用 ROS 时&#xff0c;我们常常会遇到某些设备计算能力不足的情况。例…...

【第39节】windows编程:打造MFC版本任务管理器

目录 一、项目概述 二、项目开发的各种功能关键 2.1 进程信息的获取 2.2 线程信息的获取 2.3 进程模块信息的获取 2.3.1 模块快照 2.3.2 枚举模块 2.4 进程堆信息的获取 2.5 窗口信息的获取 2.6 文件信息的获取 2.7 内存信息和CPU占用率的获取 2.7.1 内存信息相关结…...

1.认识C语言

上层&#xff1a;应用软件 下层&#xff1a;操作系统、硬件 C语言擅长于下层方面 计算机语言的发展&#xff1a;低级 ——> 高级 用计算机的二进制指令写代码&#xff08;低级语言&#xff09; —— > 汇编指令&#xff08;低级语言&#xff0c;用到了助记符&#xff…...

MySQL下200GB大表备份,利用传输表空间解决停服发版表备份问题

MySQL下200GB大表备份&#xff0c;利用传输表空间解决停服发版表备份问题 问题背景 在停服发版更新时&#xff0c;需对 200GB 大表&#xff08;约 200 亿行数据&#xff09;进行快速备份以预防操作失误。 因为曾经出现过有开发写的发版语句里&#xff0c;UPDATE语句的WHERE条…...

《Sqoop 快速上手:安装 + 测试实战》

推荐原文 见&#xff1a;http://docs.xupengboo.top/bigdata/di/sqoop.html Sqoop&#xff08;SQL-to-Hadoop&#xff09; 是 Apache 开源的工具&#xff0c;专门用于在 Hadoop 生态系统&#xff08;如 HDFS、Hive、HBase&#xff09; 和 关系型数据库&#xff08;如 MySQL、O…...

MySQL体系架构(二)

MySQL中的目录和文件 2.2.1.bin目录 在MysQL的安装目录下有一个特别特别重要的bin目录,这个目录下存放着许多可执行文件。 其他系统中的可执行文件与此的类似。这些可执行文件都是与服务器程序和客户端程序相关的。 2.2.1.1.启动MySQL服务器程序 在UNIX系统中用来启动MySO…...

为什么反激采用峰值电流控制模式而非电压模式

电压模式控制是传统的控制方法&#xff0c;通过检测输出电压&#xff0c;与参考电压比较&#xff0c;然后调整PWM的占空比。这种方法的优点是简单&#xff0c;只需要一个电压反馈环路。但缺点可能包括对输入电压变化的响应较慢&#xff0c;动态性能不足&#xff0c;尤其是在负载…...

JavaScript逆向工程中的插桩技术完全指南

一、什么是插桩技术&#xff1f; 插桩&#xff08;Instrumentation&#xff09;是逆向工程中的核心技术之一&#xff0c;指的是在不改变程序原有逻辑的前提下&#xff0c;向目标程序中插入额外的代码或监控点&#xff0c;用于收集运行时信息、修改程序行为或进行调试分析。 插…...

LLM应用实战1-基本概念

文章目录 基本概念1. 提示词工程&#xff08;Prompt Engineering&#xff09;2. AI Agent&#xff08;智能代理&#xff09;3. Model Context Protocol (MCP)4. Function Calling&#xff08;函数调用&#xff09;5. Retrieval-Augmented Generation (RAG)6. FineTuning&#x…...

数据结构--堆

一、堆的定义 堆是一棵完全二叉树&#xff0c;树中的每个结点的值都不小于&#xff08;或不大于&#xff09;其左右孩子结点的值。其中&#xff0c;如果父亲结点的值始终大于或等于孩子结点的值&#xff0c;那么称这样的堆为大顶堆&#xff0c;这时每个结点的值都是以它为根节…...

第37次CCF计算机软件能力认证 / T4 / 集体锻炼

题目 代码 #include <bits/stdc.h> using namespace std; using LL long long;const int N 1e6 10; const int mod 998244353; int a[N]; int st[N][22];int get(int l, int r) {int x r - l 1;int k log2(x);return __gcd(st[l][k], st[r - (1 << k) 1][…...

ES6规范新特性总结

ES6新特性 var、let和const不存在变量提升暂时性死区不允许重复声明 解构赋值用途&#xff1a;交换变量的值从函数返回多个值提取JSON数据遍历map结构输入模块的制定方法 字符串的扩展codePointAt()String.fromCharCode()at()includes(),startsWith(),endsWith()repeat()padSta…...

AI模型多阶段调用进度追踪系统设计文档

AI模型多阶段调用进度追踪系统设计文档 一、系统概述 为解决AI模型处理大型文件时响应时间长的问题&#xff0c;我们设计并实现了一套异步进度追踪系统。该系统采用Server-Sent Events (SSE) 技术&#xff0c;建立从服务器到客户端的单向实时通信通道&#xff0c;使前端能够实…...

[MSPM0开发]最新版ccs20.0安装、配置及导入第一个项目

一、ccs20.0 下载与安装 Code Composer Studio™ 集成式开发环境 (IDE)&#xff0c;适用于 TI 微控制器和处理器的集成开发环境 (IDE)。它包含一整套丰富的工具&#xff0c;用于构建、调试、分析和优化嵌入式应用。 ccs下载地址 链接 安装比较简单&#xff0c;在次略过。 二、…...

Win10怎么关闭远程控制?

对于Windows 10用户来说&#xff0c;Win10关闭远程桌面可以有效防止不必要的远程连接&#xff0c;从而保护个人数据和系统安全。那么&#xff0c;Win10怎么关闭远程控制功能呢&#xff1f;接下来&#xff0c;我们将详细介绍Win10关闭远程控制的具体操作步骤。 步骤1.双击桌面上…...

AI重构知识生态:大模型时代的学习、创作与决策革新

📝个人主页🌹:慌ZHANG-CSDN博客 🌹🌹期待您的关注 🌹🌹 一、引言:从知识的获取到知识的共生 过去,我们对“知识”的理解,大多依赖书籍、老师、经验和专业的培训体系。而在大语言模型(Large Language Models, LLM)崛起之后,AI成为了一种新的“知识界面”:…...

牛客 小红杀怪

通过枚举所有使用y技能的次数来枚举出所有方案&#xff0c;选出最合适的 #include<iostream> #include<cmath> #include<algorithm> using namespace std;int a, b, x, y; int ans500;int main() {ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin>&…...

Spring入门概念 以及入门案例

Spring入门案例 Springspring是什么spring的狭义与广义spring的两个核心模块IoCAOP Spring framework特点spring入门案例不用new方法&#xff0c;如何使用返回创建的对象 容器&#xff1a;IoC控制反转依赖注入 Spring spring是什么 spring是一款主流的Java EE轻量级开源框架 …...

SpringAI调用硅基流动免费模型

一、引入Spring AI 新建一个Spring Boot的工程&#xff0c;在工程中引入Spring AI的依赖&#xff0c;Spring AI支持Ollma、类OpenAI的接口&#xff0c;这两个引入的pom不一样&#xff0c;这里示例中是使用的硅基流动的模型 <!-- Spring Boot版本要 2.x 或者 3.x以上-->…...

Java 开发中主流安全框架的详细对比,涵盖 认证、授权、加密、安全策略 等核心功能,帮助开发者根据需求选择合适的方案

以下是 Java 开发中主流安全框架的详细对比&#xff0c;涵盖 认证、授权、加密、安全策略 等核心功能&#xff0c;帮助开发者根据需求选择合适的方案&#xff1a; 1. 主流安全框架对比表 框架名称类型核心功能适用场景优点缺点官网/文档Spring Security企业级安全框架认证、授…...

【TVM教程】在支持 CMSIS-NN 的 Arm(R) Cortex(R)-M55 CPU 和 Ethos(TM)-U55 NPU 裸机上运行 TVM

Apache TVM是一个深度的深度学习编译框架&#xff0c;适用于 CPU、GPU 和各种机器学习加速芯片。更多 TVM 中文文档可访问 →https://tvm.hyper.ai/ 作者&#xff1a;Grant Watson 本节使用示例说明如何使用 TVM 在带有 CMSIS-NN 的 Arm Cortex-M55 CPU 和 Ethos™-U55 NPU 的…...

【Ai/Agent】Windows11中安装CrewAI过程中的错误解决记录

CrewAi是什么&#xff0c;可以看之下之前写的 《初识CrewAI多智能代理团队协框架》 (注&#xff1a;这篇是基于linux系统下安装实践的) 基于以下记录解决问题后&#xff0c;可以再回到之前的文章继续进行CrewAI的安装 遇到问题 在windows系统中安装 CrewAi 不管是使用 pip 或者…...

洛谷 P11962:[GESP202503 六级] 树上漫步 ← dfs + 邻接表

【题目来源】 https://www.luogu.com.cn/problem/P11962 【题目描述】 小 A 有一棵 n 个结点的树&#xff0c;这些结点依次以 1,2,⋯,n 标号。 小 A 想在这棵树上漫步。具体来说&#xff0c;小 A 会从树上的某个结点出发&#xff0c;每⼀步可以移动到与当前结点相邻的结点&…...

Linux shell脚本编程

什么是Shell程序设计&#xff1f; 也就是给计算机发命令&#xff0c;让它帮你做事&#xff0c;你通过shell 的小工具&#xff0c;用键盘输入指令&#xff0c;linux就会根据这些指令去执行任务&#xff0c;就像你法号一个指令一样。 shell的强大之处&#xff1f; 文件处理&a…...

嵌入式硬件篇---Uart和Zigbee

文章目录 前言一、UART&#xff08;通用异步收发传输器&#xff09;1. 基本概念2. 工作原理帧结构起始位数据位校验位停止位 异步通信波特率 3. 特点优点缺点 4. 典型应用 二、ZigBee1. 基本概念2. 技术细节工作频段2.4GHz868MHz 网络拓扑星型网络网状网络簇状网络 协议栈物理层…...

Linux Makefile-概述、语句格式、编写规则、多文件编程、Makefile变量分类:自定义变量、预定义变量

目录 1.make 1.1 make 命令格式 2.Makefile 核心概念‌ ‌ 2.1创建并运行 Makefile步骤 3. Makefile编写 3.1最基础Makefile 3.1.1使用默认make命令 3.1.2使用make -f 命令 3.1.3 gcc编译常用组合选项 3.1.4 make 和 make all区别 3.1.4.1 all 是默认目标 3.1.4.2 al…...

Kotlin日常使用函数记录

文章目录 前言字符串集合1.两个集合的差集2.集合转数组2.1.集合转基本数据类型数组2.2.集合转对象数组 Map1.合并Map1.1.使用 操作符1.2.使用 操作符1.3.使用 putAll 方法1.4.使用 merge 函数 前言 记录一些kotlin开发中&#xff0c;日常使用的函数和方式之类的&#xff0c;…...

【JavaScript】异步编程

个人主页&#xff1a;Guiat 归属专栏&#xff1a;HTML CSS JavaScript 文章目录 1. 异步编程基础1.1 同步与异步1.1.1 同步执行1.1.2 异步执行 1.2 JavaScript 事件循环 2. 回调函数2.1 基本回调模式2.2 错误处理2.3 回调地狱 3. Promise3.1 Promise 基础3.2 Promise 链式调用3…...

批量合并多张 jpg/png 图片为长图或者 PDF 文件,支持按文件夹合并图片

我们经常会碰到需要将多张图片拼成一张图片的场景&#xff0c;比如将多张图片拼成九宫格图片&#xff0c;或者将多张图片拼成一张长图。还有可能会碰到需要将多张图片合并成一个完整的 PDF 文件来方便我们进行打印或者传输等操作。那这些将图片合并成一张图片或者一个完整的文档…...

使用docker 安装向量数据库Milvus

Miluvs 官网 www.milvus.io/ https://milvus.io/docs/zh/install_standalone-docker-compose-gpu.md 一、基本概念 向量数据库&#xff1a;Milvus是一款云原生向量数据库&#xff0c;它支持多种类型的向量&#xff0c;如浮点向量、二进制向量等&#xff0c;并且可以处理大规模…...

在线PDF文件拆分工具,小白工具功能实用操作简单,无需安装的文档处理工具

小白工具中的在线 PDF 文件拆分工具是一款功能实用、操作便捷的文档处理工具&#xff0c;以下是其具体介绍&#xff1a; 操作流程 上传 PDF 文档&#xff1a;打开小白工具在线PDF文件拆分工具 - 快速、免费拆分PDF文档 - 小白工具的在线 PDF 文件拆分页面&#xff0c;通过点击 …...

Blender画图——阵列使用

如图我需要多个图示的图形&#xff0c;并且排成一个阵列效果。 如图依次点击效果。不要用相对偏移&#xff0c;要用恒定偏移。 如图设置数量。 如图完成x方向的画图后&#xff0c;我们需要在y方向再用一个阵列。...

VSCode 常用快捷键

Visual Studio Code (VSCode) 提供了许多快捷键&#xff0c;以帮助开发者提高编码效率。以下是一些常用的 VSCode 快捷键&#xff0c;这些快捷键适用于大多数操作系统&#xff0c;但在 macOS 上可能会有所不同&#xff08;通常是将 Ctrl 替换为 Cmd&#xff09;。 1. 文件和编…...

缓存相关问题

Redis 持久化机制 缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题 热点数据和冷数据是什么 Memcache与Redis的区别都有哪些? 单线程的redis为什么这么快 redis的数据类型,以及每种数据类型的使用场景,Redis 内部结构 redis的过期策略以及内存淘汰机制 Redis 为什么…...

每日一题(小白)暴力娱乐篇22

为什么要经常学习暴力和一些娱乐呢&#xff1f;因为对于我们来说&#xff0c;暴力是最直接的方式是肯定能满足一部分答案的方法&#xff0c;娱乐是为了让算法变得更有趣&#xff0c;你愿意多去尝试多去练习&#xff0c;这才是最要紧的。 由题意知&#xff0c;就是计算两个数字…...

深入理解 Vuex:核心概念、API 详解与最佳实践

目录 Vuex 简介核心概念与工作流程核心 API 详解模块化开发 &#xff08;modules&#xff09;插件&#xff08;Plugins&#xff09;与扩展高级技巧与最佳实践 Vuex 简介 Vuex 是 Vue.js 的官方状态管理库&#xff0c;专为复杂应用设计&#xff0c;用于集中管理所有组件的共享状…...

成为一种国家战略范畴的新基建的智慧园区开源了。

智慧园区场景视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;从而大大减少企业级应用约95%的开发成本。用户只需在界…...

拜特科技助力科达制造,资金管理信息化迈入新阶段

近日&#xff0c;拜特科技成功签约科达制造股份有限公司&#xff08;以下简称“科达制造”&#xff09;资金管理系统升级项目。科达制造通过资金管理系统的不断迭代升级和优化&#xff0c;能够更加高效地管理和运用资金&#xff0c;提高企业的资金利用效率&#xff0c;满足企业…...

每日一题(小白)暴力娱乐篇20

这个题用瞪眼法解决&#xff0c;snakeaekns 代码如下&#x1f447; public static void main(String[] args) {Scanner scannew Scanner(System.in);System.out.println("aekns");scan.close();} 第二种方式&#xff1a;将snack拆解&#xff0c;按照大小进行排序。…...

Flutter iOS 项目中 VolumeControllerPlugin 报错解决方案

Flutter iOS 项目中 VolumeControllerPlugin 报错解决方案 在开发 Flutter 应用时&#xff0c;有时会遇到 iOS 项目构建失败的情况&#xff0c;其中一种较为常见的错误是与 VolumeControllerPlugin 相关的报错&#xff0c;错误信息如下&#xff1a; Could not build the prec…...

Java实战报错 tcp

为什么报错tcp Preview 从图片中的错误信息来看&#xff0c;程序遇到了 java.net.BindException&#xff0c;具体错误信息是 "Address already in use: bind"。这意味着你的程序试图绑定到一个已经被其他进程占用的端口&#xff08;在本例中是9999端口&#xff09;。…...

【补题】P10424 [蓝桥杯 2024 省 B] 好数(数位dp)

题意&#xff1a; 一个整数如果按从低位到高位的顺序&#xff0c;奇数位&#xff08;个位、百位、万位……&#xff09;上的数字是奇数&#xff0c;偶数位&#xff08;十位、千位、十万位……&#xff09;上的数字是偶数&#xff0c;我们就称之为“好数”。 给定一个正整数 N…...

控制 ElementUI el-table 树形表格多选框的显示层级

1、你可以通过 selectable 属性来控制哪些行可以选择&#xff08;显示多选框&#xff09; <el-table:data"tableData"row-key"id"default-expand-all:tree-props"{children: children, hasChildren: hasChildren}"select"handleSelect&…...

今日行情明日机会——20250409

今日行情还需要考虑关税对抗~ 2025年4月8日涨停的主要行业方向分析 1. 军工&#xff08;19家涨停&#xff09; 细分领域&#xff1a;国防装备、航空航天、军民融合。催化因素&#xff1a;国家安全战略升级、国防预算增加、重大军工项目落地预期。 2. 免税&#xff08;15家涨…...

基础知识补充篇:什么是DAPP前端连接中的provider

专栏:区块链入门到放弃查看目录-CSDN博客文章浏览阅读352次。为了方便查看将本专栏的所有内容列出目录,按照顺序查看即可。后续也会在此规划一下后续内容,因此如果遇到不能点击的,代表还没有更新。声明:文中所出观点大多数源于笔者多年开发经验所总结,如果你想要知道区块…...

47常用控件_QWidget的toolTip属性

一个 GUI 程序,界面比较复杂, 按啥的很多~~ 当你把鼠标悬停到这个控件上的时候,就能弹出一个提示~~ setToolTip&#xff1a;设置提示内容 setToolTipDuring&#xff1a;设置提示的时间 toolTip 只是给用户看的.在代码中一般不需要获取到 toolTip. 代码示例: 设置按钮的 toolT…...

解密工业控制柜:认识关键硬件(PLC)

前言 作为一名视觉开发工程师&#xff0c;我们不仅要做到做好自己的工作&#xff0c;我们更需要在工业现场学习更多知识&#xff0c;最近网上流传很多&#xff0c;“教会徒弟&#xff0c;饿死师傅”&#xff1b;在自动化行业中&#xff0c;在项目下来很忙的时候&#xff0c;我们…...

PDF编辑,小白工具功能丰富多样,在线无需下载,操作便捷,新手小白必备

在当今数字化办公和学习的时代&#xff0c;PDF 文件的使用极为广泛&#xff0c;而小白工具的在线 PDF 浏览器以其强大且丰富的功能&#xff0c;成为了一款不可多得的优质 PDF 阅读工具&#xff0c;PDF编辑,在线无需下载,操作便捷,新手小白必备以下为您详细推荐&#xff1a; 功能…...

网络安全公司推荐:F5荣膺IDC全球Web应用与API防护领导者

API的广泛使用正推动安全实践的重大变革。研究表明&#xff0c;有41%的企业管理的API数量至少与应用数量相等&#xff0c;因此企业亟需实现全面的API防护。近日&#xff0c;IDC发布《IDC MarketScape&#xff1a;2024年全球Web应用和API防护企业平台供应商评估报告》&#xff0…...

WPF轮播图动画交互 动画缩放展示图片

WPF轮播图动画交互 动画缩放展示图片 效果如下图&#xff1a; XAML代码&#xff1a; <Window x:Class"Caroursel.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/20…...