定位系统基础:GPS/GLONASS/北斗原理、惯性导航系统(INS)简介、视觉定位(VIO)基础
做飞控这些年,我见过太多因为定位不准炸机的情况。说白了,定位就是无人机的眼睛。眼睛花了,飞机自然乱飞。这一章我们聊聊定位系统的底子。
你可能会问:为什么飞控需要这么多定位方式?其实每种都有短板。GPS怕遮挡,INS会漂移,VIO怕光线暗。把它们揉在一起,才能互补。嗯,这就是多传感器融合的核心思路。
2.1 卫星导航系统:GPS / GLONASS / 北斗
卫星导航的原理,说白了就是三边测量。卫星告诉你它的位置和发送时间,你收到信号后算出差值,就能知道距离。四颗卫星就能解出三维坐标加时间。
我刚开始做飞控时,总觉得GPS精度很高。后来在楼宇间飞了一次,定位直接跳了十几米。那次之后我才真正重视卫星几何分布的问题。
核心公式:伪距观测方程
ρ = √((x - x_s)² + (y - y_s)² + (z - z_s)²) + c·Δt + ε
其中 ρ 是伪距,c 是光速,Δt 是钟差,ε 是误差项。实际解算时至少需要4颗卫星。
三大系统的差异,我整理了一张表:
| 参数 | GPS | GLONASS | 北斗 |
|---|---|---|---|
| 轨道高度 | 20200 km | 19130 km | 21528 km |
| 卫星数量 | 31 | 24 | 30+ |
| 频段 | L1/L2/L5 | G1/G2 | B1/B2/B3 |
| 定位精度 | 2-5 m | 3-6 m | 2-5 m |
| 特色 | 成熟稳定 | 高纬度覆盖好 | 短报文通信 |
我的经验:在城市峡谷或山谷中飞行,建议同时开启GPS+GLONASS+北斗。多系统融合能增加可见卫星数,把定位精度从5米拉到2米以内。我在深圳飞过几次,三系统同时锁定20颗星以上,效果明显。
2.2 惯性导航系统(INS)简介
INS不需要外部信号。它靠加速度计和陀螺仪,自己推算位置。原理很简单:加速度积分得速度,速度积分得位移。但问题也出在这里——积分会累积误差。
我记得第一次做纯惯性导航实验,飞机悬停10秒后位置就漂了2米。当时我还以为是代码写错了,后来才发现这是INS的固有缺陷。
避坑指南:我曾经在调试中忽略陀螺仪的零偏稳定性,结果航向角以每秒0.1度的速度漂移。10分钟后,飞机转了60度。嗯,那次差点撞树。所以每次上电后一定要做静态对准,把零偏校准掉。
INS的误差来源主要有三个:
- 零偏误差:传感器静止时输出不为零,积分后变成速度斜坡
- 比例因子误差:实际加速度与测量值不成线性,高频振动时尤其明显
- 随机游走:噪声积分后形成随机漂移,时间越长越严重
INS的更新频率很高,通常200Hz以上。GPS只有10Hz。所以飞控里常用INS做高频姿态估计,用GPS做低频位置修正。这就是松耦合的基本思路。
2.3 视觉定位(VIO)基础
VIO是Visual-Inertial Odometry的缩写。它把相机和IMU绑在一起,用图像特征点做位置估计。为什么加IMU?因为单靠视觉,快速运动时图像会模糊,IMU正好补上。
VIO的核心流程:
- 提取图像特征点(比如ORB、FAST角点)
- 匹配前后帧的特征点
- 结合IMU数据,解算相机运动
- 构建局部地图,优化位姿
我调试VIO时踩过一个坑:光照变化剧烈时,特征点匹配率从80%掉到20%。后来加了自适应曝光和直方图均衡化,才稳住。你想想看,如果特征点全丢了,VIO就相当于瞎了。
VIO的两种主流方案:
- MSCKF:基于多状态约束卡尔曼滤波,计算量小,适合嵌入式
- VINS-Mono:基于滑动窗口优化,精度高,但需要更强的算力
我个人习惯在STM32F7上用MSCKF,在树莓派上用VINS-Mono。算力决定方案,别硬上。
2.4 三种定位方式的对比
我把它们放在一起对比,方便你理解各自的定位:
| 特性 | 卫星导航 | 惯性导航 | 视觉定位 |
|---|---|---|---|
| 外部依赖 | 卫星信号 | 无 | 光照、纹理 |
| 长期精度 | 高(无漂移) | 低(持续漂移) | 中(有累积误差) |
| 短期精度 | 低(更新慢) | 高(更新快) | 高(局部稳定) |
| 更新频率 | 5-20 Hz | 100-1000 Hz | 10-60 Hz |
| 典型场景 | 室外开阔 | 所有场景(短时) | 室内、低空 |
说白了,没有一种定位方式能通吃所有场景。飞控里做的融合,就是把它们的优点拼起来,缺点互相补上。
2.5 本章知识体系
下面这张图,是我梳理的定位系统知识框架。你可以看到,三种定位方式最终汇入融合引擎,输出稳定的位置和姿态。
我的建议:刚开始学定位系统,别急着调融合算法。先把每种定位方式的特性摸透。GPS的精度受什么影响?INS的漂移速率是多少?VIO在什么场景下会失效?这些基础问题搞清楚了,后面排查漂移才能有的放矢。