1. 引言
近几年来,无人机因其操作便捷性和性能稳定性等众多优点在各个领域得到广泛应用。随着无人机算法技术的推陈出新,相应的算法仿真平台也在不断地更新发展。与实物验证相比,仿真平台在真实性方面存在缺陷,但它很好地满足了操作方便、调参简单、成本低廉的需求。
无人机仿真平台不断迭代更替,实现的功能也各不相同,目前已提出的仿真平台主要有无实物仿真平台和半实物仿真平台两类。无实物仿真平台利用软件来模拟各种设备和环境,系统运行过程并不包含任何硬件实物。2018年,考虑到无人机仿真平台对实验教学的重大意义,陈晋音等 [1] 基于机器人操作系统(robot operating system, ROS)设计了一款面向课程教育的开放性仿真平台,该平台适用于对多种算法,但需要提前利用kinect等采集设备收集环境信息以创建模型且需要创建ROS环境,加长了验证周期且降低了系统可移植性。张明家等 [2] 在2020年提出了基于Flight Gear的无人机仿真平台,实现四旋翼无人机的实时可视化显示,但由于平台需要控制指令的输入,因此提高了路径规划算法验证的复杂程度。同年,为了提升用户的操作自由度,Kun Xiao等 [3] 提出了一种基于ROS、Gazebo和PX4的可定制多旋翼无人机仿真平台,不过在仿真场景中缺少无人机集群的避障处理,给避障算法的验证造成一定困难。半实物仿真平台则在仿真系统中加入部分硬件,如传感器或者飞行控制核心等,通过与硬件的连接来获取真实数据并替代部分模拟数据。2019年,J. García等 [4] 提出了基于PixHawk、Px4和外围设备的旋翼无人机和Gazebo仿真结合的仿真平台和测试方法,该平台方案显示了用于避障和导航的模拟传感器和仿真模型在实际条件中对无人机的控制效果,但由于PX4中复杂的任务模式和工作参数,使得平台仿真配置繁琐。同年5月,Bin Hu等 [5] 结合Simulink和xPC技术设计了一款无人机半实物仿真系统,该系统使用快速原型技术缩短了开发周期,尽管如此,但由于缺少3D动作仿真,无法实现数据的直观可视化。倪怡涛等 [6] 在2021年通过抽象化系统单元通信过程和使用软硬件结合的单元模拟,提出了基于通用半实物仿真平台方案,但其因为各个单元之间使用不同的通信接口而加长了开发周期,仿真操作也变得复杂且仿真结果无三维视图。为了帮助用户提高无人机训练保障水平,王小青等 [7] 基于Unity软件设计了应用于无人机训练的三维视景系统,但其缺失参数配置和自定义环境环节,降低了平台对算法的普适性。综上所述,目前无实物仿真平台存在操作难度高、可移植性弱等问题,有待进一步改进。
本文针对目前无人机仿真平台中存在的用户操作难度高、配置过程复杂、集群仿真困难大、算法可替换性弱等问题,设计了一款基于Unity3D和Matlab的无人机集群仿真平台。该平台利用简便的通信方式和合理的信息处理机制克服了以上问题,并顺利完成了集群仿真任务。
2. 无人机集群仿真系统
无人机集群仿真系统主要由算法模块、信息处理模块、动画显示模块三部分组成,其系统结构如图1所示。平台采用模块化设计思想,通过分布式的模块化设计,将无人机仿真的任务分配给多个模块。与文献 [1] 提出的仿真平台相比,本文提出的平台使用自定义场景或Unity加载“RAW”地貌数据文件来代替环境信息采集设备,可以减少仿真之前的准备工作,且仿真中使用的软件皆基于Windows系统,因ROS系统需要借助虚拟机平台运行,从而增强平台的可移植性。与文献 [2] [4] [6] 相比,该平台可减少控制命令和多种通信方式的使用,简化操作流程,降低人员操作难度。与文献 [3] 相比,该平台增加内存的优化处理和碰撞检测机制,可以降低平台对运行环境的硬件要求,提高平台对算法的普适性。

Figure 1. UAV simulation system structure
图1. 无人机仿真系统结构
其中算法模块主要负责算法程序的运行,算法程序可以是轨迹规划的各种模型(例如Dubins算法 [8] )。该模块的输入是信息处理模块发送的无人机初始化参数以及执行的任务模式,经过算法计算和两次数据解析处理后输出无人机的3维飞行轨迹数据。信息处理模块承担了初始化配置以及与其他两个模块通信的工作,采用DLL动态链接库 [9] 方式实现与算法模块的数据传输,输入输出对应算法模块输出和输入,其中输入的3维飞行轨迹数据保存在“.csv”文件。另外,该模块建立了TCP服务器,通过TCP/IP协议将三维坐标数据集发送给动画显示模块。动画显示模块接受数据并进行数据分拣操作,处理完毕后的数据将用来驱动无人机在3D场景下的飞行轨迹动画。
2.1. 算法模块
相比于其他大型仿真平台,本文所提出的仿真平台并不包含复杂的飞行控制系统和动作指令集。该仿真系统使用三维坐标数据集来驱动无人机运动,删除了控制命令的解析环节,增强了系统的流畅性,减少了资源的占用。本次实验以Dubins曲线算法作为演示。
在已知初末位置的坐标、速度方向以及圆弧半径的情况下,Dubins曲线算法可以用于求解满足以上条件的最优路径。在部分算法中存在输入数据与算法函数输入数据格式不匹配的问题,如本次验证的Dubins算法(因Dubins曲线算法用于求解2维坐标系下最优路径方案,而输入数据为3维坐标)。为了解决上述问题,需要在数据输入算法函数前和算法函数输出数据后加入相应的数据处理操作,在本次实验中表现为三维坐标系与二位坐标系的转换处理,即利用矢量绕坐标轴旋转变换矩阵实现,该部分对应图1中的数据解析处理部分。
本文提出的算法模块开发环境为Matlab2018b,为了简便操作过程,利用Matlab的“deploytool”工具将“.m”算法文件生成“.dll”文件,即可认为待验证算法已作为模块嵌入仿真平台,之后信息处理模块便可以调用DLL动态链接库将数据传入算法函数并得到飞行轨迹数据。算法模块的操作过程如图2所示。

Figure 2. Flow chart of algorithm module operation
图2. 算法模块操作流程图
2.2. 信息处理模块
信息处理模块是该仿真平台的中枢模块,为用户提供自定义无人机初始信息的平台并实现和另外两个模块的通信。为了减少系统资源占用,在程序设计中将用户自定义参数的获取操作设置在“运行”按钮的动作事件中,并启用双线程执行与其他模块的通信。线程A执行调用DLL动态链接库生成数据集的任务,线程B执行建立TCP服务器并实现与客户端数据通信的任务。
信息处理模块的具体运行流程如图3所示,其中START、Index_cnt、WEnd_flag、SEnd_flag为程序运行中的控制变量,START (默认为0)控制线程A中是否开始调用动态链接库,Index_cnt表示算法的迭代次数(迭代次数视具体待验证算法而定,因本次实验验证连续的Dubins曲线算法,故需要迭代次数),WEND_flag,SEnd_flag分别表示数据写入“.csv”文件的完成标志和数据从服务器端发送至客户端的结束标志(默认都为0)。在程序开始运行后,首先开启线程B建立TCP服务器并与客户端正常连接,之后通过按键动作事件来启动线程A中的主程序,当在GUI界面按下“运行”按键时,控制变量START赋值为1。线程A开始在算法迭代次数内调用算法模块生成的动态链接库,其中算法函数的输入为GUI中的自定义参数。在每次迭代中需要将结果数据写入同一“.csv”文件。待全部数据写入完成后,写入完成变量WEnd_flag赋值为1。同时线程B因WEnd_flag值的变化开始执行数据读取操作,并将读取到的数据发送至客户端(即Unity端),为保证所有数据都能被客户端接收,采用逐行读取发送方式,待所有数据发送后发送完成标志SEnd_flag赋值为1,防止数据的重复发送。另外,线程B中的侦听客户端过程包括接收客户端发送的数据,该数据可以作为系统中的反馈参数,在闭环算法的验证中能发挥作用。

Figure 3. Flow chart of information processing module
图3. 信息处理模块流程图
算法函数为调用动态链接库的程序表现方式。在程序中需要先实例化算法函数类对象,然后调用类方法产生返回数据,其中类名和类方法在生成“.dll”文件时设置。由于类方法要求输入数据为“MWNumericArray”格式,因此在执行算法函数前需要对用户自定义参数作类型转换处理。
信息处理模块基于“.net”框架下的“Windows窗体应用”开发设计,编译环境为Visual Studio2019。
2.3. 动画显示模块
了展示轨迹飞行的动态效果,实现验证算法结果可视化,本文采用主流的可视化开发工具Unity3D进行开发。Unity3D作为用户量最多的游戏引擎,相比于另外一款热门3D引擎UE4 [10],具有学习门槛低、跨平台、高能低价、容易操作等特点。
Unity3D显示模块由模型和脚本构成。本平台的模型包括场景模型和飞行器模型,场景模型使用一个限域200 * 200 * 200的立方体空间,无人机模型使用球体模型表示,所有模型在初始化时完成部署。为了增强平台对算法的普适性,场景模型和无人机模型均可替换,以满足不同的算法需求。
动画显示模块具体工作流程如图4所示,Unity界面点击运行按钮后开始初始化场景模型,然后建立TCP客户端与服务器建立Socket连接并使用单帧接收数据保证实时性。客户端接受到服务器端发送的单行数据后开始执行分拣操作,在分拣过程中得出无人机数量并在场景中创建相应个数的无人机模型(无人机模型只会在第一次接收数据时创建),解析后的数据作为无人机模型移动脚本中的参数,在程序中表现为函数“transform.position”的值。Unity在显示无人机运动轨迹动画的同时执行碰撞检测,检测的结果将影响动画的显示。为了使效果更加直观,飞行动画和碰撞检测都附加了特效动画,分别为轨迹拖尾特效和爆炸粒子特效,二者可以选择性的开启或关闭,例如在偏重路径规划类的算法可以开启拖尾特效而偏重避障的算法可以开启碰撞检测特效。动画仿真过程中产生的过程数据可以通过数据通道发送至服务器端,有利于实现闭环算法的验证。

Figure 4. Flow chart of animation display module
图4. 动画显示模块工作流程图
Unity动画显示模块使用单帧接收数据模式,保证了数据的完整性,降低了数据丢失概率,使得无人机运动轨迹动画更加流畅,减少了模型卡顿。另外,平台在逐帧数据处理和Unity平台自身内存优化机制的加持下,能有效应对一般仿真平台在无人机集群仿真时出现的内存溢出和动作停滞情况。
3. 仿真与验证
3.1. 平台运行界面
本文提出的仿真平台支持多设备运行。如图1所示,用户可以提前在一台算法主机上生成“.dll”文件并发送至服务器主机,服务器主机与Unity显示主机建立Socket通信后即可在显示主机端仿真3D无人机运动轨迹。
各主机需要满足以下条件:① 算法主机拥有MATLAB软件且可以生成无损坏的“.dll”文件。② 服务器端主机安装Visual Studio与MCR,即MATLAB环境运行时,且MCR版本与算法主机的MATLAB版本相同。③ 动画显示主机装有Unity3D软件和动画显示模块工程文件,保证客户端与服务器端IP和端口一致。
确认各主机状态无误后,即开始仿真,操作步骤如图5所示。用户首先在服务器主机启动信息处理模块并输入初始化参数,GUI界面如图6所示。点击GUI界面“运行”按键后在Unity显示主机端点击动画播放即可观察无人机在待验证算法下的飞行过程。

Figure 5. Simulation platform operation steps
图5. 仿真平台操作步骤
3.2. 平台仿真
为了测试该平台的基础集群仿真能力,本次实验分别测试了1、3、5、10架无人机在默认环境下的仿真效果,在图6的GUI界面键入每个无人机的初始3维坐标和移动方向并点击“运行”,之后在Unity端播放动画,仿真结果如图7所示。为了验证单帧数据处理方式对缓解动画卡顿的有效性,开展了在20架无人机的基础上增加无人机数量并观察动画界面的流畅程度的实验(由于无人机数量超过GUI中的上限,因此本次实验通过服务器直接发送已生成的无人机数据,跳过了GUI的初始信息配置环节)。本次实验使用CPU为Intel(R) Xeon(R) E3-1225 (3.2GHz),内存为8G的计算机。实验结果如图8所示。从图7、图8可以看出仿真开始后场景模型和无人机模型都能正确初始化,无人机集群能够实时响应服务器数据移动到相应位置,顺利完成验证算法下的路径规划任务,并且平台在测试过程中并没有产生无人机群数量增长导致的停滞卡顿问题。

Figure 7. Simulation results of single drone and drone swarm
图7. 单架无人机与集群无人机仿真结果

Figure 8. Simulation animation of more than 20 drones
图8. 20架以上无人机仿真动画
为了验证平台附带的碰撞检测和内存优化处理,使用图7中10架无人机的数据进行碰撞测试实验,在这次实验中更换了不同的场景模型,且取消了轨迹拖尾特效,增加了碰撞特效。仿真结果如图9所示。图9表示了无人机模型在发生碰撞情况下的处理方式,其中碰撞包含了无人机之间、无人机与障碍物、无人机与环境的碰撞,从图9(a)中可以看到在碰撞发生时会产生爆炸粒子特效,且无人机个体消失,从图9(b)中也能看出场景中对应的无人机对象和爆炸特效对象从物体列表中删除,从而实现了内存的优化和保持了画面的流畅度,否则仿真会因为对象的堆叠而出现卡顿情况。

Figure 9. Collision detection simulation animation and memory optimization results
图9. 碰撞检测仿真动画与内存优化结果
4. 结论
本文基于当前的无人机仿真平台发展现状设计了一种应用于算法验证的简便式无人机集群仿真平台。该平台基于Matlab、Unity3D、Visual Studio框架,通过算法、信息处理、动画显示三个模块之间的协调工作,降低了传统算法验证环节的操作难度,加速了无人机设计开发进程。相比现有的平台,该平台首先在框架上进行了改进,设计了分布式跨平台的仿真系统弥补单一平台的局限性,桥接了算法与3维仿真。其次,平台升级了仿真功能,解除了传统仿真平台对功能的限制,为不同验证需求的算法提供可选功能(如轨迹追踪和碰撞检测),扩大了验证算法的范围,且功能具有可扩展性,为该平台之后的改进工作提供空间。平台具有可移植性强、算法可更换性强、操作过程简易、支持多任务、多集群、多设备仿真等优势,可用于无人机集群的仿真,为无人机集群算法验证提供新途径。