APP下载

Simulink/Unity3D联合的飞行控制仿真教学系统开发

2023-02-20朱日楠杨姗姗李宏成

实验室研究与探索 2023年11期
关键词:飞控位姿步长

朱日楠,王 彪,杨姗姗,李宏成,王 健

(南京航空航天大学自动化学院,南京 211106)

0 引言

近年来,飞行可视化开发大致可分为两大方式:①利用三维渲染引擎进行飞行可视化仿真[1-2],如OpenGL、Direct3D、Vega 等;②利用飞行模拟软件进行飞行可视化仿真[3-4],如FlightGear 等。前者需编写大量底层代码实现三维建模与渲染,开发环节众多且繁琐。后者仅通过自身无法实现个性化场景开发以及拥有复杂逻辑结构的UI开发。

Unity3D是一款近年来逐步被应用于可视化仿真开发的游戏开发引擎。对于飞行可视化仿真而言,它拥有诸多上述方式无法比拟的优势。利用自身组件,如地形模块、天空盒子、碰撞检测器、射线探测器、摄像机等,可逼真复现不同场景中机场起降、舰机着舰、地形跟随、视觉导引等众多飞控领域的研究。Unity3D可将飞控仿真的各个环节集成于自身之中,因此本文采用Unity3D进行飞行控制可视化开发。

飞行器物理模型解算是飞行控制仿真中的一大重要环节。目前,利用Unity3D 进行飞控仿真主要有3种方式进行模型解算。①Unity3D 中调用自编程序进行模型解算[5-6]。该方式需自行编写数值积分程序,开发难度大,且计算结果的准确性无法与成熟的数值计算软件比拟。②利用Matlab 进行物理模型解算[7],将计算后的位姿信息发送给Unity3D,使Unity3D中的飞机造型进行相应的位姿变化。该方式可精确计算物理模型,但仍有一大缺陷。由于Unity3D 动画帧更新速率受计算机实时负载影响而不断变化,Unity3D 定步长接收到的位姿信息无法在相同时间间隔内展示在动画中,使画面中的飞机造型出现卡顿、震颤等现象,对于高速飞行器,该现象尤为明显。③利用Unity3D自带的物理引擎进行数值积分运算。使用该方式开发时,开发者只需在Unity3D中对物体施加力与力矩,即可使物体表现出与现实世界相似的物理行为。据此,对Unity3D飞行器造型添加动力学模型即可使其按照相关力学特性进行飞行运动,无须添加运动学模型。该方式将物理模型与仿真场景、飞行器造型均集成在Unity3D内部,开发便捷、仿真结果可靠。本文采用第3 种方式进行本系统的开发。

考虑到飞行器六自由度运动的特点以及教学条件,为了能较好演示飞行器飞行时三轴位移与三轴姿态角变化情况,并且避免实验设备占用过多室内空间,本文选用Acrome桌面式六自由度运动平台展示飞机位姿,使之与视景动画中的飞机位姿随动。

考虑到本科学生工程运用能力与教学安全问题,本文不采用实物仿真方式进行开发。从数值仿真角度进行飞行控制可视化开发是本文的重点。此外,本文结合航模机、运动模拟台、操纵杆等硬件构成半物理仿真系统,通过实物演示飞机飞行时的姿态变化以及执行机构作动情况,以增强学生对相关知识的直观理解。

1 仿真系统开发

航模机用于演示仿真过程中飞机的舵面与螺旋桨作动状态。由于本系统面向本科教学,故优先选择常规气动布局的单垂尾固定翼航模机作为演示对象。本文的飞行控制仿真系统结构如图1 所示。

图1 飞行控制仿真系统结构框图

1.1 Unity3D飞行器模型建立

本文选择文献[8]中的固定翼飞行器数学模型作为本仿真系统所用的飞机模型,该模型在常规坐标系(NED)下建立。根据前文Unity3D 物理引擎的特点,该环节只需在Unity3D中完成飞行器运动过程中力与力矩的计算并添加至对应机体轴上即可。Unity3D 物理模型解算受开发者设置的物理参数影响,其中飞行器角速率解算时受飞机惯性张量矩阵J影响,

式中:J-1为飞行器惯性张量矩阵的逆矩阵;p、q、r与分别为机体角速率与机体轴向气动力矩;Jx、Jy、Jz分别为惯性张量矩阵对角线元素(绕着机体轴旋转的转动惯量);Jxz为惯性张量矩阵非对角线元素(飞行器惯性积)之一。

转动惯量大小可在Unity3D 中设置[9],但对于惯性积,Unity3D未提供设置选项,因此模型解算时无法引入惯性积的影响,这将使Unity3D 模型与原模型产生差异,故为了消除该影响,需对力矩计算公式进行修正,使修正后的公式包含惯性积环节。力矩修正公式如下:

由于力的计算公式不涉及惯性积,故无需修正。将力与修正后的力矩施加在机体轴上即可使Unity3D飞机造型进行飞行运动。

力与力矩公式中需要的状态参数可由Unity3D提供的相关函数获取。值得注意的是,该方式获取的部分参数,如姿态角、角速率、空速等,默认为惯性系下的状态量,使用时需使用InverseTransformDirection()函数将其转换为机体系状态量;此外,Unity3D 是在左手坐标系(East-Up-North)下开发的,进行动力学模型计算时,需将状态量由左手坐标系转换为NED 坐标系,以保证飞机模型与原模型的一致性。

以机体角速率为例,图2 展示了在相同控制量输入下,Unity3D 模型与Matlab 已有模型的运动规律比较。不难看出,两个模型的飞行状态曲线几乎完全吻合,表明Unity3D模型与Matlab 模型运动规律的一致性,也从侧面说明了Unity3D 物理引擎用于飞行控制仿真的可行性与可靠性。

图2 Unity3D模型与Matlab模型运动规律比较

1.2 Unity3D与Simulink联合仿真环节开发

1.2.1 数据通信方式选择

由于本文所开发系统的物理模型与控制器分别位于Unity3D与Simulink,要使两者进行联合仿真,需对两者间的数据通信环节进行设计。本文对飞控仿真中常见的UDP通信与串口通信[10-12]进行了分析测试,提出两个评价指标对其进行优劣评判:

(1)通信时延。Simulink 接收到一个数据时的系统毫秒级时刻与Unity3D发送该数据时的系统毫秒级时刻之差为该通信方式、该时间步长下的“通信时延”。

(2)通信重叠。当Simulink 还未接收上一个数据,而Unity3D已发送下一个数据时,时间线上存在前后两个通信事件的交集,称之为“通信重叠”。出现通信重叠的次数与通信总次数之比称为通信重叠率。

本文对两种方式不同通信步长下的通信结果进行了测试。以通信步长为30 ms 为例,图3 展示了UDP通信与串口通信的通信时延情况。表1 为不同通信步长下两种方式通信重叠情况比较。

表1 不同通信步长下两种通信方式通信重叠情况比较

图3 通信步长为30 ms时两种通信方式通信时延比较

通过以上通信时延、通信重叠检测可以得到如下结论:①两种通信均存在一定的通信时延。UDP 通信延时时长分布区间大,延时不确定性高;②UDP 方式的通信重叠率远高于串口方式,通信可靠性较低。通过以上分析,发现UDP 通信适用于对可靠性、实时性要求不高的场合。本飞控仿真实验平台要求对飞机模型进行实时准确仿真,对通信的实时性与可靠性要求较高,因此串口通信更加适用于本文的飞控仿真实验平台。

1.2.2 联合仿真时间参数设置

Unity3D 物理引擎进行数值积分运算时受Unity3D固定时间步长(Fixed Timestep,Unity3D 时间管理参数之一)影响,数据通信步长的确定也与该参数有关,因此确定固定时间步长是联合仿真开发过程中的一大关键。

为了确保飞行仿真准确性,一般取系统采样频率为飞机模型最快频率的10 倍以上[13],由飞机线性化模型得到最快自然频率为15.8 rad/s,故系统采样频率应当大于158 rad/s,即采样周期小于6.33 ms。由此取Unity3D 固定时间步长为5 ms,即Unity3D 以此步长进行状态参数获取与模型解算。

通过设置判断条件,使物理模型每更新一定次数后执行一次数据通信脚本,这样即可设置数据通信步长。本系统采用50 Hz通信频率,设置通信步长为20 ms,即每更新4 次物理模型进行一次数据通信。

1.3 控制器设计

学生可在Simulink中自行利用相关模块实现控制算法结构图的搭建。由于本科学生对控制算法了解较少、理解不深,且考虑到本飞控仿真系统应当与本科“自动控制原理”课程相结合,故本飞控仿真系统利用经典PID算法,在Simulink中开发了俯仰角控制、高度控制、速度控制、横侧向控制、水平航迹控制算法样例[14-15],对Unity3D 中的飞机模型进行纵向与横侧向控制。

考虑到该飞控仿真系统应当为不同层次的学生提供不同难度的飞控仿真实验,故为了降低控制律设计实验难度,本文利用Unity3D C#自编脚本将PID 算法样例程序写入Unity3D,即本文还开发了模型、控制器均在Unity3D中的飞控仿真。这样可确保飞控算法不被学生改变,学生实验时只需在仿真软件提供的控制律结构图(见图4)中进行PID参数调整即可。

图4 高度控制律PID参数调整实验界面

C#自编脚本采用欧拉法进行数值积分运算。考虑到篇幅限制,图5 仅展示控制器分别在Simulink 与Unity3D这两种环境下的滚转角曲线。经计算分析,与Simulink控制器相比,Unity3D自编脚本控制器误差小于1%,两种环境中设计的控制律几乎一致,所开发的飞控仿真系统可不依赖Simulink进行经典PID控制算法仿真验证。

图5 Simulink、Unity3D滚转角控制器比较

1.4 半实物演示环节开发

本文利用罗技X52Pro 操纵杆实现指令给定。通过转动不同摇杆,可分别生成滚转、偏航、俯仰、油门等四通道指令。其可根据不同的实验条件,直接控制飞机执行机构或给出状态参考指令。

六自由度运动平台通过Arduino 串口通信接口接收Unity3D的位姿数据,并通过Simulink External模式对期望姿态信号进行解算,得到6 个PWM 信号并发送给Arduino PWM引脚,通过该引脚将该信号提供给驱动器,驱动6 个电动机,使6 个线性执行器运动,实现该平台对飞机位姿演示。

航模机飞控板通过无线数传模块接收执行机构信息,利用高级定时器产生不同频率PWM 信号,分别驱动舵机与电调。PWM 信号占空比分别由接收的舵偏角及油门开度信号确定,实现对航模机舵偏角与螺旋桨电机的控制。

本文开发的飞行控制仿真系统实物如图6 所示。

图6 飞行控制仿真系统实物

2 仿真实验

为了遵循本科教学由简入深、循序渐进的原则,该系统设置了多角度、多层次的实验以落实教学内容,达到教学目标,包括:①飞机配平实验;②俯仰角控制律设计实验;③高度控制律设计实验;④速度控制律设计实验;⑤滚转角控制律设计实验;⑥水平航迹控制律设计实验。其中,控制律设计类实验分别包括PID 参数调整实验与控制律自主设计实验。图7 与8 分别为该系统实验初始界面与仿真界面。

图7 实验系统初始界面

图8 系统仿真实验界面

学生实验时需按以下步骤操作:

(1)打开实验软件,在“仿真设置”中设置硬件连接端口、设置仿真时长。

(2)在初始界面中选择实验项目与难度。

(3)若选择“飞机配平实验”,点击界面中“配平线性化”按钮,运行Matlab文件获取执行机构配平值,点击“仿真验证”按钮,跳转至仿真界面后输入该值即可进行配平验证。

(4)若选择“PID 参数调整实验”,点击“仿真验证”按钮,在仿真界面中显示的控制律结构图内点击相应模块进行参数修改,即可进行经典PID 控制律验证。

(5)若选择“控制律自主设计”,点击“控制律实现”按钮,即可打开Simulink 控制律设计文件,在其中完成控制律设计后,点击“仿真验证”按钮即可进行Unity3D与Simulink联合仿真。

仿真开始后,Unity3D 物理引擎对飞机的运动状态进行数值解算,并将飞机运动过程中的三维位姿变化展示在仿真界面中,六自由度运动平台与航模机执行机构也与视景动画中的飞机保持随动。图9 为高度控制律设计实验得到的飞行高度状态曲线。

图9 仿真系统飞行高度状态曲线

3 结语

本文对比总结了Unity3D 用于飞控仿真的优势,提出Unity3D 飞行器物理模型准确建立的方式,测试分析Unity3D 与Simulink 联合仿真数据通信方式,针对飞控仿真与Unity3D时间管理特点确定联合仿真时间参数,整个系统的开发过程对于Unity3D 飞控仿真开发而言具有较好的参考意义。

本文开发的飞行控制仿真系统有助于提高本科学生工程应用能力、强化本科学生对飞行控制的理解。本文还利用Unity3D 天空盒子、地形设计模块对视景仿真进行了美化渲染,开发了曲线绘制、文件读取、数据保存、用户设置保存、航迹显示、飞行视角切换等良好的人机交互功能,系统交互性好、可操作性强,具有较强的应用价值。

猜你喜欢

飞控位姿步长
基于Armijo搜索步长的BFGS与DFP拟牛顿法的比较研究
民用飞机飞控通电自检测安全性研究
无人机飞控软件架构设计初探
02 飞控技术与机场安保引关注
飞控系统故障告警实时监控软件的设计与实现
基于共面直线迭代加权最小二乘的相机位姿估计
基于CAD模型的单目六自由度位姿测量
小型四旋翼飞行器位姿建模及其仿真
基于逐维改进的自适应步长布谷鸟搜索算法
一种新型光伏系统MPPT变步长滞环比较P&O法