LuatOS 课程-010 讲:GNSS 理论知识
Hello,大家好,我是黄何。欢迎大家来到合宙 LuatOS 直播课堂,本期给大家带来的是 GNSS 相关模组的使用教程。
第一部分:课程背景与内容概览
今天是我们 LuatOS 系列课程的第 010 讲,同时也是 GNSS(全球导航卫星系统)专题课程的第一讲。
本次课程将带大家了解一些 GNSS 的底层原理,并掌握其应用开发方法。如果您还不清楚 LuatOS 课程背景,可以访问:LuatOS 课程背景 这个链接,进行了解;
本课程主要包含以下两个部分:
-
GNSS 基础知识
-
GNSS 定位原理
- 四大 GNSS 星系
- gnss 频段信息详解
- 室内定位限制
- 接收机和解算机科普
- 冷热启动科普
- NMEA 数据详解
-
GNSS 进阶知识
-
辅助定位技术(AGPS)
- 影响定位精度的因素(静态和动态)
- 合宙的 GNSS 测试软件
- RTK 差分定位
- 一般 GNSS 测试方案
- 轨迹优化和滤波算法
第二部分:GNSS 基础知识
2.1 GNSS 定位原理
GNSS 是利用人造卫星作为导航台,基于三角测量法,为全球用户提供三维坐标、速度和时间信息的空基无线电导航系统的技术
首先,由于地面需要的定位应用比较多,如果 GNSS 卫星一个个告诉地面应用"你在哪",那资源消耗非常多,且延时很大,GNSS 卫星承载能力有限,所以一般来说,GNSS 卫星都会以广播的形式,告诉地面应用"我在哪",由接收机通过下面的计算公式,自己解算出一个经纬度和时间

理论上的最简计算公式:
将地球近似的看成一个圆,以地球圆心为原点,建立空间直角坐标系,假设我们所在的的位置为(x,y,z),头顶参与计算的三颗卫星的坐标分别为(x1,y1,z1)、(x2,y2,z2)、(x3,y3,z3),在咱们学的高中知识中,在已知球心的情况下,可以通过已知的三个点到第四个点的距离,确定第四个未知点的坐标
(1) (x - x₁)² + (y - y₁)² + (z - z₁)² = r₁²
(2) (x - x₂)² + (y - y₂)² + (z - z₂)² = r₂²
(3) (x - x₃)² + (y - y₃)² + (z - z₃)² = r₃²
其中 r1 r2 r3 为这三个点到原点的距离,是一个固定值(GNSS 每一颗卫星的轨道高度是确定的)
但是由于 GNSS 接收机使用的时钟有误差,所以,还需要增加一个时间变量 δt,方程就变成了如下(c 为光速),c*δt 为时钟误差造成的距离误差。ρᵢ 为测量的得到的伪距,因为添加了一个时间变量,所以需要至少四个方程才能得到坐标,因为需要四个方程,所以至少需要四个点,才能确定坐标
(1) ρ₁ = √[(x - x₁)² + (y - y₁)² + (z - z₁)²] + c * δt
(2) ρ₂ = √[(x - x₂)² + (y - y₂)² + (z - z₂)²] + c * δt
(3) ρ₃ = √[(x - x₃)² + (y - y₃)² + (z - z₃)²] + c * δt
(4) ρ₄ = √[(x - x₄)² + (y - y₄)² + (z - z₄)²] + c * δt
而由于实际环境下,地球不是标准圆形,所以参与定位的卫星越多越好,上面的公式只是一个近似的理论公式,实际上解算的公式比上面的复杂的多,根据经验来看,至少需要参与运算的 GNSS 卫星有 8 颗的时候,才能定位成功。
2.2 室内定位限制
室内收不到 GNSS 信号,有多种原因,核心原因是 “卫星信号极其微弱,且无法穿透大部分建筑结构”。下面为大家详细讲解下这两种最根本的原因。
2.2.1 根本原因
根本原因一:信号本身“先天不足”
GNSS 信号从两万多公里高的卫星发射到地面,已经非常微弱。
- 信号强度对比:
- 结论:GNSS 信号是地球上最难被检测到的民用无线电信号之一,接收机犹如在电子噪声的海洋里打捞一根特定的绣花针。
根本原因二:建筑结构的“致命阻隔”

当微弱的信号遇到建筑时,会经历三种效应:
- 衰减:混凝土墙、金属龙骨、甚至厚玻璃都会吸收信号能量。穿透一堵承重墙,信号可能衰减 20-30dB,足以将本已微弱的信号埋没在噪声之下。
- 遮挡:建筑的屋顶和密集的楼板完全阻挡了直射信号。没有直射路径,接收机无法进行有效测量。
- 反射(多路径) :即使有信号通过窗户等缝隙进入室内,也大多是经过墙壁、家具多次反射的“间接信号”。这些信号路径更长、时间延迟混乱,会导致严重的定位错误(将你定位到墙外或镜像位置),比没信号更糟糕。
2.2.2 解决方法
因为 GNSS 在室内失效,催生了多种室内定位技术,它们原理不同,适用于不同场景:
2.3 接收机和解算机
在 GNSS 模组/芯片内部,实际上分了两个大块,一个叫接收机,还有一个叫解算机(一般解算机为一颗 M0 内核的 MCU)。
- 接收机是 “耳朵和话筒” ,负责接收卫星信号并进行基本测量。
- 解算机是 “大脑” ,负责处理这些测量值,计算出最终的位置、速度和时间。
接收机:信号的捕捉与翻译者
它位于处理链的最前端,核心任务是 “从模拟信号到数字数据”。
- 硬件核心:天线、射频前端芯片、基带处理芯片。
-
核心功能:
-
信号捕获与跟踪:在浩瀚的无线电噪声海洋中,找到并锁定每一颗 GNSS 卫星的微弱信号。
- 测量观测值:精确测量伪距(信号从卫星到接收机的传播时间)和载波相位(更高精度的相位测量)。
- 解调电文:从信号中解调出导航电文,获得卫星的轨道参数(星历)、健康状况、时间等信息。
- 输出:原始观测数据流,主要包括:
伪距、载波相位、多普勒频移、解调出的导航电文。它不知道自己在哪,只负责提供精确的“测量尺子”和“卫星手册”。
解算机:定位的解谜者
它位于处理链的后端,核心任务是 “利用数据计算出结果”。
- 软件核心:导航解算算法(如最小二乘法、卡尔曼滤波)、误差修正模型、数据融合算法。
-
核心功能:
-
卫星位置计算:利用接收机提供的星历,计算每一颗卫星在发射信号时的精确空间位置。
- 误差建模与修正:对电离层延迟、对流层延迟、卫星钟差、相对论效应等进行建模和修正。
- 导航解算:将修正后的伪距作为“观测值”,将卫星位置作为“已知点”,通过几何数学方法(解一个空间方程组)计算出接收机自身的位置、速度和时间。
- 优化与融合:融合多系统(GPS/北斗/Galileo)数据,并可能结合惯性传感器(IMU)数据进行组合导航,提供更连续、可靠的解算结果。
- 输出:最终的定位结果,即经纬度、海拔、速度、精确 UTC 时间(PVT)。它知道“我们在哪”。
2.4 GNSS 星系
和 GPS 的不同点在于,狭义上讲,只有美国的卫星导航系统,才叫做 GPS,中国的卫星导航系统叫北斗,还有俄罗斯的格洛纳斯,欧盟的伽利略,包括日本和印度也有自己的卫星导航系统,这些卫星导航系统,统称为 GNSS。
2.5 GNSS 星系说明
| **星系名称** | **归属国家** | **卫星个数** | **轨道高度(KM)** |
| **GPS** | 美国 | 26+4 | 20200 |
| **格洛纳斯** | 俄罗斯 | 27+3 | 19100 |
| **伽利略** | 欧盟 | 30(2025年12月17日最后一颗卫星上天) | 23222 |
| **北斗** | 中国 | 60(截止至24年9月) | 21300-21500/35786 |
2.6 GNSS 频段信息详解

2.7 冷热启动
“冷启动”和“热启动”是描述 GNSS 接收机初始定位速度和条件的两个核心概念,它们的区别就像电脑的“开机”与“唤醒”,夹在冷启动和热启动之间的 还有个温启动。
2.7.1 核心区别速览
2.7.2 冷启动详解
- 官方定义:接收机无任何有效的先验信息(或信息完全过期)。
-
“三不知”状态:
-
不知道自己在哪:没有大概位置,可能在地球上任何一点。
- 不知道现在几点:时间误差可能超过数小时。
- 不知道卫星在哪:没有有效的星历(卫星的精确轨道参数),或者星历已过期(通常 >4 小时)。
-
艰难的任务:接收机必须进行“全天空盲搜”。它需要:
-
在所有可能的射频通道上,尝试搜索所有可能的 GNSS 卫星信号。
- 从捕获到的第一颗卫星信号中,先解码出时间信息和粗略的历书(卫星的大概位置)。
- 利用这些信息,缩小范围去捕获其他卫星,并下载每颗卫星详细的星历(需 30 秒传输)。
- 集齐至少 4 颗卫星的星历和测量值后,才能解算第一个位置。
- 典型场景:你买了一个新导航设备,第一次在车里打开它;或者手机在飞行模式下跨洲飞行后开机。
2.7.3 热启动详解
- 官方定义:接收机保存了有效的先验信息,且时间、位置变化较小。
-
“三知”状态:
-
知道自己在哪:保存的位置与真实位置误差通常小于 5 公里。
- 知道现在几点:本地时钟误差小于 2 秒(通常由 RTC 实时时钟保持)。
- 知道卫星在哪:保存了有效的星历(通常 >1 小时)。
-
高效的任务:接收机可以“精准打击”。它直接:
-
根据已知的位置、时间和星历,精确计算出当前天空哪些卫星可见,以及它们的多普勒频移和伪随机码相位。
- 无需搜索,直接在这些精确的通道上同步捕获卫星信号。
- 快速测量伪距,几乎立即(秒级)解算出新位置。
- 典型场景:开车进隧道,信号中断几分钟后出来;或功耗要求较高且不需要一直定位的应用(宠物/人员定位器)。
2.7.4 温启动详解
- 官方定义:接收机保存了较为有效的先验信息,且时间、位置变化不大。
温启动的“三知一不知”状态:
- 知大概位置:上次定位的位置,误差一般在 5 公里内。
- 知大概时间:本地实时时钟(RTC)保持的时间,误差在数分钟内。
- 知卫星概位:有有效的历书,知道所有卫星的大致轨道和健康状况。
- 不知卫星精位:没有有效的星历(通常 > 2 小时)。星历是卫星的“精确到分钟的课表”,用于精确计算位置。
2.7.5 重要应用
-
省电设计关键:物联网设备(如共享单车、资产追踪器)的节电核心,就是尽可能让每次定位都处于热启动状态。这需要:
-
精确实时时钟:保持精确时间。
- 保存星历:定位成功后不立即断电,等待星历保存完成。
- 辅助 GNSS:通过网络快速获取星历,变冷启动为“热启动”。
- 用户体验:手机导航 App 启动快,正是因为它常年后台运行 GNSS 芯片,或频繁使用网络辅助,使其永远处于热启动就绪状态。
简单总结:冷启动是“从零开始找”,热启动是“按图索骥”。理解这两种状态,是设计任何低功耗、高可用 GNSS 应用的基础。
2.8 NMEA 数据详解
NMEA-0183 协议是 GNSS 接收机与外部设备(如电脑、显示器)通信的“通用语言”。它由一系列以“$”开头、以换行结束的 ASCII 字符串构成,每条语句承载一类特定信息。

2.8.1 GGA - 全球定位系统固定数据
这是最重要、最核心的语句,包含了时间、位置、质量等最关键的定位信息。
- 示例:
$GPGGA,085823.000,3308.0992788,N,10659.0587414,E,1,30,0.600,521.809,M,-31.322,M,,*65 -
字段详解:
-
$GPGGA:语句头(GPS 系统)。 085823.000:UTC 时间(08:58:23.000)。3308.0992788:纬度(33 度 08.0992788 分)。N:纬度半球(N 北/S 南)。10659.0587414:经度(106 度 59.0587414 分)。E:经度半球(E 东/W 西)。1:定位状态(0=无效,1=单点定位,2=差分定位,6=估测)。30:使用的卫星数量。0.600:HDOP(水平精度因子),值越小精度越高。521.809,M:海拔高度(521.809 米)。-31.322,M:大地水准面起伏(-31.322 米)。空:差分龄期(未使用 DGPS 时为空)。空:差分基站 ID。*65:校验和。
2.8.2 RMC - 推荐最小定位信息
包含了位置、速度、日期和磁偏角等最精简的导航数据,很多系统将其作为最小数据集。
- 示例:
$GNRMC,085822.000,A,3308.0992839,N,10659.0587432,E,0.004,0.000,311025,,,A,S*06 -
字段详解:
-
$GNRMC:语句头(多系统融合)。 085822.000:UTC 时间。A:状态(A=有效,V=无效)。3308.0992839,N:纬度/半球。10659.0587432,E:经度/半球。0.004:对地速度(节)。0.000:航向(度,真北)。311025:UTC 日期(25 年 10 月 31 日 -> 2025-10-31)。- 空:磁偏角。
- 空:磁偏角方向。
A:模式指示(A=自主,D=差分,E=估测,N=无效)。注意:末尾可能有一个额外的模式指示器,如S(模拟器模式)。
2.8.3 GSA - 卫星精度衰减因子与参与解算卫星
这条语句解释了定位“质量”和“精度”的由来。
- 示例:
$GNGSA,A,3,06,19,195,17,14,,,,,,,,14.32,4.01,13.75,1*31 -
字段详解:
-
$GNGSA:语句头。 A:模式(M=手动,A=自动)。3:定位类型(1=无,2=2D,3=3D)。06,19,195,17,14:参与解算的卫星 PRN 号(最多 12 颗,此处用了 5 颗 GPS 卫星)。14.32:PDOP(三维位置精度因子)。4.01:HDOP(水平精度因子)。13.75:VDOP(垂直精度因子)。1*31:系统标识(1=GPS)和校验和。注意:$GNGSA会针对每个 GNSS 系统(GPS、北斗等)分别输出一条,最后可能还有一条“融合”的语句。
2.8.4 GSV - 可见卫星信息
这条语句描绘了当前“天空视图”,告诉你所有能看到的卫星及其信号质量。
- 示例:
$GPGSV,3,1,10,9,43,299,45,8,48,187,41,27,68,128,45,7,13,304,30,1*55 -
字段详解:
-
$GPGSV:语句头(GPS 系统)。 3:总 GSV 语句数(这条信息需要 3 条 GSV 才传完)。1:当前语句序号(第 1 条/共 3 条)。10:当前可见卫星总数。9,43,299,45:第一颗卫星信息:PRN 号=09,仰角=43 度,方位角=299 度,信噪比=45 dB-Hz。- 后续同理,每颗卫星占 4 个字段。一条 GSV 最多描述 4 颗卫星。
1*55:系统标识和校验和。注意:$GPGSV(GPS)、$BDGSV(北斗)、$GLGSV(GLONASS)、$GAGSV(伽利略)等语句会分别输出。
2.8.5 ZDA - 时间和日期
提供最完整的时间信息,常用于系统精确授时。
- 示例:
$GNZDA,124108.000,24,12,2025,00,00*46 -
字段详解:
-
$GNZDA:语句头。 124108.000:UTC 时间。24:UTC 日。12:UTC 月。2025:UTC 年。00:本地时区小时偏移(可选)。00:本地时区分钟偏移(可选)。
2.8.6 VTG - 地面速度信息
提供由对地速度和航向角计算出的真实运动信息。
- 示例:
$GNVTG,0.000,T,,M,0.004,N,0.008,K,A*2B -
字段详解:
-
$GNVTG:语句头。 0.000,T:真北航向角(度)。空,M:磁北航向角(度)。0.004,N:对地速度(节)。0.008,K:对地速度(公里/小时)。A:模式指示(同 RMC)。
2.8.7 关键总结与解析技巧
-
语句头前缀:
-
$GP:仅 GPS $GN:多系统融合(最常见于现代设备)$BD:仅北斗$GL:仅 GLONASS$GA:仅伽利略-
信息获取策略:
-
取位置/时间:主要看
$xxGGA和$xxRMC。 - 评定位质量:主要看
$xxGGA中的定位状态、卫星数、HDOP,并结合$xxGSA中的PDOP/HDOP/VDOP。 - 看卫星视图:主要看
$xxGSV中的卫星数、信噪比。 - 查运动状态:看
$xxVTG中的速度和航向,或$xxRMC。 -
解析注意事项:
-
空字段:连续逗号(
,,)表示该字段为空,解析时需做容错处理。 - 校验和:
*后的两位十六进制数,用于验证数据传输是否出错。 - 多系统语句:现代接收机会为每个系统输出独立的
$xxGSA和$xxGSV,并有一条融合的$GNGGA/GNRMC。
理解这些语句,就掌握了与 GNSS 设备沟通的密码。在实际编程解析时,应先根据语句头判断类型,再按字段顺序拆分处理,尤其要注意数值单位(度分、节、米等)的转换。
2.8.8 实际 NMEA 预计分析
这里时间原因大概过一下
$GNRMC,085822.000,A,3308.0992839,N,10659.0587432,E,0.004,0.000,311025,,,A,S*06
$GNGGA,085823.000,3308.0992788,N,10659.0587414,E,1,30,0.600,521.809,M,-31.322,M,,*65
$GNGLL,3308.0992788,N,10659.0587414,E,085823.000,A,A*4E
$GNGSA,A,3,9,4,16,8,27,26,7,,,,,,1.075,0.600,0.892,1*33
$GNGSA,A,3,7,2,3,,,,,,,,,,1.075,0.600,0.892,5*05
$GNGSA,A,3,16,40,6,39,34,24,7,10,25,33,41,9,1.075,0.600,0.892,4*01
$GNGSA,A,3,3,42,60,2,,,,,,,,,1.075,0.600,0.892,4*33
$GNGSA,A,3,29,23,19,4,,,,,,,,,1.075,0.600,0.892,3*03
$GNGST,085823.000,,,,,0.820,1.062,2.916*7E
$GPGSV,3,1,10,9,43,299,45,8,48,187,41,27,68,128,45,7,13,304,30,1*55
$GPGSV,3,2,10,56,,,44,4,65,231,44,16,57,27,39,26,26,57,27,1*6D
$GPGSV,3,3,10,57,,,42,43,,,30,1*65
$GQGSV,1,1,3,3,15,131,14,7,45,146,38,2,61,72,39,1*63
$GPGSV,2,1,5,9,43,299,47,8,48,187,49,27,68,128,47,4,65,231,47,8*64
$GPGSV,2,2,5,26,26,57,23,8*5B
$GQGSV,1,1,2,7,45,146,46,2,61,72,41,8*6C
$GBGSV,6,1,21,25,32,293,40,33,37,243,47,24,61,20,41,14,29,212,34,1*44
$GBGSV,6,2,21,41,24,300,40,16,67,46,41,42,14,189,36,40,58,165,45,1*48
$GBGSV,6,3,21,56,,,43,6,70,30,40,9,64,343,39,60,40,221,44,1*74
$GBGSV,6,4,21,34,24,165,43,7,55,187,40,10,45,197,39,2,44,217,38,1*76
$GBGSV,6,5,21,3,50,173,41,39,63,70,40,35,,,16,5,,,34,1*4F
$GBGSV,6,6,21,12,,,30,1*75
$GBGSV,3,1,9,25,32,293,41,33,37,243,43,24,61,20,42,41,24,300,38,5*7A
$GBGSV,3,2,9,42,14,189,40,40,58,165,45,34,24,165,42,39,63,70,42,5*7C
$GBGSV,3,3,9,35,,,17,5*4B
$GAGSV,1,1,4,29,29,159,42,4,36,312,41,19,70,210,38,23,51,265,42,7*7D
$GAGSV,1,1,4,29,29,159,44,4,36,312,44,19,70,210,41,23,51,265,44,1*70
这是一组高质量的多系统 GNSS 定位数据,来自 GPS、北斗(BDS)、伽利略(GAL)和格洛纳斯(GLONASS) 的联合解算。数据显示设备处于高精度、高可靠的定位状态。
2.8.8.1 核心定位结果(非常优秀)
数据来自 $GNRMC 和 $GNGGA 语句:
- 定位状态:有效且精度很高(
$GNGGA中的1表示单点定位,$GNRMC中的A表示数据有效)。 - 时间:UTC 时间 08:58:23(2025 年 10 月 31 日,由
$GNRMC中的311025可推算)。 - 位置:纬度 33°08.0992788‘ N,经度 106°59.0587414’ E。不同语句间位置高度一致(如
$GNRMC与$GNGGA的经纬度仅在小数点后第 6 位有微小差异),说明数据稳定。 - 海拔高度:521.809 米(大地高)。
- 对地速度:0.004 节(约 0.0074 公里/小时),表明设备几乎完全静止。
2.8.82 卫星视图与定位质量(关键优势)
$GNGSA 和 $xxGSV 语句揭示了高精度的原因:
-
参与解算的卫星系统与数量:
-
GPS:使用了 6 颗 卫星(PRN: 09, 04, 16, 08, 27, 26)。
- 北斗:使用了 7 颗 卫星(PRN: 16, 40, 06, 39, 34, 24, 07, 10, 25, 33, 41, 09)。注意,北斗的
$GNGSA语句中列出了 12 颗卫星,表明可用卫星极多。 - 伽利略:使用了 4 颗 卫星(PRN: 29, 23, 19, 04)。
- 格洛纳斯:使用了 3 颗 卫星(PRN: 03, 42, 60, 02)。
- QZSS(日本准天顶):可能辅助了 2 颗 卫星(PRN: 03, 07, 02)。QZSS 常作为 GPS 的增强系统。
- 总计:四个系统联合解算,共使用约 20 颗以上卫星(部分卫星可能被多个系统共用),这是实现高精度的基础。
-
精度因子(DOP)—— 表现极佳:
-
PDOP(位置精度因子):1.075(
$GNGSA语句中给出)。 - HDOP(水平精度因子):0.600(
$GNGGA和$GNGSA中一致)。 - VDOP(垂直精度因子):0.892。
- 解读:所有 DOP 值均远小于 1.5,属于 “极佳” 范围。这表明卫星在天空中的几何分布非常理想,定位的潜在几何误差被降到最低。通常,HDOP < 1.0 意味着水平定位精度可能达到亚米级甚至更高。
- 可见卫星总数:从各系统的
$xxGSV语句统计,总共可见卫星数量非常多(GPS 约 10 颗,北斗约 21 颗,伽利略 4 颗等),提供了极大的冗余度和选择空间。
2.8.8.4 质量与误差统计
- 定位模式:
$GNGSA中的模式为A(自动)和3(3D 定位),表明接收机自动选择了最佳的 3 维定位模式。 - 误差估计:
$GNGST语句给出了接收机内部的误差估算:水平定位误差的 RMS(均方根)约为 0.820 米,半长轴误差(保守估计)约为 2.916 米。这印证了亚米级到米级的定位精度。
第三部分 GNSS 进阶知识
3.1 辅助定位技术(AGPS)
辅助 GNSS(A-GNSS)是一种通过移动网络向 GNSS 接收机提供辅助数据,从而将“冷启动”变为“瞬时热启动”的技术。它解决了传统 GNSS 首次定位慢的痛点。

简单来说:没有 A-GNSS,你的手机需要像“在图书馆里盲目找书”一样,花 30 秒以上从卫星那里下载星历。有 A-GNSS,移动网络会直接把“图书目录和精确位置”发给你,让你秒级定位。
3.1.1 传统 GNSS vs A-GNSS 核心区别
3.1.2 A-GNSS 工作原理:四步实现秒定
A-GNSS 的工作流程可以清晰地分为四个阶段,下图展示了这一完整过程:

- 请求辅助:当手机需要定位时,它通过移动网络(2G/3G/4G/5G)或 Wi-Fi,将当前连接的基站小区 ID(或者当前设备通过其他定位方式[例如 wifi/基站定位]获取到的不是很准确的经纬度值)发送给 A-GNSS 服务器。
-
服务器响应:服务器根据提供的位置,知道你的大概位置(误差几公里)。它立刻从自己的数据库中,生成并下发一个包含以下信息的辅助数据包:
-
星历/历书:当前区域上空所有卫星的精确轨道参数。
- 精确时间:网络同步的 UTC 时间。
- 初始位置与时间估算:基于基站位置的粗略坐标。
- 设备快速捕获:手机 GNSS 芯片收到这些数据后,瞬间从“三不知”变成“三知”。它精确知道该搜索哪几颗卫星、频率是多少、码相位大概在哪,直接进行“热启动”捕获。
- 定位解算:芯片只需完成伪距测量,结合已知的卫星位置,即可在几秒内解算出第一个精确位置。
3.1.3 A-GNSS 辅助数据的类型
3.1.4 A-GNSS 在手机上的实际应用
你体验到的“秒定”地图,通常是以下技术的组合拳:
- A-GNSS:负责快速获得第一个位置(TTFF)。
- Wi-Fi/蓝牙定位:当卫星信号弱时(室内),扫描附近的 Wi-Fi 热点和蓝牙信标,通过数据库匹配位置。
- 蜂窝网络定位:利用基站三角测量,提供粗略位置(百米级)。
- 传感器融合:结合加速度计、陀螺仪,在信号中断时进行航位推算。
一个典型场景:你在室内打开地图 App,它会先通过 Wi-Fi/蜂窝网络给你一个粗略位置,同时通过 A-GNSS 在后台准备好卫星数据。当你走到窗边或户外时,GNSS 芯片瞬间就能完成精确定位,实现无缝切换。
3.1.5 优势与局限
优势:
- 速度极快:首次定位从分钟级降至秒级。
- 功耗大降:搜索时间短,显著延长设备续航。
- 灵敏度提升:在信号弱至-160 dBm 的环境下(如城市峡谷、树下)仍可能定位。
- 用户体验无缝:实现了室内到室外的平滑定位过渡。
局限/依赖:
- 必须联网:无网络时,A-GNSS 无法工作,回退到传统慢速模式。
- 数据流量:每次辅助需传输几 KB 数据,但可忽略不计。
- 服务器依赖:需要运营商或谷歌/苹果等提供稳定可靠的 A-GNSS 服务。
总结:A-GNSS 是一项关键的增强技术,它没有改变 GNSS 定位的基本原理,而是通过改变数据获取的路径(从慢速的卫星链路改为高速的网络链路),从根本上解决了启动速度和弱信号性能的瓶颈。它是现代智能手机和物联网设备实现即时定位、低功耗追踪的基石技术。
3.2 影响定位精度的因素(静态和动态)
影响 GNSS 定位精度的因素复杂多样,且静态与动态场景下的主要矛盾不同。下图从“信号传播”、“卫星与系统”、“接收机与环境”三个层面,系统梳理了所有核心误差源及其影响机制:

3.2.1 静态定位精度影响因素(焦点:坐标的稳定性)
静态时,所有误差都转化为位置的波动(漂移)。
静态场景核心矛盾:多路径和大气延迟是漂移的主因,目标是 “稳定” 。
静态漂移在嵌入式设备上的解决方法:
- 和 GNSS 给出的速度值做匹配,速度值低于某个值时,判定为静止,只上传最后一次速度大于对应值时的经纬度(一般经验值为 0.2m/s)
- 增加三轴传感器进行算法校验,如果连续 10 秒内有效运动次数低于 5 次,判定为静止(合宙的 780EGG/Air8000A 等自带三轴传感器的模块均有对应 demo)
- 部分 GNSS 模块有指令进行静态抑制,如 510W 和 530W($CFGDYN,1,20),最后面的 20 单位为 cm/s,即 0.2m/s,意思为 0.2m/s 以下的运动 判断为静止,输出静止前的经纬度,这个 20 由用户根据自己实际应用场景进行修改,最大 100,即 1m/s(一般来说,行人慢走的速度约为 0.3m/s,宠物移动速度约为 0.5m/s,而车辆在绿灯正常起步时速度约为 0-4.2m/s,车辆拥堵场景下跟车/停车场寻位场景下速度约 0-2.8m/s,所以建议用户可以先设置个 20,然后根据实际测试结果进行微调)
3.2.2 动态定位精度影响因素(焦点:轨迹的保真度)
动态时,误差与真实运动耦合,表现更复杂。
动态场景核心矛盾:信号遮挡与多路径的瞬时剧变是轨迹失真的主因,目标是 “连续、可靠、贴合实际路径” 。
动态漂移一般是由服务器端进行一些算法进行解决,这个在最后 3.6 讲的时候会讲到。
3.2.3 静态与动态的核心差异总结
3.2.4 通用提升精度的技术手段
- 差分定位:通过基准站消除公共误差,是提升静态与动态精度最有效的方法(RTK 可达厘米级)。
- 多系统融合:使用 GPS、北斗、GLONASS、Galileo,增加卫星数,改善 DOP,提升抗遮挡能力和整体精度。
- 多频接收机:利用双频/三频信号消除电离层延迟(主要误差),大幅提升静态稳定性和动态可靠性。
- 传感器融合:结合惯性测量单元,在 GNSS 信号中断时提供连续导航,并平滑 GNSS 轨迹,是动态应用的黄金标准。
- 精密数据处理:使用精密星历、钟差产品进行后处理,可将静态精度提升至毫米级。
简单来说:静态时要解决“点不准”的问题,重在消除系统误差;动态时要解决“线不直、线会断”的问题,重在克服瞬时干扰和信号中断。两者都怕多路径,但动态环境下的多路径要“凶狠”得多。
3.3 合宙的 GNSS 测试工具及其使用方法
https://docs.openluat.com/air8000/luatos/app/gnss/gnss_test/
3.4 RTK 差分定位
RTK(实时动态差分定位)是一种通过基准站进行实时误差校正,实现厘米级精度的 GNSS 定位技术。它是对我们之前讨论的所有定位误差(大气延迟、星历误差、钟差等)的“终极解决方案”。

简单来说:普通单点定位像是独自在雨中估测距离,误差很大;RTK 则像有一个在已知点的伙伴实时告诉你:“现在的雨会让测距偏长 2 厘米!风会让它偏短 1 厘米!”,让你立刻修正,得到精确结果。
3.4.1 RTK vs 传统单点定位:核心区别
3.4.2 RTK 工作原理:三步实现厘米级
RTK 系统需要至少两台接收机协同工作,其核心流程如下图所示:

-
基准站观测:
-
在已知精确坐标的控制点上架设接收机。
- 它实时观测所有卫星,计算出包含各种误差的“测量坐标”。
- 将 “测量坐标” - “已知真值坐标” = “综合误差修正量”。
-
误差数据播发:
-
基准站通过无线电电台(UHF/VHF)、蜂窝网络(Ntrip) 或网络 RTK(CORS),将误差修正数据实时发送给流动站。
-
流动站实时解算:
-
流动站接收卫星信号同时接收基准站的修正数据。
- 从自己的观测值中扣除相同的误差,利用载波相位观测值进行高精度解算。
- 最关键的一步:解算整周模糊度(即卫星与接收机之间相位测量的整周数),一旦固定,即获得厘米级定位。
3.4.3 RTK 的关键技术:整周模糊度固定
这是 RTK 技术的核心,也是实现厘米级精度的前提。
- 载波相位:GNSS 接收机可以测量卫星载波信号(波长约 19cm)的相位,精度可达毫米级,但存在一个未知的整周模糊度。
- “固定解”:通过算法快速、正确地解算出这个整周数。固定后,定位结果将从“浮动”的分米级跳变到“固定”的厘米级。
-
“固定” vs “浮动”:
-
固定解:整周模糊度确定,厘米级精度。
- 浮动解:整周模糊度未确定,分米级精度。
3.4.4 RTK 的三种主流工作模式
3.4.5 RTK 的主要应用领域
- 测绘与工程:地形图测绘、施工放样、矿山测量。(核心应用)
- 精准农业:农机自动驾驶、变量施肥播种。(大规模应用)
- 无人机:高精度航线规划、倾斜摄影三维建模。
- 形变监测:桥梁、大坝、滑坡体的毫米级位移监测。
- 自动驾驶:为车辆提供车道级定位。
3.4.6 RTK 的局限与挑战
- 依赖数据链:无线电遮挡或网络中断,流动站将无法获得修正数据。
- 有效距离限制:误差的空间相关性随距离减弱,通常建议在 20 公里内使用。
- 初始化与失锁重捕:在遮挡环境下(如树下、楼间),整周模糊度可能失锁,需要时间重新“固定”,影响连续作业。
- 多路径效应:RTK 无法消除多路径误差,因为它在基准站和流动站的表现不同。
- 成本高昂:专业级 RTK 设备价格通常是普通 GNSS 接收机的 10 倍以上。
3.4.7 发展趋势:更强大的 RTK
- 多系统融合:支持 GPS+ 北斗 +Galileo+GLONASS,增加冗余,提升在城市峡谷等恶劣环境下的固定速度和可靠性。
- 惯导融合:结合惯性测量单元,在 GNSS 信号短时中断时(过隧道)提供连续定位,并辅助模糊度快速重固定。
- PPP-RTK:结合精密单点定位与区域增强,旨在用更稀疏的基准站网络实现广域厘米级实时定位,是未来发展方向。
总结:RTK 通过基准站差分和载波相位模糊度固定,将 GNSS 定位从米级提升至厘米级。它是当前实现实时、高精度定位最成熟、最广泛的技术,但其性能受距离、数据链和环境的制约。理解 RTK,就理解了高精度 GNSS 应用的基石。
3.5 一般 GNSS 测试方案
GNSS 性能测试是一个系统工程,旨在全面评估接收机在不同场景下的定位能力、稳定性和可靠性。测试通常分为 “基本性能”、 “环境适应性” 和 “功能与可靠性” 三大类。
下图为你展示了专业 GNSS 性能测试的核心框架与关键项目:
3.5.1 基础性能测试(核心指标)
在理想环境中评估接收机的“硬实力”。
3.5.2 环境适应性测试(压力测试)
模拟真实情况下,评估接收机的“软实力”和鲁棒性。
3.5.3 功能与可靠性测试(长期与极限)
评估产品在实际应用中的综合表现。
3.5.4 测试方法与工具
- GNSS 模拟器测试:在实验室使用高精度 GNSS 信号模拟器,可精确、可重复地生成各种轨迹、信号强度、动态场景和误差环境。这是研发和认证阶段的核心工具。
- 标准基线场测试:在户外已知精确坐标的测试场上进行静态和动态测试,这是精度验收的“金标准”。
- 实车路测:在实际道路环境中进行长时间、大范围的综合测试,最能反映真实用户体验。
总结:一个专业的 GNSS 性能评估,绝不仅仅是“看它漂不漂”。它需要从 “精度、速度、灵敏度、稳定性、可靠性、环境适应性” 等多个维度进行量化考核。对于普通用户,可以关注静态漂移、首次定位时间、弱信号表现这几项;对于专业开发者或采购方,则需要一份完整的、基于模拟器和实地测试的详细报告
3.6 轨迹优化和滤波算法
对于一分钟定位一次的轨迹优化,核心思路是:利用时间序列的连续性和约束条件,通过算法剔除异常值、平滑噪声,并从离散点中重建出合理、连续的轨迹。
下图清晰地展示了从原始 GNSS 数据到优化后轨迹的完整处理流程与关键算法:

3.6.1 核心优化技术详解
根据不同的的计算资源和优化目标(实时或事后),可以选择以下不同方法:
预处理:剔除明显异常点
这是所有优化第一步,基于物理常识过滤。
- 速度阈值法:计算相邻点间的速度。若速度超过合理最大值(如城市中 >120km/h),则该点为“跳跃点”,应剔除。
- 距离阈值法:计算点到前后点连线的垂直距离。若距离过大,则该点为“漂移点”。
平滑滤波:降低随机噪声
- 滑动平均法:最简单。取当前点前后 N 个点的位置坐标进行平均。缺点是会使轨迹“滞后”并变得过于平滑,丢失细节。
- 卡尔曼滤波:最优选择。它不仅是滤波,更是一种状态估计。通过建立位置、速度的状态方程和观测方程(GNSS 位置),可以实时、最优地估计出更平滑、更合理的位置和速度。非常适合分钟级数据的实时处理。
- 粒子滤波:在信号遮挡严重、噪声非高斯分布时(如城市峡谷),效果可能优于卡尔曼滤波,但计算量更大。
轨迹重建:让点连成合理的线
- 曲线拟合(事后处理):使用 B 样条曲线或贝塞尔曲线直接对所有经过滤波的点进行拟合,得到一条光滑的轨迹曲线。这是提升视觉表现力的最佳方法。
- 地图匹配:如果物体在道路上运动(如车辆),这是最有效的优化方法。算法将原始轨迹点匹配到数字路网上最近或最合理的路径,彻底消除道路之外的漂移,使轨迹严格贴合道路网络(百度/高德/谷歌都有自己的轨迹纠偏 API 可以使用,百度轨迹纠偏 API/高德轨迹纠偏 API)。
3.6.2 方案选择建议
根据实际的用户场景,可以这样选择:
3.6.3 关键提醒
- 理解误差来源:优化前,先分析你数据中主要的噪声是高频随机抖动、偶尔大幅漂移,还是系统性偏差。对症下药。
- 权衡平滑与延迟:任何实时滤波都会引入毫秒到秒级的延迟,需根据应用容忍度调整参数。
- 保留原始数据:所有优化都应在副本上进行,并记录处理步骤,以备复查。