Skip to content

PPP 精密单点定位

PPP 技术原理

PPP(Precise Point Positioning,精密单点定位)利用精密卫星轨道和时钟改正数,在不需要基准站的情况下实现分米到厘米级定位。

PPP vs RTK 对比

特性RTKPPPPPP-RTK
基准站需要(< 50km)不需要不需要
收敛时间< 1分钟20-40分钟1-5分钟
精度(收敛后)1-2cm5-30cm1-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-10cm30-40min互联网
CNES PPP-Wizard法国 CNES5cm20-30min互联网
BNC德国 BKG10cm30min互联网

商业 PPP 服务

服务提供商精度收敛时间传输方式
TerraStar-CTrimble4cm20minL-band 卫星
OmniSTAR HPTrimble10cm30minL-band 卫星
StarFireNavCom5cm20minL-band 卫星
千寻 PPP千寻位置10cm20min互联网

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 提高动态精度

褚成志的笔记