跳转至

GPS 与 RTK 定位

GNSS 基础

什么是 GNSS

GNSS(Global Navigation Satellite System,全球导航卫星系统)是利用卫星信号进行定位的技术总称。GPS 是 GNSS 的一个子集。

主要卫星星座

星座 国家/地区 卫星数 频段 精度(民用)
GPS 美国 31 L1/L2/L5 ~2–5m
GLONASS 俄罗斯 24 G1/G2/G3 ~2–5m
Galileo 欧盟 30 E1/E5a/E5b/E6 ~1–3m
北斗 BDS 中国 45+ B1/B2/B3 ~2–5m
QZSS 日本 4 L1/L2/L5/L6 区域增强
IRNSS/NavIC 印度 7 L5/S 区域覆盖

定位原理:三边测量

通过测量接收器到至少 4 颗卫星的伪距来确定位置:

\[ \rho_i = \sqrt{(x - x_i^s)^2 + (y - y_i^s)^2 + (z - z_i^s)^2} + c \cdot \delta t \]

其中:

  • \(\rho_i\) 为到第 \(i\) 颗卫星的伪距
  • \((x, y, z)\) 为接收器位置
  • \((x_i^s, y_i^s, z_i^s)\) 为卫星位置
  • \(c \cdot \delta t\) 为接收器时钟偏差

需要至少 4 颗卫星:3 个位置未知量 + 1 个时钟偏差。

误差来源

误差源 量级 说明
电离层延迟 1–50m 信号穿越电离层的延迟
对流层延迟 0.5–5m 大气层中水汽的影响
卫星轨道误差 1–5m 卫星位置预测误差
卫星钟差 1–3m 卫星时钟与系统时间偏差
多径效应 0.5–数m 信号经建筑物反射
接收器噪声 0.3–1m 硬件噪声
几何精度因子 (DOP) 放大系数 卫星几何分布影响

RTK-GPS

RTK 原理

RTK(Real-Time Kinematic,实时动态差分)通过基站-移动站差分的方式消除大部分公共误差,并利用载波相位观测实现厘米级定位精度。

载波相位观测

\[ \Phi = \frac{1}{\lambda}(\rho + N\lambda + c \cdot \delta t - I + T + \epsilon) \]

其中:

  • \(\Phi\) 为载波相位观测量(周)
  • \(\lambda\) 为载波波长(L1 ≈ 19cm)
  • \(N\) 为整周模糊度(Integer Ambiguity)
  • \(I\) 为电离层延迟
  • \(T\) 为对流层延迟

差分消除:基站和移动站同时观测同一卫星,做差后公共误差被消除:

\[ \Delta\Phi = \frac{1}{\lambda}(\Delta\rho + \Delta N \lambda + \Delta\epsilon) \]

关键在于解算整周模糊度 \(\Delta N\),一旦正确固定(Fix),定位精度可达 1–2cm。

RTK 系统组成

graph LR
    A[GNSS 卫星] --> B[基站<br/>已知坐标]
    A --> C[移动站<br/>待定位]

    B --> |"修正数据<br/>RTCM"| D[数据链路<br/>无线电/4G/NTRIP]
    D --> C

    C --> E[RTK 解算]
    E --> F[厘米级位置]

定位状态

状态 精度 说明
Fix(固定解) 1–2 cm 整周模糊度正确固定
Float(浮点解) 10–50 cm 未能固定整周模糊度
DGPS 0.5–1 m 仅使用伪距差分
Single(单点) 2–5 m 无差分修正

u-blox ZED-F9P

ZED-F9P 是目前最流行的消费级/低成本 RTK GNSS 接收器。

参数
支持星座 GPS + GLONASS + Galileo + BeiDou
频段 L1 + L2(双频)
RTK 精度 水平 1cm + 1ppm,垂直 1.5cm + 1ppm
收敛时间 <10s(RTK Fix)
更新率 最高 20Hz(RTK 8Hz)
接口 UART × 3、I2C、SPI、USB
功耗 ~150mW
价格 ~$200(模块)
# ROS2 中使用 ublox 驱动
sudo apt install ros-humble-ublox-gps

ros2 launch ublox_gps ublox_gps_node-launch.py \
    device:=/dev/ttyACM0

NTRIP 协议

NTRIP(Networked Transport of RTCM via Internet Protocol)通过互联网传输 RTK 修正数据,无需自建基站。

# 连接 NTRIP 服务
str2str -in ntrip://username:password@caster_host:2101/mountpoint \
        -out serial://ttyUSB0:115200

国内常用 CORS(连续运行参考站)服务:千寻位置(qxwz.com)、中国移动 OnePoint 等。

室内定位替代方案

GPS/GNSS 在室内不可用,需要替代定位方案。

UWB(Ultra-Wideband)

参数 说明
原理 超宽带脉冲 ToF 测距
精度 10–30 cm
范围 10–100m
代表芯片 Decawave DW1000 / DW3000
优点 精度高、抗多径
缺点 需要部署锚点(Anchor)
价格 锚点 ~\(30/个,标签 ~\)15/个

定位方式

  • TWR(Two-Way Ranging):双向测距
  • TDoA(Time Difference of Arrival):到达时差
\[ d_{ij} = c \cdot \frac{t_{\text{round}} - t_{\text{reply}}}{2} \]

AprilTag 定位

参数 说明
原理 视觉标记检测 + PnP 位姿估计
精度 1–5 cm(取决于距离和标记大小)
范围 0.5–5m(取决于标记大小和相机分辨率)
成本 仅需打印标记 + 相机
缺点 需要视觉标记可见、受光照影响

其他室内定位技术

技术 精度 成本 说明
WiFi 指纹 1–5m 利用已有 AP
BLE Beacon 1–3m 蓝牙信标
LiDAR SLAM 5–10cm 无需基础设施
视觉 SLAM 5–20cm 仅需相机
动作捕捉 <1mm Vicon/OptiTrack

GPS + IMU 融合

融合动机

GPS 特点 IMU 特点 融合后
低频(1–20Hz) 高频(200–1000Hz) 高频输出
无漂移 长期漂移 长短期都好
可能中断 连续可用 连续可用
精度不一 短期精确 稳定精确

EKF 融合

使用扩展卡尔曼滤波(EKF)融合 GPS 和 IMU:

预测步骤(IMU 驱动,高频):

\[ \hat{\mathbf{x}}_{k|k-1} = f(\hat{\mathbf{x}}_{k-1}, \mathbf{u}_k^{\text{IMU}}) \]
\[ \mathbf{P}_{k|k-1} = \mathbf{F}_k \mathbf{P}_{k-1} \mathbf{F}_k^T + \mathbf{Q}_k \]

更新步骤(GPS 观测,低频):

\[ \mathbf{K}_k = \mathbf{P}_{k|k-1} \mathbf{H}_k^T (\mathbf{H}_k \mathbf{P}_{k|k-1} \mathbf{H}_k^T + \mathbf{R}_k)^{-1} \]
\[ \hat{\mathbf{x}}_k = \hat{\mathbf{x}}_{k|k-1} + \mathbf{K}_k (\mathbf{z}_k^{\text{GPS}} - h(\hat{\mathbf{x}}_{k|k-1})) \]

ROS2 robot_localization

sudo apt install ros-humble-robot-localization

# 配置 EKF 融合 GPS + IMU
ros2 launch robot_localization dual_ekf_navsat.launch.py

配置文件需要指定:

  • ekf_local:融合 IMU + 轮式里程计(局部坐标系)
  • ekf_global:融合 GPS + IMU(全局坐标系)
  • navsat_transform:GPS 坐标转换

参考资料

  • u-blox ZED-F9P 集成手册
  • 《GPS: Theory, Algorithms and Applications》 - Xu & Xu
  • Decawave DW1000 数据手册
  • ROS2 robot_localization 文档
  • 千寻位置开发者文档

评论 #