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

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 的核心作用:桥梁 + 翻译官

  1. 让“小设备”说“ROS话”:

    • 普通的单片机程序无法直接理解和使用 ROS 复杂的通信协议(DDS)。
    • Micro-ROS 为这些单片机提供了一个精简版的 ROS 客户端库。它体积很小(KB级别),可以在 ESP32、STM32 等单片机上运行(需要配合实时操作系统如 FreeRTOS)。
    • 有了这个库,单片机上的程序就能用类似 ROS 的方式:
      • 发布(Publish) 消息(比如传感器读数:温度、距离、电机转速)。
      • 订阅(Subscribe) 消息(比如接收运动指令:前进速度、转向角度)。
      • 调用服务(Service Call)提供应答(Service Response)(比如查询设备状态、发送一个配置命令)。
  2. 中间的“翻译官”(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 网络中对服务的请求转发给单片机,并把单片机的响应转发回去。
设备端 (STM32) Micro-ROS Agent ROS 2节点 注册消息类型(如sensor_msgs/Imu) 确认注册成功 发布Imu数据(XRCE-DDS格式) 转换并转发Imu数据(ROS 2 DDS格式) 发送Twist速度指令 转换并下发指令 设备端 (STM32) Micro-ROS Agent ROS 2节点

2.2 为什么服务端(Agent)能知道设备端的消息和服务?

核心机制就是上面提到的 “动态发现 + 类型注册”

  1. 设备端(单片机)声明: 当单片机上的 Micro-ROS 程序启动时,它会主动告诉连接着的 Agent:“你好,我是节点/sensor_node,我会在主题/temperature上发布类型为 sensor_msgs/msg/Temperature 的消息,我还订阅了主题 /motor_cmd。”
  2. Agent 学习与注册: Agent 收到这些信息后,学习并记住了设备端的能力(发布什么、订阅什么、提供什么服务)。它会根据收到的描述信息,在 ROS 网络中动态地注册这些主题和服务,就好像它们是由 Agent 自己发布/订阅的一样。
  3. 无缝连接: 现在,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. 参考资料

  1. DeepSeek
  2. 动手学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爬虫解析动态网页:从渲染到数据提取

一、动态网页与静态网页的区别 在开始之前&#xff0c;我们需要理解动态网页与静态网页的区别。静态网页的内容在服务器端是固定的&#xff0c;每次请求都会返回相同的结果&#xff0c;通常以HTML文件的形式存储。而动态网页则不同&#xff0c;其内容是通过JavaScript在客户端…...

LLMs之MCP:如何使用 Gradio 构建 MCP 服务器

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

VBA模拟进度条

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

MySQL强化关键_019_索引优化

目 录 一、最左前缀原则 1.完全使用索引 2.部分使用索引 3.不使用索引 4.效率折损 &#xff08;1&#xff09;使用范围查找 &#xff08;2&#xff09;索引断开 二、索引失效场景 1. 索引列参与运算 2.索引列模糊查询以“%”开始 3.索引列是字符串类型&#xff0c;查…...

高性能MCU的MPU与Cache优化详解

概述 在现代高性能单片机&#xff08;如ARM Cortex-M7、Cortex-A系列在MCU中的应用&#xff09;中&#xff0c;Memory Protection Unit (MPU) 和Cache系统的协同工作对系统性能有着决定性影响。本文将深入分析MPU配置如何影响Cache命中率&#xff0c;多主设备对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中对于集合的排序操作&#xff0c;分别为list.s…...

不动产登记区块链系统(Vue3 + Go + Gin + Hyperledger Fabric)

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

从 GPT 的发展看大模型的演进

这是一个技术爆炸的时代。一起来看看 GPT 诞生后&#xff0c;与BERT 的角逐。 BERT 和 GPT 是基于 Transformer 模型架构的两种不同类型的预训练语言模型。它们之间的角逐可以从 Transformer 的编码解码结构角度来分析。 BERT&#xff08;Bidirectional Encoder Representatio…...

基于大模型的短暂性脑缺血发作(TIA)全流程预测与诊疗辅助系统详细技术方案

目录 系统整体架构系统部署拓扑图核心模块详细技术方案1. 术前风险预测模块算法实现伪代码:数据处理流程:2. 手术方案智能生成系统手术方案决策伪代码:手术方案生成流程:3. 麻醉智能决策系统麻醉方案伪代码:4. 术后监护与复发预测实时监测流程:5. 并发症预测系统双通道风…...

JSCH使用SFTP详细教程

文章目录 1. JSCH和SFTP基础概念1.1 什么是JSCH&#xff1f;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…...

【仿生机器人】极具前瞻性的架构——认知-情感-记忆“三位一体的仿生机器人系统架构

基于您的深度需求分析&#xff0c;我将为您设计一个全新的"认知-情感-记忆"三位一体的仿生机器人系统架构。以下是经过深度优化的解决方案&#xff1a; 一、核心架构升级&#xff08;三体认知架构&#xff09; 采用量子纠缠式架构设计&#xff1a; 认知三角&#xf…...

Web后端快速入门(Maven)

Maven是apche旗下的一个开源项目&#xff0c;是一款用于管理和构建java项目的工具。 开源项目&#xff1a;Welcome to The Apache Software Foundation. Maven的作用&#xff1a; 依赖管理&#xff08;方便快捷的管理项目依赖的资源&#xff0c;避免版本冲突问题&#xff09…...

机器学习算法:逻辑回归

1. 基础概念 定义&#xff1a; 逻辑回归&#xff08;Logistic Regression&#xff09;是一种用于解决二分类问题的监督学习算法&#xff0c;通过概率预测样本属于某一类别的可能性。 核心特点&#xff1a;输出是概率值&#xff08;0~1&#xff09;&#xff0c;通过阈值&#…...

企业展示型网站模板HTML5网站模板下载指南

在当今数字化浪潮中&#xff0c;企业网站已成为企业展示形象、推广产品和服务的重要窗口。一个设计精美、功能完善的企业展示型网站&#xff0c;不仅能提升企业的品牌形象&#xff0c;还能吸引潜在客户&#xff0c;促进业务增长。而HTML5网站模板&#xff0c;凭借其跨平台兼容性…...

ArrayList和LinkedList(深入源码加扩展)

ArrayList 和 LinkedList 是 Java 集合框架中两种常用的列表实现,它们在底层数据结构、性能特点和适用场景上有显著的区别。以下是它们的详细对比以及 ArrayList 的扩容机制。 1. ArrayList 和 LinkedList 的底层区别 (1) 底层数据结构 ArrayList: 基于动态数组(Dynamic Ar…...

Unity UI 性能优化--Sprite 篇

&#x1f3af; Unity UI 性能优化终极指南 — Sprite篇 &#x1f9e9; Sprite 是什么&#xff1f;—— 渲染的基石与性能的源头 在Unity的2D渲染管线中&#xff0c;Sprite 扮演着至关重要的角色。它不仅仅是2D图像资源本身&#xff0c;更是GPU进行渲染批处理&#xff08;Batch…...

AI健康小屋+微高压氧舱:科技如何重构我们的健康防线?

目前&#xff0c;随着科技和社会的不断发展&#xff0c;人们的生活水平和方式有了翻天覆地的变化。 从吃饱穿暖到吃好喝好再到健康生活&#xff0c;观念也在逐渐发生改变。 尤其是在21世纪&#xff0c;大家对健康越来越重视&#xff0c;这就不得不提AI健康小屋和氧舱。 一、A…...

OpenCV C++ 学习笔记(五):颜色空间转换、数值类型转换、图像混合、图像缩放

文章目录 颜色空间转换cvtColor通道分离split通道合并merge数值类型转换convertTo图片混合addWeighted图片缩放resize 颜色空间转换cvtColor cvtColor 是 OpenCV 中用于将图像从一种色彩空间转换为另一种色彩空间的函数。它非常适用于各种图像处理任务&#xff0c;如灰度化、颜…...

如何做接口测试?

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

【JMeter】性能测试知识和工具

目录 何为系统性能 何为性能测试 性能测试分类 性能测试指标 性能测试流程 性能测试工具&#xff1a;JMeter&#xff08;主测web应用&#xff09; jmeter文件目录 启动方式 基本元件&#xff1a;元件内有很多组件 jmeter参数化 jmeter关联 自动录制脚本 直连数据库…...

SOC-ESP32S3部分:25-HTTP请求

飞书文档https://x509p6c8to.feishu.cn/wiki/KL4RwxUQdipzCSkpB2lcBd03nvK HTTP&#xff08;Hyper Text Transfer Protocol&#xff09; 超文本传输协议&#xff0c;是一种建立在 TCP 上的无状态连接&#xff0c;整个基本的工作流程是客户端发送一个 HTTP 请求&#xff0c;说明…...

字符编码全解析:ASCII、GBK、Unicode、UTF-8与ANSI

UTF - 8(全球字符能被唯一标识)、GBK、Unicode、ANSI 区别与关联 qwen模型分词器文件 1. ASCII(基础铺垫,理解编码起源) 作用:最早期为处理英文文本设计,是字符编码的基础,后演变成其他编码兼容的一部分 。范围:共 128 个字符(0 - 127),包含英文大小写字母、数字…...

《前端面试题:HTML5、CSS3、ES6新特性》

现代前端开发中&#xff0c;HTML5、CSS3和JavaScript ES6共同构成了三大核心技术支柱。这些技术不仅显著提升了用户体验和性能表现&#xff0c;更大幅提高了开发效率。本文将从技术演进、核心特性到最佳实践&#xff0c;系统性地介绍这三大技术的应用之道。 我们将首先探讨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…...