模拟器目标机型到自组机反向标定¶
本篇提供一条可执行的反向标定流程:选择Uncrashed、Liftoff或TRYP FPV中的一台固定内置机型,把它的操纵响应定义为目标,再让一架使用Betaflight的自组多旋翼在安全包线内逐层逼近。

本方法不承诺把不同物理模型变成完全相同的飞行器。它要回答三个更具体的问题:
- 哪些手感可以直接换算成Betaflight参数;
- 哪些参数可以由称重和动力台架生成候选值;
- 哪些控制参数必须通过Blackbox和短测迭代,不能由重量或电机Kv直接计算。
本文固定Betaflight 2026.6.2。公式来自该标签源码;其他版本必须重新核对Rates、油门曲线、简化调参和日志字段。
先给出结论¶
| 项目 | 能否直接计算 | 正确方法 |
|---|---|---|
| Actual Rates曲线 | 可以 | 由Center Sensitivity、Max Rate和Expo精确计算 |
| 重量、悬停单电机推力 | 可以 | 由整机质量和重力计算 |
| 静态推重比 | 可以 | 由动力台架最大推力和整机质量计算 |
| 候选悬停电机命令 | 可以近似 | 对动力台架推力曲线插值或拟合 |
| 滚转、俯仰、偏航惯量 | 可以粗略估算 | 按部件质量和相对重心位置计算 |
| PID、滤波和前馈最终值 | 不能仅凭规格计算 | 从合格基线开始,用Blackbox闭环响应逐项迭代 |
| 桨洗、阻力、延迟和能量保持 | 只能测量后逼近 | 标准动作、同步录像、日志和环境控制 |
重量是必要输入,但不是完整模型。250 g只能说明重力约为2.45 N;它不能说明电机多快建立推力、机体多难停止旋转、图传延迟多少或机架在哪个频率共振。
进入本篇的门禁¶
真实机必须已经完成:
- 无桨总体验收;
- B1动力组合台架;
- 动力系统台架与受防护装桨地面验证中的B2受防护整机地面验证;
- C层基线悬停;
- 机械、RPM回传、滤波、温度和Blackbox质量检查;
- 当前配置备份和可验证回滚;
- 当次D层参数试飞授权。
如果真实机还没有稳定基线,本篇只能用于整理目标、计算Rates和建立记录表,不能直接生成可试飞PID。
第1步:冻结唯一目标¶
一轮标定只选择一台目标机型。填写:
模拟器:
游戏版本或构建号:
物理版本:
内置机型完整名称:
机型是否被修改:
控制器:
控制器校准日期:
Rates模型与三轴参数:
相机角度:
水平/垂直FOV:
宽高比与分辨率:
帧率与垂直同步:
风、重力和环境设置:
目标模式:
记录日期:
游戏更新、物理版本变化、机型修改或控制器重新校准后,旧目标不再视为同一基线。
为什么只能先选一款游戏¶
三款模拟器的电机、螺旋桨、阻力、桨洗、碰撞和控制器实现不同。即使它们都有同名“三寸自由式”机型,也不表示:
- 相同重量产生相同惯量;
- 相同PID数值具有相同控制效果;
- 相同油门杆位产生相同推力;
- 相同相机角度产生相同速度感。
先把一个目标闭环,再为其他游戏分别建立Profile和记录,不求一个真实机参数同时匹配所有游戏。
第2步:从模拟器提取目标响应¶
优先读取游戏直接显示的Rates、重量、动力和相机参数。游戏没有导出遥测时,用固定帧率录像和相同遥控器输入测量外部行为。
目标测试条件¶
- 使用计划控制真实机的同一遥控器;
- 遥控器端不增加Expo或混控;
- 游戏内重新校准中位和端点;
- 关闭风或固定同一风场;
- 固定相机角度、FOV、分辨率和帧率;
- 使用同一内置机型和电池状态;
- 显示杆位叠加或同步录制遥控器动作;
- 每个动作至少重复三次。
目标动作卡¶
| 动作 | 输入 | 提取量 |
|---|---|---|
| 中心小幅滚转 | 10%稳定杆量 |
中心灵敏度近似值 |
| 半杆滚转 | 50%稳定杆量 |
中段角速度 |
| 满杆滚转 | 100%稳定杆量 |
最大滚转角速度 |
| 半杆俯仰 | 50%稳定杆量 |
俯仰中段角速度 |
| 满杆偏航 | 100%稳定杆量 |
最大偏航角速度 |
| 快速半杆阶跃 | 中位快速到50%并保持 |
上升时间、延迟和过冲 |
| 快速回中 | 50%快速回中 |
停止时间和回弹 |
| 定高悬停 | 调整到稳定高度 | 目标悬停杆位 |
| 悬停后短时加油 | 固定增量、固定持续时间 | 爬升趋势和油门响应 |
| 松油门滑行/转弯 | 固定初速和动作 | 阻力、惯量和能量保持 |
游戏不显示角速度时¶
使用清晰可辨的完整翻滚或偏航:
例如,录像中两圈完整滚转用时0.90 s:
使用达到稳定转速后的中间完整圈,不把起始加速和末尾停止混入稳定角速度。帧率为120 fps时,持续时间可以由帧数计算:
该方法适合估计稳定角速度,不适合精确计算最初几十毫秒的响应。上升时间和输入延迟优先使用游戏遥测;没有遥测时只能作为分级比较。
第3步:采集真实三寸机身份¶
最小数据集¶
带电池起飞重量:
轴距:
机架布局:True-X / Deadcat / Squashed-X / 其他
重心相对几何中心的位置:
电机完整型号、定子尺寸和Kv:
螺旋桨厂商、型号、直径、螺距和叶数:
电池串数、容量、重量和实测内阻:
电子调速器型号、固件和PWM频率:
飞控型号、陀螺仪和安装方式:
接收机协议和数据包速率:
图传、眼镜/屏幕和刷新率:
相机角度:
Betaflight version:
Betaflight status:
Betaflight diff all:
无风悬停油门:
动力台架推力/电流/RPM/电压曲线:
基线Blackbox:
质量分布表¶
只记录总重量无法估计转动惯量。至少记录主要部件:
| 部件 | 质量 | 相对重心前后x |
左右y |
上下z |
|---|---|---|---|---|
| 电池 | 项目测量 | 项目测量 | 项目测量 | 项目测量 |
| 四个电机 | 分别测量 | 项目测量 | 项目测量 | 项目测量 |
| 相机/图传 | 项目测量 | 项目测量 | 项目测量 | 项目测量 |
| 飞控/电调 | 项目测量 | 项目测量 | 项目测量 | 项目测量 |
| 机架与线束 | 项目测量 | 估算分布 | 估算分布 | 估算分布 |
质量使用千克,位置使用米。坐标原点取整机重心。
第4步:计算重量、悬停推力和推重比¶
重力¶
W:重力,单位牛顿;m:带电池整机质量,单位千克;g:标准重力加速度,取9.80665 m/s²。
250 g三寸机:
悬停单电机推力¶
水平悬停、四电机近似均匀承担载荷时:
示例:
若动力台架使用克力(gf),四轴机可直接用:
真实机存在重心偏移、机架气动干扰和电机差异,Blackbox中的四电机命令不一定完全相等。
最大静态推重比¶
使用克力和克时:
若单电机最大静态推力为350 gf:
该值只表示当前电池电压和台架条件下的静态余量,不等于飞行中的动态推力,也不能直接给出PID。
第5步:由推力曲线估算悬停电机命令¶
电机Kv只能粗略给出空载转速:
带桨转速、推力和电流不能仅由Kv计算。必须使用同一电机、桨、电池电压和电子调速器设置的动力台架曲线。
表中的归一化命令u必须与Betaflight实际有效电机命令建立对应。普通电调测试器的“20%”可能使用不同端点、协议或输出映射,不能未经校准直接当作u=0.20。
线性插值¶
假设台架得到:
归一化电机命令u |
单电机推力 |
|---|---|
0.20 |
25 gf |
0.40 |
80 gf |
0.60 |
160 gf |
0.80 |
250 gf |
1.00 |
350 gf |
目标悬停推力62.5 gf位于25和80 gf之间:
代入:
候选悬停电机命令约为34%。这只是静态候选,最终使用实机悬停Blackbox复核。
幂函数拟合¶
有五个以上有效测试点时,可拟合:
用最小二乘求出a和b后:
不得把不同电池电压、不同桨或不同PWM频率的数据混在同一次拟合中。拟合残差大、存在失步或高命令区明显饱和时,停止使用该模型。
第6步:估算质量分布与转动惯量¶
把主要部件近似为点质量:
m_i:第i个部件质量,单位千克;x_i、y_i、z_i:相对整机重心的位置,单位米;- 结果单位为
kg·m²。
该估算适合:
- 判断俯仰惯量是否明显大于滚转惯量;
- 比较两种电池安装位置;
- 解释为什么同重量机体停止响应不同;
- 为Pitch Tracking和Pitch Damping的后续日志判断提供背景。
它不适合直接计算Betaflight P、I、D。机架板、线束和外壳是连续分布质量,电机推力建立还包含电子调速器、电机、螺旋桨和电池动态。
第7步:计算并对齐Actual Rates¶
若目标内置机型显示Actual Rates,直接复制同一模型和三轴参数。Betaflight 2026.6.2对单轴的固定源码公式可写为:

App操作入口为“PID调参”→“Rate配置文件设置”:
- 确认当前Rate Profile;
- 把Rate类型切换为
Actual; - 分轴填写中央灵敏度、最大角速率和Expo;
- 在Rates预览中核对中心、半杆和满杆曲线;
- 保存并重启,再确认Profile与数值没有改变。
截图来自App 2026.6.2虚拟模式,页面中的70/670/0.00只展示字段位置。
x:归一化摇杆位置,范围-1至1;C:Center Sensitivity,单位°/s;M:Max Rate,单位°/s;E:Expo,范围0至1;ω:目标角速度,单位°/s。
该写法适用于常规的M ≥ C配置;固定源码在M < C时会把M - C对应的增量钳制为零,不允许按负增量外推。
该公式满足:
示例:
C = 100 °/s
M = 800 °/s
E = 0.40
x = 0.50
ω(0.5)
= 100 × 0.5 + 700 × 0.5 × [0.4 × 0.5^5 + 0.6 × 0.5]
≈ 159.4 °/s
目标不显示参数时反求候选¶
先测:
- 满杆角速度得到
M ≈ ω(1); - 小杆量角速度估算中心斜率
C; - 再用一个中间杆位反求Expo。
对正杆位0 < x < 1:
视频测量误差可能使E超出0至1。此时不强行截断,应增加重复次数或改用Rates转换器拟合多个点。
目标使用Betaflight Rates、Quick Rates或其他模型时,不把三个字段按名称直接填入Actual Rates。优先在目标游戏和Betaflight使用同一种模型;否则按10%/50%/100%三个以上杆位拟合曲线。
第8步:建立候选油门曲线¶
Betaflight 2026.6.2使用:
thr_mid:希望悬停出现的摇杆位置;thr_hover:该摇杆位置映射到的飞控油门输出;thr_expo:悬停点两侧曲率。
如果目标模拟器机型在45%油门杆位悬停,而真实机台架和Blackbox显示约34%输出可以悬停,第一版候选为:
固定版本源码使用两段二次Bezier曲线,通过(0,0)、(thr_mid,thr_hover)和(1,1),因此悬停点可以同时指定输入坐标和输出坐标。thr_expo只在完成悬停点验证后逐步调整。
最大动力过强¶
如果目标机型的满油门响应明显弱于真实机:
- 先取得目标机型公开的推力/推重比,或者在具有已知距离和时间基准的模拟场景中标定爬升响应;
- 从真实机动力台架曲线确定目标最大推力对应的电机命令
u_limit; - 先使用Rate Profile中的
SCALE型throttle_limit生成候选; - 重新测量悬停点、输出余量、温度和控制权;
- 不把
motor_output_limit当作普通手感旋钮。
SCALE保留完整摇杆行程并缩放驾驶员油门命令;CLIP保留低段映射但截断高段。两者都不能保证推力按同一百分比变化,因为真实推力曲线非线性。
目标没有可追溯动力数据、已知尺度或可重复爬升基准时,不计算throttle_limit_percent,只记录“目标满油门较弱”的主观差异。
第9步:PID和前馈为什么没有直接公式¶
角速度环面对的是完整被控对象:
即使已知质量、惯量和静态推力,也仍缺少电机时间常数、动态推力、结构模态、滤波相位和执行器饱和。模拟器内部控制器也不一定等同于Betaflight 2026.6.2。
因此:
- 公式用于建立Rates、油门和物理能力候选;
- PID从当前构型的已验证默认值或适用预设开始;
- 最终值由真实机Blackbox闭环响应决定;
- 游戏PID数值不直接写入真实飞控。
第10步:用Blackbox计算响应差异¶
对同一轴、同一杆位和同一动作,记录:
setpoint:目标角速度;gyro:实际角速度;- P、I、D和前馈输出;
- 四电机命令;
- 油门、电压和RPM;
- 时间戳和dropout。
上升时间¶
t_10:gyro首次达到目标幅值10%的时间;t_90:gyro首次达到目标幅值90%的时间。
过冲¶
稳态误差¶
在目标保持稳定的选定时间窗:
归一化均方根跟踪误差¶
比较前后必须使用同一轴、杆位、动作持续时间、电池条件和日志采样条件。目标模拟器只有视频而没有遥测时,不把视频估计和Blackbox精度写成同等级证据。
第11步:把差异映射到参数¶
先固定Rates和油门候选,再判断控制器。每轮只改一个维度。

在App中先选定PID Profile,再使用Damping、Tracking和Stick Response等简化滑块形成单变量候选。截图中的1.00及P/I/D/F值为虚拟示例,不复制到实体机。
| 观察到的差异 | 优先参数 | 修改方向 | 必须先排除 |
|---|---|---|---|
| 中心附近比目标敏感 | Center Sensitivity | 降低 | 中位抖动、双重Expo |
| 中心附近比目标迟钝 | Center Sensitivity | 提高 | 死区过大、输入滤波异常 |
| 满杆角速度不同 | Max Rate | 直接对齐目标 | 电机饱和、Rate Limit |
| 中心和满杆一致,半杆不同 | Expo | 调整中段曲率 | Rates模型不同 |
| 悬停杆位低于目标 | thr_mid/thr_hover |
把目标杆位映射到实机悬停输出 | 电压和载荷不一致 |
| 满油门明显强于目标 | throttle_limit=SCALE候选 |
按推力曲线降低 | 动力台架数据缺失 |
| 动作初段落后,稳定段能跟上 | Stick Response/前馈 | 小幅提高 | RC平滑、链路速率、Rates变化 |
| 动作初段抢先或过冲 | Stick Response/前馈 | 降低或增加适当平滑 | 停止段D不足 |
| 整个动作持续落后且有输出余量 | Tracking/P与I | 小幅提高 | 电机饱和、过度滤波 |
| 快速回中后回弹 | Damping、I-term Relax和前馈 | 先查饱和与前馈,再评估Damping | 坏桨、噪声、失步 |
| 持续风或重心偏移下保持差 | Drift-Wobble/I | 小幅提高 | 机械重心和电机差异 |
| 高频振荡或电机温升异常 | Tracking/Damping/滤波 | 回滚并处理噪声 | 不得继续追目标手感 |
| 俯仰明显比滚转难停止 | Pitch Damping | 日志确认后小幅提高 | 俯仰惯量、饱和和相机干扰 |
使用简化调参滑块时,第一轮单项候选变化不超过当前值的5%,只是保守测试增量,不是通用最终值。每次落地后复核日志、温度、振动和输出余量;没有改善就回滚,不连续叠加多个“也许有效”的改动。
第12步:完整三寸机算例¶
目标¶
模拟器:示例
目标内置机型:固定三寸机型
Rates:Actual
Roll Center Sensitivity:100 °/s
Roll Max Rate:800 °/s
Roll Expo:0.40
目标悬停杆位:45%
目标半杆滚转:约159 °/s
目标滚转上升时间:0.13 s
目标停止过冲:5%
真实机¶
第一版候选¶
- Betaflight选择Actual Rates;
- Roll输入
100/800/0.40; - 设置
thr_mid=45、thr_hover=34、thr_expo=0; - PID、滤波和前馈保持已验证基线;
- 不立即限制最大油门,因为目标最大推力尚未形成可信测量;
- 执行半杆滚转阶跃并保存Blackbox。
第一轮结果¶
假设实机:
判断:
- Rates已经匹配,不再修改Center Sensitivity、Max Rate或Expo;
- 稳定角速度正确但动作初段较慢;
- 过冲低且输出有余量;
- 第一候选优先小幅提高Stick Response/前馈,而不是提高Max Rate。
若修改后上升时间变为0.15 s、过冲变为5%且温度与噪声仍通过,可保留为下一轮候选。若过冲升至12%或出现电机尖锐活动,则立即回滚。
此算例演示的是判断顺序,不是向所有三寸机推荐100/800/0.40、thr_hover=34或任何前馈数值。
收敛标准¶
项目可以把以下值作为初始“手感比较目标”,不能替代安全放行:
| 指标 | 初始比较目标 |
|---|---|
| 直接输入的Rates字段 | 与目标完全一致 |
实测10%/50%/100%角速度 |
与目标差异不超过±5% |
| 上升时间和停止时间 | 与目标差异不超过±15% |
| 过冲 | 与目标差异不超过5个百分点 |
| 悬停杆位 | 与目标差异不超过3个百分点 |
| 主观重复评分 | 同一操作者、盲化顺序、至少三轮结果一致 |
出现以下任一情况,即使手感更接近也判为不通过:
- 高频或低频持续振荡;
- 电机、电子调速器或电池温度超过批准限值;
- DShot错误、失步、削波或Blackbox dropout;
- 代表性动作中电机长期饱和;
- 需要关闭安全检查或减弱Failsafe;
- 机械、滤波或日志身份发生未记录变化。
交付记录¶
目标模拟器与固定版本:
目标内置机型:
目标Rates与视觉设置:
目标动作视频和测量表:
真实机身份与带电池重量:
质量分布与惯量估算:
动力台架曲线与拟合方法:
悬停推力和推重比计算:
候选Rates:
候选油门曲线:
基线PID/滤波/前馈:
每轮唯一修改:
Blackbox文件:
上升时间、过冲、停止时间和NRMSE:
温度、振动和输出余量:
不可消除差异:
最终Profile与恢复文件:
结论:未测试 / 阻断 / 通过 / 不通过 / 无效 / 不适用
检查理解¶
- 为什么带电池重量不能直接计算PID?
- 为什么电机Kv不能代替动力台架推力曲线?
- Actual Rates的哪些参数分别决定中心斜率、满杆角速度和中段曲率?
- 为什么稳定角速度正确但动作初段落后时,不应继续提高Max Rate?
- 为什么目标手感达到后,真实机安全证据仍可以否决该参数?