Betaflight 3.5 调校说明
- 新的 Feed Forward PID 系统
- Anti Gravity 改进
- 动态陷波滤波器优化选项
- Bug 修复和优化
从实际效果看,这些改动应当:
- 显著改善偏航性能,并简化调校;
- 改善快速改变油门时的机头上下晃动;
- 在干净的四轴飞行器上,尤其可更精确地处理噪声和/或降低延迟。
**3.5 RC1 为实验性版本。**飞行前请在 CLI 中确认全部 PID 变更。完整的 Configurator、Lua、Blackbox 和 OSD 支持将会提供,但当前尚未就绪。
Configurator 10.4 和 Log Viewer 3.2 或更高版本将很快可用于 3.5。
我能直接升级后飞行吗?
可以,特别是从默认设置升级时;但请注意:
- 若从 3.4 之前版本升级,请阅读 Betaflight 3.4 调校说明,其内容同样适用于 3.5。
- 若你曾自定义 D weight 和 transition,对快速摇杆输入的灵敏度可能改变。你可能需要修改新的 Feed Forward 与 Feed Forward Transition 值,以反映旧设置。
- 新的 Anti Gravity 代码默认使用
SMOOTH,应优于旧版;若不喜欢,可切回旧的STEP方法。 - 动态陷波功能会略优于旧版;但要在较干净的四轴飞行器上真正改善效果,应修改默认设置。
- D weight 设置(包括经 OSD 或 Lua 的变更)会被忽略。
告别 D 设定点权重,迎接 Feed Forward!
这或许是近年来最大的改动:不再使用 D Setpoint Weight。
Feed Forward 现在接替 D setpoint weight 的作用,并可分别针对各轴(俯仰、横滚、偏航)配置。
set f_pitch = 60,
set f_roll = 60,
set f_yaw = 60,
Allowed range: 0 - 2000
FF 的默认值 60 与先前 3.4 的默认值大致相当。
注意:从旧版本升级时,每个 PID 配置文件中的旧 D weight 设置都会丢失。
若希望 3.5 的 Feed Forward 行为与原 D weight 方法完全相同,可按 (D/26)*D_Weight 计算 FF。其中 D 是 PID 的 D 值,D_Weight 是 D_Weight 滑块值乘以 100,或 CLI 中精确的 dterm_setpoint_weight 值。例如 D 为 26、D weight 滑块为 1.0 时,等效 FF 是 100;D 为 52、D weight 为 100 时,该轴使用 FF 200 的飞行表现相同。偏航 FF 见下文。
可能还需要手动更新 transition 值,但其单位和行为不变。
Feed Forward 提供“动态摇杆增益”或“动态摇杆响应”。摇杆移动越快,它就越快地推动四轴飞行器进入转向,施加的推动也越大;它不等待误差产生,响应是即时的。
transition 参数会衰减中心摇杆附近的 Feed Forward 效果。自由式飞行中,为让中心摇杆附近阻尼更强、没那么灵敏,可像以往一样把 transition 设为 0.5 或 0.1;竞速和追求直接响应时,最好保持为 0。
零 Feed Forward 使 D 始终能阻尼四轴飞行器,即使飞行器被指令快速转向也是如此。Feed Forward 过高可能让飞行器过于灵敏,并造成过冲。
默认 FF 值 60 属于“中等”设置。
对于追求响应的竞速四轴飞行器,FF 约 100 通常是合理的数值。
对摇杆输入的总体响应同时取决于 P 和 FF。不再需要或适合不断提高 P 来改善瞬态摇杆响应;增加 FF 是比提高 P 更好的做法。
偏航轴的 Feed Forward
历史上偏航表现弱于俯仰和横滚,因此飞行员常把偏航 P 设得很高,带来偏航噪声、晃动、过冲和回弹。
不再如此!在 3.5 中,偏航通常会与俯仰和横滚一样灵敏且准确。
建议所有四轴飞行器的偏航 FF 至少设为 50,默认是 60。
要获得出色的偏航响应,P 通常不必高于 40 至 60;更低的 P 实际上还能减少偏航噪声和回弹。
极高的偏航 I 在多数四轴飞行器上效果良好,且与偏航 Feed Forward 结合时,反而会减少回弹。
采用上述改动后,偏航响应将与俯仰、横滚一样好或更好。偏航使用 Feed Forward 和高 I 时,回弹会很小,无需在这些设置下启用 iTerm_Relax。
**偏航 D 为实验性功能。普通四轴飞行器不要给偏航增加 D,否则很可能出现严重偏航振荡。**偏航 D 可能对三轴飞行器有用。
作者为典型四轴飞行器推荐的偏航相关值:
set iterm_relax = RP
set p_yaw = 40
set i_yaw = 120
set d_yaw = 0
set f_yaw = 100
更平顺的 Anti Gravity
四轴飞行器,尤其是电池位于底部、重心低于推力中心的构型,或增加气流会使飞行器向后旋转的构型,前速增加时需要积累 I 以维持设定俯仰角。前飞中快速上下改变油门时,这类飞行器可能机头上下晃动。Anti Gravity 是 Betaflight 用于帮助 I 在空速快速变化后更快适应所需新值的功能。
3.5 之前,Anti Gravity 使用“全有或全无”的方法。每当收到新的油门值,如果该油门阶跃变化超过阈值,I 就会乘以 Anti_Gravity_Gain;但下一阶跃若略低于阈值,则完全不起作用。
不同遥控器的 RC 阶跃间隔差异很大,因此每个阶跃的油门变化量也可能明显不同。于是 Anti Gravity 是否实际生效,多少有些碰运气。
新的默认模式 set anti_gravity_mode = SMOOTH 会按油门变化率平滑、成比例地增加 I。没有突变阶跃,也没有需要关心的阈值,旧阈值会被忽略。
可通过调高或调低 anti_gravity_gain 参数改变整体强度。旧值应是不错的起点,但建议使用默认值 5000。
注意:猛收油到零时,气流可能反向流过螺旋桨,造成明显的俯仰和横滚不稳定;不要期待飞行器在这种条件下仍完全稳定。
选择 set anti_gravity_mode = STEP 可使用旧方法。
动态陷波滤波器调校
动态陷波一直是有效噪声管理的重要组成部分。
3.5 改进了算法并允许经 CLI 调校。对许多配置而言,适当调整可降低延迟和/或进一步改善噪声控制。
使用默认值将保留旧行为。
刚性较好的机架、性能良好的电机和新螺旋桨组成的四轴飞行器,通常有干净的噪声特征,除了一个随电机噪声升高而上升的噪声峰值。
在这些四轴飞行器上,旧动态陷波代码往往会在高油门时下探过低,显著增加延迟却无法去除噪声。
对于噪声较大的四轴飞行器,旧动态陷波最后会紧紧停留在 200 至 300 Hz 区间,表现更像固定陷波器。
代码已改为:
- 基于滤波后、陷波后的输入数据工作,因此已加入陷波时,动态陷波不会落在同一位置;
- 忽略偶尔使其下探过低的低频输入;
- 更好地跟踪峰值;
- 没有峰值时升至最高值,以尽量降低延迟;
- 允许用户配置品质因数,以跟踪更宽范围的输入数据;
- 允许用户设置陷波宽度,较窄宽度会带来更低延迟。
重要提示:噪声较大且电机发热的四轴飞行器应保留默认值。
为干净四轴飞行器调校动态滤波器
dyn_notch_quality 是设置动态陷波滤波器允许移动范围的 CLI 值。从技术上说,它设置输入带通滤波器的 Q 因子。
旧动态陷波 Q 因子以及当前默认值是 70。它将动态陷波的移动范围限制在相对窄的频带内,通常为 240 至 300 Hz。将 dyn_notch_quality 设为 5 可将带宽打开至 150 至 600 Hz;这对拥有清晰、明确且与电机转速相关、最高可到 600 Hz 的主导峰值的干净四轴飞行器效果很好。
dyn_notch_width_percent 设置动态陷波宽度。若设为 20,陷波宽度为中心频率的 +/- 20%。若算法把中心频率设为 300,20% 宽陷波覆盖 240 至 360。
当前默认值为 50%,约等于旧动态滤波器的宽度。考虑到旧滤波器的典型中心值,这会产生宽陷波并造成明显额外延迟。
对干净四轴飞行器,动态陷波可缩窄至约 20%,仍能良好工作。
中等干净的四轴飞行器可尝试:
set dyn_notch_quality = 15
set dyn_notch_width_percent = 30
非常干净的四轴飞行器可尝试:
set dyn_notch_quality = 5
set dyn_notch_width_percent = 20
要在 Blackbox 中查看各轴陷波中心频率的变化并记录原始陀螺仪数据:
set debug_mode = FFT_FREQ
3.5 中 Feed Forward 的更多细节
3.5 之前,Feed Forward 因子包含在 D 计算内,增加 D 时也会随之增加。
旧 D weight 方法不理想,原因如下:
- 概念上令人困惑:我们把提高摇杆响应的因子和原本应阻尼反应的因子绑定在一起。虽有合理原因,但确实使事情复杂。
- 过去为了消除快速摇杆输入后的晃动而增加 D 时,转向速率也会同时增加,所以无法“只增加 D”。现在增加 D 得到的只是更多 D;因此能以经典方式更容易地增加 D 来控制 P 晃动。
- 过去 D 的任何变化都会改变 Feed Forward 或摇杆响应量;现在两者完全独立。
现在可在 Blackbox Log Viewer 中独立绘制 Feed Forward 和 D 元素,准确显示 D 的作用,以及 D 和 FF 各自对 pidSum 的贡献。这简化了借助 Blackbox 的调校。
Feed Forward 要求启用 RC 平滑(推荐 Filter 方法)。没有 RC 平滑时,Feed Forward 会在电机轨迹中产生尖峰;为防止此问题,固件会在未平滑的通道上禁用 Feed Forward。因此默认设置已改为对所有通道启用平滑(rc_interp_ch = RPYT)。