分享

飞控软件架构解析:裸跑还是OS调度

 山峰云绕 2022-04-11

https://m.toutiao.com/is/NWhdS5F/?=神经网络架构将很快超越人类的领域 


1 飞控软件功能探讨

一般来说,飞控系统的基本工作包括:

1、CPU接收遥控器的操作指令和传感器信号;

2、传感器的数据处理和数据融合算法运算,得到位置、姿态信息;

3、根据控制指令完成相应的控制器(姿态、位置)计算,得出控制量并输出到电机驱动;

飞控机各种功能要实现,除了优秀的硬件系统和PCB设计之外,软件系统同样至关重要。硬件和软件系统的配合,才是肉身和灵魂的遇见,进而实现系统的升华。

就飞控软件来说,其基本的功能至少应具备以下四个:时间管理、数据采集与分发、通信与交互、控制律解算。

图1 飞控软件功能

图2 应用层软件架构

所谓的时间管理就是在规定的时间内完成特定的功能任务,并且根据事件的优先级,优先完成某些使命,保证系统的飞行安全。数据采集与分发就是针对各种机载传感器和地面站、遥控设备的数据进行采集和处理,以完成对无人机的飞行状态、飞行姿态参数、地面站和遥控器操作指令等数据进行编码并通过串行接口分发至机载数据终端。控制律解算的功能为通过一定的控制算法和以及飞行状态信息、任务功能等对要达到的功能进行结算,并向执行机构输出控制指令。通信与交互的功能为完成系统内部各功能模块间的数据通信交互以及系统和地面间的数据传输和交互工作。

图3 飞控系统工作流程

图4 开源飞控软件架构

除了这些基本的功能之外,飞控软件一般还具有发动机状态监测、故障应急处理、系统自检与报警、数据保存等功能。这些功能要在极短、特定的时间片段内完成且不发生冲突,就需要依靠优秀的飞控软件系统的架构和设计实现。因此,飞控软件设计主要负责搭建合理的软件流程,使各功能模块协调有效的工作。

2 软件设计架构讨论

从上一章节的介绍知道,飞控软件承担着众多的功能,这些功能的实现并不是一件容易的事儿。除了应用开发这些巨大、繁琐的工作之外,优良的顶层架构设计多样至关重要。

就飞控软甲的组织架构而言,目前主要有两种:裸跑程序和操作系统(OS)下运行控制程序。就这两种架构而言,不同人的往往争论的不可开交,特别是在军方研发需求的引导下,OS架构被传的神乎其神。接下来,我们就来探讨一下两种架构各自的优缺点。

2.1 裸跑架构

裸跑架构又被称为前后台架构。这种架构的应用程序是在放在mian主函数里面无限循环,并通过该主函数调用相应的处理子函数,这称为后台程序。而前台程序指的就是中断程序处理异步触发事件的程序。故前台程序称为中断级程序,而后台程序称为任务级程序。

就该软件架构而言,固定周期执行的任务都要靠中断服务程序来完成,以保证时间的精确性。但是,在中断处理程序中只标记事件的发生,不做任何处理,而由后台系统调度处理。这种处理方式主要是为了避免在中断程序执行时间过长,影响后续和其他中断事件。这种设计的优点包括:

1、软件实现简单,对于软件开发人员的专业能力要求不高。以被广泛使用的STM32系列微处理器而言,该架构按照库函数再开发程序就能实现基本的系统功能;

2、该架构的开发类似于单片机编程,对CPU性能要求不算高,而且不太关注ROM/RAM;

3、相较于带OS的飞控,该架构飞控软件如果设计开发得当,系统运行会更加稳定。目前,很多工业级的飞控都采用了这种架构。

相对于这些优点,这种软件架构也同样存在缺点。

首先,对于飞行控制而言,存在大量的程序需要同时运行,大量的数据需要处理。在前后台架构下,就要求系统必须在特定的时间段内完成特定的程序运行。这就对整个系统的实时性有着很高的要求。程序一旦逻辑和时序出现偏差,将出现无法估计的严重后果。如果设计不当的话,比如某个周期的函数执行超时,后面所有的程序都会受到影响。如果程序执行时间变得不够准确,不利于对飞行器的控制,严重时会发生飞机失控的现象。

第二,程序的移植性和扩展性差,给整个程序后续改动和维护带来不便,由于各种任务都是相关的子函数,往往一个任务需要调用多个子函数。在程序改动或者维护的时候变得非常繁琐复杂。经常由于忽略某一细节而导致功能无法实现,最后导致程序的可读性降低,不利于其他人做程序修改。

2.2 OS架构

该架构就是在一个实时操作系统上运行控制程序。其中,最常见的操作系统是VxWorks 。VxWorks是美国 Wind River System 公司( 简称风河公司 ,即 WRS 公司)推出的一个实时操作系统。该系统可以在风河公司推出的实时操作系统开发环境Tornado 上开发,类似Microsoft Visual C,但是提供了更丰富的调试、仿真环境和工具。VxWorks 提供了一个快速灵活的与 ANSI C 兼容的 I/O 系统,包括 UNIX 标准的Basic I/O(creat(),remove(),open(),close(),read(),write(),and ioctl().),Buffer I/O (fopen(),fclose(),fread(),fwrite(),getc(),putc()) 以及POSIX 标准的异步 I/O。

该系统具有良好的持续发展能力、高性能的内核以及友好的用户开发环境,并具有良好的可靠性和卓越的实时性,被广泛地应用在通信、军事、航空、航天等高精尖技术及实时性要求极高的领域中,美国的 F-16、FA-18战斗机、B-2 隐形轰炸机和爱国者导弹上,甚至连1997年4月在火星表面登陆的火星探测器、2008年5月登陆的凤凰号,和2012年8月登陆的好奇号都使用了VxWorks。VxWorks系统以其良好的可靠性和卓越的实时性,在嵌入式实时操作系统领域占据着不可撼动的地位。

近年来,随着开源飞控的普及和广泛应用,Nuttx开源操纵系统被大家所熟知。NuttX是一个实时操作系统(RTOS),强调标准兼容和小型封装,具有从8位到32位微控制器环境的高度可扩展性。NuttX 主要遵循 Posix 和 ANSI 标准,对于在这些标准下不支持的功能,或者不适用于深度嵌入环境的功能(如 fork()),采用来自 Unix 和常见 RTOS (如 VxWorks)的额外的标准 API。

具有OS系统的飞控软件开发,更像是在某一操作系统上进行的二次开发。OS通过一个内核的调度来管理CPU,使得所有的模块也就是任务都能正常运行,达到相对意义的“并行”。同时采用基于优先级的可剥夺性调度算法来保证实时性。RTOS 将应用层软件分成多个任务,简化了应用软件的设计,同时使得飞行控制的实时性得到保证。

直观地说,带OS的飞控软件,其固件同时附带了一系列工具集、系统驱动/模块与外围软件接口层,所有这些软件(包括用户自定义的飞控软件)随OS内核一起,统一编译为固件形式,然后上传到飞控机硬件中,从而实现对飞控板的软件配置。

带OS的飞控系统软件架构具有整个架构的抽象性(多态性),即:为了最大限度保障飞控算法代码的重用性,其将飞控逻辑与具体的底层控制器指令实现进行了解耦合。因此,对于该架构来说,最大的优点在软件的开发的标准化、维护性、可移植性以及大系统、多设备间的兼容性。

3 总结

对飞控软件这两种不同的路线,各有其优缺点。裸跑程序和众多开发者在大学期间学习的编程知识更加贴近,不需要再额外学习一种操作系统的开发教程。因此,很多搞自动化出身、没太多软件经验的开发者倾向于直接使用底层控制协议来控制飞控板。

而带OS的飞控架构已经在更高的抽象层面上提供了更好的选择,无论是代码维护成本、开发效率、硬件兼容性都能显著高于前者。

但是,OS系统也存在高层封装机制效率较低,而飞控板性能不够,容易给飞控板造成较大的处理负载等问题。然而,随着处理器性能的不断提升,该问题已不存在实际应用上的限制。从实际用表现来看,遵循OS软件架构模式更容易实现较高处理性能,不容易产生控制拥塞,并且提升并发处理效率。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多