2、定位原理基础:GNSS定位三要素(卫星、接收机、时间),伪距测量与定位解算
聊定位,绕不开一个核心问题:你到底是怎么知道自己在哪的?
很多人觉得GNSS定位很玄乎,好像手机一开,位置就出来了。其实拆开来看,原理并不复杂。我个人习惯把GNSS定位比作一个「三脚架」——三条腿分别是卫星、接收机和时间。缺了任何一条,这个架子都立不起来。
2.1 定位三要素:卫星、接收机、时间
卫星,说白了就是天上的「灯塔」。它们不停地在广播自己的位置和当前的时间。你想想看,如果天上只有一颗卫星,你只能知道自己离它有多远,但不知道具体在哪个方向。所以至少需要三颗卫星,才能通过「三角测量」的方式确定你的二维位置(经度、纬度)。
但这里有个坑——接收机的时间通常不准。卫星上用的是原子钟,精度极高,但咱们手里的接收机(比如手机里的GPS芯片)用的是石英钟,便宜但容易漂移。所以实际上需要第四颗卫星来修正时间误差。这就是为什么我们常说「至少需要4颗卫星才能定位」。
接收机,就是咱们手里的设备。它的任务很简单:接收卫星信号,测量距离,然后解算位置。我在项目中遇到过不少新手,以为接收机只是「听」信号,其实它还要做大量的计算——比如捕获、跟踪、解调、解算。每一步都可能引入误差。
时间,这是最容易忽略的一环。GNSS系统本质上是一个「时间同步系统」。卫星和接收机之间的时间差,直接决定了测距的精度。光速是30万公里/秒,如果时间误差只有1微秒(百万分之一秒),距离误差就是300米。嗯,这里要注意:时间同步是定位精度的基石。
2.2 伪距测量:我们是怎么测距离的?
伪距测量,名字听起来挺唬人,其实原理很简单。
卫星发射一个信号,信号里带着「我是在什么时间发出的」。接收机收到这个信号后,记录下「我是在什么时间收到的」。两个时间一减,乘以光速,就是卫星到接收机的距离。
但问题来了——接收机的时间不准。所以这个「距离」并不是真实距离,而是带有误差的「伪距」。伪距的数学表达式是这样的:
ρ = r + c * (δt_u - δt_s) + I + T + ε
其中:
- ρ:伪距测量值(我们实际测到的)
- r:卫星到接收机的真实几何距离
- c:光速
- δt_u:接收机时钟误差(这是我们要解算的)
- δt_s:卫星时钟误差(可以通过导航电文修正)
- I:电离层延迟误差
- T:对流层延迟误差
- ε:其他噪声和误差
2.3 定位解算:从伪距到坐标
有了伪距测量值,接下来就是解算位置了。这个过程本质上是在解一个非线性方程组。
假设我们有n颗卫星,每颗卫星的位置是已知的(通过导航电文获得),那么我们可以列出n个方程:
ρ_i = sqrt((x - x_i)² + (y - y_i)² + (z - z_i)²) + c * δt_u
其中:
- (x, y, z):接收机的未知位置(我们要解的)
- (x_i, y_i, z_i):第i颗卫星的已知位置
- ρ_i:第i颗卫星的伪距测量值
- δt_u:接收机时钟误差(也是未知的)
你看,这里有4个未知数(x, y, z, δt_u),所以至少需要4个方程,也就是4颗卫星。
解这个方程组,最常用的方法是最小二乘法。具体步骤是:
- 先猜一个初始位置(比如上次定位的结果)
- 计算预测的伪距值
- 计算预测值与实际测量值的差值(残差)
- 用残差修正初始位置
- 重复迭代,直到残差足够小
2.4 知识体系图:定位解算的核心逻辑
下面这张图,是我自己总结的定位解算流程。你看一遍,基本就能理解整个链条了。
这张图把整个定位解算的链条串起来了。从卫星发射信号,到接收机测量伪距,再到解算位置和时间。每一步都有误差源,每一步也都有对应的修正方法。
2.5 避坑指南:我踩过的几个坑
- 伪距测量中的多径效应:我曾经在城市峡谷测试,信号被高楼反射,导致伪距测量值偏大,定位结果直接漂移了上百米。后来加了多径检测算法,才把问题压下去。
- 卫星几何分布(DOP值):卫星分布越分散,定位精度越高。如果卫星都挤在天上同一个方向,即使有8颗星,定位精度也可能很差。我建议在选星时,优先考虑GDOP值小的组合。
- 接收机时钟的初始偏差:冷启动时,接收机时钟可能偏差很大。如果直接用这个偏差去解算,迭代可能不收敛。我的做法是先做一次「粗同步」,把时钟偏差拉到毫秒级以内,再开始精解算。
好了,这一章的内容就到这里。定位三要素和伪距测量是GNSS定位的根基,理解透了,后面讲误差源和漂移诊断就轻松多了。