4、定高模式(Altitude Hold Mode):气压计与超声波原理、垂直速度与位置控制、油门锁定逻辑、常见问题(气压计漂移)
定高模式,说白了就是让无人机自己管住高度。你松了油门,它不会直接砸下来,而是悬在当前位置。这个功能看似简单,背后却涉及传感器融合、控制逻辑和一堆工程细节。我最早接触定高模式是在一个农业植保项目上,当时飞机在麦田上方忽高忽低,打药不均匀,折腾了好几个通宵才把问题定位到气压计上。嗯,今天我们就把它彻底讲透。
4.1 高度传感器:气压计与超声波
定高模式的核心,是知道飞机当前有多高。常用的传感器有两种:气压计和超声波。它们各有各的脾气。
4.1.1 气压计原理
气压计测量的是大气压强。高度越高,气压越低。这个关系可以用标准大气模型来描述:
P = P₀ × (1 - 0.0065 × h / T₀)^(5.2561)
其中 P₀ 是海平面标准气压(1013.25 hPa),T₀ 是海平面标准温度(288.15 K),h 是海拔高度(米)。
实际使用中,我们更关心相对高度。起飞时记录一个基准气压值,之后的气压变化都跟这个基准比。这样能消除海平面气压波动的影响。
4.1.2 超声波原理
超声波传感器发射40kHz的声波脉冲,测量回波时间。距离 = 声速 × 时间 / 2。声速受温度影响,公式是:
v = 331.3 × sqrt(1 + T / 273.15)
T 是摄氏温度。所以很多超声波模块会内置温度补偿。
超声波的优势是精度高,近距离(0.1~5米)误差可以控制在厘米级。但它有两个硬伤:一是测量角度窄(通常15°~30°),地面不平或倾斜时读数不准;二是受噪声干扰,比如电机电调的高频啸叫。
| 传感器 | 量程 | 精度 | 更新率 | 弱点 |
|---|---|---|---|---|
| 气压计 | 0~5000m | ±0.5m(典型) | 10~100Hz | 漂移、气流敏感 |
| 超声波 | 0.1~5m | ±0.02m | 20~50Hz | 角度窄、噪声干扰 |
4.2 垂直速度与位置控制
有了高度测量值,接下来就是怎么控制。我见过不少新手直接拿高度误差去调油门,结果飞机像弹簧一样上下震荡。正确的做法是分层控制。
4.2.1 串级PID结构
定高控制通常采用串级PID:外环是位置环(高度),内环是速度环(垂直速度)。
// 伪代码示例
float target_altitude = 10.0; // 目标高度10米
float current_altitude = get_altitude();
// 外环:位置误差 -> 目标速度
float altitude_error = target_altitude - current_altitude;
float target_velocity = Kp_alt * altitude_error;
// 内环:速度误差 -> 油门输出
float velocity_error = target_velocity - current_velocity;
float throttle_output = Kp_vel * velocity_error + Ki_vel * integral_vel + Kd_vel * derivative_vel;
为什么要分两层?因为直接调位置,响应太慢;直接调加速度(油门),又太敏感。速度环作为中间层,能让飞机平滑地趋近目标高度。
4.2.2 垂直速度的获取
垂直速度不能直接测量,需要估算。常用方法:
- 气压计微分:对高度值求导。但噪声会被放大,必须配合低通滤波。
- 加速度计积分:对Z轴加速度积分。但零偏会累积,几分钟就飘到天上去。
- GPS垂直速度:精度低,更新慢,只适合辅助。
- 融合方案:用互补滤波或卡尔曼滤波,把气压计和加速度计的数据融合起来。我项目里常用互补滤波,计算量小,效果够用。
4.3 油门锁定逻辑
定高模式下,油门杆不再直接控制电机转速,而是变成高度指令。这个逻辑很多人一开始不适应。
4.3.1 油门杆映射
遥控器的油门通道(通常50%为中点)被映射为垂直速度指令:
- 油门杆在中点:目标垂直速度为0,飞机保持当前高度。
- 油门杆向上推:目标垂直速度为正(上升),推得越多,上升越快。
- 油门杆向下拉:目标垂直速度为负(下降)。
映射关系通常是线性的,但我会加一个死区(中点附近±5%),防止手抖导致飞机上下晃动。
4.3.2 油门锁定与解锁
进入定高模式时,飞控会记录当前的油门输出值作为基准。之后,控制环只在这个基准上做微调。这样做的好处是:即使控制环暂时失效,飞机也不会直接掉下来。
4.4 常见问题:气压计漂移
定高模式最大的敌人,就是气压计漂移。你明明没动油门,飞机却自己慢慢上升或下降。这个问题我踩过不少坑。
4.4.1 漂移的原因
- 温度变化:飞控板上的电子元件发热,导致气压计周围温度升高,气压读数偏大(相当于高度变低)。飞机就会自动加油门上升。
- 气流冲击:螺旋桨下洗气流直接吹到气压计上,造成瞬时压力波动。
- 传感器老化:MEMS气压计的零点会随时间缓慢漂移。
- 天气变化:冷锋过境、气压系统移动,都会导致基准气压变化。
4.4.2 应对策略
- 硬件隔离:用海绵或泡棉覆盖气压计,开一个小孔引静压。避免直吹。
- 温度补偿:很多气压计芯片内置温度传感器,可以在软件里做补偿。我习惯在飞控上电后先等30秒,让温度稳定再解锁。
- 软件滤波:用滑动平均或卡尔曼滤波平滑高度数据。但滤波太强会引入延迟,导致控制响应变慢。
- 辅助传感器融合:超声波在低空(5米内)可以完全替代气压计。GPS高度虽然精度低,但可以用来修正长期漂移。
- 定期校准:起飞前让飞控静止几秒,自动记录当前气压作为基准。如果飞行中检测到异常漂移,可以触发自动重新校准。
4.5 知识体系总览
下面这张图总结了定高模式的完整知识结构,从传感器到控制逻辑,再到常见问题。你可以把它当作一个快速索引。
定高模式看起来简单,但要做好,需要吃透传感器特性、控制算法和工程细节。我做了这么多年,每次遇到新机型,定高这块还是要反复调。嗯,这就是工程——没有银弹,只有扎实的基本功和不断的试错。