施明健,王大勇,郑文轩,任 斌,王延祥,4,王宏伦†
(1. 沈阳飞机设计研究所,辽宁 沈阳 110035;2. 北京航空航天大学自动化科学与电气工程学院,北京 100191;3. 北京航空航天大学飞行器控制一体化技术重点实验室,北京 100191;4. 北京航空航天大学未来空天技术学院/高等理工学院,北京 100191)
空中加油(Aerial Refueling)是利用加油机在空中为飞行中的其他飞行器补充燃料的技术,是增大飞行器作战半径和滞空时间,提高载弹量,解决起飞重量与飞行性能间矛盾的重要手段[1]。近几十年,随着无人系统技术的不断发展,无人机被逐步应用于军事领域和民用领域。在上述背景下,无人机空中加/受油的需求也在日益增加。传统空中加油技术虽然为无人机空中加油提供了一定的技术支持,但又不完全适用于无人机空中加油问题。相较于有飞行员参与的传统空中加油,自主空中加油的无人化特点要求必须设计受油机的精确对接控制律,从而使得受油机具备与加油机完成自主对接的能力。因此,针对无人机空中加油问题,自主空中加油(Automated Aerial Refueling,AAR)技术得到了专门研究[2-7]。
在自主空中加油技术的研究过程中,地面仿真试验是进行技术验证的重要途径,在验证技术路线可行性,保证任务安全性,提高任务成功率等方面起着不可忽视的作用。一般而言,仿真条件越符合实际情况,仿真结果的可参考性就越强。但自主空中加油系统的组成十分复杂,包括六自由度、非线性、变质量的加/受油机系统;柔性的加油软管-锥套组合体;由加油机尾流、受油机前扰波和大气紊流组成的复杂气流干扰系统等[8]。在如此复杂的系统组成下,一方面,单一计算机系统对自主空中加油技术进行单线程仿真时很难达到实时仿真;另一方面,单一计算机系统也难以逼真模拟自主空中加油任务中加、受油机之间以及飞行控制器与飞机之间的通信。而通过分布式仿真(Distributed Simulation)技术,一方面可以实现并行实时计算;另一方面,按照实际物理系统划分各仿真节点则更加接近真实系统,且能将系统之间的通信纳入仿真过程,亦能为接入半物理仿真以及其他系统留出可扩展空间。针对分布式仿真的需求,国际上先后发展出了DIS(Distributed Interactive Simulation)、ALSP(Aggregation Level Simulation Protocol)以及HLA(High Level Architecture)三个标准[9]。汉诺威大学的ACOSAR项目组也研发了自己的DCP(Distributed Co-Simulation Protocol)协议并将其开源[10-11],开源界也有一些诸如coral的分布式仿真框架。但这些标准和框架有一个共同的特点:定义了充足的可扩展的协议功能和接口,导致整体逻辑复杂,实现困难,并且有很多的功能对于小型项目来说是用不到的。因此,有许多人员选择基于TCP(Transmission Control Protocol,传输控制协议)或者ZeroMQ等轻量级框架开发简单的分布式仿真系统[12-13],并根据项目的具体需求定制系统功能。
本文在对自主空中加油技术研究的基础上,基于目前行业内对空中加油技术地面实时仿真系统的需求,基于ZeroMQ和C++/Qt开发了一套无人自主空中加油分布式仿真系统。本系统能够实现对自主空中加油过程的实时仿真,并具有良好的人机交互界面。
分布式仿真系统的核心部分是通信网络。对于网络通信,目前绝大多数网络都基于TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)构建,其中包括TCP、UDP(User Datagram Protocol,用户数据包协议)、FTP(File Transfer Protocol,文件传输协议)等多个协议。对于传输仿真数据的需求,可以使用各类网络通信中间件实现,包括ActiveMQ、RabbitMQ、ZeroMQ、Kafka等。本文利用ZeroMQ进行通信网络的构建,接下来对ZeroMQ的特点做简单介绍。
1.1 ZeroMQ简介
ZeroMQ是一种消息队列中间件,它具有很多适用于分布式系统架构的特点[14]:
1)简单
ZeroMQ将底层的Socket、多线程、缓冲区等内容封装起来,提供了更高层面的API,且从初始化到发送消息也仅需要数行代码,远低于繁杂的原生Socket接口。
2)多种消息模式
ZeroMQ支持请求回应、发布订阅、管道以及独占对共4种消息模式,它们之间还能组合出更多的模式以实现从一对一到多对多的通信模式。
3)高性能
ZeroMQ的协议简单,且性能远超ActiveMQ等同类软件。
4)无须消息服务器
ActiveMQ等同类软件需要有独立的消息服务器以实现消息的持久化存储,保证即使在处理节点离线的情况下也能将消息缓存等待节点上线后处理。而仿真环境的数据都是实时产生并消耗的,不需要中间存储。
5)通信数据原子化
原子化的含义是,通过ZeroMQ发送的一组数据,要么完全没有收到,要么收到完整的数据包。也就是说ZeroMQ会自动处理并保证接收到完整的数据而无须再手动拆包拼包。再结合基于TCP的通信以及局域网稳定的环境,可以认为ZeroMQ能够提供稳定可靠的数据传输。
1.2 程序框架
为了实现分布式仿真,本文设计两类节点——管理节点和仿真节点,以及两种话题——指令话题和数据话题。
管理节点负责统筹管理各仿真节点,提供节点注册、仿真管理等功能;而仿真节点则专注于实现仿真工作,在管理节点的指令下执行仿真动作,并收发仿真数据。
其中,管理节点可发布指令话题,用于发布各类指令,各仿真节点通过订阅该话题来接收相应指令。仿真节点也可发布指令话题,用于发布对管理节点指令的回复消息,管理节点通过订阅该话题来接收回复消息。
此外,各个仿真节点还能够发布自己所产生的数据话题,需要使用对应数据的节点来订阅该数据话题,实现节点间的数据流动。对于数据话题,需要进一步明确话题的名称、话题的发布者以及话题所在的端口。
程序框架如图1所示。图中箭头表示发布或订阅的话题,而虚线框的“若干仿真数据话题”是为了便于理解和绘图设置的,实际上并不存在一个“话题的集合”,而是由每个仿真节点分别发布了若干话题,再根据自己所需订阅了若干话题。
对于仿真节点和管理节点之间传输的指令数据,本文还定义了一定的数据帧格式以方便数据的传输处理,数据帧格式如图2所示。其中节点编号为各个仿真节点的编号;指令代码为预定义的一系列指令;数据长度标识了后续的附加数据的字节数;附加数据则包含了指令的详细内容,例如,初始化时会包含所有节点的相关信息。而对于仿真节点之间传送的仿真数据,则直接以原始数据发布,不再添加额外的帧头。
同时,分布式仿真程序中还预定义了一系列指令,包括初始化、注册、开始仿真、推进仿真、暂停、结束等,而上述定义的指令帧格式也为后续扩展指令保留了充足的扩展空间。
1.3 管理节点
管理节点是仿真网络的核心节点,主要负责管理注册节点信息,发送指令等。管理节点对外部提供的功能接口包括:设置指令接收、发送端口;获取仿真节点信息列表;获取仿真数据话题信息列表;设置仿真时长和仿真步长;设置录制与回放;设置仿真速度;初始化仿真;开始、暂停、停止、单步推进仿真;节点初始化、注册、仿真推进和发生错误等事件的回调函数等。
管理节点的运行逻辑框图如图3所示。
图3 管理节点程序逻辑框图Fig.3 Logical block diagram of management node program
管理节点启动后,等待仿真节点发送注册消息,待所有节点注册完毕后可手动进行初始化操作。在启动仿真后,管理节点将启动一个周期为1 ms的定时器,循环检查当前时间是否到达了仿真时间,再检查各个节点完成情况,都满足条件后发出下一步仿真的指令。
1.4 仿真节点
仿真节点是用于实现仿真程序的节点,主要负责在管理节点的指令驱动下完成仿真动作。仿真节点主要提供的功能接口有:设置指令发送、接收端口及管理节点IP用于连接到管理节点;设置本节点IP及数据话题起始端口,用于仿真节点之间的仿真数据话题的相互连接;添加仿真数据话题;设置仿真初始化、推进、后退、结束等仿真操作的回调函数。
仿真节点相比管理节点所需的设置和接口要少很多,只需要提供用于连接管理节点和仿真节点之间互联的信息即可,此外,还需要设置仿真相关的数据话题和回调函数用于仿真的各阶段调用。仿真节点运行的逻辑框图如图4所示。
图4 仿真节点程序逻辑框图Fig.4 Logic block diagram of simulation node program
通过上述流程框图不难看出,仿真节点的主体逻辑与接收各类消息密切相关。与管理节点类似,仿真节点也使用一个子线程处理所有消息的接收,包括来自管理节点的指令和来自其他仿真节点的仿真数据。在有数据到来时,将根据数据类型分别处理管理节点指令或者是更新仿真数据,如果是仿真指令则会调用对应的仿真函数,并在结束后将自己产生的仿真数据广播出去。
同时,仿真节点还实现了录制和回放功能。如果管理节点选择了录制本次仿真,仿真节点会自动将本节点每步仿真产生的数据以二进制数据文件的形式保存在硬盘上;而如果管理节点选择了回放仿真,仿真节点会加载对应的录制文件,并在每步仿真时读取对应的数据。
需要注意的是,各仿真函数的调用处于子线程中,考虑到用户可能会在其他线程对数据进行进一步处理操作,就需要对仿真数据做相应的处理以避免冲突。对于本节点发布的数据,在调用仿真函数结束后立刻将其广播发布出去即可;而对于要接收的数据,需要额外建立缓冲区,在接收到数据时先保存至缓冲区,在调用仿真函数之前再将其更新至用户数据区。
1.5 仿真数据话题
每个仿真节点都会产生一定的仿真数据,也会需要读取若干其他节点产生的数据,各仿真节点之间会形成复杂的数据依赖关系。对于每个仿真数据话题,需要明确其由哪个节点产生,包括该节点的IP、发布话题的端口号,这些信息会在节点注册时发送给管理节点,再在初始化时由管理节点广播给所有节点。各仿真节点收到初始化信息后,就可以根据自身需要对所需的数据话题建立监听链接。
用户在对某个仿真节点创建仿真数据话题时,需要明确数据名称即话题名称、数据的容量、该节点是发布还是读取该数据,其余参数由程序自动确定。
在前文所述作为底层的通信网络基础上,本节将介绍本文中开发的仿真管理节点及各个仿真节点的应用程序。
各仿真节点不仅要完成数字仿真工作,还需要提供一定的人机接口进行仿真设置、指令输入、查看仿真数据等,因此还需要构建用户图形界面(Graphical User Interface,GUI),以提供良好的交互体验。考虑到仿真通信网络使用C++编写,本文选择了同样基于C++的Qt框架。
2.1 管理节点程序
仿真管理节点主要负责整个仿真过程的配置与调度管理,它对用户来讲相当于控制台,可以很好地控制整个仿真的过程。管理节点掌握着仿真时钟,仿真运行后,每隔一个仿真周期,管理节点会向各仿真应用节点发送仿真推进指令,各仿真应用节点接收到仿真推进指令后,分别调用各自的仿真过程函数,完成一个周期的仿真,并交互必要的仿真数据。管理节点程序界面如图5所示。
图5 管理节点程序界面Fig.5 Management node program interface
图5中展示了有两个测试仿真节点时的管理节点界面。其中上方工具栏中的按钮依次为搜索节点、初始化、开始仿真、暂停仿真、终止仿真、仿真加速、仿真减速和仿真设置。这些按钮通过Qt中的QPushButton类实现,在程序中通过Qt的信号/槽机制将按钮事件连接到管理节点类对应的功能代码中。仿真设置按钮则连接到仿真设置窗口的打开动作上。
中间区域为节点信息展示区,以树状图的形式展示各个节点的信息,包括节点名称、IP、端口、初始化状态和当前步数,以及节点中包含的仿真数据话题的名称、IP和端口以及所有权信息。这部分展示内容使用Qt的QTreeWidget树状图控件实现,同时向管理节点类注册了节点信息更新的回调函数,在节点注册、节点仿真推进等情况下会调用该函数,并在函数中根据相关信息更新图表。
最下方显示了当前仿真相关信息,包括:
1)仿真步长:每推进一步需要的时间,也是仿真程序中的离散步长;
2)仿真速度:仿真时间与真实时间的比例,100%即为实时仿真;
3)仿真类型:包括仿真若干秒的定时长仿真和不设时长的自由仿真两种;
4)仿真状态:当前整个系统的状态,包括等待注册、初始化中、仿真中、暂停中、仿真结束等;
5)仿真时间:仿真程序内部的时间;
6)实际速度:当前仿真推进的速度与真实时间的比例,100%为实时仿真;
7)仿真状态进度条:如果仿真类型为定时长仿真,则会显示一个不断推进的进度,自由仿真则会显示不断滚动的忙碌进度条;
8)录制重播状态:即当前仿真进程是否启用了录制或者重播功能。
2.2 仿真节点程序
2.2.1 仿真节点GUI界面
仿真节点的基本界面,包括文字显示、输入框、选择框、按钮等都可以直接使用Qt的GUI工具搭建,但仍有一些界面无法用Qt的基本控件实现,因此,本文引入一些第三方控件来实现仿真节点GUI界面的搭建。
仿真过程中会产生大量的仿真数据,需要实时展示以供监控状态、观察数据。Qwt(Qt Widgets for Technical Applications)是一个基于Qt框架开发的用于科学应用的控件库[15],包含了各类图表、按钮、旋钮等控件,效率极高,能够满足本文的实时显示仿真数据的需求。
对于飞行姿态数据,如果仍以折线图或者数字形式显示则不够直观。本文中采用名为QFlightInstrument的飞行仪表盘控件展示飞行姿态,如图6所示,左侧为空速,右侧为高度和升降速率,下方为航向,中间则可综合显示俯仰、滚转、侧滑等角度。
图6 飞行仪表盘控件Fig.6 Flight instrument panel control
同样的,飞行轨迹如果直接以数字或者曲线表示也不够直观,因此,本文将地图嵌入程序中,利用地图的JavaScript API接口,并结合Qt的QWebChannel模块实现C++与JavaScript程序的相互调用,将飞机坐标以相对地图上某一固定点的位置的形式显示在地图上,同时可以显示实时飞行轨迹、预定航线、障碍物等信息。航迹地图示例如图7所示。
图7 航迹地图示意图Fig.7 Schematic diagram of track map
2.2.2 仿真节点
在前文所述的仿真通信网络、仿真节点GUI界面构建的基础上,本节将展示本文中构建的分布式仿真系统的仿真节点。根据实际系统物理意义和计算量,本文将整个仿真系统分为以下几个节点:受油机数字飞机节点、指挥控制节点、飞行控制节点、风扰节点、软管锥套节点和锥套数据中转节点。
以仿真20 s为例,管理节点及各仿真节点的运行界面如下所示,其中管理节点为图8,可以看到其中列出了各个节点的名称、步数以及包含的数据话题信息。
图8 仿真过程中的管理节点Fig.8 Management nodes in the simulation process
各个仿真节点如图9—图14所示,分别利用前述编程工具实现了GUI界面,展示了对应的仿真数据。
图9 数字飞机节点Fig.9 Digital aircraft node
图10 指挥控制节点Fig.10 Command and control node
图11 飞行控制节点Fig.11 Flight control node
图12 风扰节点Fig.12 Wind disturbance node
图13 软管锥套节点Fig.13 Hose-Drogue assembly node
图14 锥套数据中转节点Fig.14 Drogue data transfer node
数字飞机节点可接收飞行控制系统产生的控制指令以及风扰节点产生的大气紊流和加油机尾流数据。通过对考虑了风扰、参数摄动以及燃油质量变化的六自由度非线性刚体飞机模型进行计算得到飞行状态。此外,受油机的数字飞机部分还包括受油插头模型、接收飞机重心位置和姿态信息、产生受油插头的位置信息。图9展示了数字飞机节点的程序界面,用于显示加/受油机的各状态量。界面左侧区域是状态选择区域,用户可选择需要显示的状态量,界面右侧区域为状态显示区域,可以将被选择的状态量的变化曲线显示出来。
指挥控制节点以可视化控件实时监控飞机的飞行轨迹以及重要飞行状态,程序界面如图10所示。指挥控制节点的左侧区域是地图,用于显示飞机的位置及轨迹,右上方区域为飞行仪表盘。同时,由于仪表盘分辨率较低,界面右下方以数字形式将飞机重要参数显示出来。
飞行控制节点的功能是根据飞行状态和环境参数等信息计算对飞机的控制指令。以受油机为例,对接控制系统接收锥套位置信息和数字飞机节点产生的飞行状态信息,通过设计好的控制律产生控制指令。飞行控制节点程序界面如图11所示。
风扰节点负责计算产生大气紊流、受油机前扰波和加油机尾流等气流扰动参数,其程序界面如图12所示。
加油机软管锥套节点负责计算加油机飞行状态以及受加油机牵引和气流扰动作用的加油软管-锥套组合体的运动状态。加油软管锥套节点的程序界面如图13所示,加油机和加油锥套的各项数据以曲线形式表示出来。
锥套数据中转节点用于在对接段的半物理仿真中与锥套的半物理仿真设备对接,将仿真的锥套数据发送给控制锥套运动的机械臂,并将机器视觉识别的锥套位置信息接收并反馈给仿真系统。可以在程序中切换是否接入半物理仿真系统,接入时锥套数据为视觉识别数据,否则为仿真数据。
本文基于ZeroMQ和C++/Qt开发了自主空中加油技术分布式仿真系统。该系统能够对复杂的自主空中加油系统进行实时仿真,并方便接入半物理仿真设备,对验证空中加油控制方法有重要作用。
猜你喜欢 锥套空中加油油机 一种农机用锥套式带轮的设计河北农机(2021年12期)2022-01-06基于计算流体力学的空中回收锥套气动特性分析科学技术与工程(2020年4期)2020-04-08大数据中心高压油机供电模式探讨通信电源技术(2020年1期)2020-01-0610kV油机在大型数据中心的并机控制与切换方案探讨通信电源技术(2016年5期)2016-03-22增稳锥套与软管二级摆建模与仿真飞行力学(2015年3期)2015-12-28基于CRUISE软件1.6L油机匹配某轻卡动力总成分析汽车实用技术(2015年8期)2015-12-26大型集装箱船舶分油机仿真系统中国航海(2014年4期)2014-11-29军人画军机(六)航空世界(2014年7期)2014-09-24空中加油锥套支柱数对稳定伞阻力系数影响研究飞行力学(2014年4期)2014-09-15无人机空中加油自主会合导引律研究电子设计工程(2014年18期)2014-02-27