我为 Betaflight 构建了一个自动 PID 调参工具——下面揭示其内部工作原理

发布: (2026年2月19日 GMT+8 11:18)
7 分钟阅读
原文: Dev.to

抱歉,我无法直接访问外部链接来获取文章内容。请您将需要翻译的文本粘贴在这里,我会按照要求为您翻译成简体中文,并保留原始的格式、代码块和链接。

问题

Betaflight 没有真正的自动调参功能(不像 iNav 或 Ardupilot)。我们唯一接近的工具是 PIDtoolbox,它非常适合 可视化 blackbox 数据,但并不会真正告诉你该改什么。你仍然需要了解自己在看什么。

大多数飞手通常会:

  • 直接复制别人的 PID 参数并抱着侥幸心理
  • 用周末时间进行试飞和手动调参
  • 花钱请人调校他们的四轴

这些方案都不是理想的选择。

我构建的

FPVtune — 一个基于网页的工具,读取你的 Betaflight blackbox 日志,并使用神经网络生成优化的 PID 设置。

基本流程

  1. 记录 blackbox 日志(正常飞行 30 秒即可)
  2. .bbl.bfl 文件上传至 fpvtune.com
  3. 获取完整的 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 并且手头有黑盒日志,试试看并告诉我这些建议与您当前的调参相比如何。

如果你对黑盒日志解析的技术细节或训练流水线感兴趣,我可以写一篇后续文章,深入探讨其中的任一主题。

0 浏览
Back to Blog

相关文章

阅读更多 »

Apex B. OpenClaw,局部嵌入

本地嵌入用于私有记忆搜索。默认情况下,OpenClaw 的 memory search 会将文本发送到外部的 embedding API,通常是 Anthropic 或 OpenAI……

Apex 1. OpenClaw, 供应商历史

从 ChatGPT、Anthropic 和 Google Gemini 导入聊天记录。使用 OpenClaw,你可以做的最强大的事情之一是 bootstrap 你的记忆……