BTT导弹神经网络反演自动驾驶仪的FPGA实现方法与流程

文档序号:11948479阅读:404来源:国知局
BTT导弹神经网络反演自动驾驶仪的FPGA实现方法与流程

本发明涉及导弹制导控制技术领域,具体涉及基于RBF神经网络-Backstepping方法的BTT导弹自动驾驶仪的FPGA设计与实现。



背景技术:

针对BTT(Bank-to-turn)导弹,在设计自动驾驶仪的控制器时要注意以下三点:(1)采用多变量控制的方法;(2)考虑控制器的鲁棒性;(3)提高其稳定性。目前BTT导弹的控制理论中:基于经典控制理论的设计方法只能在滚转角速度较小的情况下使用,否则会导致控制失效;基于LQR设计的控制器只有在数学模型精确的情况下才具有较好的控制效果,当受控对象发生摄动或存在干扰项时不能保证控制器的稳定性;鲁棒控制理论在设计之初就将模型的不确定性考虑在内,但是当模型参数变化较大时,该控制器才表现出了较好的仿真效果和鲁棒性。

Backstepping方法基于现代几何理论,是针对严格反馈系统提出的一种用于不确定系统系统化的控制器设计综合方法,现代控制理论经常将其与李雅谱诺夫函数(Control Lyapunov Function,CLF)结合,用于解决非线性、多变量、强耦合的大系统的控制问题,因此非常适合于BTT导弹控制器设计,但是当模型函数未知、存在干扰项或受控对象发生参数摄动时,控制效果较差。而智能控制理论作为当今控制领域的一个热点,应用于大规模、复杂和不确定系统的控制。近年来,智能控制技术也越来越多的出现在导弹控制领域中。

数字式自动驾驶仪是通过数字处理芯片实现的自动驾驶仪,常用的数字处理芯片有PC机、单片机MCU(Microcontroller Unit,简称MCU)、数字信号处理器DSP(Digital Signal Processor)、ARM处理器(Acorn RISC Machine,简称ARM)和现场可编程门阵列FPGA(FieldProgrammable Gate Array,简称FPGA)。为了实现较高的处理速度和承载较为复杂的系统,目前数字式自动驾驶仪的设计一般采用两块芯片来协调搭配完成,其中一块芯片作为主控单元完成控制方法解算,另一块作为协处理器实现数据采集和舵机驱动。

基于PC/104模块和MCU的架构,其CPU接口能力差,需要使用较多的外围接口器件进行配合,且体积大,功耗高,因而逐渐被其他架构所代替;基于DSP和MCU的架构,其DSP芯片控制能力较弱,缺少通用软件的支持,不利于实现复杂系统的设计,因而在实际中应用范围有限;基于ARM嵌入式微处理器的架构中,ARM也是在MCU的 基础上发展起来的一款微处理器。FPGA可靠性和实时性都很高,并且具备“可重构”特性,便于后期的方法升级更新。此外,采用FPGA代替MCU作为协控制器完成高速数据运算所需时间更短。



技术实现要素:

针对上述现有技术的不足,本发明的目的在于提供一种BTT导弹神经网络反演自动驾驶仪的FPGA实现方法,并且使该自动驾驶仪具有较好的瞬态和稳态性能以及鲁棒性强。

为了达到上述目的,本发明采用了以下技术方案:

1)建立BTT导弹的状态方程模型;

2)选用RBF神经网络方法补偿BTT导弹状态方程的建模误差;然后利用Backstepping方法推导出控制输入,从而设计出基于FPGA模型的BTT导弹姿态控制器;

3)将导弹模型解算移植于FPGA内来实现,在FPGA中完成整个闭环反馈,建立出BTT导弹自动驾驶仪;自动驾驶仪运行时,输入期望姿态信号和初始状态向量至姿态控制器中,由姿态控制器计算出控制输入,利用控制输入进行模型解算,得出BTT导弹的新姿态信息,将新姿态信息送入姿态控制器中,由此形成循环;当循环结束时输出BTT导弹的姿态角,循环的次数由期望姿态角的样本量决定。

所述姿态控制器采用RBF神经网络来逼近BTT导弹状态方程模型的不确定项Δ1(x1)和Δ2(x1,x2),以弥补建模误差:

其中,x1=[α β φ]T∈R3,x2=[p q r]T∈R3,α为攻角,β为侧滑角,φ为滚转角,p为滚转角速度,q为俯仰角速度,r为偏航角速度,H是神经网络的隐含层输出矩阵,Q是神经网络的隐含层与输出层之间的连接权值矩阵,和是不确定项逼近值。

所述控制输入表示为:

其中,f2是关于α,β,p,q,r的函数,g1是关于α,β,φ,θ的函数,g2是关于α的函数,e1是反馈回来的状态向量与控制命令信号的误差,e2是状态变量与虚拟控制信号的误差, 是虚拟控制信号x2d的求导结果。

所述姿态控制器包括输入状态变量模块、第一RBF神经网络模块、第二RBF神经网络模块、第一矩阵运算模块、第二矩阵运算模块、虚拟控制器模块以及控制器输入模块;输入状态变量模块将状态变量值x1=[α β φ]T和x2=[p q r]T传送至第一矩阵运算模块、第一RBF神经网络模块和第二矩阵运算模块;第一矩阵运算模块计算出f1和g1的值并传送至虚拟控制器模块,第二矩阵运算模块计算出f2和g2的值并传送至控制器输入模块,第一RBF神经网络模块计算出并传送至虚拟控制器模块;虚拟控制器模块计算出虚拟控制量x2d并传送至第二RBF神经网络模块;第二RBF神经网络模块计算出 并送至控制器输入模块;控制器输入模块计算舵偏角并作为控制输入。

所述模型解算选用四阶Runge-Kutta法。

所述自动驾驶仪的FPGA架构包括闭环主体,所述闭环主体包括姿态控制器、存储器、第一缓冲器、第二缓冲器以及模型解算模块;姿态控制器读取存储器内的期望姿态信号以及第二缓冲器内的初始状态信号后进行运算,运算结果送入第一缓冲器,模型解算模块读取第一缓冲器中数据进行模型解算,解算得到的状态向量送入第二缓冲器,完成闭环反馈。

本发明的有益效果体现在:

本发明设计BTT导弹自动驾驶仪的控制器时,在使用Backstepping方法的基础上,将模型误差以及参数摄动考虑进去和利用RBF神经网络去补偿模型误差以增强控制器稳定性和鲁棒性。本发明将导弹模型的解算移植于FPGA内来实现,构建了一个基于FPGA单芯片架构的数字式自动驾驶仪,对其进行仿真验证,结果表明该自动驾驶仪在具有较好的控制效果的同时亦具有很强的实时性。

附图说明

图1基于FPGA架构的数字式自动驾驶仪框图;

图2基于FPGA架构的数字式自动驾驶仪RTL级视图;

图3为Back_ode模块RTL级视图;

图4为RBF-Backstepping控制器硬件结构框图;

图5为控制器RTL级视图;

图6为误差模块Error_gen结构示意图;

图7为误差范数模块Norm_k结构示意图;

图8为RBF神经网络硬件结构;

图9为动态存储模块W_ram结构示意图;

图10为权值更新模块Updata结构示意图;

图11为虚拟控制器模块X2d结构示意图;

图12为三角函数模块tri结构示意图;

图13为控制器模块U结构示意图;

图14为状态机模块结构示意图;

图15为模型解算模块硬件结构图;

图16为攻角跟踪曲线;

图17为侧滑角跟踪曲线;

图18为滚转角跟踪曲线;

图19为自动驾驶仪运行流程框图。

具体实施方式

下面结合附图和实施例对本发明进行详细说明。

本发明的目的在于设计和实现基于神经网络反演(Neural Network Backstepping)的BTT导弹自动驾驶仪。

1、神经网络采用径向基函数神经网络(简称RBF),将RBF与Backstepping方法相结合,并使用结合后的RBF-Backstepping方法设计BTT导弹姿态控制器。

1.1、将BTT导弹以马赫数2.75的速度在4万英尺高空巡航时的BTT导弹状态方程写为:

其中x1=[α β φ]T∈R3,x2=[p q r]T∈R3,x3=[θφ]T∈R2,是状态向量x的一阶偏导数,控制输入u=[δp δq δr]T∈R3,α为攻角,β为侧滑角,φ为滚转角,p为滚转角速度,q为俯仰角速度,r为偏航角速度,θ为俯仰角;R3是一个三维的实数域,R2是一个二维的实数域;f1是关于α,β的函数,f2是关于α,β,p,q,r的函数,g1是关于α,β,φ,θ的函数、g2是关于α的函数、h1是关于α,β的函数。

对BTT导弹状态方程(式1)移除辅助方程并进行简化,得到如下所示的BTT导弹状态方程:

引入RBF神经网络,通过对BTT导弹状态方程中的状态函数在线学习来解决控制模型失配问题,使其能够适应模型的参数变化和结构的不确定性,从而得到如下方程:

其中,Δ1(x1)与Δ2(x1,x2)为模型不确定项:

H是神经网络的隐含层输出矩阵,Q是隐含层与输出层之间的连接权值矩阵,Q*是隐含层与输出层之间的期望连接权值矩阵,采用神经网络来逼近模型不确定项Δ1(x1)和Δ2(x1,x2)以弥补建模误差:

引入误差向量e1和e2,e1代表反馈回来的状态向量与控制命令信号的误差,e2代表状态变量与虚拟控制信号的误差:

使用Backstepping方法构造得出BTT导弹状态方程内环和外环的目标跟踪信号x1d和x2d,x1d由控制命令信号给出,x2d为虚拟控制器给出。

1.2、Backstepping方法具体步骤如下:

第一步,针对BTT导弹状态方程内环,对e1求导:

设计虚拟控制器信号x2d

k1是控制参数;

将式(9)代入式(8),且令得:

则权值更新率为:

γ1是步长参数;

构造Lyapnov函数,并对其求导为:

当e2→0时,故该BTT导弹状态方程内环镇定;

第二步,针对BTT导弹状态方程外环,对e2求导,得:

设计控制器:

k2是控制参数;

将式(13)代入(12),且令

则权值更新率为:

γ2是步长参数

构造Lyapnov函数,并对其求导为:

其中k1,k2>0时,故该BTT导弹状态方程外环可以被镇定;

2、RBF-Backstepping控制器(姿态控制器)的FPGA实现,分为两部分:RBF神经网络的FPGA实现和Backstepping方法的FPGA实现。

2.1、RBF神经网络的FPGA实现;

RBF神经网络有三层,分别是输入层n个神经元、隐含层h个神经元和输出层m个神经元,输入层至隐含层的权值均为1,隐含层采用高斯(Gaussian)函数作为激励函数, 高斯函数表达式为输出层是隐含层节点的线性组合,RBF神经网络的FPGA实现由以下两个部分组成:

①单神经元FPGA的实现

该神经元由输入寄存器RAM、权值存储器RAM、激励函数参数RAM、乘法器Ⅰ、累加器、激励函数(输入层和输出层的神经元不包含)、缓冲器和控制单元模块组成,运行时:

(1)输入信号传送给输入寄存器RAM;

(2)控制单元产生使能信号,控制乘法器Ⅰ、累加器、激励函数和缓冲器四个模块依次运行;

(3)输入寄存器RAM和权值存储器RAM分别读出输入向量值和权值向量值;

(4)将输入向量和权值向量中相对应的元素送入乘法器Ⅰ中相乘;

(5)通过累加器将相乘结果进行累加求和;

(6)将求和结果传送给激励函数模块,得出其高斯函数的值,通过缓冲器缓冲输出。

由于采用的RBF神经网络激励函数为高斯函数,所以需要附加一个激励函数参数RAM用于存储高斯函数的径向基宽度bi和径向基中心ai,由这n+h+m个神经元组成了RBF神经网络模块;

②激励函数—高斯函数的FPGA实现

通过采用分段函数逼近和查找表相结合的方法来实现指数函数ex,首先通过MATLAB曲线拟合函数polyfit对ex负半轴进行分区间逼近,得到ex分区间逼近函数表达式以及各区间最大逼近误差,共分为13个区间,具体分段函数如下:

该指数函数由输入RAM、激励函数mux(mux是FPGA中的一个多路选择器模块)、常值逼近函数、二次逼近函数、延时和输出RAM模块组成,运行时:

(1)输入RAM存储输入;

(2)将输入值送入激励函数mux,由其判断输入值的区间归属;

(3)若输入值在(-∞,-5)区间中,指数函数近似于常量,逼近函数(常值逼近函数)采用相对应的8个分段常值函数y=C;

(4)若输入值在[-5,0)区间中,指数函数变化剧烈但比较平滑,逼近函数(二次逼近函数)采用相对应的5个分段二次拟合函数y=Ax2+Bx+C来逼近真实曲线;

(5)由于常值逼近函数比二次逼近函数计算时间短,故采用延时模块对常值逼近函数和二次逼近函数的计算值做输出同步处理(使不同的隐含层的输入值在通过隐含层神经元的计算之后,能同时传送到输出神经元中);

(6)将处理结果送入输出RAM中。

2.2、由上述BTT导弹状态方程中的控制器推导过程可见,Backstepping方法实现过程为矩阵运算,此外在BTT导弹状态方程中还涉及到部分非线性函数运算,如正余弦函数和平方根函数,因此,Backstepping方法的FPGA实现由以下三部分组成:

①矩阵相乘

设A=[aij]是一个m×n型矩阵,B=[bij]是一个n×s型矩阵,矩阵A与B相乘得到的矩阵C可定义为:

矩阵相乘由两个输入矩阵、三个复用器、状态机Ⅰ、行存储器、列存储器、乘法器Ⅱ、加法器Ⅰ和输出矩阵模块Ⅰ组成。运行时:

(1).根据公式(18)设计的矩阵相乘模块由输入矩阵A和输入矩阵B分别存储两个矩阵A和B;

(2).在状态机Ⅰ控制下,复用器Ⅰ将矩阵A按行读出,存进行存储器,复用器Ⅱ将矩阵B按列读出,存进列存储器;

(3).两个存储器中对应元素进行乘累加运算(乘法器Ⅱ和加法器Ⅰ中);

(4).将计算结果经由复用器Ⅲ存储进输出矩阵模块Ⅰ中相应位置,即可得到矩阵C。

②矩阵求逆

采用伴随矩阵法实现矩阵求逆,对于n阶方阵A,其逆矩阵为:

式中:A*为矩阵A的伴随矩阵,|A|为矩阵A的行列式值。

根据以上思路设计的矩阵求逆模块,该模块分为两大子模块,即求解行列式模块M1和求解伴随矩阵模块M2,M1和M2并行运行,矩阵求逆模块由输入矩阵、两个复用器、两个状态机、四个存储器、四个乘法器、加法器、减法器、除法器、矩阵数乘和输出矩阵模块组成,运行时:

(1)对于求解行列式模块M1,复用器Ⅳ从输入矩阵模块Ⅰ中采样出行列式乘积项中每一元素后按行重新排列,并增加一列元素代表符号位,如:

将重新排列为存入存储器Ⅰ中;

(2)在状态机Ⅱ控制下,按顺序读取存储器Ⅰ中每行元素送入乘法器(乘法器Ⅲ和乘法器Ⅳ)和加法器Ⅱ中进行乘累加操作即可得到矩阵A的行列式值|A|;

(3)将矩阵A行列式值存入存储器Ⅲ中;

(4)对于求解伴随矩阵模块M2,复用器Ⅴ从输入矩阵模块Ⅰ中采样,按计算伴随矩阵所需每一元素的方式排列,如:

将重新排列为存入存储器Ⅱ中;

(5)在状态机Ⅲ控制下,按顺序读取存储器Ⅱ中每行元素送入乘法器(乘法器Ⅴ和乘法器Ⅵ)和减法器Ⅰ中进行乘减法操作即可得到矩阵A的伴随矩阵A*,存入存储器Ⅳ;

(6)存储器Ⅲ将信号送入除法器Ⅰ进行除法运算(求倒数);

(7)矩阵数乘模块将除法运算的信号和存储器Ⅳ的信号进行矩阵数乘;

(8)将矩阵数乘结果存入输出矩阵模块Ⅱ中;

考虑到除法器延时较大、消耗资源较多,用伴随矩阵各元素与行列式值的倒数进行矩阵数乘运算得到逆矩阵。

③正余弦函数的FPGA实现

使用CORDIC方法通过反复迭代能将正余弦函数转化为简单的加减移位操作,该正余弦函数的反馈式CORDIC方法结构由三个复用器、三个寄存器、两个移位器和三个加减器模块组成,运行时,采用并行反馈式结构来实现CORDIC方法,一共迭代N次,第i步操作如下:

(1)首先将Xi送入复用器Ⅵ,Yi送入复用器Ⅶ,Zi送入复用器Ⅷ中,theta_i存入寄存器Ⅲ中;

(2)将复用器Ⅵ的结果送入寄存器Ⅰ,复用器Ⅶ的结果送入寄存器Ⅱ,复用器Ⅷ的结果送入寄存器Ⅲ;

(3)将寄存器Ⅱ的值进行移位操作(移位器Ⅱ)后和寄存器Ⅰ的值进行加减操作(加减器Ⅱ),得到Xi+1

(4)将寄存器Ⅰ的值进行移位操作(移位器Ⅰ)和寄存器Ⅱ的值进行加减操作(加减器Ⅰ),得到Yi+1

(5)将寄存器Ⅲ的值和复用器Ⅷ的值进行加减操作(加减器Ⅲ),得到Zi+1

(6)将Xi+1送入复用器Ⅵ,Yi+1送入复用器Ⅶ,Zi+1送入复用器Ⅷ中;

(7)迭代N次后得到角度theta的正余弦值。

2.3、结合RBF神经网络的FPGA实现和Backstepping方法的FPGA实现,最后建立出BTT导弹的RBF-Backstepping控制器FPGA模型,设计流程如下,参见图4、图5:

2.3.1、输入状态变量模块存储输入状态变量值x1=[α β φ]T和x2=[p q r]T,并将其传送至矩阵运算I模块、神经网络I模块和矩阵运算II模块中。

2.3.2、矩阵运算I模块计算出矩阵f1和g1的值,将其传送至虚拟控制器模块,矩阵运算II模块计算出矩阵f2和g2的值,将其传送至控制器输入模块,其中:

KQ表示是一个依赖飞行条件的常量;

其中,a1、a2、a3分别表示气动模型常量;

Q,S,d,Ixx,Iyy,Izz,Ixz,均为已知参数,控制器中涉及到的三角函数有攻角α、侧滑角β、滚转角φ的正余弦值以及侧滑角β和俯仰角θ 的正切值,在上述求解过程中使用到了CORDIC方法模块和除法器模块来实现三角函数模块tri,需要注意的是,CORDIC方法迭代过程中所有参数值均小于1,故CORDIC模块采用1-1-14的16位定点数格式以提高精度,通过移位操作来实现同正常字长数据的运算,俯仰角正切值通过该角正余弦相除得到,侧滑角因为角度较小接近于0,故其正切值可近似为其正弦值。

2.3.3、神经网络I模块计算出内环神经网络输出实现过程如下:首先误差模块Error_gen1计算出内环误差e1,误差模块Error_gen2计算出外环误差e2,其次权值更新模块update1计算出权值更新率由控制器推导过程可知,神经网络权值更新率如公式(32)所示,后面一项是为了加快响应速度而附加的惯性项:

式中:γ1为学习步长,e1为内环误差,H1为神经网络隐含层输出值;n为惯性因子;K为内环误差向量,K=[e1,e2]使用误差范数模块Norm_k来实现,此模块用于计算误差向量K=[e1,e2]的范数,如公式(33)所示,计算出来的结果作为参量在权值更新模块使用:

由公式(33)可以看出误差范数模块由乘法器、加法器和平方根模块构成;Q1为更新前权值,公式(32)是一个典型的连续的神经网络权值更新率,为了在FPGA上实现,对其进行离散化处理,即使用一系列离散的采样时刻kT来代替连续时间t:

上式中,T为采样周期,k为采样精度,根据公式(34)设计出来的RBF网络权值更新模块update1硬件结构由输入RAM、乘法器、矩阵相乘、矩阵数乘、减法器和输出RAM模块组成,其涉及到的矩阵运算采用了上文所述模型,最后计算出每个时刻的神经网络I模块的输出将其传送至虚拟控制器模块。

2.3.4、虚拟控制器模块计算出虚拟控制量x2d,将其传送至神经网络II模块,x2d如公式(35)所示:

其涉及到的运算有矩阵数乘、矩阵相加、矩阵相乘和矩阵求逆,均采用上文中所述矩阵运算模型来实现,虚拟器控制器模块由输入RAM、矩阵求逆、矩阵数乘、两个矩阵相加、矩阵相乘和输出RAM模块组成。

2.3.5、神经网络II模块计算出外环神经网络输出实现过程如下:首先误差模块Error_gen1计算出内环误差e1,误差模块Error_gen2计算出外环误差e2,其次权值更新模块update2计算出权值更新率如公式(36)所示,后面一项是为了加快响应速度而附加的惯性项:

式中:γ2为学习步长,e2为外环误差,H2为神经网络隐含层输出值;n为惯性因子;K为外环误差向量,K=[e1,e2]使用误差范数模块Norm_k来实现,此模块用于计算误差向量K=[e1,e2]的范数,实现方法同上;Q2为更新前权值,同样公式(36)是一个典型的连续的神经网络权值更新率,为了在FPGA上实现,对其进行离散化处理,即使用一系列离散的采样时刻kT来代替连续时间t,

上式中,T为采样周期,k为采样精度,根据公式式(37)设计出来的RBF网络权值更新模块update2硬件结构由输入RAM、乘法器、矩阵相乘、矩阵数乘、减法器和输出RAM模块组成,其涉及到的矩阵运算采用了上文所述模型,最后计算出每个时刻的神经网络II模块的输出将其传送至控制器输入模块。

2.3.6、控制器模块U(即控制器输入模块)用于计算舵偏角输出,如公式(38)所示:

其中g2和f2为控制器非线性参数,k2为设计的控制器参数,e1,e2分别为内外环误差,为外环神经网络输出,g1为虚拟控制器非线性参数,其运算也是矩阵数乘、矩阵相加和矩阵相乘,控制器模块U由输入RAM、矩阵求逆、矩阵数乘、两个矩阵相加,两个矩阵相乘和输出RAM模块组成,最后将u传送至输出模块。

2.3.7、输出模块用于存储接收到的舵偏角输出值,由此设计出了BTT导弹的RBF-Backstepping控制器的FPGA模型。

3、建立FPGA单芯片架构的导弹数字式自动驾驶仪,首先以期望姿态角信息和反馈回路反馈的当前状态值为输入量,输入量进入到姿态控制器后,由姿态控制器计算出的控制指令驱使导弹舵面偏转,从而改变弹体姿态,并将舵偏角送入FPGA的模型解算模块中进行模型解算,解算得到的状态向量和姿态信息反馈回输入端进入到姿态控制器中, 由此构成闭环回路进行循环,当循环结束后,输出端输出姿态角,根据以上思路设计出FPGA单芯片架构的导弹数字式自动驾驶仪。

参见图1、图19,该自动驾驶仪运行的流程为:

(1)首先FPGA通过串口接收外界输入的期望信号并将其送至存储器RAM;

(2)在状态机驱使下,姿态控制器读取RAM中期望姿态角以及来自缓冲存储器II的初始状态信号进行运算;

(3)运算结果送入缓冲存储器I中;

(4)由模型解算模块读取缓冲存储器I中数据进行模型解算;

(5)解算得到的状态向量送入缓冲存储器II,完成闭环反馈;

(6)数据在闭环内每循环一次,自动驾驶仪都会将各状态信号值存储进先入先出存储器FIFO(First In First Out,简称FIFO);

(7)运行结束后,使用串口发送模块将FIFO内数据按顺序依次读出,即可得到各状态变量的动态响应过程。

仿真例

当BTT导弹以马赫数2.75的速度在4万英尺高空巡航时,将导弹的气动参数和物理参数代入导弹模型得到如下微分方程组:

仿真输入信号为BTT导弹攻角、侧滑角和滚转角的期望信号。在仿真中输入信号具体构成为:

设计基于FPGA架构的数字式自动驾驶仪如图1所示,其RTL级结构如图2所示。Exp_data模块接收外界输入的期望信号,Sys_fsm模块为状态机,控制程序的运行,Back_ode模块为闭环主体,其可进一步划分为若干子模块,如图3所示,Back_ctrl为导弹姿态控制器,ODE为导弹模型解算模块,W_ram4和W_ram3为动态存储模块作为缓冲器使用, Addr_gen4和Addr_gen3分别为W_ram4和W_ram3的地址模块,UART_FIFO用于存储自动驾驶仪运行中各状态向量动态值,以获取各姿态角响应曲线,Bo_fsm为状态机,控制程序的运行,自动驾驶仪的具体运行过程如下:

①首先,串行接收模块接收外界输入的期望信号并将其送至RAM(指图1中的RAM)。

②其次,在状态机驱使下,控制器(指Back_ctrl)读取RAM中期望姿态角以及来自缓冲存储器II的初始状态信号进行运算。

控制器(指Back_ctrl)硬件结构如图4所示,其RTL级结构如图5所示。在图5中,Error_gen1模块用来计算状态量x1与期望值之间的偏差,即内环误差;Error_gen2模块用来计算状态量x2与中间虚拟控制器之间的偏差,即外环误差,Error_gen1以及Error_gen1模块硬件结构如图6所示;Norm_k模块用来计算内外环误差范数,用于神经网络权值更新,其硬件结构如图7所示;RBF1为第一个RBF神经网络的前向运算环节;RBF2为第二个RBF神经网络的前向运算环节,RBF神经网络硬件结构如图8所示;W_ram1和W_ram2为存储器模块,分别存储两个神经网络的权值信息,W_ram模块结构如图9所示;Addr_gen1与Addr_gen2为W_ram1和W_ram2模块的地址模块;Updata1和Updata2为权值更新模块,分别用来更新两个神经网络的权值,Updata模块硬件结构如图10所示;X2d模块为方法中间虚拟控制器,其模块硬件结构如图11所示;F1,G1和B是求解虚拟控制器所需用到的一些非线性矩阵模块;Tri为三角函数模块,也用于求解虚拟控制器,其模块硬件结构如图12所示;U为控制器输入模块,输出三个舵偏角值,其模块硬件结构如图13所示;F2、G2、C和GE模块均为求解控制器U时所需一些矩阵模块;图4中的控制单元为自动驾驶仪控制模块,由有限状态机实现,其模块结构如图14所示。

③控制器(指Back_ctrl)将其运算结果送入缓冲存储器1(指图3中W_ram4)。

④模型解算模块(指ODE)读取缓冲存储器1中数据进行模型解算,在数学模型FPGA解算器(指ODE)中,选用四阶Runge-Kutta法计算公式:

式中h为计算步长,k1,k2,k3,k4分别为步长内不同时间点斜率值,yn为现在时刻的计算结 果,yn+1为下一步长时刻的计算结果,基于式(39)和式(40)设计出如图15所示的硬件结构用于实现模型解算;该数学模型FPGA算器的5大模块K1,K2,K3,K4和Y,分别代表式(40)的5个公式;K1,K2,K3,K4又可分为若干个子模块,其中,g0,g1,g2,g3,g4,g5模块分别对应公式(39)所示六个微分方程;TRI为三角函数模块,用于求解式(39)中相关三角函数;SA1,SA2,SA3为移位相加模块,用来计算式(40)中各公式自变量值;程序运行时,K1,K2,K3,K4模块在状态机ode_fsm模块的控制下依次运行并将运算结果送至Y模块,Y模块根据上述结果以及当前时刻的状态向量计算出下一步长时刻的状态向量值。

⑤模型解算得到的状态向量送入缓冲存储器2(指图3中W_ram3),完成闭环反馈。

⑥最后,串口发送模块按顺序依次读出UART_FIFO内的数据,从而得到输出姿态角。

设立仿真初始条件为:BTT导弹以马赫数2.75的速度在4万英尺高空巡航,仿真步长设为0.0001s的定步长,初始状态值如表1所示。

表1 导弹初始状态值

仿真结果中,攻角跟踪曲线如图16所示,侧滑角跟踪曲线如图17所示,滚转角跟踪曲线如图18所示。

将FPGA仿真结果与Simulink仿真结果进行对比,如表2所示。

表2 均方误差对比

从表2中可以看出FPGA仿真结果在攻角的第二、三阶段和滚转角的第三阶段不如Simulink仿真,其余阶段皆优于Simulink,特别是侧滑角。

对Simulink仿真、FPGA-PC半实物仿真、FPGA半实物仿真的仿真时间进行对比,结果如表3所示:

表3 仿真时间对比

从表3可以看出,基于FPGA的半实物仿真所需时间不到1s,远远优于Simulink仿真结果,具有很高的实时性;资源占用情况如表4所示。

表4 资源消耗量

通过以上各仿真结果可以看出,基于FPGA的RBF-Backstepping方法的自动驾驶仪对于BTT导弹取得了良好的控制效果,并且有很高的实时性。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1