4、配置 AltHold(定高)模式:高度传感器融合、油门锁定逻辑、仿真验证
定高模式,说白了就是让飞机自己管高度,你只管前后左右飞。很多新手一上来就切 Loiter,结果发现飞机晃得厉害——其实 AltHold 才是飞控最基础的“自动驾驶”能力。我个人习惯,调参之前先搞清楚它到底在干什么。
4.1 高度传感器融合:飞控怎么知道飞了多高?
飞控不是靠眼睛看高度的。它手里有三个“尺子”:
- 气压计(Barometer):测大气压换算高度。优点是长期稳定,缺点是受气流、温度影响大。我遇到过无人机从空调房飞到室外,高度瞬间跳变 2 米的情况。
- 加速度计(Accelerometer):积分得到垂直速度,再积分得到高度。短时间准,但积分漂移严重——你想想看,每秒钟的微小误差累加 10 秒就离谱了。
- GPS 高度:卫星测高,精度差(±5 米常见),但不会漂移。一般只用来做参考或辅助。
飞控用 互补滤波 或 卡尔曼滤波 把这三个数据揉在一起。气压计提供低频准确值,加速度计提供高频变化值,GPS 兜底防漂移。嗯,这里要注意:SITL 仿真里气压计是完美的,但真机不是。
核心结论:AltHold 的精度,90% 取决于气压计数据质量。仿真里一切完美,真机一定要做气压计隔热和减震。
4.2 油门锁定逻辑:定高不是“锁油门”
很多人以为定高就是油门固定在一个位置。错。定高是 油门根据高度误差动态调整。
飞控内部跑的是一个 高度-速度-加速度三级 PID:
- 外环(高度环):目标高度 vs 当前高度 → 输出期望垂直速度。
- 中环(速度环):期望垂直速度 vs 当前垂直速度 → 输出期望垂直加速度。
- 内环(加速度环):期望垂直加速度 → 换算成油门输出。
我曾经调试一架 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 配置的三大模块和它们之间的关系:
4.5 常见问题与避坑
- 仿真里一切正常,真机却掉高:大概率是气压计被风吹到了。真机一定要给气压计加海绵罩。
- 切 AltHold 后飞机直接落地:检查
THR_MIN是否设得太低。我遇到过有人设成 0,结果切模式瞬间油门归零。 - 高度误差越来越大:检查 EKF 是否收敛。仿真里可以重置 EKF 试试:
param set EKF3_ENABLE 0再设回 1。
一个小技巧:在 SITL 里用 param set SIM_BARO_RND 0 关掉气压计噪声,先验证 PID 逻辑对不对。等逻辑调通了,再把噪声加回来,模拟真实环境。
嗯,AltHold 配置说难不难,说简单也不简单。核心就三件事:传感器数据要准、PID 参数要稳、仿真验证要全。这三步走通了,你的飞机就能老老实实待在天上,等你发号施令。