mooc网站开发案例,中关村手机报价大全手机排行,在跨境网站贸易公司做怎么样,帝国cms7.0网站搬家换域名换空间等安装教程机器人的应用越来越广泛了#xff0c;大家熟知的稚晖君直接创业搞机器人#xff0c;可想而至#xff0c;接下来的十年#xff0c;机器人绝对是热门的行业。
目前市面上很多机器人都是基于一套叫做ROS的系统开发的#xff0c;今天就给大家分享一个跑在MCU上#xff0c;基…机器人的应用越来越广泛了大家熟知的稚晖君直接创业搞机器人可想而至接下来的十年机器人绝对是热门的行业。
目前市面上很多机器人都是基于一套叫做ROS的系统开发的今天就给大家分享一个跑在MCU上基于FreeRTOS的轻量级microROS。
随着市场需求不断的扩大这种基于MCU的ROS将会越来越普及对于从事机器人相关工作的读者有必要了解一下。 关于ROS
ROSRobot Operating System,即机器人操作系统。
和普通OSRTOS、TSOS不一样的是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/
公号不支持外部链接请复制链接到浏览器打开 更多内容请参看
https://micro-ros.github.io/ ------------ END ------------