Feed Forward 2.0
Betaflight 4.1 为我们带来了 Feed Forward 2.0 - 对 FeedForward 的全面更新。
注意:开发版本中的 ff_spread 已改为 set ff_interpolate_sp = AVERAGED,不再需要设置分散时间间隔。
什么是前馈?
前馈 (FF) 是提高摇杆响应能力的驱动因素。它与摇杆运动的瞬时导数或“变化率”成正比。棍子移动得越快,我们获得的前馈就越多。前馈帮助 P 驱动穿越机转弯。与 P 不同,前馈无论添加多少 FF 都不会引起振荡。
前馈可提升摇杆响应,而无需将 P 项推高到会产生摆动的程度。它也缩短输入与响应间的延迟;延迟更小意味着误差更少、I 项累积 / 过冲更少。它适合竞速、视距飞行(LOS)和激进自由式,不适合影视 HD 飞行。
前馈过多可能会导致:
- 翻转开始时超调,特别是当摇杆达到 100% 行程时
- 对 RC 步的反应过度
- 当飞行员感到寒冷或紧张时,震动会放大
- 电机轨迹中的尖峰和大 RC 步长的短暂震动
- 陀螺仪领先于设定点
由于遥控数据以“数据包”形式进入飞控,因此我们实际上会收到一系列突然的步进。瞬时步进的导数是无限高的尖峰,这基本上是无用的。回到 3.4.0,我们引入了“滤波器”模式 RC 平滑,其中“输入”低通滤波器对这些步骤进行了四舍五入;现在,衍生品变成了我们可以使用的更广泛的尖峰。然后,我们对该尖峰应用“导数”低通,将其平滑为每个传入步骤的 FF“块”。自动 RC 滤波使平滑滤波器动态适应明显的输入 RC 步进速率;手动设置可以微调到任何所需的平滑度,但代价是输入延迟。
目前,不稳定的 RC 步长是一个主要问题。对于 FrSky 用户来说,OpenTx 2.3 对此做了一些改进。 TBS 正在推出一种可能更好的“锁定 150hz 模式”。
4.1 引入了几种改进这些限制的新颖的 ff_2.0 技术。
ff_boost
这是一项出色的新功能,可显着减少快速设定值更改的延迟。
大多数电机需要时间才能加速/减速。他们需要在动作开始时比中间更用力地推动。 FF 和 P 在移动开始时都会缓慢上升,因为最初我们的手指移动缓慢,并且大多数飞行员在其费率设置中使用 Expo。因此直到现在,除非使用非常高的 FF 增益(250+),否则电机还没有得到所需的立即推动。但随着 FF 增益达到如此程度,超调很难控制,特别是因为 SuperRate 应用于摇杆行程末端,当我们需要穿越机开始减速以免超调时,确实会导致 FF 加速移动。
“ff_boost”是一个 PID 参数,与摇杆加速度成正比。从技术上讲,它是设定点的二阶导数。
作为二阶导数,ff_boost 在移动的早期即棍棒开始移动的瞬间达到峰值。然后,当操纵杆处于中间行程时,它会逐渐趋于零,因为在恒定的操纵杆速度下,我们有很多 FF,但没有加速度。随着摇杆速度减慢,ff_boost 最终变为负值。
加速组件正是我们帮助克服电机延迟所需要的——提前推动,在移动过程中放松,并在最后主动减慢电机速度。通过适量的 FF 和 ff_boost,响应式四通道可以对输入进行几乎完全无滞后的跟踪,并且不会出现过冲。
通常,默认值 set ff_boost = 15 对于大多数四边形来说大约是正确的。较大的值可用于低权限四轮驱动器或电机缓慢启动的四轮驱动器。超过 40 个就很不寻常了。
提升的强度与 PID 中设置的 FF 量直接相关。将 ff_boost 视为调节 FF 如何应用于电机的时间的“因素”。更多的推动力使 FF 更早启动。可以记录的高级用户应该通过快速抽搐输入、快速左/右刺进行试飞,并寻找 FF 信号的时间和数量。理想情况下,当升压/FF 组件正确时,P 应该几乎没有什么工作要做。
ff_boost 可以在没有任何其他 ff_2.0 功能处于活动状态的情况下工作。
ff_interpolate_sp
这是从每个新的 RC“步骤”计算 FF 的“数字”方式。与旧的“过滤器”方法相比,它提供了更清晰的前馈轨迹,并且延迟更小。
set ff_interpolate_sp = ON 分析每个新传入的 RC 数据包,并将计算出的设定值变化转换为 FF 中的立即步进。每个步骤都保持不变,直到下一个 RC 数据步骤到达。
FF 步长的尖角可以根据 rc_smoothing_derivative 低通滤波器频率进行平滑。默认情况下,这是在自动模式下动态设置的,但如果需要,可以手动覆盖。 120hz 对于干净的前馈轨迹来说是一个很好的平滑值。 20hz 平滑了带有相当程度上下的痕迹;超远距离和电影穿越机可能需要 10hz,其中 50hz 模式的大步长和质量较差的链路可能会使穿越机依次出现抖动。
丢失的 RC 数据包通常会使 FF 突然降至零。set ff_interpolate_sp = AVERAGE 用于处理该问题。或者,降低 rc_smoothing_derivative 滤波值也可平滑下降,但会增加输入 RC 延迟。
ff_max_rate_limit
ff_max_rate_limit 减弱/防止翻转开始时 FF 引起的过冲。
当执行快速翻转或滚动时,操纵杆通常会在达到其行程的物理极限时突然停止。将 Expo 和 SuperRate 应用到您的费率后,设定值的增长率在摇杆停止前达到最大。此时,穿越机本身旋转得非常快并且具有大量的旋转动量。 Expo\SuperRate 效应意味着 FF 也绝对是巨大的。所有这一切,就在棍子突然嘎然而止之前。
即使 D 很大,显着的超调基本上也是不可避免的。在以前的版本中,您可以使用 D_min 将 D 增益提高到足够高以进行补偿,但很难找到平衡。此外,转换会是突然的,相对的一对电机必须旋转并全开油门,这反过来会导致其他轴上的摆动并使穿越机爬升。使用大量 D 来控制它有其自身的问题,例如噪音和其他时候降低响应能力。
ff_max_rate_limit 预测性地识别棍子可能达到其极限的情况,并在预期发生这种情况时削减 FF。它有点“向前看”,并在正确的时间先发制人地降低 FF,通常完全消除否则会发生的超调。
主要好处是显著减少对向电机加速的需求。翻转会更干净、更准确,视距飞行中翻转时爬升也会明显减少。
默认值 100 效果很好,当陀螺仪值达到设定点时,尝试将 FF 输出设置为 0。 较低的值会导致前馈影响以这些值的百分比逐渐减少到 0(例如,在持续翻转中,值为 50,一旦陀螺仪达到设定点值的一半,前馈项将逐渐减少到零)。较高的值允许前馈继续影响 PID 控制器。对于较高权限的飞船,这会导致超调,但对于权限有限的飞船来说,这些较高的值可能非常有益。 当摇杆返回中心时,ff_max_rate_limit 不处于活动状态。
要确定 ff_max_rate_limit 和 ff_boost 效果最佳,请在 BlackBox Explorer 中查看硬翻转的开始,并查看是否存在任何超调。如果 ff_max_rate_limit = 100 仍然存在过多的超调,请首先评估前馈或 P 项是否在感兴趣的时间驱动超调。如果是这样,请尝试 ff_max_rate_limit = 95。如果超调控制得太好,请尝试 105 到 110。调整范围相当窄。
ff_interpolate_sp = AVERAGED
FF 按每个传入 RC 步进计算,因此新步进未如期到达时会出现问题。
通常,这是由“丢包”引起的,或者是当 TBS 或 R9 Rx 从 150hz 模式切换到较慢的 50hz 模式时引起的。每当这种情况发生时,FF 通常会突然降至零;当下一个有效数据值进入时,会发生双倍高度提升。 FF 迹线中的这些零/双高度对非常混乱。
在AVERAGED模式下,插值算法对每两个连续的前馈值进行平均。如果突然下降到零并随后大幅上升,则将其更改为较小的下降、中间值和跳跃上升。总体而言,步数较小。
AVERAGED 也有缺点。飞手快速输入后突然保持摇杆完全静止时,ff_spread 会在设定时间内保留之前较高的 FF 值,而非立即降至零。这可能在扩展值所设时长内导致过冲;翻转起始、摇杆撞到物理行程端点时最容易看到,其他情况也可能发生。
AVERAGED 对于具有大量 RC 平滑的远程/电影四边形最有用。
对于赛车手和一般用途来说,RC 链路的质量主要取决于您的天线的质量以及您计划飞行的距离。使用良好天线的近距离比赛,尤其是使用 Futaba 和一些具有非常一致的 RC 步长的 Spectrum 无线电,可以在不进行平均的情况下获得最佳效果。
有关技术细节和更多信息,请检查 原始拉取请求 #8623