宋乐
(航空工业直升机设计研究所无人机事业部,江西景德镇,333001)
无人直升机研制最早始于上世纪50年代初。我国则在“七五”期间就开始重视无人直升机的设计和研制工作[1]。历经30多年的发展,无人直升机已经被广泛应用于无线电侦测、地质地貌测绘、航空影拍、电力施工、森林防火、应急救灾、通信中继、反恐侦查等诸多领域[2]。近年来,无人直升机的伤亡风险低、机动性好、起降条件少、使用方便等优势在民用市场需求中逐步显现出来。我国民用无人机已经进入了快速发展时期。越来越多的无人直升机系统研制已经由“以平台为中心”向“以任务为中心”的思想转变[3]。如何提高无人直升机的多任务能力,如何降低无人直升机改装的成本。这对无人机工业设计提出了更高的要求。
本文使用模块化设计思想研发无人直升机地面监控软件,为降低无人直升机多任务改装带来的风险提供帮助。
软件模块化旨在建立可重用的软件构件[4]。在不需要修改或少量修改的情况下,可再次组建成新的软件。进而降低软件的开发成本、提高软件的可靠性和可维护性。软件模块的良好设计体现在以下几个方面。
(1)要求软件模块具有较好弹性的同时不增加解决问题的复杂程度。
(2)要求软件模块具有较好的可移植性。
(3)要求软件模块具有更清晰的接口定义。
(4)要求软件模块具有更好的稳定性。
(5)要求软件模块具有更好的独立性。避免模块间的过度依赖。
无人直升机地面监控软件实现地面人员对无人直升机的远程控制和监视功能。通过数据通信系统将获取的无人机下行遥测数据帧进行解析、分析和图形化显示。同时将控制指令编码成上行遥控数据帧发送到无人机飞控系统中。
具有不同任务载荷的无人直升机在监控数据和通信协议方面有所不同。根据模块化设计原则将地面监控软件的基本功能进行底层抽象和数据分离。同时对用户界面的图形化显示功能进行组件封装。图1说明地面监控软件的模块化设计结构。
图1 地面监控软件模块化设计结构图
长期实践表明,良好的软件弹性来自于更多高层次的抽象。地面监控软件最为核心和固化的功能就是根据不同的协议对各种数据帧进行解析、组装、分析和图形化显示。因此,将这些功能分成协议解析模块、数据算法模块、通信模块和用户界面组件模块四大底层功能模块。通过面向对象的设计方式各自形成四大互相独立的类库。这些类库的设计具有以下的特点。
(1)采用单一职责[5]的类设计原则。不同职责的类相互独立,没有继承或接口关系。
(2)相同职责的类实现同一接口、继承同一父类。可以根据不同需要扩展新类增加软件弹性。
下面以协议解析模块为例。该模块以AbstractSignal为基类抽象出十六进制字节数组与实际值的换算逻辑。而不同的换算逻辑实现在具体的子类中。比如AnalogSignal实现字节数组与数值的换算;TextSignal实现字节数组与文本的换算;DiscreteSignal实现字节数组与离散位状态的换算等。Protocol类包含一组信号,实现帧数据的匹配、解析、过滤和校验功能。图2展现协议解析模块的UML类图。
图2 协议解析模块UML类图
地面监控软件处理数据需要依据不同的帧数据协议。将协议数据与功能进行分离。可以使各底层模块具有更好的独立性,避免模块间的过度依赖。同时将分离的协议数据结构化和持久化存储。有助于提高软件的可配置性。降低因协议变化而造成软件更改的风险。
协议数据结构化和持久化存储可以采用各种形式。比如XML结构文件、JSON结构文件、关系型数据库等。图3展现某协议的XML结构。
图3 协议XML结构
地面监控软件最终目的是将解析和分析后的数据通过图形用户界面展现给用户。不同项目软件变化最大的部分就是图形用户界面(GUI)。将界面组件化能更好的降低UI设计中大量的重复性工作。
针对无人直升机的使用特点和习惯。我们抽象出了状态灯、仪表盘、水平仪、刻度尺、游标尺、能量柱、雷达图和开关按钮等UI组件。这些组件具备以下三个特点。
(1)每个组件都是独立的模块,在修改时不会影响其他的组件。
(2)每个组件都是完整的功能闭环。具有独立的尺寸、颜色和状态设置逻辑。
(3)每个组件都可以通过布局与其他组件自由组合成更大的组件或界面。
下面介绍几个使用QT开发的QWidget组件,如图4所示。
图4 组件可视化界面
水平仪用于显示无人直升机的俯仰角、滚转角和航向角等姿态信息。使用setDegValue(int)、setRollValue(int)等方法实现背景图、刻度线和方向指示器的旋转。
游标尺用于显示无人直升机的速度和高度信息。使用setCursorValue(int)等方法实现游标刻度的上下移动,并在即将超出刻度范围时刷新刻度轴。
仪表盘可以用于显示各种发动机转速、旋翼转速等信息。能量组可以用于显示各种燃油量、滑油温度等信息。雷达图可以显示无人直升机起飞降落时的定位信息。状态灯可以显示无人机直升机的各种告警信息。
在某无线电监测项目中。无人直升机下行遥测数据包含BCD格式的时间量需要解析显示。针对需求变化,在地面监控软件的协议解析模块中增加了继承AbstractSignal 的BCDTimeSignal类。通过getRealValue()方法直接可以获取解析后的时间数据显示在用户界面中。此次变更只需要完成BCDTimeSignal的单元测试和时间数据显示的配置项测试即可。
在某海事项目中。需要控制无人直升机上的部分任务设备。针对需求变化,需要在上行控制指令增加新的内容。为此,地面监控软件通过修改上行控制帧协议的格式。在没有更新任何代码的情况下实现了需求。此次变更只需要完成针对指令发送功能的配置项测试即可。
经过长期的项目实践证实了模块化设计的地面监控软件有效的降低了研发成本。为降低无人直升机平台改装需求带来的风险提供了帮助。
本文详细介绍了无人直升机地面监控软件的模块化设计与实现。并通过应用实例说明经过模块化设计的地面监控软件具有更高的开发效率、更好的可配置能力和更低的研发成本。通过模块组装和参数配置,地面监控软件可以适应更多具有不同任务载荷的无人直升机平台。