张秀云, 冷嘉俊*, 刘文静, 刘达, 宗群
1. 天津大学,电气自动化与信息工程学院, 天津 300072
2. 北京控制工程研究所,北京 100094
3. 空间智能控制技术全国重点实验室, 北京 100094
小卫星群以灵活性高、成本低和体积小的优势,能够保持一定队形,协同完成任务,可以更好地提高工作效率[1]. 但由于卫星长时间处于环境恶劣的太空中,导致卫星元器件可靠性降低,从而产生故障,而有效的在轨故障诊断系统可以实时检测运行状况,避免意外发生[2-5]. 然而,考虑到星群参与卫星较多,传感器数量和故障种类越来越多[6-8],对星群的故障诊断更具难度. 此外,单颗卫星故障数据较少,如何在不增加通信压力的情况下,整合整个星群的故障特征、实现星群协同建模,提高星群对不同故障类型的诊断能力,对提高航天器在轨运行的可靠性、安全性和有效性具有十分重要的意义[9-10].
针对卫星智能编队故障诊断问题,近几年国内外均展开了相关研究. 文献[11]提出一种基于生成对抗网络的卫星异常检测框架,实现了时间序列重构和异常检测. 文献[12]采用基于深度迁移学习的智能故障诊断方法,通过重构代价函数,实现残差网络重调,完成航天器故障诊断. 文献[13]提出一种基于知识推理的航天器自主故障诊断的智能方法,适用于航天器硬件处理能力和存储容量受限的应用环境. 文献[14]利用Lure微分包含线性状态观测器(DILSOs)和模糊小波神经网络(FWNN)进行故障检测和诊断. 文献[15]使用回归支持向量机来分析卫星性能,使用所提出的方法链“K-means-LAD-FTA”具有系统能够自主发现和分配所有可能的故障模式的优势,从而有效提高了故障诊断的准确性. 文献[16]提出了一种基于生长神经网络(GNN)和变序列LSTM (VarLSTM)两种新型神经网络模型的人工智能技术. 文献[17]使用长短期记忆循环神经网络(LSTM),利用可测量数据来估计编队卫星电机扭矩,对卫星反作用轮进行故障诊断. 以上文献实现了卫星的故障诊断,但现有的故障诊断算法大多未考虑编队中单个小卫星在欠配置、测量信息不全等情况下的故障诊断问题,在此种情形下如何借鉴邻居卫星信息实现诊断成为亟需解决的重点问题.
此外,考虑编队中单颗卫星出现的故障类型及数据有限,如何提高故障诊断算法对可诊断故障类型的适用性也成为卫星编队故障诊断的难点.基于联邦学习框架[18]的故障诊断成为当前发展的重点.文献[19]提出基于动态加权平均的联邦学习算法,考虑了分布式数据的不平衡,实现了在不良局部数据的影响下,建立动态加权局部模型进而建立全局模型. 文献[20]提出了一种利用相似性协作(FedSC)进行机械故障诊断的联邦学习方法,解决每个客户的数据隐私、样本稀缺和数据异构性问题. 文献[21]提出异步分散联邦学习方法,通过分开训练全局模型和本地模型,提高了模型的多样性,从而提高了泛化能力,同时保持了精度,减少通信开销和训练时间. 文献[22]提出了一种结合多尺度卷积、注意力机制和多阶段残差连接的深度学习网络用于本地训练,能够在保护数据隐私的前提下,实现高精度的故障诊断和较强的泛化性. 然而,目前在基于联邦学习的卫星故障诊断方面,相关研究尚处于空白阶段.
基于此,本文提出一种基于联邦学习的星群智能故障诊断方法. 面向卫星编队故障诊断的功能需求,使用联邦学习算法框架,结合深度强化学习算法,设计了卫星编队故障诊断模型训练流程,解决了单颗卫星故障数据不足的问题,且在不增加通信压力的情况下,实现卫星编队的故障诊断,提高星群对不同故障类型的诊断能力. 本文主要创新点总结如下:
1)考虑单星欠配置、测量信息不全等问题,提出基于BicNet网络的本地卫星故障诊断方法,利用邻居卫星“远端”敏感器信息,实现对卫星自身故障的有效诊断,且编队卫星数量变化也无需重新训练网络,满足“即插即用”的工程需求;
2)考虑编队中单颗卫星运行时产生的故障种类有限,故障数据较少,为提高星群卫星诊断故障类型的全面性,提出基于联邦学习的星群故障诊断方法,在不增加通信压力的情况下,整合整个星群的故障特征,实现星群协同建模,提高星群对不同故障类型的诊断能力;
3)基于Unity3D引擎搭建虚拟仿真环境,嵌入卫星真实动力学模型,展开卫星编队故障诊断仿真实验,实验结果表明所提方法具有较高的准确率,能够实现更加全面的故障诊断.
本文重点考虑飞轮故障对卫星姿态的影响,进行卫星故障诊断.卫星姿态动力学及运动学方程如式(1)所示
(1)
(2)
飞轮故障:考虑卫星执行机构由三正交一斜装的反作用飞轮组成,则在飞轮故障影响下的执行机构输出表示为
(3)
其中,uai(t)(i=1,…,4)为第i个飞轮的测量值,fai(t)(i=1,…,4)为第i个飞轮发生的故障,H为陀螺组件的安装矩阵,表示为
(4)
不失一般性,选取α1=α2=α3=54.73°,则此时H的值为
(5)
基于以上建立的卫星故障模型,在Unity中搭建卫星真实动力学模型,整体诊断架构如图1所示,主要包括Python和Unity两个部分. 其中Unity中包含3个模块:主控模块、视景模块和卫星的物理模型.主控从物理模型中获得信息并显示,同时,把故障信号传递给模型,模型根据信号进行偏差的注入,模型同时根据Python的数据进行运算,对视景进行驱动,通过ML-Agent插件,把Unity中的数据传递给Python,控制器接受状态产生控制量,故障诊断网络根据卫星的状态信息,判断故障类型,并把故障信息及控制量传递给Unity,完成了星群的一次智能故障诊断.
图1 整体诊断架构Fig.1 overall diagnostic architecture
基于联邦学习的卫星编队故障诊断的结构图如图2所示,整个训练过程包括本地训练和中心联邦聚合两部分. 在本地训练阶段,使用Unity引擎建立仿真平台,完成故障选择和注入. 每个卫星的本地诊断网络基于集中式多智能体强化学习任务决策算法(BicNet)展开.该网络由全连接层和Bi-LSTM层构成,Bi-LSTM神经网络可以实现卫星数据之间的信息交流,并利用邻居卫星远端敏感器信息进行诊断,能够有效解决单颗卫星测量信息不全的问题,且编队中卫星数量变化时无需重新更改或学习故障诊断网络,满足“即插即用”的工程需求. 完成各自本地训练后,为整合编队故障信息、提高诊断类型的全面性,编队中每个卫星作为联邦中心的参与者,将训练出的本地诊断模型上传至联邦中心,进行中心联邦聚合. 中心服务器会获取各个卫星的本地模型参数,并利用联邦平均算法对这些参数进行聚合和更新.更新后的模型能够学习到多个本地卫星的故障数据,生成相对更全面的故障诊断模型,从而可以识别更多类型的故障,且整个过程无需进行星间通讯,减小了通信压力. 在完成一次联邦聚合后,更新后的故障诊断模型参数会被下发至星群每个卫星,进行新一轮的本地故障诊断训练. 上述过程经多次循环迭代可获得最优全局模型,使得每颗卫星的本地数据都能得到较好的诊断结果,从而实现全面有效的卫星故障诊断.
考虑邻居卫星对自身的观测信息,解决单星测量信息不足的问题,首先展开编队中各个卫星本地诊断网络的搭建及训练,实现各个卫星的本地故障诊断.
2.1.1 面向故障诊断的随机博弈模型建立
将卫星的故障诊断问题,总结为随机博弈模型,各个符号的含义如下:
(1)状态集S
对于第i颗卫星,i∈[1,N],将t时刻自身的姿态角θi,角速度wi,飞轮的执行机构的输出信息fi,以及邻居卫星的姿态角、角速度和飞轮的执行机构的输出信息xi作为状态量s,即
s=(θi,wi,fi,xi)∈S.
(6)
(2)动作集A
诊断卫星i是否有故障作为动作ai,即
(7)
以卫星故障诊断结果准确为最终目标,建立奖惩机制,确定单步诊断获得的收益值.
(8)
(4)折扣因子γ
γ表示未来收益值相对于当前收益值的重要程度. 当γ=0时,相当于只考虑当前收益不考虑未来收益;γ=1时,将未来收益和当前收益看得同等重要.
2.1.2 本地诊断网络的搭建及训练
编队各个卫星的本地诊断网络架构如图3所示,该网络基于决策-评判框架,由全连接网络与 Bi-LSTM神经网络构成. Bi-LSTM网络可以有效融合多个卫星的信息,允许N颗卫星的数据进行信息交流,从而实现星群卫星之间的信息共享及基于全局信息的决策诊断. 此外,编队中卫星数量变化时也无需重新更改和学习故障诊断网络,仍然可以正常运行. 卫星本地诊断网络中的决策网络输入包括卫星的姿态角、角速度和飞轮的执行机构的输出信息以及邻居卫星的相应观测值等信息;评判网络输入为卫星所有的故障信息,输出为整体评判的Q值,用于评估所有卫星的故障诊断结果的好坏,并指导决策网络进行梯度更新,以朝着最大收益的方向进行决策.
图3 基于BicNet架构的本地训练网络Fig.3 Local training network based on BicNet architecture
故障诊断网络完整的训练过程包括数据采集过程和参数训练过程. 下面将对两个训练过程进行介绍.
(1)数据采集过程
(9)
此过程需要进行大量的回合以获取足够多的经验向量,将其全部存在经验池中. 本节采用边采集边训练网络的方法,用更新的决策网络去采集数据,确保采集数据的独立性.
(2)参数训练过程
考虑N颗卫星的数据,用θ=[θ1,…,θN]表示卫星决策网络参数的集合,用μ=[μ1,…μN]表示卫星决策网络的集合. 在评价网络训练的过程中,采用均方差函数使评判网络的输出近似真实值,定义损失函数为
(10)
(11)
(12)
采用Adam优化器进行决策网络权值的更新
(13)
基于以上训练过程,即完成了编队各个卫星本地的故障诊断网络训练,获得了本地诊断网络模型,为后续联邦中心聚合奠定基础.
考虑到各个卫星在本地训练过程中出现的故障类型及数据有限,只能解决某个方向飞轮故障,难以全面实现对4个方向飞轮故障的诊断. 因此,为提高编队卫星故障诊断的全面性和准确性,利用联邦中心聚合手段展开本地卫星诊断模型的协同训练,完成模型间的聚合和更新.
在每个卫星的本地诊断模型完成一定训练次数后,将本地模型参数上传至联邦中心,联邦中心利用联邦平均算法对本地模型参数进行聚合和更新. 在完成一次中央联邦聚合后,更新后的模型参数会被下发至各卫星进行新一轮的本地诊断模型训练. 经过多次循环迭代可获得最优全局模型,使得对每颗卫星的本地数据都有较好的诊断结果.
(14)
fj(w)=l(uj,vj;w)
(15)
fj(w)表示模型参数w对第j个样本的损失预测,则全局模型的总损失函数表示为
(16)
对于参与者k而言,学习率为R,本地模型参数更新方式为
(17)
本地模型经过n次迭代之后将模型参数wk上传到联邦中心,进行参数聚合,更新方式为
(18)
然后联邦中心将聚合后的参数发放到各参与者wt+1,k=wt,使用总损失评估全局模型直至收敛. 最终得到的全局模型可以识别卫星出现的所有故障类型,有效提高故障诊断的全面性,且无需星间通信,减少通信压力.
本节在Windows11操作系统下,基于Python语言和Unity软件,进行基于联邦学习的故障诊断.
以4颗从星、一颗主星为实验对象,其中主星飞行的椭圆轨道半长轴ac=7 162 977 m,轨道偏心率ec=0.000 426 2,真近点角θ=0.35.每颗卫星的质量为50 kg. 通过Unity虚拟环境给卫星注入故障,对从星1-4,依次注入飞轮1-4故障,并且每颗卫星只注入一种故障,通过Unity与Python的信息交互进行故障诊断,并且把诊断结果反馈到UI面板.其中,联邦中心聚合的轮数设置为50,每颗卫星本地训练20轮,当经验池故障数据存储满后,开始迭代学习,每轮学习1 000次,学习率lr=0.01,batch_size=256,greedy policyε=0.85.
为更好的体现联邦学习的有效性,仿真测试实验分为两部分:
仿真1:仅仅使用单颗卫星进行本地诊断网络训练,不使用联邦学习的结构,训练完毕后注入另一种故障类型,查看诊断结果.
仿真2:在本地诊断网络训练完毕后,使用联邦强化学习训练共享模型,同样训练完毕后注入另一种故障类型,查看诊断结果.
(1)仿真1测试结果
1-4号卫星分别在本地完成1-4 方向的飞轮故障诊断训练. 在仿真1的过程中,以1号卫星为例,由Unity中选择1号卫星依次注入1-4个方向的飞轮故障,诊断结果如图4~7所示.
图4 仿真1中1号卫星对飞轮1诊断结果Fig.4 Diagnosis results of flywheel 1 of satellite 1 in Simulation 1
图5 仿真1中1号卫星对飞轮2诊断结果Fig.5 Diagnosis results of flywheel 2 of satellite 1 in Simulation 1
图6 仿真1中1号卫星对飞轮3诊断结果Fig.6 Diagnosis results of flywheel 3 of satellite 1 in Simulation 1
图7 仿真1中1号卫星对飞轮4诊断结果Fig.7 Diagnosis results of flywheel 4 of satellite 1 in Simulation 1
图4~7的仿真结果表示,每个卫星本地训练过程中仅针对一种故障进行训练,故单颗卫星进行故障诊断只能诊断出一种故障. 即给卫星1注入飞轮1故障可以识别,但是飞轮2-4故障就无法识别出来,诊断算法的输出是0,也就是无故障. 这表明单个卫星由于本地数据量有限,训练后的诊断模型准确率低,不能全面覆盖多种故障类型,无法满足要求.
(2)仿真2测试结果
同仿真1,加入联邦强化学习训练全局模型,实验步骤与第一部分相同,诊断结果如图8~11所示.
图8 仿真2中1号卫星对飞轮1诊断结果Fig.8 Diagnosis results of flywheel 1 of satellite 1 in Simulation 2
图9 仿真2中1号卫星对飞轮2诊断结果Fig.9 Diagnosis results of flywheel 2 of satellite 1 in Simulation 2
图10 仿真2中1号卫星对飞轮3诊断结果Fig.10 Diagnosis results of flywheel 3 of satellite 1 in Simulation 2
图11 仿真2中1号卫星对飞轮4诊断结果Fig.11 Diagnosis results of flywheel 14 of satellite 1 in Simulation 2
由图8~11可以看出,虽然本地训练过程中仅仅针对一种故障进行训练,但是由于加入了联邦中心对所有本地诊断模型进行了聚合,实现了模型参数共享,从而可以保证卫星对所有方向飞轮故障实现诊断,验证了联邦学习策略的有效性.
图12为训练时的诊断准确率,从图中可以看出,联邦学习算法在模型聚合40轮左右时,达到一个比较平稳准确率,大概在87%,因为在学习过程中使用了greedy policy,有85%的概率选择最优动作,剩余15%选择随机动作. 图13是在测试时的诊断准确率,可以看出,故障诊断的准确率达到99%,验证了本文所提诊断方法的有效性. 图14为编队卫星数量变化时诊断网络的准确率,从图中可以看出,当星群中卫星数量发生变化(增加4颗)时,使用原先训练好的故障诊断网络进行诊断,仍可保持较高诊断准确率,在99.7%左右浮动,从而验证了当星群卫星数目发生变化时,所提星群级智能故障诊断方法无需重新训练网络,满足即插即用的需求.
图12 训练诊断准确率Fig.12 Training diagnostic accuracy
图14 星群卫星数量变化时诊断准确率Fig.14 Diagnostic accuracy when the number of cluster satellites changes
本文提出了一种基于联邦学习的卫星编队故障诊断方法,首先建立基于双向协调网络(BicNet)的本地诊断训练模型,利用编队中其他卫星的传感器信息进行协同诊断,解决单颗卫星测量数据不足的问题. 其次,考虑单颗卫星故障类型少、故障数据稀疏的问题,利用联邦学习算法对各卫星模型参数进行协同训练及聚合,改善了模型的泛化能力,有效提高故障诊断能力. 实验结果表明,本文设计的卫星编队故障诊断算法能够有效的实现卫星的故障诊断.