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

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

3天内不再提示

关于基于RT-Thread的无人机数据记录仪的设计与实现

电子设计 来源:网络整理 作者:工程师吴畏 2018-06-13 16:52 次阅读

0 引言

传统的无人机数据记录仪仅仅是记录无人机在整个飞行过程中各状态参数的机载电子设备,大多采用FPGA作为控制器,NAND Flash作为存储单元,SRAM作为数据缓存,以并行的方式完成数据的缓存和处理[1-2],虽然也能实现飞行数据的有效存储,但又产生了功耗大和体积大的问题。而且FPGA需要外部存储模块(如EEPROM或Flash)来存储编程文件[2-3],相比于ARM内置SRAM和Flash运行和存储编程文件,这无疑增加了外围电路的复杂性。此外,以NAND Flash作为大容量存储设备,就必须设计相应的坏块管理算法和擦写平衡算法,在实际存储过程中进行实时ECC校验,并实时维护一个NAND Flash坏块表,以防把数据写入坏块造成无法读出[4-5],大大降低了系统的存储效率。

日新月异的无人机应用场合要求数据记录仪不仅要记录飞行器的飞行状态,还要记录各种任务设备的指令、数据和工作信息以便离线使用,功能举例如下:

(1)存储差分GPS基站和移动站的原始星历数据做后差分解算,提高航测作业的位置解算精度;

(2)在静止时和飞行时存储导航传感器的所有高频原始数据,进行离线噪声建模,优化滤波模型;

(3)在地面和机上分别记录数据链上行和下行的指令和数据,离线分析链路可靠性。

除此之外还有诸多功能等待开发和挖掘,但这些功能都要求数据的存储必须满足实时、可靠、低功耗、小型化和易存取等特点。本文结合无人机领域的实际应用需求,设计了一种基于嵌入式实时操作系统RT-Thread的数据记录仪。

1 功能模块选型

为满足实时、可靠、低功耗、小型化、低成本和易存取的无人机数据记录仪设计需求,从低功耗、小型化和低成本的角度考虑,ARM微处理器必然是最优选择;从满足实时性和高可靠的角度考虑,在硬件平台上移植嵌入式实时操作系统,通过线程的时间片轮转来保证无疑是最优选择;从易存取的角度考虑,使用SD卡作为存储介质能够避免系统将CPU资源浪费在擦写平衡和ECC校验等环节,使用USB进行数据读取能提高数据读取效率。

本文所设计的无人机数据记录仪使用的硬件嵌入式平台为STM32F4系列微处理器,使用该微处理器的SDIO模块读写SD卡,接收、缓冲并存储多路串口的输入数据,USB模块读取存储的数据,并移植了嵌入式实时操作系统RT-Thread进行线程调度和文件系统支持,主体架构如图1所示。

关于基于RT-Thread的无人机数据记录仪的设计与实现

RT-Thread相较于?滋C/OS-III和FreeRTOS等嵌入式实时操作系统有很多优点:首先是开源的,且符合POSIX规范,稳定性高;支持Fatfs文件系统,采用多级目录结构,能够对不同类型、不同来源和不同用途的无人机数据进行更科学化的文件管理,且能够与PC端实现文件互传,便于数据导出;采用基于优先级的全抢占式多线程调度算法和基于时间片的轮转调度算法,使用内核对象(包括信号量、互斥量等)进行线程同步,极大地优化了线程的执行和调度效率,提升了微处理器的数据存取性能,在此基础上进行有效的硬件驱动开发和应用程序开发就能够满足无人机行业对数据存取的要求。

2 硬件驱动开发

硬件驱动的开发主要为3部分,包括在嵌入式实时操作系统RT-Thread的架构上进行串口模块、SDIO模块和USB模块的驱动开发。RT-Thread为这些模块定义了中间层框架,这个框架向上和向下各提供一个接口,向下是底层驱动对硬件的接口,这个接口完成对硬件模块的控制并从硬件获得数据,向上是与应用程序交互的接口,通过这个中间层框架,应用程序就可以通过统一的接口访问底层硬件,即使硬件有所改动上层代码几乎不用改动,提高了系统的移植性[6]。

串口驱动主要包括串口的初始化程序以及中断接收程序,以实现对外部输入数据的快速响应。SDIO驱动主要包括SD卡的初始化程序、SD卡的产品信息读取函数和SD卡读写函数,用来实现对SD卡的功能配置,还需要在SD卡上运行Fatfs文件系统,以文件系统的组织形式进行串口数据的快速存储。USB驱动用于实现PC对SD卡中存储数据的拷贝,以便在PC上进行处理和分析,这就需要开发USB的大容量存储设备驱动[7],而USB主要通过描述符(descriptor)进行接口描述,本文按照如下结构配置描述符[8]:一个设备描述符,采用USB2.0协议,并支持一个配置描述符;一个配置描述符,包含一个接口描述符;一个接口描述符,接口设备类为Mass Storage类,下设两个端点;两个端点描述符,一个IN端点和一个OUT端点负责数据接收和发送,并都采用块传输形式,最大传输数据包长度为64 B。描述符配置完毕后,USB就可以响应大容量存储的各类设备请求并按照标准的USB2.0协议进行数据传输了。

最后将这3个模块的底层驱动与RT-Thread中间层框架实现对接,就可以通过调用RT-Thread应用层的标准设备接口进行应用程序开发了。

3 多线程数据缓冲存储策略

在多通道数据量大且复杂度高的应用场合,如果把非周期字节流的接收和存储放在一个线程里去执行,难免会引发存储设备的频繁写入,大容量存储设备大多以块而非字节为最小写入单位,一次只写入几个字节与写入整块的时间相同,一次只写入几个字节必然造成CPU资源的浪费,而存储设备的读取和写入往往是线程中最耗时的环节,这样势必会降低整体系统的存储效率。如果恰巧在线程执行过程中有新的数据到来,CPU就无法及时响应,势必会影响实时性,造成数据损失。

为保证数据存储的完整和可靠,且不过多占用CPU资源影响其他线程调度,本文创新地提出了多线程数据缓冲技术,遵循“先接收后缓冲再存储”的原则,即设计3个线程分别接收数据、缓冲数据和存储数据,并合理分配CPU资源,让接收线程处理的数据最少,缓冲线程处理的数据适中,存储线程处理的数据最多。根据LIU C L和LAYLAND J在文献[9]中提出并证明的结论,在实时操作系统中,单调速率调度(RMS)算法的线程设置必须满足周期越短,优先级越高的规律,因此上述3个线程的优先级设置应满足“执行周期递增,优先级递减”的原则,具体线程设计思路如图2所示。

关于基于RT-Thread的无人机数据记录仪的设计与实现

在实际数据到来后,处于最高优先级的接收线程可以快速响应并将接收到的字节流及时写入一级缓冲区,一级缓冲区的大小可以设置为256 B左右,一级缓冲区存满后则通知缓冲线程执行;处于中等优先级的缓冲线程启动后就迅速把一级缓冲区的数据拷贝到二级缓冲区中,并将一级缓冲区清零,数据指针复位,使其不影响下一次接收任务的正常写入,二级缓冲区的大小可以设置为2 048 B左右,必须显著大于一级缓冲区的大小,二级缓冲区存满后则通知存储线程执行;处于低优先级的存储线程启动后就迅速把二级缓冲区中的数据拷贝到三级缓冲区中,并将二级缓冲区清零,数据指针复位,使其不影响下一次二级缓冲区的正常写入,三级缓冲区设置成一个队列结构,从二级缓冲区拷贝过来的数据就按照队列依次写入三级缓冲区,由于SD卡一次最小写入单位是512 B,为提高对存储设备的写入效率,就必须严格控制写入SD卡的字节数为512的整数倍,写入SD卡完成后再将剩余数据的指针移到三级缓冲区的开头,并将下一次移进来的数据放在这些数据的末尾,保证下一次写入数据的正确性和高效率,而且每个线程执行完成后都同步计算至下次触发的超时时间,保证缓冲区的数据即使不满也能通过触发超时逐步转存最后写入SD卡,程序执行流程如图3所示。

关于基于RT-Thread的无人机数据记录仪的设计与实现

通过以上3个线程和三级缓冲区对数据进行处理后,相较于使用一个单一线程进行数据接收和存储,完全避免了数据丢失问题和SD卡频繁写入的资源浪费问题,拆分后串口3个线程的CPU时间片轮转过程如图4所示。

关于基于RT-Thread的无人机数据记录仪的设计与实现

从操作系统多线程调度的时间片轮转来看[10],接收线程处理的数据量最小,其占用的CPU时间片也很少,即使在缓冲线程和存储线程的执行过程中有数据输入,接收线程也可以抢占较低优先级的缓冲线程和存储线程得以执行,保证不丢失任何输入数据。而且由于接收线程执行时间短,执行完毕后缓冲线程和存储线程也能从之前被抢占的地方继续执行,将数据流汇聚成数据块再进行写入,显著提高数据的存储效率,降低SD卡读写的耗时。

4 系统性能测试

为验证软硬件设计的正确性和高效性,接下来进行了小批量试制,系统实物如图5所示,并在试制完成的数据记录仪上进行系统性能测试。

关于基于RT-Thread的无人机数据记录仪的设计与实现

拟定如下测试方案:连接PC和数据记录仪,通过上位机软件向数据记录仪的3个串口同时以115 200的波特率发送不同数据,频率均为10 Hz,数据量均为1 000 B/次,模仿无人机应用中的高频次连续数据,分别以单线程接收存储和多线程数据缓冲存储两种方法进行测试,在数据记录仪进行数据存储的同时PC上也通过上位机软件进行发送数据的同步存储,连续不间断工作24小时进行压力测试,完成后通过USB口将数据记录仪存储的3个不同文件拷贝到PC上,以上位机存储的发送数据为基准,计算两种方法的数据存储率、CPU实际占用率和SD卡读写次数,结果如图6所示。

关于基于RT-Thread的无人机数据记录仪的设计与实现

通过这个测试方案不仅验证了整个系统软硬件设计的可靠性,还对单线程存储策略和多线程数据缓冲存储策略进行了对比。测试结果表明,多线程数据缓冲存储策略因为增加了线程的调度,虽然增加了CPU的实际占用率,但这与其带来的数据存储率的显著提升相比是微不足道的,而且这种方式大幅降低了存储设备同等数据量下的读写频次,延长了存储设备的使用寿命,明显优于单线程存储策略,且在长时间、大数据输入压力测试的情况下仍能维持很好的数据存储性能,数据存储率为100%,达到了设计的预期效果。最后进行实际应用测试,准备两个数据记录仪,将一个数据记录仪安装在小型四旋翼无人机上,存储无人机飞行数据和差分GPS移动站接收机的后差分数据,另一个在地面存储差分GPS基站接收机的后差分数据,进行实际多频次高强度飞行后利用第三方软件进行后差分解算。经测试,数据均无丢包,工作均正常,能够满足高强度飞行任务的需要。

5 结论

本文以实际无人机行业应用为牵引,设计了一款基于RT-Thread的实时、可靠、低功耗、小型化和易存取的无人机数据记录仪,通过多线程数据缓冲存储策略实现了大量连续数据输入条件下的高效率、高可靠存储,并能通过USB连接线将存储的数据快速导出到PC中进行事后分析,能够满足日益复杂的无人机行业应用对数据记录仪的要求。另外,多线程和多级缓冲区的数据处理模式不仅局限于嵌入式领域,对于需要多通道数据处理的个人计算机和服务器软件开发也有一定的借鉴作用。

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

    关注

    224

    文章

    9888

    浏览量

    174827
  • 数据记录仪
    +关注

    关注

    0

    文章

    123

    浏览量

    13239
收藏 人收藏

    评论

    相关推荐

    RT-Thread记录(一、版本开发环境及配合CubeMX)

    RT-Thread 学习记录的第一篇文章,RT-Thread记录(一、RT-Thread 版本、RT-T
    的头像 发表于 06-20 00:28 4493次阅读
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>记录</b>(一、版本开发环境及配合CubeMX)

    RT-Thread记录(十、全面认识 I/O 设备模型)

    学完 RT-Thread 内核,从本文开始熟悉了解 RT-Thread I/O 设备管理相关知识。
    的头像 发表于 06-30 10:38 3554次阅读
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>记录</b>(十、全面认识 I/O 设备模型)

    RT-Thread记录(二、RT-Thread内核启动流程)

    在前面我们RT-Thread Studio工程基础之上讲一讲RT-Thread内核启动流程.
    的头像 发表于 06-20 00:30 4426次阅读
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>记录</b>(二、<b class='flag-5'>RT-Thread</b>内核启动流程)

    RT-Thread记录(五、RT-Thread 临界区保护)

    本文聊聊临界区,以及RT-Thread对临界区的处理
    的头像 发表于 06-20 16:06 4298次阅读
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>记录</b>(五、<b class='flag-5'>RT-Thread</b> 临界区保护)

    无人机突破性的电池管理设计

    针对无人机突破性的电池管理:2S1P电池管理系统(BMS)参考设计将无人机电池组转换为智能诊断黑匣子记录仪。这款智能诊断黑匣子记录仪可精确监视剩余电量,并在整个电池使用期全程保护锂离子
    发表于 06-26 09:42

    RT-Thread实现USB虚拟串口的过程记录

    记录——基于 RT-Thread 实现 USB 虚拟串口记录一下我在正点原子 F429 阿波罗开发板上实现 USB 虚拟串口的过程,希望可以
    发表于 01-26 06:31

    【资料】基于RT-Thread的四轴飞控项目汇总

    1、基于RT-Thread的开源飞控StarryPilot近年来无人机应用市场日趋火热,无人机开始被应用在多个领域之中,比如航拍,植保,运输,安防等。随着应用场景的增加,对于无人机的大
    发表于 03-28 15:24

    基于RT-Thread+RA6M4的多路串口记录仪设计方案分享

    1、基于RT-Thread+RA6M4的多路串口记录仪设计本项目制作了一个支持多路串口的记录仪,能记录下多个串口收到的数据,并存储在外部的f
    发表于 07-18 18:24

    基于VxWorks的无人机视频记录仪实现

    无人机(UAV)投入作战使用的最大优势一直体现在情报侦察上,而视频图像信号是无人机的主要侦察信息,因此,视频记录仪无人机系统一个重要的信息获取手段。当前,各种类
    发表于 08-06 09:37 17次下载

    RT-Thread开发,如何有效学习RT-Thread的五个步骤

    RT-Thread推出RT-Thread Inside战略开放RT-Thread开发平台授权合作,与硬件十万个为什么合作首次推出第一款RT-Inside的开发板——iBox物联网开发套
    的头像 发表于 09-25 09:55 3.4w次阅读
    <b class='flag-5'>RT-Thread</b>开发,如何有效学习<b class='flag-5'>RT-Thread</b>的五个步骤

    记录——基于 RT-Thread 实现 USB 虚拟串口

    记录——基于 RT-Thread 实现 USB 虚拟串口记录一下我在正点原子 F429 阿波罗开发板上实现 USB 虚拟串口的过程,希望可以
    发表于 12-02 17:21 6次下载
    <b class='flag-5'>记录</b>——基于 <b class='flag-5'>RT-Thread</b> <b class='flag-5'>实现</b> USB 虚拟串口

    RT-Thread全球技术大会:RT-Thread对POSIX的实现情况介绍

    RT-Thread全球技术大会:RT-Thread对POSIX的实现情况介绍             审核编辑:彭静
    的头像 发表于 05-27 16:52 1565次阅读
    <b class='flag-5'>RT-Thread</b>全球技术大会:<b class='flag-5'>RT-Thread</b>对POSIX的<b class='flag-5'>实现</b>情况介绍

    RT-Thread记录(八、理解RT-Thread内存管理)

    记得最初学习 RT-Thread ,对于内存管理我也是简单看看然后一笔带过,当时觉得用不上,在我做的一些传感器单品项目上,对于内存管理确实知道与不知道没什么关系,但是随着认知的增长,项目复杂程度增加,发现内存管理还不可或缺,于是今时今日正好再次来更新 RT-Thread
    的头像 发表于 06-23 10:11 1783次阅读
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>记录</b>(八、理解<b class='flag-5'>RT-Thread</b>内存管理)

    RT-Thread文档_RT-Thread 简介

    RT-Thread文档_RT-Thread 简介
    发表于 02-22 18:22 5次下载
    <b class='flag-5'>RT-Thread</b>文档_<b class='flag-5'>RT-Thread</b> 简介

    RT-Thread文档_RT-Thread SMP 介绍与移植

    RT-Thread文档_RT-Thread SMP 介绍与移植
    发表于 02-22 18:31 7次下载
    <b class='flag-5'>RT-Thread</b>文档_<b class='flag-5'>RT-Thread</b> SMP 介绍与移植