我为 Betaflight 构建了一个自动 PID 调参工具——下面揭示其内部工作原理
抱歉,我无法直接访问外部链接来获取文章内容。请您将需要翻译的文本粘贴在这里,我会按照要求为您翻译成简体中文,并保留原始的格式、代码块和链接。
问题
Betaflight 没有真正的自动调参功能(不像 iNav 或 Ardupilot)。我们唯一接近的工具是 PIDtoolbox,它非常适合 可视化 blackbox 数据,但并不会真正告诉你该改什么。你仍然需要了解自己在看什么。
大多数飞手通常会:
- 直接复制别人的 PID 参数并抱着侥幸心理
- 用周末时间进行试飞和手动调参
- 花钱请人调校他们的四轴
这些方案都不是理想的选择。
我构建的
FPVtune — 一个基于网页的工具,读取你的 Betaflight blackbox 日志,并使用神经网络生成优化的 PID 设置。
基本流程
- 记录 blackbox 日志(正常飞行 30 秒即可)
- 将
.bbl或.bfl文件上传至 fpvtune.com - 获取完整的 PID 和滤波器推荐
无需安装,直接在浏览器中使用。
工作原理概述
Blackbox 解析
Betaflight Blackbox 日志是带有自定义格式的二进制文件。我编写了一个 Python 解析器,用于提取陀螺仪数据、马达输出、设定点、PID 控制器输出(P/I/D 项)以及 RC 指令,采样率通常为 2 kHz(陀螺仪)和 500 Hz–1 kHz(PID)。
难点在于处理不同的 Betaflight 版本——日志格式随版本而变化,并且还会出现日志损坏、写入不完整(电池在飞行中途耗尽)以及不同记录速率等边缘情况。
信号分析
解析完成后,原始数据会经过若干分析步骤:
# Simplified version of the analysis pipeline
def analyze_axis(gyro, setpoint, pid_p, pid_d, motor, axis='roll'):
# Step response analysis - how fast does the quad respond?
step_response = compute_step_response(setpoint, gyro)
# Noise floor analysis - where is the noise?
noise_spectrum = np.fft.rfft(gyro)
noise_floor = estimate_noise_floor(noise_spectrum)
# Prop wash detection - oscillations after throttle changes
throttle_events = detect_throttle_cuts(motor)
propwash_severity = measure_oscillation(gyro, throttle_events)
# D-term noise vs effectiveness tradeoff
d_noise = rms(highpass(pid_d, cutoff=100))
d_effectiveness = correlation(pid_d, gyro_error_derivative)
return AnalysisResult(step_response, noise_floor,
propwash_severity, d_noise, d_effectiveness)
提取的关键指标
- 阶跃响应延迟 – 从摇杆输入到四轴响应的毫秒数
- 超调 – 四轴是否超过目标角度?
- 按频率划分的噪声底 – 电机/螺旋桨噪声出现的位置
- 螺旋桨气流扰动严重度 – 油门突变后的振荡
- D 项噪声比率 – D 项真的在帮助还是只是在增加噪声?
神经网络
模型使用这些提取的特征来预测最佳的 PID 参数。它在约 2 000 条已知“良好”调参的 Blackbox 日志数据集上进行训练(这些日志和最终的 PID 值由经验丰富的 FPV 飞手提供)。
网络结构是一个简单的前馈网络,包含三层隐藏层:
Input (28 features) → Dense(128, ReLU) → Dense(64, ReLU) → Dense(32, ReLU) → Output (18 PID values)
这 18 个输出覆盖滚转、俯仰、偏航的 P、I、D 参数,以及滤波器设置(陀螺低通、D 项低通、陷波滤波器)。
为什么不直接使用规则?
我最初尝试过基于规则的系统(“如果噪声高,就降低 D;如果响应慢,就提升 P”)。它在简单场景下还能工作,但在边缘情况时会失效——例如噪声且响应慢,这通常意味着滤波器过于激进,需要先调整滤波器再去改动 PID。神经网络能够更好地处理这些多变量交互,而不是手写规则。
技术栈
- 后端: Python, FastAPI
- 前端: React
- 黑盒解析器: 定制 Python(没有现有库能够处理所有边缘情况)
- 机器学习: 用于训练的 PyTorch,推理使用 ONNX
- 数据库: PostgreSQL
整个项目在 open source on GitHub。
迄今为止的结果
在我自己的四轴机上进行测试(5″ 自由式、3″ cinewhoop、7″ 长航程),结果出乎意料地好。我的自由式机在不需要考虑滤波器设置的情况下,螺旋桨气流的处理明显改善。
它并不完美——有时会对噪声较大的机型建议过于激进的滤波器设置,而且目前还不支持转速(RPM)滤波的调校。但对于获得一个可靠的基准调参,它可以节省数小时的手动工作。
试一试
该工具已上线于 fpvtune.com。完整分析费用为 $9.90,但我有一个测试码可以免费试用:
Code: FPVTUNE-BETA-2026(使用次数有限)
上传你的黑盒日志,在付款页面展开 “Activation Code”(激活码)栏目并输入该码。
我很期待其他飞手和开发者的反馈。如果你飞 FPV 并且手头有黑盒日志,试试看并告诉我这些建议与您当前的调参相比如何。
如果你对黑盒日志解析的技术细节或训练流水线感兴趣,我可以写一篇后续文章,深入探讨其中的任一主题。