第二章 传感器融合基础:IMU原理、GPS/RTK定位、气压计与磁力计、传感器标定
各位同学,欢迎来到传感器融合这一章。
说实话,飞控系统里最让我头疼的,不是控制算法本身,而是怎么把一堆“各有脾气”的传感器伺候好。你想想看,IMU 告诉你飞机在转,GPS 说位置没动,气压计又喊高度变了——到底信谁?
这一章,我们就来把这些传感器的底细摸清楚。我做了十几年飞控,踩过的坑不少,今天一并倒给你们。
2.1 IMU 原理:加速度计与陀螺仪
IMU 是飞控的“内感官”。它不依赖外部信号,全靠自身感知运动。
2.1.1 加速度计
加速度计测量的是比力,不是单纯的速度变化率。说白了,它测的是“自身感受到的加速度”,包括重力。
静止时,加速度计输出的是 1g 的重力矢量。这个特性,可以用来计算俯仰角和横滚角。
我在项目中遇到过一个问题:飞机在剧烈振动时,加速度计数据全是毛刺。后来发现,是安装支架的共振频率没避开。嗯,机械设计也得懂一点。
俯仰角 θ = atan2(-ax, sqrt(ay² + az²))
横滚角 φ = atan2(ay, az)
2.1.2 陀螺仪
陀螺仪测量角速度。积分后得到角度。但积分有个致命问题——漂移。
我曾经做过一个实验:把陀螺仪放在桌上不动,10 分钟后积分出来的角度已经偏了 30 度。这就是零偏误差在作祟。
2.2 GPS/RTK 定位:从米级到厘米级
GPS 是飞控的“外感官”。普通 GPS 精度在 2-5 米,对于 eVTOL 来说,这远远不够。你想想看,降落平台可能只有 3 米宽,误差 5 米就直接砸到旁边了。
2.2.1 标准 GPS 定位
原理很简单:卫星发射信号,接收机计算传播时间,乘以光速得到距离。至少 4 颗卫星才能解算出三维位置和时间。
但误差源很多:电离层延迟、对流层延迟、多路径效应、卫星钟差……
2.2.2 RTK 定位
RTK 是差分定位的一种。它用一个已知位置的基准站,计算出误差修正值,发给移动站。
我建议你在 eVTOL 项目中,至少用 RTK 作为主定位源。普通 GPS 只能用来做粗略导航。
2.3 气压计与磁力计
这两个传感器,一个管高度,一个管方向。看似简单,坑却不少。
2.3.1 气压计
气压计通过测量大气压力推算高度。每升高 8.5 米,气压下降约 1 hPa。
但气压计对气流非常敏感。我记得有一次在室内测试,空调一开,高度数据直接跳了 2 米。
2.3.2 磁力计
磁力计测量地磁场方向,用来计算航向。但它太容易被干扰了——电机电流、铁磁材料、甚至地下的钢筋都能让它“发疯”。
我做过一个测试:把磁力计装在电机旁边 5 厘米处,航向误差直接偏了 40 度。
- 远离电机和电源线(至少 10 厘米)
- 使用外部磁力计,不要集成在飞控板上
- 每次上电后做“8 字校准”
2.4 传感器标定:让数据说真话
传感器出厂时都有误差。标定,就是把这些误差找出来并补偿掉。
2.4.1 加速度计标定
六面法:把传感器分别朝上、朝下、朝左、朝右、朝前、朝后,记录六个面的数据。然后拟合出零偏和比例因子。
// 加速度计标定示例代码
// 假设六个面采集的数据
float acc_calib[6][3] = {
{0.02, 0.01, 9.81}, // Z轴向上
{0.01, 0.02, -9.79}, // Z轴向下
{9.80, 0.01, 0.02}, // X轴向上
{-9.78, 0.02, 0.01}, // X轴向下
{0.01, 9.79, 0.02}, // Y轴向上
{0.02, -9.77, 0.01} // Y轴向下
};
// 计算零偏和比例因子
float bias_x = (acc_calib[2][0] + acc_calib[3][0]) / 2.0f;
float scale_x = (acc_calib[2][0] - acc_calib[3][0]) / (2.0f * 9.81f);
2.4.2 陀螺仪标定
陀螺仪标定相对简单:静止采集 1000 个样本,取平均值作为零偏。
2.4.3 磁力计标定
磁力计标定最麻烦。需要让传感器在三维空间内旋转,采集足够多的点,然后拟合椭球到球体的变换参数。
2.5 传感器融合框架
好了,现在每个传感器都标定好了。但怎么把它们融合在一起?
我个人最常用的是扩展卡尔曼滤波(EKF)。它把 IMU 作为预测模型,GPS、气压计、磁力计作为观测更新。
这张图展示了传感器融合的核心逻辑。IMU 以 100-400 Hz 的高频率提供预测,GPS、气压计、磁力计以较低频率修正累积误差。
- IMU 提供短时间高精度,但会漂移
- GPS/气压计/磁力计提供绝对参考,但更新慢
- EKF 把两者结合,取长补短
嗯,这一章的内容就到这里。传感器融合是飞控的基石,基础打牢了,后面的控制算法才能发挥威力。
公众号:蓝海资料掘金营,微信deep3321