从手机 GPS 到厘米级定位:一辆卡丁车的“定位进化史”

从手机 GPS 到厘米级定位:一辆卡丁车的"定位进化史"

在日常导航里,我们对定位的要求大概是:

"告诉我在哪条路上,大概别走错匝道就行。"

但在赛道、卡丁车、自动驾驶场景下,要求完全不一样:

  • 圈速统计要精确到毫秒级:到底在哪一刻压过起终点线?
  • 轨迹要精确到厘米级:是贴内线还是多走了一个车身宽?
  • 车辆状态要连续、稳定:GNSS 掉线、信号跳变不能直接毁掉整个圈的数据。

这篇文章就以"赛道场景"为主线,讲清楚一件事:

如何从"纯手机定位",一步步进化到"IMU + GNSS + 卡尔曼滤波"的厘米级高频定位?

我们会依次看三层演进:

  1. 硬件升级:手机 → 外置 GNSS → 支持 RTK 的专业设备
  2. 算法升级:插值算法 → IMU + GNSS 融合
  3. 卡尔曼滤波:让"多传感器 + 时间序列"变成一条平滑、可信的轨迹

一、从手机开始:GNSS 与网络定位的天花板

1.1 手机 GNSS:能用,但远远不够

手机上的"GPS"其实是 GNSS(全球卫星导航系统) 的一个子集,包括:

  • GPS(美国)
  • GLONASS(俄罗斯)
  • Galileo(欧盟)
  • 北斗 BeiDou(中国)

基本原理很简单:

  • 卫星不断广播自己的"时间 + 位置";
  • 手机同时收到至少 4 颗卫星的信号;
  • 根据电磁波的传播时间算出"手机距离每颗卫星有多远",再解方程算出手机在空间中的位置和时间。

但中间的"坑"很多:

  • 电离层、对流层会让电磁波变慢 ------ 测出来的距离被"拉长";
  • 在城市峡谷里,信号会撞到大楼、地面再反射回来 ------ 多径效应;
  • 卫星自己报的位置和时间也有细小误差;
  • 卫星分布如果太偏一边,几何结构不好,也会导致解算误差增大。

结果:

  • 普通手机 GNSS 的定位误差大约在 2~5 米,好一点也就是米级;
  • 采样频率普遍只有 1Hz(一秒一条),出于功耗和芯片设计考虑。

对日常导航来说够用了,但对赛道来说有两个致命问题:

  1. 空间精度不够:2~5 米的误差,足够把你从内线"抹"到隔壁车道去了;
  2. 时间分辨率太低:1Hz 无法刻画弯道中的细节动作,更别提做载荷圆分析、制动点精细评估。
1.1.1 单频 vs 双频:为什么"L1 + L5"更香?

很多手机会宣传"支持双频 GPS"。本质就两点:

  • 单频:只收 L1 频段;
  • 双频:同时收 L1 + L5 频段(不同系统的对应频段,例如 GPS L1/L5、Galileo E1/E5、北斗 B1/B2、GLONASS L1/L2)。

术语解释(避免生僻词):这里的"星座"指的是各个全球卫星导航系统(GNSS)的具体系统,例如:

  • GPS(美国):常用频段 L1/L5
  • Galileo(欧盟):E1/E5
  • 北斗(中国):B1/B2
  • GLONASS(俄罗斯):L1/L2(常记作 G1/G2)

不同系统的"双频"命名不同,但本质相同:都是"同时利用两个频段的信号来更好地消除电离层延迟、增强抗多径能力"。

双频的优势主要有:

  1. 物理消除电离层延迟:电离层对不同频率的影响不同,双频一对比,就能把大部分误差消掉(可到 99%)。
  2. 更好识别"直射 vs 反射"信号:L5 频率高、码率快,可以更好区分多径反射,进一步提升精度。

在理想环境下,双频 GNSS 定位可以接近分米级,但这是在"高质量天线 + 开阔环境 + 高算力接收机"的前提下。手机里要想稳定做到这一步,并不现实。


1.2 网络定位:Wi-Fi + 基站,只能当兜底

当手机收不到卫星信号(比如室内、地铁、隧道)时,会用以下兜底方案:

  1. Wi-Fi 定位
  • 路边的测绘车、用户的手机会不断上传"附近 Wi-Fi 的 MAC 地址 + 信号强度 + 当时的 GPS 位置",构成"Wi-Fi 指纹地图";
  • 你的手机扫描到周围 Wi-Fi,把列表发给服务器,服务器在指纹库里找"最像"的位置。
  • 问题是:路由器一搬家,定位就容易乱飞。
  1. 基站定位(4G/5G)
  • 根据连接的基站 ID,配合邻站信号强度,粗略算出位置;
  • 在基站稀疏的郊区,误差几公里都不奇怪。

在赛道场景下,这些方案完全不靠谱,只能当"没信号时别直接报错"的兜底。


1.3 小结:纯手机定位的硬伤

  • 频率低:1Hz,无法刻画车辆在每一秒内部的细节动作;
  • 精度有限:大多只能做到米级;
  • 受环境影响大:城市峡谷、多径、遮挡都会导致漂移。

所以,如果你想认真做圈速分析、轨迹重建,只靠手机几乎不可能,必须上外置设备。


二、外置 GNSS:更快,但还不够精

2.1 以 Dragy 为例:专业 GNSS 芯片能做得多好?

以 Dragy DRG70-C 为例,它内部用的是 u-blox Max M10 这种专用 GNSS 芯片,典型参数大概是:

  • 支持 GPS / GLONASS / BeiDou / Galileo 等多个系统;
  • 采样率:10Hz(多星座)、25Hz(单星座);
  • 水平精度:约 1.5m。

工作流程大致是:

  1. 接收极其微弱的高频卫星信号,并做射频前端处理;
  2. 在海量噪声中"锁定"各颗卫星的 PRN 码(伪随机码),这一步非常吃硬件并行算力;
  3. 根据原始观测量(伪距、载波等)解算出当前 (x, y, z, t);
  4. 通过标准 NMEA 或自定义协议,将结果输出给上位机(手机、记录器等)。

为什么它比手机强?

  1. 专用硬件:手机 CPU 要干 OS、多媒体、网络等一堆杂事;专用 GNSS 芯片的几百个相关器可以 100% 专注在"解析卫星信号"这件事上。
  2. 更干净的射频环境:外置设备有独立屏蔽、专用天线布局,不像手机那样 4G/5G/Wi-Fi/蓝牙一锅炖。
  3. 算法偏好不同:手机侧更关注"省电 + 用户体验";外置 GNSS 更关注"尽快、尽精确地输出位置"。

结论:

  • 与手机相比,Dragy 的优势在于:采样频率更高(10~25Hz)、抗干扰性能更好、静态精度更稳;
  • 但它仍然主要用的是 L1 单频,位置信息还停留在米级,离"厘米级赛道定位"还有不小差距。

三、RTK:从米级走向厘米级的关键一步

要真正从米级冲向厘米级,就必须上 RTK(Real-Time Kinematic,实时动态差分定位)。

3.1 普通 GNSS 测的是"码",RTK 直接上"载波"

普通 GNSS 的定位核心是测量伪距:

  • 卫星不断发送 PRN 码;
  • 接收机本地也生成一份"同样的码";
  • 通过对齐发送码和接收码,推算出"时间差 → 距离"。

问题在于:以 GPS L1 为例,一个码元就对应 293 米距离,即便你做到 1% 的对齐精度,误差还有 3 米左右。

RTK 做了什么?不只看"码"这一层,而是往下看一层更细的:载波相位。

  • L1 载波频率约 1575.42 MHz,对应波长约 19.05 cm;
  • 1% 的相位误差,对应的距离误差大约是 1~2 毫米量级。

于是伪距可以写成:
Distance = N × λ + φ

  • λ:波长(已知,比如 19.05cm)
  • ϕ:当前观测到的相位小数部分(可以测得非常精确)
  • N:整周模糊度("绕了多少圈"),是个未知整数

RTK 的核心,就是想办法把这个 N 也解出来。

3.2 引入"基准站":双人合作解谜

单靠移动端很难知道自己到底"绕了几圈",RTK 的方案是:

  1. 在地面放一个基准站:它的位置非常精确,是"已知真值";
  2. 基准站与移动端同步观测同一颗卫星;
  3. 基准站利用自己已知的位置 + 卫星轨道,解出"真正的 N 值";
  4. 把修正数据实时发给移动端;
  5. 移动端用这些差分信息 + 自己观测到的载波相位,通过搜索(比如 LAMBDA 算法)解出本机的 N。

这样,很多大气误差、多径误差在"同一时刻、同一方向"上具有相近性,可以被抵消掉,最终得到厘米级甚至毫米级的相对位置精度。

3.3 为什么手机很难直接做 RTK?

理论上,手机也可以去做 RTK,但现实上有一堆坑:

硬件问题:

  • 手机一般用的是线极化天线,而 RTK 强烈依赖右旋圆极化(RHCP)天线来抑制多径;
  • 手机天线位置、姿态经常变(拿在手里、放口袋、横竖屏),相位中心不稳定,载波对齐误差会非常大。

软件问题:

  • 要长时间高功耗打开 GNSS 前端,才能稳定接收载波;
  • 需要拿到芯片底层的"载波相位"原始数据,很多在手机上是封闭的;
  • RTK 解算本身复杂度高,对算力与功耗都是巨大挑战。

因此,一个更现实的工程方案是:

手机 + 外置 RTK 模块

  • 手机负责联网,从千寻之类的服务拿差分数据(RTCM 等);
  • 通过蓝牙把基站数据透传给 RTK 模块;
  • RTK 模块自己做载波 RTK 解算,再把高精位置结果回传给手机。

代价也不小:

  • 支持 RTK 的 GNSS 芯片成本比普通芯片高 10~20 倍;
  • RTK 服务(厘米级)订阅费用也不便宜,比如厘米级年费可能在 2000 元量级/年。

四、算法层加成:从插值到 IMU + GNSS 融合

硬件做完了,问题只解决了一半:

  • GNSS 频率再高,也只是离散采样;
  • 在两次采样之间,车辆是连续运动的;
  • 我们还需要利用车辆的运动学特性、IMU 数据,把轨迹变成高频、平滑、可信。

4.1 赛道分圈:插值能帮你一个数量级

以卡丁车赛道为例,分圈逻辑很简单:

"当赛车跨过起点线时,上一圈结束,下一圈开始。"

现实中,GNSS 是固定周期采样的,比如 10Hz:

  • t0:车还在起点线前;
  • t1:车已经在起点线后。

我们真正想知道的是:

车是什么时候、在什么位置精确地"踩过起终点线"的?

一种常用做法是:基于恒定加速度的直线插值。

简单假设:

  • 在 t0 到 t1 之间,车的运动可以近似为"直线 + 匀加速";
  • 再结合这两个时刻的位置、速度,就可以解出"轨迹与起点线的交点"和"经过该点的时间"。

在实测中,这种方法可以把:

  • 手机 1Hz 的圈速误差,从"秒级"压到"大致百毫秒级";
  • 对外置 GNSS 也有一个数量级的提升效果。

4.2 再进一步:引入 IMU 做组合导航

即便有插值,问题依然存在:

  • 车辆的真实运动不一定是"直线 + 匀加速";
  • GNSS 受到遮挡时会直接飘得离谱(云层、树荫、建筑物、甚至隧道);
  • 我们需要一个更高频、更稳定的信息源来填补空白,这就是 IMU。
4.2.1 IMU 是什么?

IMU,全称 Inertial Measurement Unit(惯性测量单元):

  • 内部集成了加速度计 + 陀螺仪;
  • 输出三轴加速度、三轴角速度、姿态角等信息;
  • 采样率常见是 100Hz,比 GNSS 高一个数量级。
4.2.2 融合路线:紧耦合 vs 松耦合

IMU + GNSS 融合,一般有两条路:

  1. 紧耦合:
  • 直接拿 IMU 数据 + GNSS 的原始伪距、载波观测值;
  • 精度最好,但要接触 GNSS 底层"原始观测量",工程成本高。
  1. 松耦合:
  • 用 IMU 数据 + 已经解算好的经纬度(GNSS 输出结果);
  • 不需要碰 GNSS 底层,只要能拿到"经纬度 + 速度 + 航向"即可,工程成本低很多。

在本文的项目方案里,选的是松耦合,因为更容易在现有设备基础上落地。


五、卡尔曼滤波:让 10Hz GNSS 长出 100Hz 的"灵魂"

终于轮到今天的主角:卡尔曼滤波。

5.1 一句话版解释

卡尔曼滤波 = "运动学预测" + "传感器纠偏"的自动加权平均器。

  • 预测部分:用 IMU(加速度、角速度)根据运动学公式,推算"下一时刻车大概在哪儿";
  • 更新部分:用 GNSS 返回的"经纬度 + 速度 + 航向"来纠偏,防止 IMU 长期漂移。

在 IMU 100Hz、GNSS 10Hz 的条件下,可以做到:

  • 每 10ms 更新一次车辆状态(位置、速度、姿态等);
  • 当 GNSS 短暂失效时,轨迹仍然连续、平滑;
  • 当 GNSS 恢复时,再把 drift 修正回来。

这就是为什么说:

IMU + GNSS + 卡尔曼滤波,可以把 GNSS 的"定位频率"理论上提升到 IMU 的频率(100Hz)。

5.2 再稍微严肃一点:两阶段 + 多维状态

在工程实现里,我们通常会构建一个多维状态向量,比如:
x = [经度, 纬度, 速度, 航向角, ...]^T

每一步的卡尔曼滤波都分两阶段:

  1. 预测(Predict)
  • 用 IMU 的加速度、角速度,通过运动学公式把状态往前"推一步";
  • 同时更新协方差矩阵 P(不确定性),随着时间稍微变大一点。
  1. 更新(Update)
  • GNSS 下一条数据到了:带着自己的观测噪声(R),和当前状态进行融合;
  • 计算卡尔曼增益 K → "这次到底更相信 IMU 预测,还是更相信 GNSS 测量?";
  • 更新状态向量和协方差,让整体不确定性下降。

如果把 IMU 预测看作"短期稳定,但会慢慢飘",把 GNSS 看作"长期可靠,但短期跳来跳去",那卡尔曼滤波做的,就是在时间轴上给两者找一个最优的折中点。


六、现实中的坑:IMU 不是"免费午餐"

卡尔曼滤波看起来很美,但接入 IMU 后有一堆工程挑战:

  1. 手机 IMU 质量参差不齐
  • 不同机型的传感器噪声、零偏、温漂差别巨大;
  • 用一套固定参数跑所有手机,很难稳定发挥出 IMU 的潜力。
  1. 零偏和温漂
  • IMU 在静止时也会"自己乱跳",这就是"偏置";
  • 温度变化会让偏置慢慢漂移,这就是"温漂";
  • 一般要做静态校准 + 温度补偿,否则长时间积分后的结果会越来越离谱。
  1. 安装刚性
  • 一旦引入外置 IMU,就必须刚性地固定到车上;
  • 传感器和车体之间不能有晃动,否则你测到的是"传感器壳子晃动",而不是"车真正在动"。

这些都是把"理论上的 100Hz 高精轨迹"变成"工程上可用系统"时,必须面对的问题。


七、整体路线:从"能定位"到"敢做赛道分析"

把前面的所有内容压缩成一条"进化路线",大致是:

  1. 纯手机 GNSS + 网络定位
  • 优点:零成本、无额外硬件;
  • 缺点:频率低(1Hz)、精度米级、受环境影响大。
  1. 外置 GNSS 设备(如 Dragy)
  • 提升采样频率(10~25Hz)、射频环境更干净;
  • 精度仍然在米级,赛道级使用仍有不足。
  1. 引入 RTK 模块 + 差分服务
  • 通过载波相位差分,把伪距测量精度从米级压到厘米级;
  • 成本:专业芯片 + 差分订阅。
  1. 算法加持:插值提升圈速精度
  • 用"定加速直线运动"插值跨线时刻,把圈速误差压到百毫秒级。
  1. 进一步:IMU + GNSS 融合 + 卡尔曼滤波(松耦合)
  • 用 100Hz IMU 预测 + 10Hz GNSS 校正,得到近似 100Hz 的高精轨迹;
  • 在 GNSS 弱/断信情况下保持轨迹连续,在恢复时自动纠偏。

最终,你能获得的是:

  • 高频、平滑的轨迹(适合做赛道线分析、载荷圆、制动点优化);
  • 精确的圈速统计(毫秒级别的起终点时间);
  • 可扩展的定位框架(未来可以继续接入更多传感器:轮速、转向角、甚至视觉 SLAM)。

相关推荐
Lancker3 天前
定制侠 一个国产纯血鸿蒙APP的诞生过程
android·华为·智能手机·鸿蒙·国产操作系统·纯血鸿蒙·华为鸿蒙
新诺韦尔API3 天前
手机三要素验证接口详细技术对接指南
大数据·智能手机·api
铁蛋AI编程实战3 天前
Falcon-H1-Tiny 微型 LLM 部署指南:100M 参数也能做复杂推理,树莓派 / 手机都能跑
java·人工智能·python·智能手机
AirDroid_cn3 天前
双机党:一台小米一台华为,怎样相互远程控制?
智能手机
玉梅小洋5 天前
手机 App 云端存储云服务选型指南
人工智能·智能手机·手机·工具开发·手机app开发
玉梅小洋5 天前
手机 App 跨平台框架统一目录构建
智能手机·手机·app开发
东哥笔迹6 天前
高通骁龙Android手机平台EIS基础pipeline(二)
智能手机
jian110586 天前
Android studio 调试flutter 运行自己的苹果手机上
flutter·智能手机·android studio
小锋学长生活大爆炸6 天前
【工具】手机控制iPixel LED屏实现转向和刹车联动、语音控制显示内容
智能手机·工具·led·车机·智能·diy·ipixel
Boxsc_midnight6 天前
【openclaw+imessage】【免费无限流量】集成方案,支持iphone手机+macos
ios·智能手机·iphone