简介:这份PDF资料聚焦飞行控制系统中高度估计的关键问题,面向飞控算法工程师、无人机研发人员及相关专业学生。内容系统阐述了惯导、GPS与气压计三类传感器的工作原理与局限,并针对单一传感器在信号弱或数据异常时精度下降的缺陷,提出基于互补滤波的高度滤波算法。该算法先构建GPS与气压计高度融合模型,再结合惯导数据对高度、速度及位置进行滤波,可在嵌入式飞控板上实时运行。文章来自北京航空航天大学2018年发表的期刊论文,包含静态与模拟动态测试,对比传统方法展示了算法在准确度与稳定性上的优势,为飞控系统高度通道设计与优化提供了可参考的工程实现思路。资源为1个PDF文件,大小2.13MB,已有336人学习,适合希望深入理解多传感器融合滤波原理或从事飞控系统开发的读者查阅。 飞控系统高度估计是无人机稳定飞行的核心环节,我最早在这个问题上栽过跟头:单用气压计,起降时受旋翼下洗气流影响能偏出三四米;纯靠GPS,高楼峡谷里高度跳变得没法看;只用惯导积分,几秒就漂得找不到北。后来把三类数据按各自特性做成加权融合的高度滤波算法,才算真正解决了问题。这篇就拆解这套方案的完整设计、核心公式、实操调参和踩坑记录,适合正在调试飞控高度环、做算法移植或研究多传感器融合的工程师参考。

1. 高度估计的问题拆解与整体方案设计

1.1 无人机高度测量为什么这么难的根源

在进入算法细节前,先弄清楚一个基本事实:无人机的高度本质上是一个“算出来”的量,而不是“测出来”的量。气压计测的是大气压强,GPS解算的是三维坐标,惯导给的是加速度和角速度,它们都和被控对象的真实高度存在间接换算关系,而这个换算过程牵扯大量误差源。

气压计的核心短板在于它对环境压力变化极其敏感。无人机起降时旋翼下洗气流直接冲击静压孔,机体的姿态改变也会产生动压误差,还有风、温度、天气系统变化带来的缓慢漂移。我实测过,一架小型多旋翼在悬停时,气压计高度输出在1秒内可以波动±0.5米以上,低空起降阶段更严重。GPS的问题在于垂直精度天生差于水平精度,水平精度通常能做到1到2米,而垂直方向受卫星几何构型影响,误差经常在3到5米量级,城市峡谷和树荫环境下还会出现多路径反射导致的尖刺跳变。惯导本身不依赖外部信号,短时间内的加速度积分可以得到非常平滑的高度变化,但加速度计的零偏会被积分两次放大成位置误差的二次项,几十秒不修正就能飘出好几米。

单独拿任何一个传感器做高度源,都只能满足极其有限的飞行场景。真正工程上可行的思路是让三个传感器“分工协作”:惯导负责短时高频的快速响应和高平滑度,气压计负责中频稳定性和无漂移的趋势判断,GPS负责低频绝对校准和长期漂移的修正。这正是这个项目里高度滤波算法的核心设计逻辑。

1.2 融合滤波的架构选型:为什么用互补滤波而不是直接上卡尔曼

常见的多传感器高度融合方案有互补滤波、扩展卡尔曼滤波、无迹卡尔曼滤波等。EKF在学术论文里非常流行,状态量可以设计得很完整,把位置、速度、加速度计零偏、气压计误差模型都估计出来,收敛效果确实漂亮。但它的问题是工程落地成本高:需要精确的传感器噪声模型,需要对非线性观测方程做雅可比矩阵推导,在计算资源受限的飞控MCU上还要处理数值稳定性问题。对于高度通道这种相对简单的线性系统,EKF带来的收益和成本不成正比。

我在这套方案里选择了互补滤波架构。高度通道的本质是一个“一维位置+速度”的二阶系统,加速度计积分提供短期快速响应,气压计和GPS提供长期稳定校正,互补滤波把两者的频域优势组合起来。理解互补滤波的关键在于频率分割:加速度计解算的高度在高频段可信度更高,而气压计和GPS在低频段更稳定。通过选择合适的滤波系数,让系统自动信任高频段的惯导积分结果和低频段的绝对测量结果。这种架构物理意义清晰、调参直观、代码量小,在STM32F4这类主控上跑一轮融合计算只需要几十微秒,完全满足400Hz甚至更高频率的控制循环。

2. 传感器数据源特性分析与预处理

2.1 惯导数据:高度通道的核心“预测器”

惯导对高度估计的核心贡献在于加速度计提供的高频加速度信息。对垂直方向的加速度做二次积分可以得到高度变化量,但这个积分过程有个致命问题:加速度计的零偏误差和姿态解算误差会共同污染垂直加速度。

在实际系统中,加速度计输出的是机体坐标系的比力,需要先经过姿态旋转矩阵转换到导航坐标系,再扣除重力分量,才能得到真正的垂直加速度。这一步对姿态解算精度非常敏感。我调过一架姿态角误差约1度的飞控,在悬停状态下垂直加速度的误差就能达到0.17m/s²量级,二次积分后每10秒就会产生约8.5米的位置误差。这就需要依靠气压计和GPS来抑制漂移。

对惯导数据的预处理有三个要点:首先对垂直加速度做偏移修正,用飞行前静止状态采集的均值扣除常值零偏;其次是对加速度信号做低通滤波,高频振动会给积分结果引入噪声累积;最后是异常值剔除,剧烈机动或碰撞时加速度计的异常尖峰需要通过限幅或中值滤波处理。另外提一个经验值:惯导数据的更新频率至少要达到100Hz以上,否则积分步长过大,数值误差会显著增加。

2.2 GPS数据:垂直方向为什么是短板

GPS测高的原理是基于卫星到接收机的伪距测量,通过至少四颗卫星求解四个未知量(经度、纬度、高度、钟差)。垂直方向误差通常会比水平方向大1.5到2倍,这是由卫星几何构型决定的。GPS卫星主要分布在地球中轨道,从接收机仰视时,垂直方向的几何观测角度天然不如水平方向丰富,这个效应可以用DOP值(精度因子)来描述,其中VDOP(垂直精度因子)一般会大于HDOP(水平精度因子)。

工程上处理GPS高度的方法有几个关键点。一是依赖接收机输出的定位质量因子(如fix type,sats used),当卫星数不足或者定位状态不是3D fix时,直接冻结GPS高度数据的输入权重。二是对GPS高度进行滑动窗口均值处理,我常用的是5秒窗口的移动平均,可有效过滤多路径和星历误差带来的高频抖动。三是对GPS高度变化率做限制,正常情况下垂直速度不可能超过某个阈值(比如10m/s),超出这个范围的高度跳变直接判定为无效数据。

2.3 气压计数据:最怕的是突跳和环境剧变

气压计测高基于国际标准大气模型,通过气压随高度呈指数衰减的规律反算海拔高度。这带来一个传感器本身无法解决的矛盾:大气压力不仅随高度变化,还随天气和温度变化。一个典型的冷锋过境,地面气压可能在几个小时内变化几百帕,对应的等效高度变化就是好几米。这对长时间飞行的高度保持精度是个挑战。

气压计数据处理的首要任务是降噪。我用的是二阶巴特沃斯低通滤波,截止频率设在1Hz左右。这个频率选择有个权衡:太低的截止频率会导致高度信号滞后严重,影响飞控的垂直速度环响应;太高又无法有效滤除高频噪声。实测下来1Hz截止频率在大多数场景下表现均衡。其次是静压孔位置的影响,如果静压孔设计在机身上表面靠近旋翼的位置,下洗气流的动压干扰会非常大,我见过有些机型在起降时气压计高度输出瞬间跳变5米以上,这种硬件层面的问题光靠算法很难完全弥补,只能在滤波中增大对气压计的残差拒绝阈值。

3. 高度滤波算法的核心设计与实现

3.1 互补滤波的数学框架:从理论到代码公式

这套高度滤波器的核心可以抽象成一个带校正项的积分器。设h_acc为加速度计二次积分得到的高度预测值,h_baro为气压计高度测量值,h_gps为GPS高度测量值。滤波器的经典形式是:

h_est = α × h_acc + (1 - α) × h_baro

但这只是静态加权,实际系统里加速度计漂移是动态累积的,固定权重无法有效抑制。我采用的是带速度修正的互补滤波结构,同时估计高度和垂直速度两个状态:

v_est = v_est + a_z × dt + K_v × (h_measure - h_est)

h_est = h_est + v_est × dt + K_h × (h_measure - h_est)

其中h_measure是融合后的外部高度校正值,由气压计和GPS的动态权重组合而成,K_h和K_v是滤波增益,dt是积分步长。这个结构的关键在于,h_measure和h_est的误差被分解成位置修正项和速度修正项,分别以不同速度收敛,从而同时保证高度跟踪能力和速度估计的稳定性。

用生活化类比来理解:h_est是一个初出茅庐的导航员,h_acc是导航员凭感觉迈出的步子(快速但容易走得偏),h_baro和h_gps是路口的路标(准确但更新慢)。K_v相当于导航员每隔一段时间就对照路标修正自己的步速,K_h相当于直接修正自己当前的位置认知。两个修正系数的大小决定了导航员是更信任自己的步子还是更信任路标。

3.2 卡尔曼滤波模块:解算气压计与GPS的动态权重的关键

实际工程中,h_measure不能简单地取气压计和GPS的算术平均,因为两者的误差特性随场景动态变化。GPS在城市峡谷中可能出现大幅跳变,气压计在起降阶段会受到气流冲击。我给两者设计了在线权重分配逻辑,基于各自的置信度动态加权:

h_measure = w_baro × h_baro + w_gps × h_gps

其中w_baro和w_gps根据实时质量因子计算。GPS的置信度与卫星数、VDOP值、定位状态绑定,卫星数少于8颗或VDOP大于3.0时,w_gps就会被压低到0.2以下;气压计的置信度与最近一段时间的测量方差绑定,如果检测到连续多个采样点变化率超出阈值,说明正在受到气流干扰,w_baro会相应下调。权重之和始终保持为1,避免融合高度出现阶跃跳变。

每个滤波周期的计算流程是:先用加速度计积分预测高度和速度,再计算气压计与GPS融合的h_measure,接着计算预测值与测量值的残差,最后用残差乘上增益系数修正状态。整个流程在嵌入式平台上使用浮点运算执行,单次计算时间实测约80微秒,远低于常见飞控的IMU更新间隔。

3.3 滤波参数标定方法与初始值设置

参数K_h和K_v的整定是这套算法落地中最耗时的一环。我的方法是从物理含义出发推导初值,再用实际飞行数据迭代优化。K_h决定高度通道的带宽,设定期望的高度截止频率为f_c,则K_h ≈ 2 × π × f_c。对于常规多旋翼飞行器,高度控制带宽一般不超过1Hz,我取f_c在0.5到0.8Hz之间,对应的K_h大约在3到5之间。K_v决定速度修正的收敛速度,一般取K_h的2到4倍,初始设为K_v = 2 × sqrt(ω_n)(ω_n是期望的自然频率),具体需要根据飞行测试中高度超调量和收敛速度来微调。

初始值的设置同样重要。系统上电后,应先用气压计静置数秒的均值作为初始高度,同时将垂直速度清零。此时不应立即信任GPS高度,因为GPS接收机首次定位时垂直偏差可能达到几十米,需要等定位稳定后再平滑切入。

4. 实操过程:从仿真验证到真机调参

4.1 基于采集数据的离线仿真验证

在真机飞行前,我强烈建议先做离线仿真验证。具体做法是用飞行日志记录原始IMU、气压计、GPS数据,离线用同一套算法重新跑一遍,对比融合后的高度和实际飞行高度曲线。这一步能快速暴露算法结构和参数的问题,而且完全零风险。

我常用的仿真环境是MATLAB/Simulink,直接把记录的CSV数据导入,按照滤波算法逐行计算,将输出高度与气压计原始高度、GPS高度绘制在同一张图上对比。重点关注三个指标:一是融合高度的噪声幅度是否明显小于单传感器;二是在高度突变时(比如快速爬升)融合高度能否快速跟上;三是长时悬停时融合高度是否稳定无漂移。

一个典型的调试案例:初始参数K_h取1.0、K_v取1.5时,仿真结果显示高度响应的滞后明显,10m/s爬升工况下融合高度滞后达到1.2米,同时悬停段出现的缓慢振荡。把K_h调整到4.0、K_v调整到8.0后,滞后降低到0.3米以内,悬停振荡消除,但随之而来的是高度噪声略有增大。这就是互补滤波本身无法完全避免的平衡问题:增益越高,响应越快,但噪声敏感性也越高。最终折中方案取K_h=3.0、K_v=6.0,才同时满足响应速度与噪声抑制的需求。

4.2 真机飞行测试步骤与关键关注点

离线仿真通过后进行真机验证。飞行测试的步骤我通常按四步走:先进行系留悬停测试,验证在无大机动条件下融合高度是否稳定;接着做手动模式下的爬升下降测试,重点观察快速高度变化时的跟踪性能;然后切换到定高模式悬停,观察长时间悬停的高度保持精度;最后做GPS信号遮蔽测试(在建筑物附近飞行),验证GPS异常丢星时融合算法的鲁棒性。

在真机测试时,遥测数据的记录频率必须足够高。我建议至少200Hz的频率记录原始数据,否则无法分辨算法的快速行为与采样率不足造成的假象。同时要保留各个传感器的原始输出,方便事后回放分析是算法问题还是传感器数据本身的问题。还有一个细节:飞行测试前要确保气压计完成温度稳定,冷启动直接起飞会让气压计在最初几分钟内产生明显的温度漂移。

4.3 从方案裁剪到多传感器融合的性能边界

在算力受限的飞控主控上部署这套算法时,需要根据MCU的资源情况进行方案裁剪。最常见的降载方式是降低融合频率:IMU以400Hz更新,但滤波循环可以以100Hz运行;气压计和GPS的数据本身更新速率较低,可以通过DMA中断异步采集,不需要和IMU严格同步。另一个可裁剪点是卡尔曼滤波器维度,如果垂直速度不需要用于控制反馈,可以简化为一维位置估计,计算量能减少约40%。

这套方案在性能上的边界也值得说明。在无GPS环境下,系统完全退化为气压计和惯导的双传感器融合,高度精度取决于气压计的零漂水平,10分钟内可以保持在±1.5米的水平,但更长的时间就会出现缓慢漂移。在剧烈气流环境下,气压计受冲击时融合高度仍可能出现尖峰,这时需要依赖GPS的长期校正能力和对气压计残差的更激进的抑制策略。

5. 常见问题与排查技巧实录

5.1 地面高调试正常,起飞后高度持续漂移

这是我在实际调试中最常见的故障现象,并在地面静止测试时气压计高度输出正常,EKF融合高度也平稳,但只要一离地,高度就朝着一个方向缓慢漂移,悬停时尤其明显。

排查思路分三步:第一步先查看原始气压计高度数据,多数情况下问题出在旋翼下洗气流对静压孔的干扰,气压计高度会随着油门变化出现同步变化的趋势,这就证实了气流干扰。第二步看姿态解算输出的加速度与机体真实运动是否吻合,部分飞控的姿态解算在振动环境下会引入偏差。第三步检查加速度计是否有常值偏置在飞行中被误当成真实加速度积分,特别是温度变化导致的零偏漂移。解决办法通常是在起飞前增加一段静止校准时间,并在起飞后的前几秒内加大对外部高度测量的信任权重,让系统快速修正起飞瞬间建立的高度认知。

5.2 GPS高度在飞行中突然跳变数十米后恢复

GPS高度跳变的直接原因是接收机处于较差的多路径环境或卫星几何配置,而跳变后恢复则是因为接收机重新获得了较好的卫星锁定状态。这类问题不能简单依赖滤波来抑制,因为数十米的跳变会在滑窗均值中形成持续的偏差污染。

我的处理方法是加两级保护:第一级是物理合理性检测,融合后高度变化率超过每秒20米以上时判定为异常,直接丢弃该次GPS高度测量,将校正项切换到气压计单源。第二级是权重渐变恢复,GPS恢复正常后不立即恢复原权重,而是用10到20秒的时间窗口逐渐增加其权重。这样即使GPS偶发跳变,也不会在融合高度上产生明显的瞬态扰动。

5.3 气压计数据受阳光直射或温度变化影响诡异跳变

气压计芯片对温度极其敏感,特别是PCB布局靠近电机驱动或功率器件时,飞行中温度变化会导致气压计零位漂移,表现为高度缓慢爬升或下降。排查时先在暗处常温环境下静置测试,再在阳光下或暖风环境下测试,对比零位变化可以快速定位温度敏感性。

解决思路有几个方向:在硬件层面给气压计加海绵或密封泡棉遮光挡风,并在PCB底部开气压孔隔绝内腔温度;在软件层面加入温度补偿模块,用热敏电阻或芯片内置温度传感器建立零位-温度曲线。实测下来做好温控后,悬停状态的气压计零漂能缩小到原来的三分之一以下。还有一个容易被忽视的坑:气压计静压孔不要正对IMU或其他发热元件的散热路径,这是很多新手布局时忽略导致压差干扰的原因。

5.4 调试干货:快速定位算法问题还是传感器问题的判断矩阵

在实际调试过程中,我提炼出一套快速定位问题来源的判断矩阵,效率提升非常明显。融合高度异常但不伴随气压计和GPS数据异常时,优先怀疑算法本身参数问题;气压计和GPS同时异常而惯导数据正常时,优先怀疑外部环境干扰;惯导加速度数据异常而气压计GPS正常时,优先检查振动频谱和姿态解算结果;所有传感器数据正常但控制效果差时,问题出在控制环路的响应与滤波器的频率匹配上。

这套判断逻辑的价值在于让调试过程从盲目试错变成有方向地定位,避免在错误的方向上浪费大量时间。

6. 写在最后的实操体会

这套高度滤波算法在我的多个飞控项目上经过了长时间验证,稳定性经受住了各种复杂场景的考验。调参阶段最深的体会是:高度滤波的调参不是把参数调到最优,而是在响应速度、噪声抑制和鲁棒性之间找到适合具体机型和工作场景的平衡点,一架大轴距的农业无人机和一架小型穿越机需要的参数设置可能完全不同。

另一个重要经验是,再好的滤波算法也弥补不了传感器原始数据的缺陷。前期花时间做好气压计温控、减震、GPS天线布局,后期调试的成本能省下不止一半。算法只是把传感器数据用得更聪明,而不是把烂数据变成好数据。

如果你准备把这套方案用到自己的飞控系统里,建议先完整记录一组飞行日志,离线仿真验证算法可行性后,再上真机调参。调参时每次只修改一个参数,随时准备降落分析数据,这些老生常谈的调试习惯,真的是少走弯路的最优解。

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

更多推荐