从手机 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)。

相关推荐
御控工业物联网1 小时前
工业网关新玩法:手机变“移动触摸屏”,局域网内远程操控PLC
物联网·智能手机·自动化·数据采集·plc·远程控制·远程操控plc
程楠楠&M1 小时前
h5页面 调用手机,pda摄像头
智能手机·h5·摄像头·vue3.0
要站在顶端1 小时前
Jenkins设备监控(手机、手表)适配Windows、Linux
windows·智能手机·jenkins
2501_9151063212 小时前
如何查看手机使用记录:Android和iOS设备全面指南
android·ios·智能手机·小程序·uni-app·iphone·webview
Digitally13 小时前
如何完全从Itel手机SIM卡中删除联系人
智能手机
wanhengidc14 小时前
使用云手机都要注意哪些?
运维·服务器·科技·游戏·智能手机
新诺韦尔API17 小时前
手机空号检测接口对接全流程指南
大数据·网络·智能手机·api
xiaocao_102318 小时前
鸿蒙手机上使用的备忘录怎么导出来?
华为·智能手机·harmonyos
围炉聊科技20 小时前
手机端侧智能助手:从被动工具到主动助手的进化之路
人工智能·智能手机