单片机和FreeRTOS上跑机器人ROS的应用

机器人的应用越来越广泛了,大家熟知的稚晖君直接创业搞机器人,可想而至,接下来的十年,机器人绝对是热门的行业。

目前市面上很多机器人都是基于一套叫做ROS的系统开发的,今天就给大家分享一个跑在MCU上,基于FreeRTOS的轻量级(micro)ROS。

随着市场需求不断的扩大,这种基于MCU的ROS将会越来越普及,对于从事机器人相关工作的读者有必要了解一下。

关于ROS

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

和普通OS(RTOS、TSOS)不一样的是,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具有最小的ROM,RAM和处理开销。通常,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/

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

更多内容,请参看:

https://micro-ros.github.io/

图片

------------ END ------------

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/154642.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

抖店与维格表的对接只需轻松几步

通过数环通,您可以使用不到几分钟的时间即可实现抖店与维格表的对接与集成,从而高效实现工作流程自动化,降本增效! 1.产品介绍 维格表是一种数据协作工具,具有多维度表格、实时在线编辑、数据可视化等特点。它可以帮助…

基于Python+OpenCV+Tensorflow图像迁移的艺术图片生成系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统![请添加图片描述](https://img-blog.csdnimg.cn/dbda87069fc14c24b71c1eb4224dff05.png)四. 总结 一项目简介 基于PythonOpenCVTensorfl…

Apache ECharts简介

二十九、Apache ECharts 29.1 介绍 Apache ECharts 是一款基于 JavaScript 的数据可视化图表库,提供直观、生动、可交互、可个性化定制的数据可视化图表。 官网地址:https://echarts.apache.org/zh/index.html 常见效果展示: 1). 柱形图 …

NodeMCU ESP8266构建Web Server网页端控制设备

NodeMCU ESP8266构建Web Server网页端控制设备 前言 NodeMCU ESP8266 内部集成了TCP/IP协议栈,可以快速构建网络功能,搭建联网应用的硬件平台; ESP8266可以作为WiFi接入点(Station),这样可以方便连接互联…

网站SSL证书过期了

当网站的SSL证书到期时,这可能会对网站的安全性和可信度产生负面影响。SSL证书是保证网站安全连接的重要组成部分,它通过加密传输数据,确保用户与网站之间的信息传输安全可靠。然而,一旦SSL证书过期,可能会引发一系列问…

VM——绘制亮度均匀性曲线

1、需求:检测汽车内饰氛围灯的亮度均匀性,并绘制均匀性曲线 2、结果: 3、方法: 主要分为3步 (1)提取氛围灯ROI,忽略背景 (2)对提取到的ROI图进行切片处理,计算出每个切片的亮度均值 (3)绘制均匀性曲线 3.1 提取氛围灯ROI step1: 转成黑白图 step2:通过blob和…

北斗成为全球民航通用卫星导航系统

北斗成为全球民航通用卫星导航系统 日前,包含北斗卫星导航系统(以下简称“北斗系统”)标准和建议措施的《国际民用航空公约》附件10最新修订版正式生效。这标志着北斗系统正式加入国际民航组织(ICAO)标准,成…

【Flink】系统架构

DataStream API 将你的应用构建为一个 job graph,并附加到 StreamExecutionEnvironment 。当调用 env.execute() 时此 graph 就被打包并发送到 JobManager 上,后者对作业并行处理并将其子任务分发给 Task Manager 来执行。每个作业的并行子任务将在 task…

2023.11.19使用flask制作一个文件夹生成器

2023.11.19使用flask制作一个文件夹生成器 实现功能: (1)在指定路径上建立文件夹 (2)返回文件夹的路径和建立成功与否的提示 main.py import os from flask import Flask, request, jsonify, render_templateapp F…

【外汇天眼】交易之路:从无知到觉醒,揭秘成功交易员的五个成长阶段

世界顶尖交易员的成功背后隐藏的真正秘诀引人瞩目。许多人梦想着像电影中的主角一样,成为一名成功的金融交易员。尽管开设交易账户相对简单,但要达到稳定盈利的境界确实非常不容易。众所周知,在衍生品市场中,有80%甚至90%以上的交…

企业AI虚拟ip形象定制的应用场景

随着AI人工智能和云计算等新技术的不断发展和应用,AI智能数字人已经演化成为了更加智慧的生命体,在服务企业和人类方面有了更高质量,特别是作为品牌形象代言人,通过高逼真模拟人类的外貌、声音和行为,在使得品牌在竞争…

城市交通领域的新趋势:地铁列车可视化

随着城市化进程的不断加速,地铁作为一种便捷、快速的城市交通方式,受到了越来越多人的青睐。地铁列车可视化,作为地铁运营管理中的一项重要工作,不仅可以提高列车运行效率和安全性,还可以为乘客提供更加舒适、便捷的乘…

leetcode算法之分治-归并

目录 1.排序数组2.数组中的逆序对3.计算右侧小于当前元素的个数4.翻转对 1.排序数组 排序数组 //分治-归并 class Solution {int tmp[50010]; public:vector<int> sortArray(vector<int>& nums) {mergeSort(nums,0,nums.size()-1);return nums;}void mergeS…

源启容器平台KubeGien 打造云原生转型的破浪之舰

云原生是应用上云的标准路径&#xff0c;也是未来发展大的趋势。如何将业务平滑过渡到云上&#xff1f;怎样应对上云期间的各项挑战呢&#xff1f;中电金信基于金融级数字底座“源启”打造了一款非常稳定可靠、多云异构、安全可控、开放灵活的容器平台产品——源启容器平台Kube…

主播-产品痛点话术

—、用户体验差我们的产品在用户体验方面存在一些问题。首先&#xff0c;产品的操作流程不够顺畅&#xff0c;导致用户在使用过程中经常遇到困扰。另外&#xff0c;我们的产品界面设计不够美观&#xff0c;无法给用户带来愉悦的使用体验。针对这些问题&#xff0c;我们将对产品…

Linux ps -ef|grep去除 grep --color=auto信息

linux 监控 进程判断是否启动可通过该指令实现 ps -ef|grep java指令结果为 # -v 参数有过滤作用 ps -ef|grep java |grep -v grep

Unity 头顶图文字性能优化

如图&#xff1a;常规的排版&#xff0c;会有很多Batches。这是优化后的Batches只有3。 常用解决方案&#xff1a; 1、创建两个Canvas&#xff0c;一个放所有文本Text&#xff0c;一个放所有Image。但这里有会有两个问题&#xff1a;一旦文字夹在两个Image中间&#xff0c;还有…

外汇天眼:经济调控之术!升息如何化解通货膨胀的困扰?

为了遏制通货膨胀&#xff0c;美国在过去的一段时间一直持续进行升息。尽管通胀数据的降幅并不迅速&#xff0c;但至少上涨势头得到了抑制。那么&#xff0c;升息为何能够遏制通胀呢&#xff1f;本文将简要探讨这一问题。 通货膨胀的根本原因在于货币供应量过多&#xff0c;也就…

深度学习卫星遥感图像检测与识别 -opencv python 目标检测 计算机竞赛

文章目录 0 前言1 课题背景2 实现效果3 Yolov5算法4 数据处理和训练5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **深度学习卫星遥感图像检测与识别 ** 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐…

中间件安全:Apache Tomcat 弱口令.(反弹 shell 拿到服务器的最高控制权.)

中间件安全&#xff1a;Apache Tomcat 弱口令. Tomcat 是 Apache 软件基金会&#xff08;Apache Software Foundation&#xff09;的 Jakarta 项目中的一个核心项目&#xff0c;由 Apache、Sun 和其他一些公司及个人共同开发而成。 通过弱口令登录后台&#xff0c;部署 war 包…