针对安全性设计,就必须先考虑故障情况。一般来讲,飞控故障有以下几个方面:
1、通讯故障
飞行器与地面端(遥控器或地面站等设备)需要进行实时通信,如果通信发生故障,后果很严重,因此飞控软件需要考虑这个因素。通讯故障主要是:
a)遥控器信号丢失
遥控信号丢失,自然飞手就不能有效控制飞行器了,非常危险,笔者曾经遇到过遥控器没电,导致飞行器失控炸机。补充一点,起飞前遥控器未校准的情况。由于遥控器为校准,所以飞控软件里关于遥控器操作的行程是有问题的,后果就是实际飞行反应与你的操作不一致,进而发生飞行事故。
b)地面站信号丢失
一般来讲,这个问题主要存在于飞控全自主作业的时候,与数传设备有很大关系,没有地面站的指令,飞行器也是处于未知状态。
2、传感器故障
飞控上载有很多传感器,如果传感器发生故障,会直接影响飞行稳定。关于传感器,也需要根据飞行模式来看,彼此之间是有一个对应的层级关系的。
由上面的表格可以看出,比如在定点模式,出现GPS或者地磁故障的时候,可以切到低层级的模式,比如定高、自稳模式等等,来保障飞行安全。当然,如果是陀螺仪数据出现故障的情况,基本没戏,炸鸡吧!
注:有关飞行模式的叫法,各个飞控的叫法都不一样,比如PX4固件,手动模式其实是自稳模式,所以需要自己进行甄别一下。
另外,地磁计数据受外界(磁场、金属等)影响,很容易出现故障,不过正如上面所说,切换飞行模式即可解决。但诸如电力巡检应用,对这个要有考虑,工业级的需要做足抗干扰设计。
3、动力系统故障
动力系统是执行机构,一般来讲,即使飞控未发生故障,但是动力有问题,一样会导致炸机。动力系统涉及的相对较多,比如电池、电调、电机、桨都属于这一范畴。
电池出现电量不足;电调不能识别PWM信号或者不能给电机正常供电;电机转速误差较大;桨叶松动、折断等。
补充一下,对于四轴而言,有一个电机停止工作,则不可避免炸机,6轴以上的,则要看飞控是否有断桨保护功能,通常做法是将飞控的yaw通道进行关闭,只控制roll和pitch的姿态,保持平稳飞行,代码层次来看,PX4固件没有专门的断桨保护功能的。
第二,讨论下健康评估的问题。
健康评估是安全性设计的重要一环。主要是飞行前的飞控自检和飞行中实时观测飞行状态,判断各个故障可能性。健康评估是观测飞行安全的重要手段。
1、飞行器自检:
参看PX4固件的代码:src\modules\commander\PreflightCheck.cpp
遥控器是否校准完成;
IMU数据是否正常;
地磁计数据是否正常;
GPS数据是否正常;
气压计数据是否正常;
可补充:遥控器信号是否正常;数传信号是否正常;
具体自检做了哪些工作,参看加速度计的自检:
Ø 是否没有读到加速度计数据;
Ø 是否没有进行加速度计校准;
Ø 是否没有选择默认的加速度计数据;
Ø 判定加速度计数据的健康程度;
原理很简单,就是判定加速度计读取的模值是否在一个合理范围内。
补充:新版固件,针对飞行前的自检,加入了对双IMU数据判定的部分。主要是飞行前,读取传感器数据时,会比较两者之间的误差,如果误差太大,认为有故障,这部分以前是没有的,也算是充分利用了双传感器冗余数据,后面还会讲一下双冗余的问题。
2、飞行实时观测:
a)判定是否丢失遥控器信号,有时间阈值
参看PX4代码:src\modules\commander\ commander.cpp
默认丢失信号时间0.5s。
超出时间,则将遥控器失控的标志位置1,这个标志与导航模块里的失控保护代码相对应。
b)传感器状态实时观测
需要在飞行器在悬停状态下进行观测,这时候传感器的输出趋于稳定,才有判定价值。如出现自转现象,则说明地磁数据质量差;如出现飞行器抖动现象,则要考虑IMU的数据质量;如气压计测量值波动范围太大,影响定高。
方法:
地磁:mag_filed阈值(地磁数据的模值),能反映外界的磁场干扰。
GPS:一种是看IMU估算的位置与GPS给的位置进行比较,如误差较大,则认为GPS数据质量差;另外一种简单办法就是看星数或水平精度因子。一般HDOP值要小于1.5最好。
第三,讨论下失控保护
飞控需要对应设计失控保护功能,常见的失控保护主要包括遥控器失控保护、低电量保护。
PX4固件主要判定遥控器数据的signal_lost变量,失控触发返航。
PX4固件早期没有低电量返航的功能,笔者自己加过,新版的固件里代码已经添加了这部分功能,不过测试过一次,没有触发成功。另外,关于低电量,一般也会看低电量的程度,因为比如电量过低,不能支持到成功返航的程度,就需要紧急降落,所以一般有两级低电量保护。
第四,讨论下有关pixhawk飞控的冗余问题。
记得笔者最早接触px4固件的时候,那时候网上盛传这个pixhawk有多么多么牛逼,因为有两套芯片,两套传感器,一套芯片出现故障了,备用的芯片会接管飞行工作,保证安全性;另外,会采集两套传感器数据,选择数据质量最好的那个使用,更有甚者,还有说两套传感器的采样率不一样,然后能融合出很好的数据,等到自己看代码的时候发现就是鬼扯。首先,主从芯片是各有用途,F4主芯片负责飞控系统的主要功能,F1从芯片主要是负责遥控器输入读取和PWM输出功能,此外,当时的固件并没有用到两套传感器数据,默认使用mpu6050。不过现在1.5的固件,可能更早的,的确有关于传感器质量的判定和选取的过程了,但是双芯片冗余是扯淡。
关于两套传感器,如何选择最优,主要在DataValidator类中实现,原理就是根据实时计算传感器数据与均值之间的误差,进行平方开根号得到RMS进行判断。具体这套工作机制的细节后续会详细描述一下。
算上前面讲的,双传感器冗余目前在PX4上是有算法进行处理的了。飞行前的自检和飞行过程中选用最优数据。笔者的意见是,在pixhawk V2这套硬件上用处不大,因为两套传感器是走的同一总线,布局也是一样,所以一般出故障就会一起出故障,不过这种算法有很大的参考。