APP下载

依托神经网络框架的姿态控制算子设计

2022-08-02冯明涛马卫华

航天控制 2022年3期
关键词:算子本体姿态

冯明涛 马卫华 李 悦

1.北京航天自动控制研究所,北京 100854 2.宇航智能控制技术国家级重点实验室,北京 100854 3.四川航天技术研究院,成都 610100

0 引言

随着航天技术的发展,运载火箭逐渐由串联向并联、由简单到复杂的方向发展。传统的运载火箭控制系统软件设计模式链条过长,沟通成本高,软件开发效率较低,为了满足越来越庞大的航天运载火箭软件研制需求,亟需对现有控制系统软件的设计模式进行改进。

目前常用的姿态控制软件设计模式主要包括基于模型的设计方法[1-4]、基于可复用技术的设计方法[5-8]等。这些软件设计方法旨在从不同方面缩短软件开发周期,提高开发效率,增强软件可靠性,但其产生的软件代码规模仍较为庞大,并且设计方法较为繁琐耗时,灵活性不足。本文在分析现有控制系统飞行软件功能要求的基础上发现,神经网络框架的诸多优点较好地满足了控制系统软件设计需求。框架包含了领域内常用的概念、公式、算法、模型等内容,用户层一般使用高级编程语言,后端可以自动进行代码优化,无需人工参与。软件开发人员利用框架可以便捷地搭建神经网络模型,并且训练好的端到端模型可以快速部署到其他平台或环境中,整个过程简单易实现。因此本文提出利用神经网络框架的设计方法建立运载火箭控制系统软件设计框架。

总结多个飞行控制软件发现,姿态控制系统软件较制导、导航系统更有规律性,便于进行设计模式的研究,因此本文选择姿态控制作为研究对象,探索姿态控制软件框架的设计技术,重点对姿态控制算子的设计技术进行了讨论。

基于该框架,软件开发人员可以利用已有的算子更快速地进行姿态控制软件的开发,生成的端到端模型可以快速进行部署。姿态控制算子及框架的设计方法与流程后续还可以应用于制导及导航领域软件框架的设计中。

本文第1节对姿态控制软件系统和神经网络框架进行了概述,第2节分析了姿态控制软件框架的各项设计要素;第3节对姿态控制算子的设计技术进行了具体的介绍。

1 姿态控制软件和神经网络框架

在运载火箭控制系统中,姿态控制是重要一环,其任务是根据预先拟定的姿态控制程序角或者制导系统给出的导引指令,实时准确地控制箭体的飞行姿态,确保火箭飞行稳定。飞行软件是箭上控制系统参与飞行控制的软件的总称,与硬件一起完成控制功能[9]。根据多个飞行控制软件任务书中姿态控制模块的内容,归纳出姿态控制软件部分需要实现的功能:姿态角信号的采集和处理,姿态角偏差计算、增益计算、数字校正网络计算等,最后综合各种信息,输出执行机构的动作指令。

在软件领域,框架是一种微体系结构,为特定领域内的软件系统提供未完全实现的模板,它可以是一个将要被扩展或/和复用的子系统[10]。框架提供特定的功能,包含支撑程序、代码、库、工具集以及API(应用程序接口)等内容,这些部件汇集在一起用于支持软件或系统的开发。应用开发人员只需关注应用系统特有的部分,按既定规则加入应用所需的部分就可完成开发,过程更加简便快速。

在当前热门的机器学习领域,为了加快神经网络程序编写、模型训练与部署,各类神经网络框架有了长足的发展。从最早发布的Theano,到之后的Caffe、Torch、TensorFlow等,再到当前业内主流的PyTorch、TensorFlow2.x,以及国内发布的PaddlePaddle、MindSpore、Jittor等框架层出不穷。基于这些框架,开发者可以通过Python语言调用神经网络算子进行模型的快速生成,模型的训练与部署也可以通过简单的函数调用实现,并且框架内部固化的性能优化策略有效提高了Python代码的运行速度。可以说神经网络框架极大促进了机器学习相关软件的开发,对机器学习的飞速发展起到了重要作用。

2 姿态控制软件框架设计分析

对比神经网络框架的各项功能和姿态控制软件的功能需求发现,神经网络框架的多种功能均可以应用到姿态控制软件设计中。实现神经网络需要一组固定的构造组件,包括节点表示、卷积计算、池化、激活、模型存储与部署等等,这些组件均可以在函数层级实现。而实现姿态控制需要程序角滤波、姿态偏差计算、姿态控制方程计算等组件,这些组件同样可以用函数表示形成算子,再嵌入到神经网络框架后即可按既定的使用方法调用所需算子。神经网络框架使用计算图来表达数学表达式,主要利用计算图实现神经网络的前向计算和反向传播,而姿态控制计算只需利用前向计算部分即可。框架训练得到的端到端模型可以部署到CPU、GPU等不同硬件平台上使用,姿态控制软件接收程序角作为输入,得到伺服机构的输出,也属于端到端的模型,可以利用框架进行姿态控制模型硬件平台部署。此外,神经网络框架包含的计算资源调度、内存管理等原理和方法均可以应用到姿态控制软件设计框架中。

框架要满足各种计算需求,除了数据以外,算子的作用举足轻重。如图1所示,在计算图中,节点包括数据和算子,算子接收数据,经处理后得到的结果可以作为节点继续参与计算,通过算子可以将所有的数据连接到一起形成完整的计算图。此外,算子具有高度的抽象性,可以涵盖领域内的各种计算需求。算子在框架内部表示为函数的形式,对外提供接口,用户在前端通过调用所需的算子接口完成设计。可以说,算子是姿态控制软件框架最核心的要素之一,因此本文着重选择了算子这一要素进行研究。

图1 软件框架算子示意图

3 姿态控制软件框架算子设计

3.1 对算子进行知识建模

本节对姿态控制领域的相关知识进行了本体建模,将姿态控制软件系统框架用到的诸多概念如公式、参数、函数、算法等进行明确的表示,并确立它们之间的相互联系,从而为算子的程序编写及框架开发提供总体性和方向性的指导。

本体论是对某一概念化所做的一种显式的解释说明,可以使用知识表达语言来描述本体中的对象以及它们之间的关系[11]。一般而言,本体模型在构成上主要包含5种组件:类、属性、函数、公理和实例。文献[12]将本体理论和方法应用于运载火箭晃动分析领域,开发了基于本体的火箭晃动计算分析软件模块,实现了分析计算知识的公用性、可拓展性和配置灵活性。文献[13]提出了面向行为与事件的空间目标态势本体模型,基于该模型实现了空间目标碰撞威胁的等级推理与预警。

本文按照如图2所示的步骤建立姿态控制软件系统框架算子的本体模型,以期对姿态控制算子进行规范而清晰的描述。

图2 本体建模流程图

参照多个飞行控制软件姿态控制模块的内容,总结出在多数情况下,姿态控制软件的运行流程一般如图3所示。其中程序角滤波完成对制导模块输入的程序角的滤波处理,姿态偏差计算输出偏差角,姿态控制系统参数计算包括增益系数计算和控制网络计算,利用得到的姿态控制系统参数可以计算舵偏角的输出,最后一步对舵偏角值进行处理得到伺服输出。按照该流程依次调用姿态控制算子,可以实现基本的姿态控制功能。

图3 姿态控制软件运行流程图

根据姿态控制软件系统的功能,将本体模型分为如表1所示的6个根类。依据此表,利用Protégé工具建立姿态控制软件系统的本体模型。Protégé是一个免费的开源软件,为用户提供了一套工具来构建本体领域模型和基于知识的应用程序,是本体构建的常用开发工具。本文利用Protégé建模的主要工作包括添加姿态控制系统本体类及其子类结构层次并建立类的关系属性和数据属性。关系属性用来描述类与类之间及类与个体间的相互关系,数据属性是对类和个体自身的属性描述。

表1 本体模型类(#表示暂不予考虑)

在Protégé中可以依照表2建立本体模型,包含类的层级关系以及类的数据属性和关系属性。基于该本体模型,可以在软件中快速查询姿态控制算子的内容和各个算子之间的关系,为代码编写提供指导。此外,本体模型易于拓展,在已建立的此模型基础上,可以便捷地加入新的内容。

3.2 姿态控制算子

依据3.1节的建模结果,可以将表2中的子类作为姿态控制算子,算子在代码中表现为函数形式,数据属性1作为函数的输入参数,数据属性2作为函数的输出结果。接下来对每个类包含的算子进行详细介绍。

3.2.1 计算网络算子

姿态控制算法需要用到一些计算网络如滤波网络、三通道控制网络等,这里所述的网络在数学上表示为经过z变换之后的分式,归一化后的网络如式(1)所示,式中aj和bj分别为网络的分子系数和分母系数,m和n为分子和分母的阶数。本文对该形式的网络计算进行了设计,如图4所示,通过分子和分母系数、网络阶数、递推变量初值可以唯一定义一个网络,在得到输入时可以计算输出,同时更新递推中间变量。

图4 计算网络算子

(1)

3.2.2 程序角滤波算子

基于3.2.1节所述网络计算函数,在已知滤波网络的网络阶数和分子、分母系数后,调用网络初始化函数可以初始化一个滤波网络。输入制导模块给出的程序角,调用网络输出函数可以输出经过滤波处理后的程序角。

3.2.3 姿态角偏差算子

姿态角偏差为程序角与实际姿态角之间的差值,姿态角偏差算子完成姿态角偏差的计算及输出,如图5所示,输入参数为实际姿态角与程序角,实际姿态角由导航模块给出,程序角为滤波模块滤波后的程序角。默认第一个参数为姿态角,计算方式为姿态角减去程序角,也可依具体算法改变参数顺序。

图5 姿态角偏差算子

3.2.4 姿态控制系统参数算子

姿态控制系统参数计算包括控制增益和三通道控制网络计算。本文暂不讨论控制增益计算,直接使用已知的增益系数。三通道控制网络按照3.2.1节所述计算方式得到。初始化计算时其输入参数为网络阶数、分子和分母系数以及网络初始化值,输出为已初始化的网络;进行输出计算时给出网络输入,经过函数解算可以得到输出值。

3.2.5 舵偏角算子

(2)

3.2.6 伺服输出算子

对于伺服输出,本文暂仅讨论舵机输出和涵道输出。舵机输出计算使用俯仰和偏航通道的舵偏角,涵道输出计算使用滚转通道的舵偏角,它们均对输出进行了限幅,用限幅边界作为算子的参数输入,调用该算子可以直接得到舵机角度输出或涵道的推力输出。

3.3 将算子嵌入神经网络框架

比较分析主流的一些神经网络框架后,本文最终选择了Jittor[13](计图)进行姿态控制软件框架的设计。Jittor是清华大学在2020年发布的一个深度学习框架,相比于其他框架,其主要创新点在于提出了统一图的计算表示方法,将静态图与动态图结合,同时发挥两种表示方式的优点,弥补各自的缺点。本文希望将这种计算表示方式应用到姿态控制系统计算中。此外,在代码层级,Jittor的源码简明易懂、逻辑清晰,可读性较强,易于修改和适配。而且,Jittor本身就包含了第三方算子的嵌入,如并行计算相关的mpi算子、矩阵运算相关的mkl算子等,为本文姿态控制算子的嵌入提供了有效参考。因此选择Jittor框架作为模板框架进行姿态控制软件框架的设计研究。

图6展示了Jittor框架的组成结构图。Jittor分为应用层、前端层、后端层和硬件层4层。应用层向用户开放,由用户使用前端层提供的接口进行Python编码,形成应用程序。前端层是用Python编写的,提供了元算子接口,操作Jittor变量的接口和一些常用模型的接口,这些接口均对用户可见。后端层为前端层提供接口支持,同时也管理底层硬件资源。它包含了众多模块,算子融合模块用于动态融合算子以提高性能,第三方算子模块包含了其他库的算子,比如用于并行计算的MPI库算子,用于矩阵运算的MKL库算子等。它还包括JIT编译器和统一计算图。通过后端层与硬件层通信进行硬件加速,当前的加速器支持CPU和GPU硬件。

图6 Jittor框架

本文所述的姿态控制软件框架算子在Jittor中属于第三方算子模块,同时在前端层提供了Python接口,用户可以调用相关算子进行姿态控制软件设计。按照与Jittor自有算子同样的方式构造得到的姿态控制算子同样支持代码的即时编译和计算的统一图表示,由于姿态控制算子较为单一,暂不考虑算子融合。在硬件层,姿态控制计算规模较小,仅需CPU即可满足。

在算子的实现方面,Jittor定义了3个主要的结构体:1)Node结构体:用于表示有向无环图的节点,定义了该节点的输入结构体与输出结构体,这两个结构体表示了与该节点相连的前后节点。2)Var结构体:该结构体继承了Node结构体,说明了Jittor的基础变量类型。3)Op结构体:该结构体也继承了Node结构体,是所有算子的父结构体。该结构体实现了与算子编译和运行相关的功能。

在每个算子的头文件中,都定义了该算子相关的结构体,其为Op结构体的子结构体,结构体中的变量为Var类型和该算子自定义的其他结构体类型。每个算子结构体的构造函数实现了该算子的功能,通过调用构造函数可以使用相应算子。为了可以在python端调用算子,Jittor在前端层使用Python编写了pyjt.compiler.py文件,通过该文件可以将算子相关的源代码和其他需要Python接口的源代码转换生成Pybind11相关文件,利用Pybind11相关方法实现从Python调用C++代码的功能。

为了实现Python端自动对底层源码进行编译,Jittor中包含算子的源文件名使用了一致的格式——*_op.h和*_op.cc(*表示算子具体名称),本文设计的姿态控制相关算子代码文件命名与该格式一致,单个算子的代码实现依照3.2节所述定义了一系列的结构体,结构体的构造函数实现了算子的功能。最后,将这些文件加入到Jittor算子的相关路径jittor/src/ops中,对Jittor进行重新编译,则可以将姿态控制算子嵌入到神经网络框架Jittor中。

4 仿真实验验证

为验证所设计算子的正确性,本文利用所述框架对某飞行平台飞行控制数学仿真软件中的姿态控制部分进行了改写。姿态控制软件部分的输入变量为飞行时间、相对飞行高度、来自导航模块的实际姿态角和角增量、来自制导模块的程序角,输出量为伺服机构输出。输入变量的数值均从数学仿真软件仿真得到的飞行数据文件中读出,因此基于框架改写的姿态控制软件的输入值与原飞行控制仿真软件姿态控制部分的输入值完全一致,若输出结果一致,则可验证算子的正确性。

图7~8为2次仿真实验的结果,数据间隔为10ms。图7为稳定控制时的输出结果,图8为不稳定控制时的输出结果,从图中可以看出,框架代码和原代码的输出结果基本一致,证明了本文所设计算子的正确性,可以利用所述框架编写姿态控制软件。

图7 仿真实验1伺服输出

图8 仿真实验2伺服输出

5 结束语

详细阐述了依托神经网络框架建立姿态控制软件设计框架中姿态控制算子的设计方法。针对当前飞行控制软件开发中的问题,进行了探讨和理论分析,说明了软件框架的优点和适用性,并重点研究了姿态控制算子的建模方法,详细介绍了姿态控制算子,并说明了如何将姿态控制算子嵌入到已有的神经网络框架中。最后的仿真实验验证了本文所设计算子的正确性。

猜你喜欢

算子本体姿态
继齐韵往昔,以今声开来——思考自五音戏主奏乐器的演变、本体及延伸
眼睛是“本体”
Domestication or Foreignization:A Cultural Choice
QK空间上的叠加算子
一种新型水平移动式折叠手术床
绿建筑的商业姿态
get!五大潮流热点 许你裙装 浪漫姿态
逼近论中的收敛性估计
Care about the virtue moral education
阅读是最美的姿态