风估计与气压补偿
多旋翼不用装空速计,EKF 也能估算它正处在什么风里——风速多少、从哪个方向来。
这个估计有两个用途:
- 给飞手提供实时参考
- 补偿风对气压计的干扰:控制器直接暴露在气流中时,气流会扰动气压读数,导致飞行器在高速前飞后减速时出现几米的爬升或掉高
下面按三步设置:机身阻力系数 → 桨叶阻力系数 → 气压计补偿。
一、计算机身阻力系数
1. 称重
含电池称重,单位:kg。
2. 测量迎风面积与侧向面积
从几米外给飞行器拍两张照片:一张正面、一张侧面,分别用来量迎风面积和侧向面积。再用在线工具在照片上叠网格或描轮廓读出面积:
- 图片加网格工具(免费):把网格边长按飞行器的已知尺寸(cm)缩放,数出覆盖机身部分的格子数(不含桨叶),即面积(cm²)
- SketchAndCalc(免费试用 1 小时):沿机身轮廓画多边形,直接读出面积(cm²)

▲ 在照片上叠网格,数出覆盖机身的格子数

▲ 用 SketchAndCalc 沿轮廓画多边形,界面直接显示面积
量出的面积(cm²)除以 10000,就是 m²。
3. 填入参数
| 参数名 | 计算方法 |
|---|---|
EK3_DRAG_BCOEF_X | 重量(kg)÷ 迎风面积(m²) |
EK3_DRAG_BCOEF_Y | 重量(kg)÷ 侧向面积(m²) |
以图中 IRIS 为例:
| 项目 | 数值 |
|---|---|
| 重量 | 1.45 kg |
| 迎风面积 | 203 cm² = 0.0203 m² |
| 侧向面积 | 217 cm² = 0.0217 m² |
EK3_DRAG_BCOEF_X | 1.45 ÷ 0.0203 = 71.4 |
EK3_DRAG_BCOEF_Y | 1.45 ÷ 0.0217 = 66.8 |
二、计算桨叶阻力系数
桨叶阻力系数 EK3_DRAG_MCOEF 只能通过飞行测试得到,计算与判读方法见 ArduPilot 官方视频。
- 选开阔、风力小的场地
- 可选:设
LOG_DISARMED= 1、LOG_REPLAY= 1,便于飞行后用 Replay 复盘调参 - 用 Loiter(悬停) 模式解锁起飞(保证 EKF 位置估计良好),飞到测试区中央
- 切到 AltHold(定高) 模式,让飞行器顺风漂移,看清风向与风速
- 机头迎风,满推俯仰杆逆风加速,直到加速结束
- 松开俯仰杆,飞行器减速后顺风漂回起始线
- 把飞行器调整回舒适位置
- 偏航 90°(例如顺时针)让机身侧面对着风,满推左横滚加速,加速结束后松杆,让它顺风漂回起始线
- 再调整回舒适位置
- 重复第 8 步,改为机尾迎风(用拉杆加速)
- 重复第 8 步,改为右侧迎风(满推右横滚加速)
- 降落后下载机载日志分析,方法见下载闪存日志
TIP
EK3_DRAG_MCOEF 的最终值一般在 0.1 ~ 1.0 之间。
三、在地面站实时查看风速与风向
启用后,估计出的风速会通过 MAVLink 的 WIND 消息实时发送到地面站。
以 Mission Planner 为例:飞行数据页 → Quick 标签 → 双击任意数值 → 选 wind_dir(风向)或 wind_vel(风速)。

▲ 在 Mission Planner 的 Quick 标签中调出风向与风速
四、在日志中查看风速
EKF 的风速估计记录在机载日志的 XKF2 消息里,看 VWN(北向风速)与 VWE(东向风速)两个字段。

▲ 日志浏览器中展开 XKF2,勾选 VWN / VWE
五、气压计位置误差补偿
有了风估计,就能补偿风对每个气压计、四个方向(前、后、左、右)造成的压力误差,计算方法见 ArduPilot 官方视频。
1. 试飞
依次让机头、机尾、右侧、左侧迎风各飞一轮,降落后下载机载日志。
2. 计算各方向的位置误差系数
- 用空气密度计算器算出空气密度(kg/m³)
- 静压误差(Pa)= -高度 × 重力加速度 × 空气密度
- 动压 = 0.5 × 空气密度 × 风速²
- 位置误差系数 = 静压误差 ÷ 动压
NOTE
位置误差系数的取值应在 -1 ~ +1 之间。
3. 启用补偿并填入系数
把 BARO1_WCF_ENABLE 设为 1,然后重启控制器。
第 1 个气压计对应的参数:
| 参数名 | 方向 |
|---|---|
BARO1_WCF_FWD | 正 X 方向(前) |
BARO1_WCF_BCK | 负 X 方向(后) |
BARO1_WCF_RGT | 正 Y 方向(右) |
BARO1_WCF_LFT | 负 Y 方向(左) |
BARO1_WCF_UP | 正 Z 方向(上升) |
BARO1_WCF_DN | 负 Z 方向(下降) |
NOTE
控制器有多个气压计时,参数前缀依次换成 BARO2_WCF_*、BARO3_WCF_*,需要分别计算、分别填写。

