公元2022年3月21日北京时间下午2点22分,东航MU5735航班(昆明至广州航段),以接近音速的速度和近乎垂直的角度,高速俯冲地面坠毁。
坠毁位置位于广西省梧州市埌南镇莫埌村神塘表附近的山林中,坠毁前,该航班并未挂出“7700”紧急代码。
北京时间下午1点16分,MU5735航班顺利起飞,并在升空的十分钟后飞行至海拔7500米左右的高度。此后,这架航班以每小时830公里左右的飞行速度途径云南百色市、广西南宁市和玉林市的上空,前往广州。
(相关资料图)
MU5735航班在持续飞行近63分钟后,其航行高度突然从海拔约8870米的高度下降至约2770米,时长约持续了2分15秒。当时,这架飞机依然以每小时约842公里的速度飞行。此后的一分钟,这架波音737-800客机的飞行高度持续下降,系统最后捕捉到的是其在海拔983米的高度以每小时696公里的速度飞行时留下的记录。
该航班机型为波音737-800(NG),机龄6.8年,编号为B1791,波音737-800是由美国波音公司设计并且研发的,其长39.5米,高12.5米,翼展35.79米,可选高达2.60米的翼尖小翼,最大可搭载189名乘客,机舱内逃生门每边2扇。
从该航班的高度表可以看出,这架飞机最后坠毁的时候,数据并不正常,它从8000多米高空极快地坠落,几乎可以被理解为飞机完全失去了上升的可能性,机头垂直向下,完全没有拉起。
监控画面可见,当飞机坠落的时候,它的状态还是完整的,不是变成一堆部件掉下来的。那么这种状况下,如果飞行员对飞机还有控制的话,其通过调整飞机的各个控制面,比如说机翼、副翼或者升降舵,飞机不应该是这样下落的,它至少应该是以一个滑翔或者说是斜角度的俯冲来接近地面的。如果说头下尾上,直直地冲下来的话,我们可以认为飞行员已经没有办法再控制飞机的控制面,飞行员的操纵动作不能改变飞机的姿态。
既然,飞行员无法有效地控制飞机,可能有什么原因导致这种现象呢?飞行器中的计算机软件控制系统可能是诱因之一。
公元2019年3月10日,埃塞俄比亚航空一架波音737 MAX 8型客机(注册编号:ET-AVJ)载有157人从亚的斯亚贝巴飞往内罗毕的航班途中,于起飞后6分钟,同样近乎垂直角度高速坠毁于距离机场62千米外的小镇德布雷塞特,机上人员全部遇难。涉事飞机于2018年10月30日首飞,同年11月15日交付,机龄仅4个月。初步调查报告指出飞行员已完全遵从波音及美国联邦航空管理局发出的建议和指引去处理紧急情况,但仍无法修正控制系统持续压低机头,降低攻角的情况。
喷气式飞机之所以能在空中飞行,是因为飞行过程中,机翼在不断“攻击”前方的空气。顾名思义,攻角(Angle of Attack,AOA)就是指机翼弦线与相对风向之间的夹角。在一定的范围内,攻角越大,气流对机翼“推动”作用向上的分量也就越大,从而飞机的升力越大。
但是,如果攻角过大,升力就会急剧下降,从而发生失速。这个达到最大升力但即将失速的攻角称为临界攻角,阈值区间一般是十几到二十几度。
说白了就是,飞机头抬的越高,飞机的升力越大,飞的越高,但是你不能无限抬机头,一旦机头抬起的角度过大,飞机形态变成近垂直,飞机会直接失去速度,从空中“掉”下来。
那么,既然飞机攻角过大会导致失速,为防止失速,飞机安装了MCAS系统,也就是在飞机的攻角传感器检测到攻角超过临界攻角时,自动转动水平安定面,下压机头。也就是说,软件系统会对飞行姿态进行校正,校正指标就是攻角。
说白了就是,MCAS系统会以攻角大小作为判别标准,如果系统觉得攻角过大,就会不停的下压机头进行校正,而机头越低,飞机的俯冲力就越大,会一直往下“扎”下去,所以这套系统致命的问题是没有考虑到,万一攻角检测是错的怎么办?
事实上,埃航这次机毁人亡的事故原因就是飞机的攻角传感器出了问题,而计算机MCAS系统又只以攻角为唯一的判定标准,一直在下压机头,导致飞机近垂直角度俯冲地面坠毁。
计算机系统中有个著名的拜占庭将军问题,就是几个军官之间在通信不可靠、军官中还可能有叛徒的情况下,如何保证忠诚的军官之间能达成一致的协议。拜占庭将军问题提出后,有很多的算法被提出用于解决这个问题。这类算法统称拜占庭容错算法(BFT: Byzantine Fault Tolerance)。简略来说,拜占庭容错(BFT)不是某一个具体算法,而是能够抵抗拜占庭将军问题导致的一系列失利的系统特点。 这意味着即使某些节点出现缺点或恶意行为,拜占庭容错系统也能够继续运转。本质上来说,拜占庭容错方案就是少数服从多数。
说白了就是,不能以一个单一指标来判定系统行为。回到生活中来,相对于航空领域,我们显然更加熟悉汽车行业,现在越来越多的主机厂都以“配置高”为卖车的噱头,特别是“主动安全系统”,简直人手一套:
所谓“主动安全系统”,就是在系统通过某些数值判定与前车距离是否过小,如果距离过小,系统会主动进行“校正”动作,也就是帮你踩刹车的一种行为。殊不知,如果这套系统没有做好容错机制,没有通过大量的算法指标来进行短时间判定,可能会造成一种“反行为”:跟车距离正常的情况下,红外线雷达或者纳米波雷达出了问题,它突然给你来一脚刹车,还是踩死的那种,这样,后车完全可能会因为你突然急刹,来不及反应而追尾你。
本来“主动安全系统”是为了防止追尾,结果偏偏会导致“反向”追尾,根本原因就是没有做好容错机制,除了雷达距离,系统还应该有别的参照物作为算法依据来判定行为,所以,有计划买车的朋友最好不要一味追求“主动安全系统”等高配置,因为这种系统需要海量的数据作为参照,同时构建模型针对测试数据进行机器学习和训练,而没有大量累积过相关经验的主机厂很难将系统设计的平衡。
同理,埃航飞机所搭载的MCAS系统本来是为了防止攻角过大导致失速坠毁,反而因为传感器故障,导致一味地压低机头而坠毁,显然不符合飞控系统的容错性要求。在此次事故后的软件更新中,波音的飞控系统将会比较攻角传感器的输入,如果相差超过5.5度就不会触发MCAS系统,这才解决了问题。
实际上,带有容错机制的系统设计比比皆是,比如之前的一篇文章:基于Docker-compose搭建Redis高可用集群-哨兵模式(Redis-Sentinel),sentinel(哨兵)系统可以监视一个或者多个redis master服务,以及这些master服务的所有从服务;当某个master服务下线时,自动将该master下的某个从服务升级为master服务替代已下线的master服务继续处理请求。
然而,这套系统的核心其实是,到底系统怎么判定主机“下线了”?事实上,哨兵会把“下线”分为两种状态。
主观下线:一个哨兵如果自己觉得一个 master 下线了,那么就是主观下线。
客观下线:如果一定数量的哨兵都觉得一个 master 下线了,那么就是客观下线,客观下线即真实下线。
主观下线达成的条件很简单,如果一个哨兵 ping 一个 master,超过了指定的断开毫秒数之后,就主观认为 master 下线。如果一个哨兵在指定时间内,收到了一定指定数量的其他哨兵也认为那个 master 是 主观下线,那么就认为是客观下线了,客观认为 master 宕机,所以立刻切换主机。
这样采用少数服从多数的拜占庭容错算法系统,就可以大概率避免由于系统判断错误导致的主库突然进行切换,从而产生两个“主库”的问题。
回到飞行系统上,无论是“攻角”问题,还是“失速”问题,或者是一些其他的什么问题,都应该搭配一套完备的拜占庭容错算法系统,即飞行过程中,无论出现了什么异常情况,判别标准不应该是死的,或者是某一方的主观认定,而是通过少数服从多数的“民主”判定方法,比如飞行系统会给出判定,机长也可以给出自己的判定,副机长同样可以给出判定,遵循少数服从多数原则,从而避免误操作行为。
当然了,此次坠毁事故中,东航的波音737-800和埃航的737 MAX并不是同一机型,737-800也并未搭载波音的MCAS系统,但是我们也不能因此就排除软件系统故障的原因,毕竟,随着物联网、自动驾驶、工业自动化和工业互联网的普及,越来越多重要甚至生命攸关的系统将使用软件进行自动控制。
除了软件因素,硬件层面的机械故障也可能是诱因之一。
根据东航MU5735的高度曲线,和阿拉斯加航空261号航班事故很相像,公元2000年1月31日当地时间下午4点20分,失事飞机为一架MD-83(麦克唐纳-道格拉斯(McDonnell Douglas),一般简称为麦道),在经历了灾难性的俯仰失控之后,飞机坠毁于加利福尼亚州安那卡帕岛以北4.3公里的太平洋里。飞机上的2名飞行员、3名乘务员以及83位乘客全部遇难。
事后调查查明飞机机件维修不足导致过度磨损,并在飞行过程中引发了飞行控制系统灾难性故障。空难的可能原因是“因飞行途中水平尾翼平衡调节系统起重螺杆顶部螺母的螺纹失效而造成俯仰失控。螺母螺纹的失效归因于阿拉斯加航空对其所装配起重螺杆装备润滑不足导致的过度磨损。”
说白了就是,飞机的水平尾翼(horizontal tail)坏了,水平尾翼的工作原理很简单:当我们需要操纵飞机抬头或低头时,水平尾翼中的升降舵就会发生作用。 升降舵是水平尾翼中可操纵的翼面部分,其作用是对飞机进行俯仰操纵。 当需要飞机抬头向上飞行时,驾驶员就会操纵升降舵向上偏转,此时升降舵所受到的气动力就会产生一个抬头的力矩,飞机就抬头向上了,同理,当水平尾翼向下偏转的时候气动力就会产生一个压头的力矩,让飞机压低机头向下飞,水平尾翼向下角度越大,飞机越往下“扎”:
而阿拉斯加航空261号就是水平尾翼故障,一直向下偏转,导致机头一直下压,没有办法把飞机拉起来,随后也是近乎垂直的俯冲到了海面上,发生坠毁。
有人说,出现这种器质性的机械损坏故障,就只能认命,没有任何补救方案了吗?别太笃定,2012年由丹泽尔·华盛顿主演的《迫降航班》给了我们答案。
飞行员在水平尾翼升降舵卡死的情况下把飞机翻转了180度,在近地面机腹向上飞行了一段时间,飞机的横滚倒飞有效抑制了高速俯冲,同时给迫降提供了时间:
原理就是,升力的产生不仅和机翼形状有关系,还和机翼相对飞行方向的角度(即上文提到的攻角)有关系。比如飞机正常飞行时,拼命压头的话,机翼受到气流的力就有可能是朝下了;同样的道理,倒飞时也有可能产生向上的升力,只不过这是非常规的操作,飞行手册上并未记载该解决方案。
但这种操作也需要一些客观条件,比如飞机要有足够高的高度和足够快的速度,还要剩有足够的动力,影片中机长在近地面2100米高度,几秒内马上要坠毁的情况下,冷静的丢弃备用油箱减轻重量,收起襟翼和起落架减少风阻,同时加大油门,果断横滚翻转,终于在近地面550米高度,扶大厦于将倾,挽狂澜于既倒。
不要认为这都是电影的演绎,早在1955年,波音707客机的原型机试飞,波音试飞员Tex Johnston在没有预先告知公司高层的情况下,擅自驾机完成了一个横滚翻转动作,技惊四座:
回到东航MU5735航班事故上,当时飞机以每小时842公里的速度从海拔约8870米的高度压头俯冲,整个机组成员只有不到半分钟的反应时间,在这半分钟内,正副机长需要达成一致,果断进行横滚翻转动作,过程中飞机引擎必须持续提供高动力输出,同时737的机身强度还得保证不在空中解体,毫无疑问,这是个不可能完成的任务,再不事先预知的情况下,再优秀的飞行员也无力回天。
德国人帕布斯·海恩提出一个在航空界关于飞行安全的法则,海恩法则指出: 每一起严重事故的背后,必然有29次轻微事故和300次未遂先兆以及1000次事故隐患。 法则强调两点:一是事故的发生是量的积累的结果;二是再好的技术,再完美的系统,在实际操作层面,也无法取代人自身的素质和责任心。无论是飞机软件控制的问题,还是硬件机械的问题,我们都希望,东航MU5735的悲剧,不再重演。