MicroROS简述
文章目录
- 前言
- 1. 什么是MicroROS
- 2. MicroROS的功能
- 2.1 Micro-ROS 的核心作用:桥梁 + 翻译官
- 2.2 为什么服务端(Agent)能知道设备端的消息和服务?
- 3. MicroROS出现的背景
- 3.1 机器人系统的“断层”问题
- 3.2 物联网与边缘计算的兴起
- 3.3 ROS 2的架构升级
- 3.4 总结
- 4. 参考资料
前言
最近在了解一些开源的桌面机器人项目,发现运动控制等做的比较好的大都上了ROS,我前面了解过ROS2的基础知识也在虚拟机上自己跑过。但是对于实际设备上如何使用怎么进行开发并不是很了解。然后我开始看鱼香ROS的《动手学ROS2》系列课程,去了解下实际设备上是如何将ROS2给使用起来的。
课程中使用的主控是ESP32,然后在ESP32上使用ROS,但是由于ESP32的资源有限,所以实际使用的是一个叫MicroROS的库进行开发的。对于什么是MicroROS起初我有点蒙,所以就想着学习一下,这里把学习到的内容整理出来和大家进行一下分享。
1. 什么是MicroROS
MicroROS 是专门为微控制器(MCU)优化的 ROS 2 轻量级版本。它为资源受限的嵌入式设备提供了 ROS 2 的功能支持,使这些设备能够无缝集成到更大的 ROS 2 系统中。
想象一下 ROS(Robot Operating System) 是一个庞大的、功能强大的“机器人城市”的通信和管理系统。它擅长处理复杂任务(比如地图构建、导航、AI决策),但通常运行在像笔记本电脑或树莓派这样算力较强、内存较大的“城市中央电脑”上。
Micro-ROS 就是为了解决一个问题而生的:让那些资源极其有限、但工作在机器人“第一线”的小型嵌入式设备(比如控制电机的单片机、读取传感器的小板子 ESP32/STM32)也能加入这个“机器人城市”的通信网络。
2. MicroROS的功能
2.1 Micro-ROS 的核心作用:桥梁 + 翻译官
-
让“小设备”说“ROS话”:
- 普通的单片机程序无法直接理解和使用 ROS 复杂的通信协议(DDS)。
- Micro-ROS 为这些单片机提供了一个精简版的 ROS 客户端库。它体积很小(KB级别),可以在 ESP32、STM32 等单片机上运行(需要配合实时操作系统如 FreeRTOS)。
- 有了这个库,单片机上的程序就能用类似 ROS 的方式:
- 发布(Publish) 消息(比如传感器读数:温度、距离、电机转速)。
- 订阅(Subscribe) 消息(比如接收运动指令:前进速度、转向角度)。
- 调用服务(Service Call) 或 提供应答(Service Response)(比如查询设备状态、发送一个配置命令)。
-
中间的“翻译官”(Agent):
- 单片机直接和运行 ROS 的中央电脑通信还是有困难(协议不同、资源悬殊)。
- Micro-ROS 引入了一个关键的中间角色:Agent(代理)。
- Agent 运行在中央电脑 (Linux/Windows) 上,是一个特殊的程序。
- Agent 的作用:
- 协议转换: 它理解单片机发来的“简化版ROS协议”(XRCE-DDS),并将其转换成标准ROS使用的“通用协议”(DDS),反之亦然。就像把方言翻译成普通话。
- 连接管理: 负责建立和维护单片机与整个ROS网络之间的连接(通常通过串口、UDP、WiFi等)。
- 动态发现: 最重要的一点! 当单片机上的 Micro-ROS 客户端启动,并声明它要发布/订阅某种类型的消息(比如
sensor_msgs/msg/Temperature
)时,它会把这些消息类型的描述信息发送给 Agent。 - Agent 知道了什么: Agent 收到这些描述信息后,就清楚地知道:
- 这个单片机设备上有哪些节点在运行。
- 这些节点发布了哪些主题(Topics),以及这些主题上传输的消息具体是什么类型、包含哪些数据字段。
- 这些节点订阅了哪些主题。
- 这些节点提供了哪些服务(Services),调用了哪些服务。
- 有了这些信息,Agent 就能:
- 把单片机发布的消息,正确地转发给 ROS 网络中订阅了相同主题的其他节点。
- 把 ROS 网络中其他节点发布的消息(单片机订阅的主题),正确地转发给单片机。
- 把 ROS 网络中对服务的请求转发给单片机,并把单片机的响应转发回去。
2.2 为什么服务端(Agent)能知道设备端的消息和服务?
核心机制就是上面提到的 “动态发现 + 类型注册”:
- 设备端(单片机)声明: 当单片机上的 Micro-ROS 程序启动时,它会主动告诉连接着的 Agent:“你好,我是节点
/sensor_node
,我会在主题/temperature
上发布类型为sensor_msgs/msg/Temperature
的消息,我还订阅了主题/motor_cmd
。” - Agent 学习与注册: Agent 收到这些信息后,学习并记住了设备端的能力(发布什么、订阅什么、提供什么服务)。它会根据收到的描述信息,在 ROS 网络中动态地注册这些主题和服务,就好像它们是由 Agent 自己发布/订阅的一样。
- 无缝连接: 现在,ROS 网络中的其他节点(比如在中央电脑上运行的路径规划节点)如果订阅了
/temperature
主题,Agent 就会自动把单片机发来的/temperature
消息转发给它。同样,如果某个节点(比如控制节点)向/motor_cmd
主题发布指令,Agent 也会自动把这个指令转发给订阅了该主题的单片机节点。
简单说:设备端启动时会主动把自己的“通讯录”(包含发布、订阅、服务信息)交给 Agent 保管。Agent 有了这本通讯录,就能精准地知道设备端在收发什么消息,并负责在设备端和整个 ROS 网络之间准确无误地传递信息。
3. MicroROS出现的背景
MicroROS的出现源于机器人领域一个关键痛点:ROS 2虽强大,却无法直接在资源匮乏的微控制器(MCU)上运行。而像电机控制等对实时性要求高的外设一般都是使用MCU进行实时性控制,如果MCU不能直接参与到ROS2网络中,那么就需要借助转发(例如MCU通过串口和SOC进行通信,SOC作为ROS的代理),但是这样效率等势必会下降 ,总结起来主要有3个原因
3.1 机器人系统的“断层”问题
- 高端处理器(如工控机/树莓派):
运行ROS 2,处理复杂任务(SLAM、导航),但无法直接操控硬件(电机、传感器)。 - 底层MCU(如STM32/ESP32):
实时控制硬件,但算力/内存有限(KB级RAM),传统ROS 2(需MB级资源)根本无法移植。 - 后果:
开发者被迫用串口/UART等原始方式连接两者,手动解析数据,开发效率低、易出错。
3.2 物联网与边缘计算的兴起
- 需求变化:
智能机器人、IoT设备需在传感器端实时处理数据(如滤波、紧急避障),而非全部上传云端。 - 传统方案缺陷:
- 自定义通信协议 → 无法复用ROS生态(工具链、算法包)。
- 用MQTT/CoAP等轻量协议 → 失去ROS的节点管理、服务调用等核心能力,缺乏灵活性
3.3 ROS 2的架构升级
- ROS 1的局限:
中心化通信(Master节点)、弱实时性,不适合嵌入式场景。 - ROS 2的突破:
基于DDS通信协议,支持分布式、实时通信,为微控制器集成提供理论可能。
→ MicroROS应运而生,成为ROS 2在MCU端的“轻量化分身”。
3.4 总结
背景矛盾 | MicroROS的解决方案 | 开发者收益 |
---|---|---|
ROS 2无法在MCU运行 | 极致轻量化客户端库 + Agent代理 | MCU直接使用ROS 2 API开发 |
硬件层与应用层通信效率低下 | 动态消息注册 + 自动协议转换 | 省去手动解析,数据直达ROS 2网络 |
边缘设备无法复用ROS生态 | 兼容标准ROS 2消息/服务/工具链 | 共享ROS算法包(如导航、控制) |
实时性要求难以满足 | 集成RTOS,支持硬实时任务调度 | 电机控制、传感器采集低延迟响应 |
4. 参考资料
- DeepSeek
- 动手学ROS2-Humble
相关文章:
MicroROS简述
文章目录 前言1. 什么是MicroROS2. MicroROS的功能2.1 Micro-ROS 的核心作用:桥梁 翻译官2.2 为什么服务端(Agent)能知道设备端的消息和服务? 3. MicroROS出现的背景3.1 机器人系统的“断层”问题3.2 物联网与边缘计算的兴起3.3 …...
LeetCode Hot100刷题——完全平方数
279. 完全平方数 给你一个整数 n ,返回 和为 n 的完全平方数的最少数量 。 完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1、4、9 和 16 都是完全平方数,而…...

Axure-元件流程图
Axure-02 线框图元件使用 目标 元件基本介绍 基础元件的使用 表单型元件的使用 菜单与表格元件的使用 案例:个人简历表 元件基本介绍 概述 在Axure RP中,元件是构建原型图的基础模块。 将元件从元件库里拖拽到画布中,即可添加元件到你…...
LangChain系列之LangChain4j集成Spring Bot
<<< 书接上文 2. 代码示例 以下是一个集成 LangChain4j API 的 Spring Boot 应用示例。 2.1 创建 Spring Boot 项目 你可以使用SpringInitializr (https://start.spring.io/)来创建一个 Spring Boot 项目。选择 Maven 项目、Java 语言以及合适的 Spring Boot 版本…...

Python爬虫解析动态网页:从渲染到数据提取
一、动态网页与静态网页的区别 在开始之前,我们需要理解动态网页与静态网页的区别。静态网页的内容在服务器端是固定的,每次请求都会返回相同的结果,通常以HTML文件的形式存储。而动态网页则不同,其内容是通过JavaScript在客户端…...

LLMs之MCP:如何使用 Gradio 构建 MCP 服务器
LLMs之MCP:如何使用 Gradio 构建 MCP 服务器 导读:本文详细介绍了如何使用Gradio构建MCP服务器,包括前提条件、构建方法、关键特性和相关资源。通过一个简单的字母计数示例,演示了如何将Gradio应用转换为LLM可以使用的工具。Gradi…...

VBA模拟进度条
在上一章中我跟大家介绍了ProgressBar控件的使用方法,但由于该控件无法在64位版本的Office中运行,为此我们可以采用Lable控件来模拟进度条的变化,以解决在64位版本的Office中无进度条控件的问题。 一、设计思路 添加两个重叠的Lable标签控件…...

MySQL强化关键_019_索引优化
目 录 一、最左前缀原则 1.完全使用索引 2.部分使用索引 3.不使用索引 4.效率折损 (1)使用范围查找 (2)索引断开 二、索引失效场景 1. 索引列参与运算 2.索引列模糊查询以“%”开始 3.索引列是字符串类型,查…...
高性能MCU的MPU与Cache优化详解
概述 在现代高性能单片机(如ARM Cortex-M7、Cortex-A系列在MCU中的应用)中,Memory Protection Unit (MPU) 和Cache系统的协同工作对系统性能有着决定性影响。本文将深入分析MPU配置如何影响Cache命中率,多主设备对RAM访问的竞争问…...

关于list集合排序的常见方法
目录 1、list.sort() 2、Collections.sort() 3、Stream.sorted() 4、进阶排序技巧 4.1 空值安全处理 4.2 多字段组合排序 4.3. 逆序 5、性能优化建议 5.1 并行流加速 5.2 原地排序 6、最佳实践 7、注意事项 前言 Java中对于集合的排序操作,分别为list.s…...

不动产登记区块链系统(Vue3 + Go + Gin + Hyperledger Fabric)
好久没有介绍过新项目的制作了,之前做的一直都是Fisco Bcos的项目,没有介绍过Hyperledger Fabric的项目,这次来给大家分享下。 系统概述 不动产登记与交易平台是一个基于Hyperledger Fabric的综合性管理系统,旨在实现不动产登记…...

从 GPT 的发展看大模型的演进
这是一个技术爆炸的时代。一起来看看 GPT 诞生后,与BERT 的角逐。 BERT 和 GPT 是基于 Transformer 模型架构的两种不同类型的预训练语言模型。它们之间的角逐可以从 Transformer 的编码解码结构角度来分析。 BERT(Bidirectional Encoder Representatio…...
基于大模型的短暂性脑缺血发作(TIA)全流程预测与诊疗辅助系统详细技术方案
目录 系统整体架构系统部署拓扑图核心模块详细技术方案1. 术前风险预测模块算法实现伪代码:数据处理流程:2. 手术方案智能生成系统手术方案决策伪代码:手术方案生成流程:3. 麻醉智能决策系统麻醉方案伪代码:4. 术后监护与复发预测实时监测流程:5. 并发症预测系统双通道风…...
JSCH使用SFTP详细教程
文章目录 1. JSCH和SFTP基础概念1.1 什么是JSCH?1.2 SFTP协议特点1.3 JSCH的优势1.4 常用场景 2. 环境配置和依赖管理2.1 Maven依赖配置2.2 Gradle依赖配置2.3 基础配置类2.4 配置文件示例 3. SFTP连接管理3.1 基础连接类3.2 连接池管理3.3 连接测试工具 4. 文件上传…...
Trae CN IDE 中 PHP 开发的具体流程和配置指南
以下是 Trae CN IDE 中 PHP 开发的具体流程和配置指南,结合知识库内容和实际开发需求整理,并附实例说明: 一、安装与初始配置 下载与安装 Trae IDE 访问 Trae 官网 下载 macOS 或 Windows 版本。安装完成后,启动 Trae,首次运行会进入初始化向导。初始设置 主题与语言:选择…...

【Qt】构建目录设置
问题 ProjectRoot/├── src/ # 源代码│ ├── project1│ └── project2├── build/ # 构建目录│ ├── build-PCIeDemoApp-Desktop_Qt_5_9_7_MSVC2015_64bit-Debug/│ └── build-PCIeDemoApp-Desktop_Qt_5_9_7_MSVC2015_64bit-Rele…...
【仿生机器人】极具前瞻性的架构——认知-情感-记忆“三位一体的仿生机器人系统架构
基于您的深度需求分析,我将为您设计一个全新的"认知-情感-记忆"三位一体的仿生机器人系统架构。以下是经过深度优化的解决方案: 一、核心架构升级(三体认知架构) 采用量子纠缠式架构设计: 认知三角…...

Web后端快速入门(Maven)
Maven是apche旗下的一个开源项目,是一款用于管理和构建java项目的工具。 开源项目:Welcome to The Apache Software Foundation. Maven的作用: 依赖管理(方便快捷的管理项目依赖的资源,避免版本冲突问题)…...

机器学习算法:逻辑回归
1. 基础概念 定义: 逻辑回归(Logistic Regression)是一种用于解决二分类问题的监督学习算法,通过概率预测样本属于某一类别的可能性。 核心特点:输出是概率值(0~1),通过阈值&#…...
企业展示型网站模板HTML5网站模板下载指南
在当今数字化浪潮中,企业网站已成为企业展示形象、推广产品和服务的重要窗口。一个设计精美、功能完善的企业展示型网站,不仅能提升企业的品牌形象,还能吸引潜在客户,促进业务增长。而HTML5网站模板,凭借其跨平台兼容性…...
ArrayList和LinkedList(深入源码加扩展)
ArrayList 和 LinkedList 是 Java 集合框架中两种常用的列表实现,它们在底层数据结构、性能特点和适用场景上有显著的区别。以下是它们的详细对比以及 ArrayList 的扩容机制。 1. ArrayList 和 LinkedList 的底层区别 (1) 底层数据结构 ArrayList: 基于动态数组(Dynamic Ar…...
Unity UI 性能优化--Sprite 篇
🎯 Unity UI 性能优化终极指南 — Sprite篇 🧩 Sprite 是什么?—— 渲染的基石与性能的源头 在Unity的2D渲染管线中,Sprite 扮演着至关重要的角色。它不仅仅是2D图像资源本身,更是GPU进行渲染批处理(Batch…...

AI健康小屋+微高压氧舱:科技如何重构我们的健康防线?
目前,随着科技和社会的不断发展,人们的生活水平和方式有了翻天覆地的变化。 从吃饱穿暖到吃好喝好再到健康生活,观念也在逐渐发生改变。 尤其是在21世纪,大家对健康越来越重视,这就不得不提AI健康小屋和氧舱。 一、A…...
OpenCV C++ 学习笔记(五):颜色空间转换、数值类型转换、图像混合、图像缩放
文章目录 颜色空间转换cvtColor通道分离split通道合并merge数值类型转换convertTo图片混合addWeighted图片缩放resize 颜色空间转换cvtColor cvtColor 是 OpenCV 中用于将图像从一种色彩空间转换为另一种色彩空间的函数。它非常适用于各种图像处理任务,如灰度化、颜…...

如何做接口测试?
🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 01、通用的项目架构 02、什么是接口 接口:服务端程序对外提供的一种统一的访问方式,通常采用HTTP协议,通过不同的urlÿ…...

【JMeter】性能测试知识和工具
目录 何为系统性能 何为性能测试 性能测试分类 性能测试指标 性能测试流程 性能测试工具:JMeter(主测web应用) jmeter文件目录 启动方式 基本元件:元件内有很多组件 jmeter参数化 jmeter关联 自动录制脚本 直连数据库…...

SOC-ESP32S3部分:25-HTTP请求
飞书文档https://x509p6c8to.feishu.cn/wiki/KL4RwxUQdipzCSkpB2lcBd03nvK HTTP(Hyper Text Transfer Protocol) 超文本传输协议,是一种建立在 TCP 上的无状态连接,整个基本的工作流程是客户端发送一个 HTTP 请求,说明…...

字符编码全解析:ASCII、GBK、Unicode、UTF-8与ANSI
UTF - 8(全球字符能被唯一标识)、GBK、Unicode、ANSI 区别与关联 qwen模型分词器文件 1. ASCII(基础铺垫,理解编码起源) 作用:最早期为处理英文文本设计,是字符编码的基础,后演变成其他编码兼容的一部分 。范围:共 128 个字符(0 - 127),包含英文大小写字母、数字…...
《前端面试题:HTML5、CSS3、ES6新特性》
现代前端开发中,HTML5、CSS3和JavaScript ES6共同构成了三大核心技术支柱。这些技术不仅显著提升了用户体验和性能表现,更大幅提高了开发效率。本文将从技术演进、核心特性到最佳实践,系统性地介绍这三大技术的应用之道。 我们将首先探讨HTM…...

MaxCompute开发UDF和UDTF案例
文章目录 一、Java开发UDF1、创建Maven项目2、创建UDF类3、打包上传资源4、创建函数MyUDF5、SQL验证 二、Java开发UDTF1、创建Maven项目2、创建UDTF类3、打包上传更新资源4、创建函数MyUDTF5、SQL验证 三、常见问题1、发布函数报错 一、Java开发UDF 1、创建Maven项目 创建Mav…...