4、配置 AltHold(定高)模式:高度传感器融合、油门锁定逻辑、仿真验证

定高模式,说白了就是让飞机自己管高度,你只管前后左右飞。很多新手一上来就切 Loiter,结果发现飞机晃得厉害——其实 AltHold 才是飞控最基础的“自动驾驶”能力。我个人习惯,调参之前先搞清楚它到底在干什么。

4.1 高度传感器融合:飞控怎么知道飞了多高?

飞控不是靠眼睛看高度的。它手里有三个“尺子”:

  • 气压计(Barometer):测大气压换算高度。优点是长期稳定,缺点是受气流、温度影响大。我遇到过无人机从空调房飞到室外,高度瞬间跳变 2 米的情况。
  • 加速度计(Accelerometer):积分得到垂直速度,再积分得到高度。短时间准,但积分漂移严重——你想想看,每秒钟的微小误差累加 10 秒就离谱了。
  • GPS 高度:卫星测高,精度差(±5 米常见),但不会漂移。一般只用来做参考或辅助。

飞控用 互补滤波 或 卡尔曼滤波 把这三个数据揉在一起。气压计提供低频准确值,加速度计提供高频变化值,GPS 兜底防漂移。嗯,这里要注意:SITL 仿真里气压计是完美的,但真机不是。

核心结论:AltHold 的精度,90% 取决于气压计数据质量。仿真里一切完美,真机一定要做气压计隔热和减震。

4.2 油门锁定逻辑:定高不是“锁油门”

很多人以为定高就是油门固定在一个位置。错。定高是 油门根据高度误差动态调整。

飞控内部跑的是一个 高度-速度-加速度三级 PID:

  1. 外环(高度环):目标高度 vs 当前高度 → 输出期望垂直速度。
  2. 中环(速度环):期望垂直速度 vs 当前垂直速度 → 输出期望垂直加速度。
  3. 内环(加速度环):期望垂直加速度 → 换算成油门输出。

我曾经调试一架 450 轴距的机架,发现定高时飞机像“打嗝”一样一窜一窜的。查了半天,原来是速度环 P 增益太高,导致油门在 45% 到 60% 之间来回震荡。说白了,油门锁定逻辑不是锁数值,是锁“平衡点”。

我的经验:在 SITL 里调 AltHold,先把高度环 P 设小一点(比如 1.0),速度环 P 设 2.0 左右。等飞机不震荡了,再慢慢加高度环 P。别一上来就追求“稳如狗”。

4.3 仿真验证:在 SITL 里跑一遍才算数

理论说完了,动手。我们直接在 SITL 里验证 AltHold 配置是否正确。

4.3.1 启动 SITL 并连接地面站

打开终端,启动 SITL 仿真(以四旋翼为例):

sim_vehicle.py -v ArduCopter --map --console

等控制台输出 Ready to fly,打开 Mission Planner 或 QGroundControl,确认串口连接正常。

4.3.2 检查传感器数据

在地面站的 状态页面 查看:

  • baro.alt:气压计高度,应该接近 0(仿真默认海平面)。
  • GPS.alt:GPS 高度,可能有 ±1 米误差,正常。
  • IMU.alt:惯导融合高度,应该和气压计高度一致。

如果三个数据差太多,检查 EKF 状态。我见过有人仿真里 GPS 高度跳变 5 米,结果 EKF 直接崩了——后来发现是仿真参数里 GPS 噪声设得太高。

4.3.3 切 AltHold 模式并观察

遥控器(或 MAVLink 指令)切换到 AltHold 模式。观察飞机行为:

现象 可能原因 解决方法
飞机缓慢下降 油门中点(THR_MID)偏低 增大 THR_MID(每次 5%)
飞机缓慢上升 油门中点偏高 减小 THR_MID
飞机上下震荡 高度环 P 或速度环 P 过高 降低 P 增益(每次 0.5)
飞机对遥控器升降无反应 高度环 I 太低或限幅太小 增大 I 增益或放宽限幅

警告:在 SITL 里调 THR_MID 时,每次改完都要重新 param set 并切回 Stabilize 再切回 AltHold 才能生效。别问我怎么知道的——我曾经调了半小时发现参数没写进去。

4.3.4 验证油门锁定逻辑

在 AltHold 模式下,把油门推到 50% 以上再松开。正常情况下:

  • 飞机会先上升,然后自动回到目标高度。
  • 油门输出会稳定在一个值附近(不是固定值,是动态平衡值)。

你可以在地面站的 日志分析 里看 CTUN.ThrOut 曲线。如果曲线是一条直线,说明油门被“锁死”了——那是 Bug,不是功能。

我个人习惯,在仿真里故意给一个 2 米/秒的上升风(通过仿真参数 SIM_WIND_SPD 和 SIM_WIND_DIR),看飞控能不能稳住高度。能稳住,说明油门锁定逻辑合格了。

4.4 本章核心知识图谱

下面这张图总结了 AltHold 配置的三大模块和它们之间的关系:

AltHold 配置核心知识图谱 AltHold 配置核心知识图谱 传感器融合 油门锁定逻辑 仿真验证 气压计 加速度计 互补/卡尔曼滤波 高度环 P 速度环 P 油门动态平衡 传感器检查 模式切换 日志分析 传感器融合提供高度数据 → 油门锁定逻辑计算输出 → 仿真验证闭环 三者缺一不可,任何一个环节出问题,AltHold 都稳不住

4.5 常见问题与避坑

  • 仿真里一切正常,真机却掉高:大概率是气压计被风吹到了。真机一定要给气压计加海绵罩。
  • 切 AltHold 后飞机直接落地:检查 THR_MIN 是否设得太低。我遇到过有人设成 0,结果切模式瞬间油门归零。
  • 高度误差越来越大:检查 EKF 是否收敛。仿真里可以重置 EKF 试试:param set EKF3_ENABLE 0 再设回 1。

一个小技巧:在 SITL 里用 param set SIM_BARO_RND 0 关掉气压计噪声,先验证 PID 逻辑对不对。等逻辑调通了,再把噪声加回来,模拟真实环境。

嗯,AltHold 配置说难不难,说简单也不简单。核心就三件事:传感器数据要准、PID 参数要稳、仿真验证要全。这三步走通了,你的飞机就能老老实实待在天上,等你发号施令。