国外网站做调查,网站开发的前置审批是什么意思,北京博洛尼装饰公司,网站常用布局编辑整理#xff1a;strongerHuang作者#xff1a;Francesca Finocchiaro关注我的读者中应该有部分是做ROS相关的工作#xff0c;今天就来分享一个基于FreeRTOS的micro#xff08;微型#xff09;ROS。一、关于ROSROS#xff1a;Robot Operating System,#xff0c;即机… 编辑整理strongerHuang作者Francesca Finocchiaro关注我的读者中应该有部分是做ROS相关的工作今天就来分享一个基于FreeRTOS的micro微型ROS。一、关于ROSROSRobot Operating System,即机器人操作系统。和普通OS不一样的是ROS主要是针对机器人是基于操作系统之上提供一系列程序库和工具以帮助软件开发者创建机器人应用软件。它提供了硬件抽象、设备驱动、库函数、可视化、消息传递和软件包管理等诸多功能。ROS遵守BSD开源许可协议。ROS设计者将ROS表述为“ROS Plumbing Tools Capabilities Ecosystem”即ROS是通讯机制、工具软件包、机器人高层技能以及机器人生态系统的集合体。二、micro-ROS本文说的micro-ROS是基于ROS2进行优化的一套轻量级ROS系统它提供了完全部署的ROS 2生态系统的大多数吸引人的工具和功能并具有入式和低资源设备的卓越能力可以运行在MCU硬件平台。传统上即使机器人包含许多ROSROS仍停留在微控制器边界。它们通常通过串行协议与旧版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客户端库RCLRCLC和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.hsignal.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端口。更多内容请参看https://micro-ros.github.io/ 推荐阅读 专辑|Linux文章汇总 专辑|程序人生 专辑|C语言嵌入式Linux微信扫描二维码关注我的公众号