基于DDS 的无人直升机综合处理软件设计与实现
2021-06-16覃石昌
覃石昌
(中国直升机设计研究所无人机事业部,江西景德镇,333001)
0 引言
对于无人直升机来说,其在飞行过程中,需要接收地面控制站对其发送飞行控制指令进行姿态调控;需要接收任务控制指令执行相应任务;需要向地面站回传遥测数据显示飞行状态,操作人员根据遥测数据判断飞机飞行姿态,向无人机发送相应的遥控指令。因此,在无人直升机飞行过程中,地面控制站内部之间、内部与外部都会会有大量的数据交互,因而需要稳定可靠的数据传送通道。DDS 是分布式系统实时应用程序的通讯中间件,DDS 能够满足非常复杂、非常灵活的数据流要求。本文利用QT 搭建无人直升机地面站[1-2]综合处理软件运行框架,基于DDS 实现软件对外数据通信。
1 软件架构
无人直升机综合处理软件采用C++编程语言进行设计与开发。软件采用模块化设计,具有良好的扩展性。软件架构如图1 所示。软件包含通信、复合指令解析、综合管理、遥测数据解析、席位管理、协议处理、日志管理等七个主要功能模块。
图1 无人直升机综合处理软件架构图
其中基于DDS 的通信模块是其他功能模块的基础,其他功能模块依赖于通信处理模块提供数据接收和数据发送通道。
2 基于DDS 的通信模块的实现
DDS 是由RTI 公司研发的通信中间件,其广泛应用于复杂的分布式应用、系统工程集成、控制自动化等领域。DDS 是一个可以解决时间苛刻和数据苛刻难题的通信中间件。DDS 独立于操作系统和编程语言,可以实现不同系统之间的通信。其传输方式包括以太网、共享内存或其他连接方式。另外DDS 具有多种服务质量策略(QoS)参数可供调整,方便用户调整使应用程序达到性能和资源利用的最佳组合。
无人机地面站内部数据交互具有数据量大、异构系统多、编程语言多样化、对数据传输质量要求多样化等特点,因而综合处理软件通信模块需要选择一个与系统、编程语言无关,调试方便灵活,容易解耦的通信中间件,所以本模块基于DDS 进行开发,以生成源文件形式供主程序调用。
■2.1 DDS 调用模式
DDS 主要有两种数据传输模式:主题模式和回调模式。
(1)主题模式原理如图2 所示:通信端点之间创建域来进行资源集中配置,每个域中有若干主题,注册在同一个主题内的订阅者可以获得发布者发布的信息。
图2 DDS 主题模式原理图
(2)回调模式原理如图3 所示:调用端和服务端也需要处于相同的域和主题之下,它们之间的通信交互和普通函数回调一样,调用端发送请求,服务端反馈请求结果。
图3 DDS 回调模式原理图
DDS 两种传输模式下每个主题都有独立的服务质量策略(QoS)文件,从而针对不同的应用场景对传输质量和传输速率之间进行优化配置。
DDS 开发分为以下几个步骤,流程图如图4 所示:
图4 基于DDS 通信模块开发步骤图
(1)编写IDL(interface description language)文件;
(2)在服务端和客户端编译IDL 文件,生成独立C++头文件、源文件;
(3)在项目中引入生成的源文件,配置DDS 服务策略(QoS),编写通信处理函数;
(4)代码编译;
(5)测试与集成。
■2.2 编辑IDL 文件
根据软件的应用场景,软件的DDS 通信需求分为主题模式与回调模式,席位管理指令采用回调模式,其他指令数据采用主题模式。
(1)采用回调模式的用户登陆指令调用数据格式如下:
数据内容为用户名、密码、用户角色,密码采用哈希加密保证数据安全,角色代表当前登陆用户的角色。
服务端反馈指令数据格式如下:
数据内容为操作结果标志,失败原因(如果操作结果失败,此项填写原因,成功则置空)。
(2)采用主题模式的遥控指令数据格式如下:
其中struct_header 是统一的数据包头,里面包含信源、信宿、指令长度等常规信息,fmCode 为指令码,fmData为指令内容。
通过类似上述的数据结构的定义,创建了具有12 个席位管理指令数据结构与32 个飞行指令数据结构的IDL 文件。
■2.3 生成源码和配置策略
打开DDS 客户端Launcher 界面,在code Generator子界面打开创建的IDL 文件,选择源文件输出文件夹,编程语言选择Modern c++11,运行库平台选择X64Vs2017,点击运行,可以在源文件输出文件夹得到如图5 所示生成的四个c++文件。
图5 生成的源文件
在QT 创建的项目工程中导入生成的四个c++文件,并在环境变量配置DDS 头文件目录与lib 目录。
席位管理指令要求传输可靠,响应速度快,请求和接收同步处理,因而采用 DDS的 RELIABILITY(可靠性)Qos策略,可以保障发布的数据内容能够可靠的传输。
其他一般的指令数据特点是数据传输不可靠,数据量较大,且传输频率高,因而采用DDS 的 BEST_EFFORT(高效)Qos 策略,可以保障数据写入者能够以最高效的方式将数据发送出去,不会阻塞在函数调用上,提升发送者者的数据处理和发送能力。
■2.4 创建通信线程
为保证综合处理软件的并发处理能力,通信线程由数据接收线程(RecvThread)、数据处理线程(DealThread),数据发送线程(SendThread),回调处理线程(RRThread)四个子线程组成。
(1)为了实现主题模式下数据接收、发送与数据处理之间的同步,并提高数据交互效率,在RecvThread 与DealThread 之间和SendThread 与DealThread 之间均采用了采用无锁缓冲区交换信息。
主题模式下通信处理流程如图6 所示。
图6 主题模式数据处理流程
(a)数据接收子线程(RecvThread)、数据处理子线程(DealThread)、数据发送子线程(SendThread)初始化完毕;
(b)RecvThread 通过类WaitSet 的wait()方法阻塞线程,直到接口接收到新数据,通过DDSReader 对象接收新数据;
(c)RecvThread 接收到新数据后,解析数据帧,从帧头读取数据信源、信宿等属性,根据信宿分发到不同的接收缓冲区;
(d)DealThread 循环处理接收缓冲区的数据,分发到对应的处理数据缓冲区;
(e)SendThread 从处理缓冲区取出数据,通过DDS发送出去。
(2)回调处理线程(RRThread)负责处理回调模式的数据请求,如图7 所示,针对每一种类型回调指令,通过实例化一个监听器(ReplierListener 类对象)来监听数据接收接口,并最终在ReplierListener 类内的on_request_available()方法内实现数据处理逻辑,最后返回处理结果。
图7 回调模式处理流程
3 其他功能模块的实现
在通信模块设计实现完成后,使用QT Creator 进行软件其他功能模块开发,其他的功能模块有:
(1)席位管理模块:管理各个控制台席位的登陆、注销、状态管理,权限管理;
(2)日志管理模块:记录软件运行期间的运行状态数据,记录上行的遥控指令帧,下行的遥测数据帧;
(3)协议处理模块:读取协议文件,对上行遥控指令、下行遥测数据进行协议解析;
(4)复合指令解析模块:解析上行飞行遥控指令、上行遥调指令、连续量指令等,组成复合帧,发送到无人机;
(5)遥测数据解析模块:解析下行遥测数据,转发到地面控制站各个设备;
(6)综合管理模块:完成系统初始化配置,运行状态自检,各个通信通道冗余切换等功能。
以上功能模块与通信模块通过内部接口进行数据交互、相互调用,共同实现了综合处理软件的主体功能。
4 应用实例
在U-Y 型无人直升机地面站服务器内部署该综合处理软件。在软件正常启动后:
(1)控制台席位均可以正常登陆,注销,超时下线,站内各个设备可以定时接收到综合处理软件发送的控制站自检状态数据;
(2)只有具有权限的计算机才可以发送遥控,遥调指令;
(3)U-Y 无人直升机 接收到的遥控复合指令帧数据校验合格,指令帧传输时延符合设计要求;
(4)站内设备均可接收到综合处理软件转发的U-Y 无人直升机发送的遥测数据;数据校验和时延均符合设计要求;
(5)查看日志文件,完整记录了系统运行期间的状态与各种上行、下行数据。
综上所述,在U-Y 无人直升机地面试验或飞行操作中,综合处理软件运行稳定,完全符合设计要求。
5 结束语
本文详细介绍了基于DDS 的无人直升机综合处理软件的设计实现过程。用本文方法编制的综合处理软件,经过在U-Y 无人直升机地面站实际运行验证,该综合处理软件能够完成控制台管理、指令发送、遥测数据转发等功能,具有运行稳定,运行效率高等特点,为U-Y 无人直升机的飞行提供了必要的帮助。日后从提高软件通用性的角度出发,将大功能部件模块化,生成库文件,达到其他软件可以迅速复用的效果。