[FPV知识分享] 白话 Betaflight 4.2 - Part 2 - FeedForward 前馈改进

中文哔哩哔哩FPV 知识8:59
在哔哩哔哩观看
← 返回简体中文教程与视频指南

这段视频解释 Betaflight 4.2 的 FeedForward 改进。FeedForward 根据摇杆 setpoint 的变化提前推动电机,不必等实际 gyro 与目标产生误差后才由 P 项响应,因此能提升跟手性;但接收机数据包抖动会把本应平滑的输入变成突然跳变,造成 FeedForward 尖峰。4.2 通过 setpoint 插值、平均、平滑与尖峰限制来缓解。

FeedForward 为什么能比 P 更早响应

只有 PID 时,飞手打杆先改变目标角速度,实际 gyro 仍为零,P 需要看到目标与实际之间的误差才开始输出。FeedForward 直接从 setpoint 的变化速度预估需要的控制量,能在实际姿态尚未落后前介入,让快速指令更紧跟摇杆。

它主要处理飞手输入响应,不负责替代 P/I/D 对扰动和姿态误差的闭环修正。FeedForward 过低会显得迟钝,过高或输入不平滑则会产生尖锐电机动作;评价时应把 setpoint、gyro、FF、P 和 motor trace 一起看。

数据包抖动怎样制造 FF 尖峰

视频以 R9 和 Crossfire 为例:理想的线性打杆应让 RC/setpoint 从 1500 逐步经过多个中间值到 2000。如果某些数据包延迟或丢失,接收机会暂时保持旧值,随后一次跳到较新的值。

FeedForward 关注变化速度,同样的总变化若被压缩到一个时间片,计算出的瞬时变化率就会变大,产生 FF 尖峰、电机突发动作和中位附近不平顺。问题不一定是平均 packet rate 低,而是到达时间和 setpoint 步进不均匀。

4.2 的插值与平均模式

录制版本的 feedforward_interpolate_sp 提供 OFF、ON 以及 AVERAGED_2、AVERAGED_3、AVERAGED_4 等模式。视频把 ON 理解为基本不做额外平均;AVERAGED_2 用两个 FF/setpoint 数据点平滑,3 和 4 则使用更长窗口。窗口越长,单个跳变越不容易形成尖峰,但响应也会更平缓。

作者当时在自己的 R9/Crossfire 飞机上发现 AVERAGED_4 明显改善可飞性,这只是 2020 年 Betaflight 4.2、特定链路与机体的经验,不是当前通用 preset。现代 Betaflight 的 FeedForward、RC smoothing 和字段名称已演进,应以当前文档与默认值为起点。

怎样在响应与平顺之间取舍

先记录默认设置下的 Blackbox,用规律的小幅打杆和快速翻滚比较 setpoint 步进、FF 尖峰、gyro 跟随和电机输出。若输入到达不均导致尖峰,再逐步增加插值/平均或调整 Smooth Factor、Spike Limit;每次只改一个变量。

竞速可能偏好较少平滑和较短窗口以保留响应,但前提是飞机不抽动、电机不过热且 gyro 跟随干净。不要为了“更快”关闭所有平滑,也不要用很长平均窗口掩盖接收链路故障。先更新与正确配置接收机,再在安全环境验证。

操作步骤

  1. 理解 P 与 FeedForward 的分工

    P 响应目标误差,FeedForward 响应 setpoint 变化;先明确问题是迟钝还是输入尖峰。

  2. 检查 RC/setpoint 到达是否均匀

    用 Blackbox 观察平滑打杆是否出现保持旧值后突然跳变。

  3. 识别跳变引起的 FF 尖峰

    把 setpoint、FeedForward、gyro 与 motor 对齐,确认抽动是否随单个大步进出现。

  4. 从当前默认模式开始

    历史 4.2 选项包括 OFF、ON 与 AVERAGED_2/3/4;当前名称和算法需查现版文档。

  5. 逐步增加最小必要平滑

    一次调整平均窗口、Smooth Factor 或 Spike Limit 中一项,重复同一输入比较。

  6. 复核快速动作与中位小动作

    既检查翻滚响应,也检查摇杆中心附近是否平顺,并监测电机温度。

常见问题

FeedForward 和 P 有什么根本区别?

P 要看到目标与实际之间的误差;FeedForward 根据 setpoint 变化提前输出,因此更快但也更怕输入跳变。

为什么数据包丢失会让飞机突然抽一下?

接收机可能先保持旧值,再一次跳到新值;变化被压缩到很短时间后,FeedForward 会计算出较大尖峰。

应该直接使用 AVERAGED_4 吗?

不应照抄。那是作者在 Betaflight 4.2 与特定 R9/Crossfire 链路上的经验,当前算法、接收机和飞机可能不同。

平均窗口越长越好吗?

不是。更长窗口能抑制尖峰,也会让响应更平滑甚至增加延迟,应只使用解决问题所需的最小程度。

可以用 FeedForward 平滑掩盖坏接收链路吗?

不应。先排查固件、协议、packet rate 和链路稳定性,再用平滑处理剩余的正常抖动。

完整时间轴文字稿

文字稿按视频时间排列,便于快速定位讲解内容。文字稿语言:简体中文。

第二个想跟大家介绍的新特性就是 FeedForward 中文叫做FeedForward 本人先证明一下 本人也不是做工业控制专业出生 所以讲的如果不专业的话 还请专业认识海韩 这边是我的一些理解 要理解这个新特性的我们要先了解一下 FeedForward它的工作机里是什么 对不对

最早的时候是没有FeedForward这么一个参数的,只有PID,那PID有什么问题呢?PID在没有这个遥控输入的时候是没有任何问题的,比如说你一阵风吹过来,这个飞机转弯把它吹偏了,它要保持姿态要回稳,对不对,要保持那个一点角度,这个是没有任何问题的。但是在有这个遥控输入的时候,

我们就出现一个问题,比如说我现在要打桿,我从无论让它以50度每秒的速度向顺时针旋转,对不对?我打完桿之后,飞控的PID的循环,它要先检测到你现在有50度的旋转,但是现在我自己的角速度是多少?我现在的角速度是0,那么有50度的差,

所以我现在要开始把我的P值要开始工作,我要开始让它进行50楼选择,然后慢慢选择起来。这里面就有一个一些Delay,这个Delay怎么来的呢?就是先是打杆,对不对?先打杆,然后出现5X在Pi或者B,对吧?那么中间就有出现一个,我不需要等这个5X出现的时候,我PID才能工作,对不对?

但是其实我们检测到这个答案的时候我们已经知道我的屁应该还是Kick in了,对不对?那可不可以有一种方法让这个PID更早的发挥做人呢?就是我们FeeForward, FF,那么就是FeeForward,然后点点点在PID。所以这个就能极大的增加这个飞机的响应速度。但是它本身有问题,什么问题呢?

这个问题在使用R9或者 Crossfire这套系统的时候会有微明显给大家举个例子我自己本身也是R9的一用户就是我在4.2之前遇到一个什么问题就是我发现这个飞机经常在我摇杆从中间左右拨的时候这个飞机的反应特别特别的特别特别不平顺这感觉这个电机里面有沙子一样

摇板从中间左右非常小幅度的波动的时候 飞机就会非常的非常的抽非常的推起 然后其实具体原因是什么 因为RNA和CROSSFIRE他们用的这套芯片组 他们有一个问题就是在距离稍微远点 其实距离近它也会有这个情况就是稍微不明显一点 距离稍微远点的话 这个数据包它的这个

数据报的传输速度非常不一定,比如说,如果打开,从中间最有变弹。这样子,RC的值大概是1500,开了2000对不对?我们假设这个是在多少个时间片里面完成,大家是在五个时间片里面完成。五个时间片是多少呢?就是第一个,就是1500。

对吧,然后1600,这是在理想情况下,它会这样,然后1800,1900,到2000, 理想情况下,这个飞控它应该接受到了这个这个从这个Receiver里面就是这个信号,大概就是1500,一直这么连续的渐渐到2000,对不对,假设我们是以线型的速度来拨这个,打了这个桿,但是这个是理想情况,实际情况是什么样子呢?

实际情况经常就是 第一个时间片刚开始的是1500对不对 然后开始1500 结果第二个时间点 它还是收到1500 因为中央的数据包丢了 但是这个接收金它不会说不数数信号 不数数信号它就以为你失控了对不对 它还是不数数信号 它说什么信号 说说我刚刚解释到信号 它默认你这个信号还没有变 然后还是1500 还是1500

然后突然,突然一千九,两千,那么这个就发生一个什么问题呢?就是我突然在这个一个时间片,本来是本来这个从一千五到一千九是在四个时间片里面发生的对不对?现在发生的速度变成了一个时间片,我在一个时间片就从一千五升到了一千九,那这个时候这个 FeedForward,因为它是检测你这个信号变化快慢了对不对?它这个只是为了放的很大, FeedForward就会

非常大 然后FeeForward很大就造成这个电机的反应就过于强烈 然后就造成这个退休的情况就这样的比较臭的情况就不平顺 那这个问题我们搞懂了之后我们来看这个4.2这个新特性它有什么对这个有什么帮助呢 其中最最最最有的一个一个参数就是这个FeeForward Interpolate SP

其实是加入引入新的FeedForward工作模式的一个参数。第一个off就是直接关掉,我不要用这个新模式。然后on呢,我的理解跟4.1其实是一样的,这不做任何平滑处理,还是开启的。你过来一个时间线,过来一个frame, 当然这个frame不是RC的frame,是另外一个内无型号的frame,叫set points。

我们简单的把它理解为RSI frame。过来一个frame,我可以变化了。变化到哪里?我有一个feedforward的值,我就直接用它。这个是不是还是,如果在你这个信号,信号不是很平顺的情况下,是不是还是有问题?那么,所以就有其他的这个abrid 2,abrid 2其实就是两个feedforward信号,做一次平均处理。平均处理之后,我再把这个平均之后的这个值拿来输入到这个feedforward的系统里面。

然后相应的RH3、RH4就是三个数据点,四个FeedForward数据点作为平均处理。平均处理之后呢,再输入到FeedForward系统里面,再驱动这个电机。那对于R9或者CrossFire的系统,用这个RH4,就是比较好的。而且我在4.1之前用,4.1之前这个R9的飞机没法飞,然后在4.2的时候就用这个RH4就可以飞了,而且飞的比较平好。

然后这个功能还有其他一些参数可以说就是这个SmoothFactor然后还有其他一些这个SpikeLimit 大家可以调整一下如果你搞Racing那么总的来说就是Filter越少也好这个Aberge的越短越好但是前提是不影响你飞机的飞行就是不要抽OK 这是这个形态性的介绍