0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于FreeRTOS的micro(微型)ROS

strongerHuang ? 来源:Francesca Finocchiaro ? 作者:Francesca Finocchiaro ? 2020-09-25 14:16 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

编辑整理:strongerHuang 作者:Francesca Finocchiaro

关注我的读者中应该有部分是做ROS相关的工作,今天就来分享一个基于FreeRTOS的micro(微型)ROS。

一、关于ROS

ROS:Robot Operating System,,即机器人操作系统

和普通OS不一样的是,ROS主要是针对机器人,是基于操作系统之上,提供一系列程序库和工具以帮助软件开发者创建机器人应用软件。它提供了硬件抽象、设备驱动、库函数、可视化、消息传递和软件包管理等诸多功能。ROS遵守BSD开源许可协议。

ROS设计者将ROS表述为“ROS = Plumbing + Tools + Capabilities + Ecosystem”,即ROS是通讯机制、工具软件包、机器人高层技能以及机器人生态系统的集合体。

二、micro-ROS

本文说的micro-ROS,是基于ROS2进行优化的一套轻量级ROS系统,它提供了完全部署的ROS 2生态系统的大多数吸引人的工具和功能,并具有入式和低资源设备的卓越能力,可以运行在MCU硬件平台。

传统上,即使机器人包含许多ROS,ROS仍停留在微控制器边界。它们通常通过串行协议与旧版ROS中的ROS-serial之类的工具集成在一起。

在微控制器中拥有所有ROS2的功能和相同的API会不是很好吗?这正是micro-ROS提供的-机器人系统嵌入式部分内部的ROS开发生态系统。micro-ROS允许开发人员在硬件级别附近运行ROS 2节点。这使所有硬件外设都可用于该应用程序,从而使其能够直接与SPI或I?C等低级总线进行交互,以与传感器和执行器接口

微型ROS是一组分层的库,它们可以直接重用ROS 2的库,也可以使其适应资源受限设备的功能和需求。具体来说,如果我们转向ROS 2体系结构,则由微型ROS维护的层是ROS客户端库(RCL)和ROS中间件接口(RMW)。同样,RCLCPP是RCL之上的C ++抽象层,即使大多数与RCL直接接口,它也可以被微型ROS应用程序组件使用。该层在RCLC中提供了相对于ROS 2的附加功能,RCLC是用C99编写的库,其中专门设计和开发了与RCLCPP提供的功能类似的功能,例如便利功能或执行程序,以适合微控制器。

通常,ROS是基于 Linux系统之上的运行的一套系统,而本文这套微型ROS基于FreeROS运行。

这使micro-ROS在硬件和软件级别上都能与大多数嵌入式平台兼容。

但是,最终构成micro-ROS体系结构的是RMW实现,该实现基于称为Micro XRCE-DDS的中间件库。Micro XRCE-DDS是由对象管理组(OMG)定义和维护的DDS-XRCE(用于极端资源受限环境的DDS)协议的C / C ++实现。

顾名思义,DDS-XRCE是一种有线协议,允许引入以数据为中心的发布者-订阅者DDS模型进入嵌入式世界。DDS-XRCE依赖于客户端-服务器体系结构,其中客户端是用C99编写的轻量级实体,可在低资源设备中运行,而代理(C ++ 11应用程序)则充当客户端与DDS世界之间的桥梁。DDS-XRCE协议负责在这两个实体之间传递请求和消息。相应地,该代理能够通过标准DDS有线协议与DDS全局数据空间进行通信。在DDS世界中,代理通过与其他DDS参与者进行通信来代表客户。该通信由客户端代理,能够通过所有标准DDS实体与DDS进行交互的模拟DDS应用程序进行协调。代理将客户端的状态保存在其内存中,这样,即使代理断开连接,代理也可以存活。代理与客户端之间的通信遵循请求-响应模式,即双向并基于操作和响应。

三、为什么选择FreeRTOS?

由于它们的轻巧性,XRCE-DDS客户端库和microROS都易于在实时操作系统之上运行,这使它们能够满足其典型目标应用程序所提出的对时间要求严格的要求,其中涉及的任务包括要求时限或确定性响应。

具体来说,FreeRTOS已成为micro-ROS项目支持的首批RTOS之一,因此已集成到其软件堆栈中。这允许重用FreeRTOS社区和合作伙伴提供的所有工具和实现。由于微型ROS软件堆栈是模块化的,因此期望并期望交换软件实体。

FreeRTOS是开发micro ROS和Micro XRCE-DDS应用程序的理想选择。首先,它为许多不同的体系结构和开发工具提供了一个独立的解决方案,它以非常清晰和透明的方式编写,并且拥有非常庞大的用户群,从而确保了大量FreeRTOS用户将能够将其应用程序与微型ROS应用程序集成。而且,它是众所周知的高度可靠的RTOS。至关重要的是,FreeRTOS具有最小的ROMRAM和处理开销。通常,RTOS内核二进制映像的大小在6K到12K字节之间。由于要与RTOS进行资源竞争,因此,当要最小化MCU上的微型ROS应用程序的内存占用量时,这些内存是理想的选择。

在下文中,我们将讨论FreeRTOS提供的几种功能,以及微型ROS如何利用它们来获利,以优化其堆栈中组成的不同库的所需功能。

四、任务和计划程序

FreeRTOS提供了一组最少的任务实体,这些实体与调度程序的使用一起,为在应用程序中实现确定性提供了必要的工具。微型ROS客户端库(RCL,RCLC和RCLCPP)访问RTOS的资源,以控制调度和电源管理机制,从而为开发人员提供了优化应用程序的可能性。

FreeRTOS提供的任务有两种:标准任务和空闲任务。前者由用户创建,可以视为RTOS上的应用程序。至关重要的是,将微型ROS应用程序集成到RTOS中作为具有给定优先级的此类任务之一。空闲任务另一方面,优先级较低的任务只有在没有其他任务在运行时才进入运行模式。由于microROS主要针对低功耗和IoT设备,因此这些空闲任务和相关的空闲挂钩非常适合在MCU中启用深度睡眠状态。由于将无状态XRCE-DDS客户端实现为micro-ROS中间件,因此这些深度睡眠状态可能是内存易失的,也就是说,由于面向连接的中间件有线协议,可以使用没有RAM持久性的深度睡眠模式。

使用FreeRTOS调度程序,micro-ROS能够管理其主要任务以及负责传输层的任务的优先级。通常,负责网络堆栈或串行接口的任务必须优先于micro-ROS应用程序。

五、内存管理

FreeRTOS提供的最令人期望的功能(对于微型ROS开发人员和用户而言非常有趣)是堆栈管理和静态堆栈创建能力。在处理micro-ROS的任务创建时,通常,堆栈分配是关键的设计决策。FreeRTOS允许进行细粒度的堆栈大小管理,这又使程序员可以知道在程序执行期间正在使用多少堆栈内存,或例如确定堆栈内存分配是否存在于静态或动态内存中,从而确定帮助正确使用MCU的内存,这是嵌入式系统中的宝贵资源。至关重要的是,可以为微ROS提供繁重的堆栈使用方任务,并为其分配静态分配的堆栈,从而防止将来出现堆和其他任务初始化问题。

在这方面,值得一提的是,这些内存管理工具为基准化微型ROS和XRCE-DDS的内存占用量提供了理想的框架。具体而言,已进行了彻底的堆栈消耗分析,以评估XRCE-DDS客户端内存消耗。堆栈是程序员在运行应用程序之前未知的内存块。为了对其进行度量,可以使用FreeRTOS uxTaskGetStackHighWaterMark()函数,该函数返回在执行过程中XRCE-DDS任务堆栈达到最大值时未使用的堆栈量。通过将此值减去总堆栈,可以得到XRCE-DDS应用程序使用的堆栈峰值。用这种方法获得的结果汇总在此处发布的报告中。

我们还注意到,由于FreeRTOS中使用了可插拔的动态内存管理方法,因此micro-ROS能够完成所需的用于管理内存的接口。通过这种方式,已经使用heap_4作为参考实现了诸如calloc()或realloc()之类的函数。这些功能在馈入micro-ROS内存管理API之前已被包装,以便分析动态内存消耗。

与静态内存情况类似,FreeRTOS的可交换动态内存管理方法使在嵌入式系统中执行动态内存配置文件分析特别容易。的确,尽管在其他RTOS中,动态(取消)分配功能隐藏在RTOS或标准库的深处,但在FreeRTOS中,它们暴露给用户并易于定制,因此简化了处理和控制动态内存使用的过程。

六、传输资源

与客户端支持库访问FreeRTOS的特定原语和功能(例如调度机制)的方式相同,中间件实现Micro XRCE-DDS要求访问RTOS的传输和时间资源以使其正常运行。关于IP传输,在FreeRTOS的特定情况下,Micro XRCE-DDS使用在此RTOS上实现lwIP的附件。lwIP(轻型IP)是为嵌入式系统设计的,广泛使用的开源TCP / IP堆栈,旨在减少资源使用,同时仍提供完整的TCP堆栈。这使得lwIP的使用特别适用于以micro-ROS为目标的嵌入式系统和资源受限的环境。

除了TCP / IP堆栈,lwIP还有其他几个重要部分,例如网络接口,操作系统仿真层,缓冲区和内存管理部分。操作系统仿真层和网络接口允许将网络堆栈移植到操作系统中,因为它提供了lwIP代码和操作系统内核之间的通用接口。

FreeRTOS与lwIP 的集成是从头开始设计的,具有标准且熟悉的接口(伯克利套接字),并且具有线程安全性,旨在使其尽可能易于使用。而且,它可以将缓冲区管理保留在可移植层中。

请注意,XRCE-DDS客户端还支持FreeRTOS + TCP网络堆栈。FreeRTOS + TCP是用于TCP / IP堆栈协议支持的官方FreeRTOS扩展库。

还努力使FreeRTOS + TCP与micro-ROS兼容。这包括对TCP和UDP连接的支持,它们依靠FreeRTOS + TCP API来实现micro XRCE-DDS Client API所要求的抽象层,以便能够使用这些协议与代理进行通信。

此外,还存在使用FreeRTOS的时间测量功能的可能性,从而使XRCE-DDS库能够执行基于时间的任务,从而使用户看不到实现。

七、Posix扩展

允许将FreeRTOS无缝和盈利地集成到micro-ROS中的另一个显着原因是POSIX扩展的可用性。便携式操作系统接口(POSIX)是IEEE计算机协会为维护操作系统之间的兼容性而指定的一系列标准。FreeRTOS Labs提供的FreeRTOS + POSIX层实现了POSIX API的子集。

确实,尽管micro-ROS中间件具有较低的POSIX依赖关系(只是clock_gettime()函数),但整个micro-ROS堆栈具有与功能和类型定义相关的更高依赖关系。另外,由于微型ROS项目的基本原理之一是移植或重用Linux(主要是POSIX兼容操作系统)中本机编码的ROS 2的代码,因此使用了某种程度上可与Linux兼容的RTOS。POSIX显然是有益的,因为代码的移植工作量很小。

为此,使用了sleep()和usleep()之类的函数。micro-ROS的POSIX类型定义依赖项依赖于FreeRTOS内核中未定义的某些结构,例如struct timeval或struct timespec。还需要诸如type.h,signal.h或unistd.h之类的文件来定义一些标准的类型定义和结构。

对于errno.h,尽管在FreeRTOS + POSIX层中未实现,但出于编译目的,micro-ROS必须包括一些不可用的定义。

通过使用FreeRTOS + FAT库,应在micro-ROS堆栈中重构这些定义,以使FreeRTOS + POSIX具有完全的兼容性。这样,可以完全支持依赖文件系统支持的高级micro-ROS功能,例如日志记录机制。

八、教程

如何在FreeRTOS上使用Olimex STM32-E407评估板创建和运行第一个微型ROS应用程序:

https://micro-ros.github.io/docs/tutorials/core/first_application_rtos/freertos/

(公号不支持外部链接,请复制链接到浏览器打开)

九、最后

总而言之,FreeRTOS提供了运行Micro-ROS应用程序的轻量且理想的RTOS,因为它提供了广泛的所需功能,实际上构成Micro-ROS堆栈的所有模块化层都在不同级别上使用了这些功能。

随着micro-ROS和FreeRTOS的用户群迅速扩展并且引人注目的用例激增,预计在不久的将来,micro-ROS与FreeRTOS和FreeRTOS + 提供的库进一步集成。

其中,对FreeRTOS + FAT库的利用显得尤为可取,以便添加一个虚拟文件系统组件,该组件允许像在完全部署的ROS 2生态系统中一样可视化和管理日志记录操作。

还设想了专用部分中所述的内存管理工具的进一步利用,以扩展XRCE-DDS客户端的内存配置文件,从而为micro-ROS客户端提供类似的分析。

micro-ROS项目计划的另一个未来行动是采用FreeRTOS的认证版本SafeRTOS。

最后但并非最不重要的一点是,似乎值得一提的是FreeRTOS与micro-ROS典型目标应用相关的硬件集成的两个非常成功的案例,即功能强大的Crazyflie 2.1无人机ESP32 MCU的硬件。实际上,Crazyflie软件可以利用FreeRTOS的几种工具和功能来获利。微ROS应用与FreeRTOS的有关此MAV工作的演示的例子可以理解这里。至于与FreeRTOS本机集成并提供现成的Wi-Fi天线蓝牙功能的第二种硬件,则已经在该系统上进行了最新的micro ROS端口

原文标题:用于MCU,基于FreeRTOS的micro(轻量级)ROS

文章出处:【微信公众号:strongerHuang】欢迎添加关注!文章转载请注明出处。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    146

    文章

    18031

    浏览量

    369308
  • RTOS
    +关注

    关注

    24

    文章

    851

    浏览量

    121346
  • ROS
    ROS
    +关注

    关注

    1

    文章

    288

    浏览量

    17805

原文标题:用于MCU,基于FreeRTOS的micro(轻量级)ROS

文章出处:【微信号:strongerHuang,微信公众号:strongerHuang】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    硬核上车!RK3576基于Ubuntu部署ROS机器人系统详细攻略(上)

    本文适用于瑞芯微RK3562、RK3566、RK3568、RK3576、RK3588等Arm64位SoC,适配开发ROS2系统。各型号触觉智能均有配套核心板及开发板,实现了百分百全国产。ROS
    的头像 发表于 07-03 18:45 ?974次阅读
    硬核上车!RK3576基于Ubuntu部署<b class='flag-5'>ROS</b>机器人系统详细攻略(上)

    详解FreeRTOS与SAFERTOS的区别

    开源免费的FreeRTOS由Richard Barry在WHIS工作时创建,WHIS基于FreeRTOS的功能模型,通过完整的HAZOP分析,确定了功能模型和API中的所有的弱点,减轻所有薄弱环节,并采用IEC 61508 SIL 3的开发生命周期,重新设计实现了SAFE
    的头像 发表于 06-04 16:58 ?376次阅读
    详解<b class='flag-5'>FreeRTOS</b>与SAFERTOS的区别

    Micro OLED 阳极像素定义层制备方法及白光干涉仪在光刻图形的测量

    ? 引言 ? Micro OLED 作为新型显示技术,在微型显示领域极具潜力。其中,阳极像素定义层的制备直接影响器件性能与显示效果,而光刻图形的精准测量是确保制备质量的关键。白光干涉仪凭借独特
    的头像 发表于 05-23 09:39 ?205次阅读
    <b class='flag-5'>Micro</b> OLED 阳极像素定义层制备方法及白光干涉仪在光刻图形的测量

    ros2教程

    电子发烧友网站提供《ros2教程.pdf》资料免费下载
    发表于 05-23 09:12 ?1次下载

    【「# ROS 2智能机器人开发实践」阅读体验】+ROS2应用案例

    的应用。书中详细介绍了如何在ROS 2中实现二维码识别,包括二维码扫描库Zbar的使用,以及如何通过相机识别二维码。 通过学习这一部分,我了解到二维码识别的基本原理和实现步骤。首先,需要通过相机获取环境图像
    发表于 04-27 11:42

    【「# ROS 2智能机器人开发实践」阅读体验】+内容初识

    ROS 2智能机器人开发实践》内容阅读初体验 《ROS 2 智能机器人开发实践》是一本针对 ROS 2(Robot Operating System 2)这一先进机器人开发框架的实用指南。随着
    发表于 04-27 11:24

    名单公布!【书籍评测活动NO.58】ROS 2智能机器人开发实践

    手机为平台的移动互联网时代,下一个以机器人为核心的智能机器人时代,是否也会遵循这样的逻辑? 随着ROS 2的诞生,智能机器人开发迎来新篇章 ,它不仅为开发者提供了更为强大、灵活的工具,也为智能机器人
    发表于 03-03 14:18

    如何将python文件导入到ROS系统中

    本文通过使用myCobot机械臂进行QR码视觉追踪的实践案例分析,介绍如何将 python 文件导入到 ROS 系统中。
    的头像 发表于 02-11 11:08 ?850次阅读
    如何将python文件导入到<b class='flag-5'>ROS</b>系统中

    Micro LED技术加速落地!最亮红色 Micro-LED显示屏发布,多家厂商项目迎进展

    电子发烧友网报道(文/莫婷婷)随着技术的发展,微型发光二极管(Micro LED)显示面板产业链不断成熟,预计未来几年内,Micro LED将在更多消费级产品中得到应用,尤其是在对画质要求较高的场景
    的头像 发表于 02-05 07:26 ?3201次阅读

    我国Micro-LED领域首批国标获批立项

    近日,一个具有里程碑意义的消息传来,由成都辰显光电有限公司主导起草的《LED显示屏 第3-1部分:微型发光二极管显示器件 光学和光电参数测试方法》国家标准,正式获得了批准并立项。这一举措标志着我国在
    的头像 发表于 01-21 10:55 ?807次阅读

    三星布局Micro LED,未来动向引关注

    在全球新一代面板技术微型发光二极管(Micro LED)领域,中国台湾厂商占据领先地位。尽管韩国大厂三星目前尚未涉足Micro LED的生产,但已通过投资台湾厂商的方式确保货源稳定。然而,有分析指出
    的头像 发表于 11-04 14:26 ?981次阅读

    freertos最多支持多少个任务

    FreeRTOS是一个轻量级的实时操作系统(RTOS),其设计初衷就是为了提供简单、可靠且高效的实时任务管理。关于FreeRTOS最多支持多少个任务的问题,实际上并没有一个固定的上限,这主要取决于
    的头像 发表于 09-02 14:21 ?2339次阅读

    freertos和rtos区别是什么

    FreeRTOS 和 RTOS(实时操作系统)是两个不同的概念,但它们之间有紧密的联系。FreeRTOS 是一个特定的开源实时操作系统,而 RTOS 是实时操作系统的一般概念。 概念定义 RTOS
    的头像 发表于 09-02 14:18 ?3172次阅读

    freertos和裸机有什么区别

    FreeRTOS 和裸机编程是两种不同的嵌入式系统开发方法,它们在设计理念、资源使用、功能实现等方面有着显著的差异。 1. 基本概念 1.1 FreeRTOS FreeRTOS 是一个小型的、可裁剪
    的头像 发表于 09-02 14:13 ?3100次阅读

    微型逆变器和普通逆变器的区别是什么

    微型逆变器和普通逆变器是两种不同类型的逆变器,它们在工作原理、应用场景、性能特点等方面存在一些区别。以下是对这两种逆变器的比较: 定义和工作原理 微型逆变器(Micro Inverter)是一种
    的头像 发表于 08-15 11:41 ?3043次阅读