飞控开发的仿真功能(描述)
首先,要知道什么是仿真?
算法层次来说,仿真就是模拟实际环境,对算法代码进行测试。推而广之,在嵌入式驱动甚至业务逻辑层次的代码,也可以在虚拟环境中进行仿真,从而测试验证准确性。
仿真有哪几种?
常见的仿真,通常指以下几种:
模型在环仿真MITL
软件在环仿真SITL
硬件在环仿真HITL
模型在环仿真MITL
可以简单理解成算法层次的仿真,比如在simulink中搭建一个PID控制器,然后同样搭建了被控对象的模型,比如飞行器的姿态模型,验证飞行器的姿态控制性能,这个就是模型在环仿真;
image.png
还有一种方式,就是离线的数据仿真,比如实际采集飞行器的IMU数据,在matlab中编写了姿态估计的M代码或者是simulink模块,通过导入数据,观察输出,从而验证设计的算法是否有效以及性能。
image.png
这两种都属于模型在环仿真,在完全虚拟的环境下,无任何设备的情况下,前期验证是否设计的功能有效;
软件在环仿真SITL
软件在环仿真与模型在环仿真类似,区别在于MITL的代码不是你将来烧写到飞控的代码,比如是m文件,而软件在环仿真就是通过编译器,将你的程序编程可烧写的代码,比如c语言,这个过程可以是由matlab自动生成(即通常所说的基于模型的开发方式),也可以由自己进行代码的转换。在将你的算法与模型都用c语言编写后,进行程序的运行,然后验证输出的结果是否与模型在环仿真有所出入,从而验证是否编译环节出现了问题,比如转换后的代码的数据类型,嵌入式编译环境的计算误差等。从某种角度来说,软件在环是模型在环的一种延伸。
以PX4飞控的SITL为例:
image.png
图中看出,只有控制信号,比如遥控器是外部输入的,而飞控程序和模型都是在仿真软件上,模型输入给程序假的传感器数据,状态请求等,而飞控计算后,得到三轴力矩和推力,输入给模型。
硬件在环仿真HITL:
在开发的下一阶段,这时候硬件同事已经将飞控硬件设计完成交给你了,有了真实的硬件了,这样你的软件功能代码就开始部署了,比如输入输出的接口等。
需要注意的是,SITL是专门需要在仿真软件中开发飞控代码的,与实际的飞控代码还是有所区别的,SITL的代码通常要执行更多的代码。
汽车领域的HIL台架:
image.png
PX4飞控的HITL:
image.png
硬件在环仿真(HITL)模式下标准的 PX4 固件在真实的硬件上运行。 JMAVSim 或 Gazebo (运行在开发计算机上) 通过 USB或者串口 完成与飞行控制器硬件平台连接。 模拟器充当在 PX4 和 QGroundControl 之间共享 MAVLink 数据的网关。
至于半实物仿真,简单理解如果你有了硬件,那就是半实物的仿真,当然这个说法不严谨,不过不重要。
在环仿真测试的重要性?
第一点、MIL在算法工程师看来是很重要的,毕竟总不能等东西都有了才开始进行工作吧。
第二、在无人机领域里,大量的测试是非常必要的,这样才能将飞控做成稳定可靠,而每一次的实际飞行,准备工作繁琐,且容易出现炸机,造成损失,有了HITL就可以提前测试出软件是否有bug。
说到底,会大大加速开发以及测试的方便。
SITL、HITL有不足吗?
标准的HITL,是由遥控器,连接飞控硬件,然后连接到PC端的地面站程序,根据遥控指令,通过返回的虚拟数据,计算出PWM指令,发送给PC端的仿真程序,飞行器的模型则是在PC仿真程序中计算的,这样由PWM得到模型的姿态与运动学,并进行显示。
这种HITL有个缺点就是:
首先需要PC端具有这一段仿真程序,即接收模型输入,计算模型输出。如果是SITL,则还要包含飞控程序,这样的话,开发工作量较大;
其次就是不具备实时要求。飞控程序有实时性要求,在这种环境下的测试,则只依赖与PC端的实时能力了。
有没有更简单、准确的方法?
答案就是,在HITL的基础上,将模型的计算也放入到飞控中计算,这样可以飞机的姿态和运动学数据正常发送给地面站,地面站只需要做显示即可。因此,开发上不需要额外做太多工作,其次也能达到仿真测试的目的。这种,就是俗称的硬件仿真SIH。
SIH有什么问题?
从测试角度来说,被测试的对象,飞控程序引入了额外的模型的计算代码,并需要对自身的业务逻辑进行一些修正,以便实现仿真功能。这样与你实际工作时的飞控代码其实是不一致的,但是个人觉得优势很明显,所以这个不太重要。
如何开发?
如果是SIH的话,只需要在飞控代码中写一段模型计算的代码即可,这里不再赘述,可以参看一些数学模型的推导等论文,进行编程实现。
HITL/SIL能够仿真出哪些指标?
l 故障诊断的测试;
l 导航/控制算法的测试;
l 业务逻辑功能代码的测试;
有一条需要注意,就是你没办法模拟出真实的飞行性能与手感,这些与你采用的模型精确度,以及仿真环境的精确度有关。