偏航自旋恢复和陀螺仪溢出检测
偏航自旋恢复说明
此功能自 Betaflight 3.4 起默认启用,可缩短并减轻非指令性严重偏航自旋。
例如,四轴飞行器擦到赛门、树木、树枝或其他物体后发生高速偏航自旋,可能进入看似永无止境的失控旋转。通常会伴随特殊颤鸣并迅速爬升,即“Yaw Spin To The Moon”(YSTTM)问题。3.4 引入的两项代码功能应能更快、更干净地控制此类自旋。
偏航自旋恢复主要面向 FPV 飞手,配合 MPU 陀螺仪效果最佳。使用高偏航速率进行特技视距飞行(LOS Acro)的飞手可能更愿意关闭此功能。
使用方法
可在 CLI 中启用或关闭 yaw_spin_recovery:
set yaw_spin_recovery = ON 或 set yaw_spin_recovery = OFF
“阈值”是触发自旋保护的角速度,单位为度 / 秒。默认阈值 1950 旨在尽量减少误触发。FPV 建议设置为比最大配置偏航速率高 100 至 200。例如,最大偏航速率为 700 deg/s 的四轴飞行器:
set yaw_spin_threshold = 850
阈值过低会造成误触发,延迟恢复正常控制。
工作方式
触发后,yaw_spin_recovery 会将全部电机控制权用于纠正自旋,并停止所有无关的 PID 和油门活动。一对电机全力驱动,其他电机降至最低转速。偏航自旋速率低于阈值 100 deg/s 并持续 20ms 后,控制权将完全交还给飞手。
未启用该功能时,任何四轴飞行器都可能因自旋速率干扰陀螺仪而陷入持续自旋。原因见下文“根本原因”。
是否应降低阈值?
与 1950 相比,阈值 1000 可将典型失控偏航自旋的持续时间缩短约一半。
对于最大偏航速率约 800 deg/s 的四轴飞行器,1000 通常效果良好;擦到赛门后约四分之一秒即可恢复正常控制。正常竞速中,即使快速转向,FPV 飞手也很少超过 500 deg/s;超过此值通常发生在持续执行指令偏航自旋技巧时。
例如,作者将最大偏航速率设为 800、阈值设为 850;即使故意全偏航自旋也不会触及阈值。
阈值过低会怎样?
若最大配置偏航速率高于阈值,持续偏航自旋会使飞行器在偏航方向“顿挫”:电机推动超过阈值,PID 被停用并减慢自旋;随后电机再次推动超过阈值,如此反复。应降低最大指令偏航速率,或提高阈值。
擦到赛门后发生自旋,应如何操作?
飞手无需特定操作。最安全的做法是收油、摇杆回中,并准备重新获得控制或解除解锁。
偏航自旋保护触发时,飞行器以约 50% 有效油门驱动,可能短暂沿垂直于自旋轴的方向加速;控制权应迅速交还,通常不会明显爬升,无需手动加油。
自旋速率低于阈值 100 deg/s 后 20ms,控制权交还给飞手。此时飞行器可能仍在转动,但 PID 已完全恢复并会迅速稳定姿态。等飞手看清机头方向时,应已易于控制。
若自旋持续很久,例如超过半秒,可能存在陀螺仪溢出、严重弯桨或其他硬件问题,应解除解锁。
使用 ICM 陀螺仪且启用 gyro_overflow_detect 时,此功能是否有效?
gyro_overflow_detect 是处理 ICM 陀螺仪溢出问题的专用代码。它默认在所有轴启用;若使用 ICM 陀螺仪,不建议关闭。MPU 陀螺仪不需要该功能,也不会从中受益。
ICM 陀螺仪在极高角速度下易出现溢出反相。启用并设为 ALL 时,任意轴超过 1950 deg/s 都会触发保护并关闭全部 PID。此时 FC 不知道实际自旋方向,因此会将所有电机降至最低 / 怠速油门,直到全部轴低于 1850 deg/s。由于飞行器不主动对抗自旋,这可能耗时很久。1850 deg/s 仍非常快;若偏航自旋恢复以较低阈值(如 800)启用,恢复到 800 以下会更快、更干净。
因此,即使启用了 gyro_overflow_detect,yaw_spin_recovery 对 ICM 陀螺仪仍有用。
为什么不能自动恢复原航向和姿态?
这需要有效的加速度计和磁力计数据,而碰撞后这些数据可能不准确。此类恢复还需要时间,可能干扰更准确的飞手输入、在切回 Acro 时产生突变,甚至向错误方向飞离。
阈值过低的实际表现
只要保持指令偏航的时间足以触及保护阈值,偏航就会抖动,正常俯仰和横滚控制也会受干扰。
例如,若飞行器最大偏航速率为 1000 deg/s,保护阈值为 800,飞手将偏航保持在 100%、俯仰横滚回中进行平面偏航自旋,飞行器会不断加速。当到达 800 时,相反的一对电机会全力驱动,迅速将偏航速率降至 700 deg/s,约需 100ms。此时飞行器可能短暂爬升并摇晃,俯仰和横滚完全无控制权。之后若仍指令高偏航速率,又会加速至 800;飞手将看到偏航速率在 700 至 800 间抖动、出现一些俯仰横滚伪像,并听到异常声音。遇到这种情况,只需适当提高阈值。
Blackbox 日志中是什么样?
以下是真实日志:搭载 MPU 陀螺仪的飞行器在弧线转弯中擦到地面,冲击较小。2ms 内偏航角速度达到约 -1800 deg/s,超过 800 阈值并触发 yaw_spin_protection。此时两台电机以 100% 驱动,另一对为 0%,以最大控制权减慢自旋。其间横滚和偏航分量会被动旋转飞行器。约 120ms 后偏航低于 700,再经过 20ms 延迟,撞击约 140ms 后恢复正常 PID 控制。飞行器仍以超过 2000 deg/s 横滚,但不再自旋,PID 会在再约 140ms 内修正;撞击约四分之一秒后即可重新飞行。注意,若使用默认阈值 1950,此冲击不会激活保护。

下图日志来自更严重的冲击。根据恢复速率判断,偏航自旋峰值可能超过 8000 deg/s,且涉及弯桨。完全 yaw_spin_recovery 模式(一对电机全开)共约 600ms,是当时记录中最长的一次;绝大多数在 400ms 内恢复。冲击同时造成明显的俯仰和横滚抖动:撞击瞬间俯仰超过 2000 deg/s,不久横滚也超过 2000 deg/s。若使用 ICM 陀螺仪,所有 PID 将被清零,不会主动抑制这些自旋;可能需超过 3 至 4 秒才会被动减速到可交还控制。此例使用 MPU6000,因此 yaw_spin_protection 可不受自旋幅度影响、以完整电机控制权主动停止自旋。校正期间,所有俯仰与横滚抖动都在没有 PID 主动干预的情况下消失;自旋结束时已无显著俯仰横滚问题。这很可能源自两台电机以相反方向全开所带来的陀螺稳定效应,以及飞行器主动抑制偏航自旋时在俯仰和横滚轴上受到的显著空气阻力。

借助 yaw_spin_protection,这次严重自旋仍较快停止。
持续偏航自旋的根本原因及代码原理
这种幅度的自旋会让机架在 40ms 或更短时间内旋转 180°,使电机换到与原位置相对的一侧;这正是电机加速或减速所需的时间。对于俯仰和横滚抖动,正常 PID 响应在电机转到相反位置前无法真正改变电机速度。因此,在快速自旋中,俯仰和横滚 PID 响应会形成正反馈;只要飞行器持续自旋,就会维持或加剧抖动。
此外,PID 系统为应对俯仰和横滚上巨大变化的陀螺仪值,会随机开关电机,无法把全部控制权用于抑制自旋。结果是自旋持续很久,电机速度变化甚至可能对自旋形成正反馈。这种异常组合会导致 MPU 陀螺仪上的 YSTTM。关键因素是极高的偏航自旋分量;极高速率的纯俯仰自旋没有该问题,同时高速俯仰和横滚的轴滚也没有。但当俯仰横滚与高自旋速率组合时,日志显示各轴陀螺仪和 PID 会混乱变化。代码通过集中电机控制权主动抑制偏航自旋分量,防止这类长时间飞离。