1. 引言
四旋翼无人机具有复杂的非线性、强耦合和欠驱动特性 [1] ,使得其数学模型的建立变得相对复杂。目前,研究者和工程师已经深入研究了四旋翼无人机的数学模型 [2] ,并取得了一定成果。例如,他们通过反步控制器 [3] 、滑模控制器 [4] 以及基于广义滑动流形的方法来控制四旋翼的姿态和位置。在飞行控制方面,研究者也通过优化控制算法来提高无人机的飞行性能,如采用鲁棒跟踪控制器 [5] 实现良好的跟踪效果。此外,四旋翼开源地面站的研究主要集中在标准化和模块化设计。总的来说,四旋翼无人机的建模仿真已经取得了一定的成果,但控制算法的仿真结果与硬件运行结果可能存在一定误差,导致算法可能出现缺陷无法在无人机上真正运用。为此,设计一款可以利用仿真结果控制无人机的实验平台尤为重要。
黄峰等 [6] 对四旋翼无人机视觉导航半物理实验平台进行研究,该实验平台能满足四旋翼无人机导航的相关实验要求,也能完成四旋翼无人机飞行姿态的仿真,但需要额外的一些硬件设施,增大了实验平台的建设成本;张家明等 [7] 研究的四旋翼无人机仿真实验平台,能规避实物调试以及试飞可能产生的各种风险,但并不能完全确保仿真结果与硬件运行不存在误差,控制器在实际无人机中稳定控制;常广晖等 [8] 研究的虚拟仿真实验平台,将控制版接入仿真实验,消除了仿真与硬件运行之间的误差,但对四旋翼电机的滞后性考虑不够充分;张佳等 [9] 研究的无人机仿真平台在一定程度上完成了相关算法的验证与评估,但没有直观显示无人机在各个时刻的飞行姿态。
针对上述问题,本文开展适用于四旋翼无人机控制算法验证的实验平台的研究,利用控制算法的仿真结果直接控制无人机的四个电机飞行,来减小仿真结果与实际硬件运行之间存在的误差;对飞行的姿态以数据和波形的形式直接显示在实验平台的界面中;将所有的飞行数据进行存储,方便后期分析。
2. 实验平台设计方案
四旋翼无人机控制算法实验平台由PC机、地面终端、仿真软件、遥控手柄、四旋翼无人机和调试架构组成,整体架构如图1所示。其中地面终端基于.NET技术,采用C#编程。地面端通过无线通讯模块与四旋翼无人机通讯,获取无人机数据,并将其传输至实验平台。该平台依托地面终端发送的无人机数据和遥控手柄数据进行仿真,然后将仿真结果传回地面终端。最终,地面终端将仿真结果传回至四旋翼无人机,来控制无人机的四个电机。为实现无人机数据与仿真数据实时交互,需设计一个实验平台,来实现无人机与仿真模块间的通讯。实验平台软件设计需要具备以下功能:
(1) 通过HID和串口收发数据;
(2) 实验平台的服务端能与多个客户端进行网络通讯;
(3) 遥控手柄能控制无人机飞行;
(4) 能利用无人机数据进行实时仿真,并将仿真结果传输至无人机;
(5) 绘制无人机传感器数据在仿真软件上的实时动态图;
(6) 存储无人机传感器、遥控器、仿真结果等数据及通讯日志。

Figure 1. Overall architecture of the experimental platform
图1. 实验平台整体架构
3. 实验平台开发
3.1. 架构设计



(a) 四旋翼无人机(b) 遥控手柄 (c) 数传模块 (d) 调试架
Figure 2. Drones and other hardware
图2. 无人机及其他硬件
将控制算法直接应用于四旋翼无人机飞行是一个具有挑战性的任务,需要考虑多种因素和实际操作能力。因此,需要设计一个合适的实验平台来进行实验。该实验平台包括通讯模块、遥控模块、数据处理模块、仿真模块、交互模块(包括波形显示)以及无人机硬件组件(如图2所示)。通讯模块通过HID设备或串口通讯设备读取来自无人机传感器的数据,并将这些数据(以十六进制形式)传输至数据处理模块。数据处理模块将这些数据处理成直观的形式,并通过交互模块以波形和数字的形式在界面中显示出来,同时将数据传输至实验平台。实验平台实时获取无人机的姿态数据,并进行仿真试验。最后,将仿真结果通过通讯模块传输至无人机,实现对无人机飞行的控制。
3.2. 通讯模块
通讯模块是本实验平台的重要组成部分。通讯模块用于四旋翼无人机、PC端实验平台以及不同PC间的通讯。四旋翼无人机和实验平台的通讯方式有两种,HID通信和串口通信。
(1) HID通信。人体学接口设备(HID)是一个设备定义。HID一开始为USB,但设计为与总线无关。它为低延迟、低带宽的设备设计,但也可以灵活地设定基础传输中的速率。HID设备不需要安装驱动就可以直接使用,常见的HID设备有:鼠标、键盘、字母数字显示器等。
使用C#编程完成HID设备通信需要进行以下几个步骤:
a) 下载并引用库。下载、安装并引用HidLibrary程序包。
b) 声明变量。包括但不限于HID设备的ID信息、中转数据的符号。
c) 取消跨线程检查。不同线程的数据会因线程检查而中断调用,所以因取消跨线程检查。
d) 初始化。初始化HID通讯相关信息,为设备连接做好准备。
e) 连接设备并接收数据。有数据进来时,触发数据接收事件,执行相关程序。
f) 数据发送。向连接的HID设备发送byte型数据。
(2) 串口通信。串口通信在C#中较为常见,在工具箱中就有相关控件。可直接将控件拖动到窗体上便完成该控件使用。
3.3. 遥控模块
遥控模块用于获取遥控手柄的数据。以轮询的方式获取遥控手柄12个按键的状态,以及x、y、z轴的数据。将获取到的键值,实时传输至数据处理模块。
使用C#编程完成遥控数据获取需要进行以下几个步骤:
(1) 添加DirectX库。将Microsoft.DirectX.DirectInput.dll添加到引用中。
(2) 修改配置文件。修改为使用旧版的激活策略,以保障遥控模块正常运行。
(3) 编写遥控手柄设备读取、获取遥控手柄数据等相关函数。
(4) 设置合适的循环时间。遥控手柄数据需要轮询,合适的时间可以保障遥控的实时性,也可以提高程序运行效率。
3.4. 数据处理模块
数据处理模块主要解析数据收发过程中的数据。部分通讯协议如下表1所示。将接收到数据进行和校验,检验数据是否完整,完整的数据按照不同的功能区分解析,并将对应的十六进制数据解析成十进制的常规数据。将遥控数据、仿真结果数据转换成十六进制数据,并依照通讯协议,分配对应的数据帧、功能字和数据长度,传递给正在连接的通讯模块发送出去。飞行数据、仿真数据以表格形式储存。

Table 1. Experimental platform data transmission protocol
表1. 实验平台数据发送协议
3.5. 仿真交互模块
仿真交互模块是本实验平台与其他平台区分开来的重要一环。本实验平台的仿真并不对模型进行仿真,而是将控制算法的仿真结果,经控制律运算后,传输至四旋翼无人机,以控制无人机飞行。无人机的飞行数据又返回至仿真软件,作为实际值继续运行。
使用C#编程与仿真软件交互需要进行以下几个步骤:
(1) 添加仿真模块相关库。将Interop.MLApp.dll和MWArray.dll添加到引用库。
(2) 直接运行仿真软件语句。
(3) 向仿真软件传递字符时,需添加用单引号。
(4) 数据传递过程中,只涉及标量,不涉及数组和矩阵。在一定时间间隔内依次顺序发送数组中的数据,可避免不能直接发送数组的问题。
(5) 接收仿真软件仿真过来的数据后,将这些数据传送给通讯模块,以及以波形的形式显示出来。
4. 实验平台应用
四旋翼无人机实验平台地面站主界面如下图所示,可选择通讯的方式,与无人机建立通信连接,显示采集数据。遥控手柄的采集结果、仿真软件的运行结果,都将实时传输至无人机,来控制无人机的飞行。无人机的姿态数据,以及仿真软件对姿态数据的跟踪结果,如以下图3所示。实验平台实时显示四旋翼无人机发送至地面终端的各项数据;所连接的遥控手柄各按钮的实时数据;直观显示了四旋翼无人机飞行的实时状态;直观展示整个飞行过程中无人机的稳定情况以及其他各类信息。图4为PID控制算法在本实验平台运行时,对四旋翼无人机的控制效果,整体而言,四旋翼无人机处于一个相对稳定的状态。

Figure 3. Experimental platform operation
图3. 实验平台运行
5. 结束语
本研究提出了一种融合了仿真和实验平台设计理念的四旋翼无人机物理实验平台设计方案。该平台采用自主设计的飞控开发板作为物理控制器,结合无人机体完成仿真实验。研究结果表明,该无人机实验平台达到了设计要求,实现了无人机多个设备之间的数据收发和数据存储,与仿真软件的交互,以及对无人机的控制。该实验平台中无人机仅作为传感器和执行机构,相关控制算法的运算在PC端运行,减少了CPU的占用,提高各项数据的获取和传递效率;控制算法研究者无需再学习四旋翼无人机控制器的程序设计,减少了四旋翼无人机机载控制器编程验证时间;控制算法的仿真结果控制四旋翼无人机飞行姿态和轨迹,在一定程度上验证了该算法的实用性。