4、单点定位:伪距定位原理、最小二乘解算、DOP值分析、定位精度评估
各位同学,欢迎来到单点定位这一章。
单点定位,说白了就是只用一台接收机,接收卫星信号,算出自己在地球上的位置。这是GNSS定位最基础、最核心的模式。你手机里的导航,大部分时候用的就是它。
我刚开始做定位算法时,觉得这玩意儿挺简单——不就是解几个方程嘛。后来在实际项目中踩了不少坑,才发现里面的门道比想象中深得多。今天我们就把它彻底讲透。
4.1 伪距定位原理
伪距,顾名思义,就是“假的”距离。为什么是假的?因为测量值里包含了各种误差。
接收机通过测量卫星信号从发射到接收的时间差,乘以光速,得到一个距离。但这个时间差并不准确——接收机时钟和卫星时钟不同步,信号穿过大气层还会被延迟。所以这个距离是“伪”的。
核心公式:
伪距观测方程:ρ = r + c·(dt_r - dt_s) + I + T + ε
其中:
- ρ:伪距观测值
- r:卫星到接收机的真实几何距离
- c:光速
- dt_r:接收机钟差
- dt_s:卫星钟差
- I:电离层延迟
- T:对流层延迟
- ε:其他噪声和未建模误差
你想想看,方程里有4个未知数:接收机的三维坐标(x, y, z)和接收机钟差dt_r。所以理论上,至少需要4颗卫星才能解算。
我在项目中遇到过一种情况:城市峡谷里只能看到3颗卫星,定位结果直接飘到天上去。嗯,这就是典型的几何条件不足,后面讲DOP值时你会更清楚。
4.2 最小二乘解算
有了4颗以上的卫星,方程数就多于未知数了。怎么解?最小二乘法是经典方案。
我个人习惯用加权最小二乘,因为不同卫星的观测质量不一样。低仰角的卫星,信号穿过大气层路径更长,误差更大,应该给它们更低的权重。
解算步骤:
- 线性化:将非线性观测方程在初始位置处泰勒展开,得到线性化的误差方程。
- 构建法方程:根据最小二乘准则,构建法方程矩阵。
- 迭代求解:解算位置改正数,更新位置,重复直到收敛。
下面是我常用的一个简化版解算流程,用Python伪代码表示:
def least_squares_positioning(obs, sat_positions, initial_guess):
x = initial_guess
for iter in range(10): # 迭代10次
# 计算设计矩阵A和残差向量b
A = []
b = []
for i in range(len(obs)):
r = compute_geometric_distance(x, sat_positions[i])
A.append([(x[0]-sat_positions[i][0])/r,
(x[1]-sat_positions[i][1])/r,
(x[2]-sat_positions[i][2])/r,
1.0])
b.append(obs[i] - r - x[3]) # x[3]是钟差
A = np.array(A)
b = np.array(b)
# 加权最小二乘解
W = np.diag(weight_matrix) # 权重矩阵
delta = np.linalg.inv(A.T @ W @ A) @ (A.T @ W @ b)
x = x + delta
if np.linalg.norm(delta) < 1e-4:
break
return x
避坑指南:
我曾经在迭代过程中忘记检查收敛条件,结果算法在某个坏点上反复震荡,定位结果完全不可用。建议设置最大迭代次数和收敛阈值双重保护。
4.3 DOP值分析
DOP(Dilution of Precision,精度衰减因子)是衡量卫星几何构型好坏的重要指标。说白了,就是卫星在天空中的分布情况对定位精度的影响。
为什么会这样?你想想看,如果4颗卫星都挤在天顶附近,那它们提供的观测信息高度相关,定位结果在水平方向上就会很差。反之,如果卫星均匀分布在天空各个方向,定位精度就会好很多。
常见的DOP值:
| DOP类型 | 含义 | 理想值 |
|---|---|---|
| GDOP | 几何精度衰减因子(包含位置和时间) | < 3 |
| PDOP | 位置精度衰减因子(三维位置) | < 3 |
| HDOP | 水平精度衰减因子 | < 2 |
| VDOP | 垂直精度衰减因子 | < 2.5 |
| TDOP | 时间精度衰减因子 | < 1 |
注意:DOP值只是一个几何因子,它乘以伪距观测误差的均方根,才是最终的定位误差。不要只看DOP值小就觉得定位一定准,观测质量差的话照样不行。
我记得有一次做车载测试,PDOP值显示只有1.8,按理说定位应该很好。但实际结果却飘得厉害。后来排查发现,是因为当时电离层活跃,伪距误差本身就很大。所以DOP值只是放大器,不是决定因素。
4.4 定位精度评估
怎么评估定位精度?不能光靠感觉。我们需要一套量化的指标。
常用评估指标:
- 均方根误差(RMSE):最常用的指标,反映整体误差水平。
- 圆概率误差(CEP):50%的定位点落在以真值为圆心的圆内,这个圆的半径就是CEP。
- 95%误差:95%的定位点落在某个范围内,常用于工程验收。
在实际项目中,我一般会这样做:
- 找一个已知坐标的基准点,采集至少24小时的定位数据。
- 计算每个历元的定位误差。
- 统计RMSE、CEP、95%误差等指标。
- 画出误差分布直方图和累积分布函数(CDF)曲线。
下面是我画的一个典型单点定位误差分布示意图:
从这张图可以看出,这个场景下单点定位的CEP大约是3.2米,95%误差在5.8米左右。对于普通导航应用来说,这个精度已经够用了。但如果你要做车道级导航,嗯,还差得远。
经验分享:
我建议在做精度评估时,至少采集24小时的数据。因为卫星几何构型在一天内会周期性变化,短时间的数据可能无法反映真实水平。另外,要注意剔除粗差——我曾经因为没做粗差剔除,评估结果比实际好了30%。
好了,单点定位的核心内容就这些。伪距原理是基础,最小二乘是工具,DOP值是参考,精度评估是检验。把这四点吃透了,单点定位这块你就基本拿下了。
公众号:蓝海资料掘金营,微信deep3321