PPP 精密单点定位
PPP 技术原理
PPP(Precise Point Positioning,精密单点定位)利用精密卫星轨道和时钟改正数,在不需要基准站的情况下实现分米到厘米级定位。
PPP vs RTK 对比
| 特性 | RTK | PPP | PPP-RTK |
|---|---|---|---|
| 基准站 | 需要(< 50km) | 不需要 | 不需要 |
| 收敛时间 | < 1分钟 | 20-40分钟 | 1-5分钟 |
| 精度(收敛后) | 1-2cm | 5-30cm | 1-5cm |
| 覆盖范围 | 局部(基准站附近) | 全球 | 全球 |
| 数据链路 | NTRIP(互联网) | 卫星/互联网 | 互联网 |
| 适用场景 | 局部高精度 | 全球中高精度 | 全球高精度 |
PPP 误差改正
PPP 需要改正以下误差:
1. 卫星轨道误差(精密星历):
广播星历精度:约 1-2m
精密星历精度:约 2-5cm
2. 卫星时钟误差(精密时钟):
广播时钟精度:约 1-2ns(30-60cm)
精密时钟精度:约 0.1ns(3cm)
3. 电离层误差(双频消除):
双频组合(无电离层组合):
L_IF = (f₁²×L₁ - f₂²×L₂) / (f₁² - f₂²)
4. 对流层误差(模型改正):
使用 Saastamoinen 模型或 VMF1 映射函数
5. 相位缠绕(Phase Wind-up):
卫星旋转导致的相位变化,需要改正
6. 固体潮、海洋负荷等地球物理效应PPP 服务提供商
免费 PPP 服务
| 服务 | 提供商 | 精度 | 收敛时间 | 传输方式 |
|---|---|---|---|---|
| IGS RTS | 国际 GNSS 服务 | 5-10cm | 30-40min | 互联网 |
| CNES PPP-Wizard | 法国 CNES | 5cm | 20-30min | 互联网 |
| BNC | 德国 BKG | 10cm | 30min | 互联网 |
商业 PPP 服务
| 服务 | 提供商 | 精度 | 收敛时间 | 传输方式 |
|---|---|---|---|---|
| TerraStar-C | Trimble | 4cm | 20min | L-band 卫星 |
| OmniSTAR HP | Trimble | 10cm | 30min | L-band 卫星 |
| StarFire | NavCom | 5cm | 20min | L-band 卫星 |
| 千寻 PPP | 千寻位置 | 10cm | 20min | 互联网 |
L-band 卫星播发
商业 PPP 服务通过 L-band 卫星(1.5GHz 频段)播发改正数,无需互联网连接:
优势:
- 全球覆盖(包括海洋、沙漠等无网络区域)
- 低时延(卫星直播)
- 不依赖蜂窝网络
劣势:
- 需要专用 L-band 接收天线
- 商业服务费用较高
- 收敛时间较长(20-30分钟)PPP-RTK 技术
PPP-RTK 结合了 PPP 的全球覆盖和 RTK 的快速收敛优势:
PPP-RTK 原理:
1. 利用密集 CORS 网络估计大气误差(电离层、对流层)
2. 将大气改正数和精密轨道/时钟一起播发
3. 用户端快速固定整周模糊度(1-5分钟)
4. 实现全球厘米级定位
代表服务:
- 千寻 FindCM(国内)
- Galileo HAS(欧盟,免费)
- QZSS CLAS(日本,免费)移远模组 PPP 支持
通过蜂窝模组接入 PPP 服务
python
# 通过 Cat.1/4G 模组接入千寻 PPP 服务
import socket
import serial
def connect_qxwz_ppp(device_key, device_secret):
"""连接千寻位置 PPP 服务"""
# 千寻 PPP 服务地址
host = "ppp.qxwz.com"
port = 8002
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((host, port))
# 发送认证信息
auth_msg = f"AUTH {device_key} {device_secret}\r\n"
sock.send(auth_msg.encode())
response = sock.recv(1024).decode()
if "SUCCESS" in response:
print("PPP 服务连接成功")
return sock
else:
print("认证失败:", response)
return None
def stream_ppp_to_gnss(ppp_sock, gnss_port):
"""将 PPP 改正数转发到 GNSS 模组"""
ser = serial.Serial(gnss_port, 115200)
while True:
data = ppp_sock.recv(4096)
if not data:
break
ser.write(data)
# 同时读取 GNSS 模组的 NMEA 数据
if ser.in_waiting:
nmea = ser.readline().decode('ascii', errors='ignore')
if '$GNGGA' in nmea:
parse_and_display(nmea)PPP 应用场景
海洋测量
需求:
- 远离陆地,无法使用 RTK 基准站
- 需要 10-30cm 精度
- 全球覆盖
方案:
L-band PPP(如 TerraStar-C)
精度:5-10cm(收敛后)
覆盖:全球海洋精准农业(大范围)
需求:
- 跨省作业,无法依赖单一 CORS 网络
- 精度要求 10-30cm(播种/施肥)
- 成本敏感
方案:
PPP-RTK(千寻位置)
精度:5-10cm
收敛时间:1-5分钟
成本:低于自建基准站无人机测绘
需求:
- 大范围测绘(数百平方公里)
- 精度 5-10cm
- 无需地面控制点(GCP)
方案:
机载 PPP-RTK 接收机
后处理 PPP(精度更高)
结合 IMU 提高动态精度