从手机 GPS 到厘米级定位:一辆卡丁车的"定位进化史"
在日常导航里,我们对定位的要求大概是:
"告诉我在哪条路上,大概别走错匝道就行。"
但在赛道、卡丁车、自动驾驶场景下,要求完全不一样:
- 圈速统计要精确到毫秒级:到底在哪一刻压过起终点线?
- 轨迹要精确到厘米级:是贴内线还是多走了一个车身宽?
- 车辆状态要连续、稳定:GNSS 掉线、信号跳变不能直接毁掉整个圈的数据。
这篇文章就以"赛道场景"为主线,讲清楚一件事:
如何从"纯手机定位",一步步进化到"IMU + GNSS + 卡尔曼滤波"的厘米级高频定位?
我们会依次看三层演进:
- 硬件升级:手机 → 外置 GNSS → 支持 RTK 的专业设备
- 算法升级:插值算法 → IMU + GNSS 融合
- 卡尔曼滤波:让"多传感器 + 时间序列"变成一条平滑、可信的轨迹
一、从手机开始:GNSS 与网络定位的天花板
1.1 手机 GNSS:能用,但远远不够
手机上的"GPS"其实是 GNSS(全球卫星导航系统) 的一个子集,包括:
- GPS(美国)
- GLONASS(俄罗斯)
- Galileo(欧盟)
- 北斗 BeiDou(中国)
基本原理很简单:
- 卫星不断广播自己的"时间 + 位置";
- 手机同时收到至少 4 颗卫星的信号;
- 根据电磁波的传播时间算出"手机距离每颗卫星有多远",再解方程算出手机在空间中的位置和时间。
但中间的"坑"很多:
- 电离层、对流层会让电磁波变慢 ------ 测出来的距离被"拉长";
- 在城市峡谷里,信号会撞到大楼、地面再反射回来 ------ 多径效应;
- 卫星自己报的位置和时间也有细小误差;
- 卫星分布如果太偏一边,几何结构不好,也会导致解算误差增大。
结果:
- 普通手机 GNSS 的定位误差大约在 2~5 米,好一点也就是米级;
- 采样频率普遍只有 1Hz(一秒一条),出于功耗和芯片设计考虑。
对日常导航来说够用了,但对赛道来说有两个致命问题:
- 空间精度不够:2~5 米的误差,足够把你从内线"抹"到隔壁车道去了;
- 时间分辨率太低: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)
不同系统的"双频"命名不同,但本质相同:都是"同时利用两个频段的信号来更好地消除电离层延迟、增强抗多径能力"。
双频的优势主要有:
- 物理消除电离层延迟:电离层对不同频率的影响不同,双频一对比,就能把大部分误差消掉(可到 99%)。
- 更好识别"直射 vs 反射"信号:L5 频率高、码率快,可以更好区分多径反射,进一步提升精度。
在理想环境下,双频 GNSS 定位可以接近分米级,但这是在"高质量天线 + 开阔环境 + 高算力接收机"的前提下。手机里要想稳定做到这一步,并不现实。
1.2 网络定位:Wi-Fi + 基站,只能当兜底
当手机收不到卫星信号(比如室内、地铁、隧道)时,会用以下兜底方案:
- Wi-Fi 定位
- 路边的测绘车、用户的手机会不断上传"附近 Wi-Fi 的 MAC 地址 + 信号强度 + 当时的 GPS 位置",构成"Wi-Fi 指纹地图";
- 你的手机扫描到周围 Wi-Fi,把列表发给服务器,服务器在指纹库里找"最像"的位置。
- 问题是:路由器一搬家,定位就容易乱飞。
- 基站定位(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。
工作流程大致是:
- 接收极其微弱的高频卫星信号,并做射频前端处理;
- 在海量噪声中"锁定"各颗卫星的 PRN 码(伪随机码),这一步非常吃硬件并行算力;
- 根据原始观测量(伪距、载波等)解算出当前 (x, y, z, t);
- 通过标准 NMEA 或自定义协议,将结果输出给上位机(手机、记录器等)。
为什么它比手机强?
- 专用硬件:手机 CPU 要干 OS、多媒体、网络等一堆杂事;专用 GNSS 芯片的几百个相关器可以 100% 专注在"解析卫星信号"这件事上。
- 更干净的射频环境:外置设备有独立屏蔽、专用天线布局,不像手机那样 4G/5G/Wi-Fi/蓝牙一锅炖。
- 算法偏好不同:手机侧更关注"省电 + 用户体验";外置 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 的方案是:
- 在地面放一个基准站:它的位置非常精确,是"已知真值";
- 基准站与移动端同步观测同一颗卫星;
- 基准站利用自己已知的位置 + 卫星轨道,解出"真正的 N 值";
- 把修正数据实时发给移动端;
- 移动端用这些差分信息 + 自己观测到的载波相位,通过搜索(比如 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 融合,一般有两条路:
- 紧耦合:
- 直接拿 IMU 数据 + GNSS 的原始伪距、载波观测值;
- 精度最好,但要接触 GNSS 底层"原始观测量",工程成本高。
- 松耦合:
- 用 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
每一步的卡尔曼滤波都分两阶段:
- 预测(Predict)
- 用 IMU 的加速度、角速度,通过运动学公式把状态往前"推一步";
- 同时更新协方差矩阵 P(不确定性),随着时间稍微变大一点。
- 更新(Update)
- GNSS 下一条数据到了:带着自己的观测噪声(R),和当前状态进行融合;
- 计算卡尔曼增益 K → "这次到底更相信 IMU 预测,还是更相信 GNSS 测量?";
- 更新状态向量和协方差,让整体不确定性下降。
如果把 IMU 预测看作"短期稳定,但会慢慢飘",把 GNSS 看作"长期可靠,但短期跳来跳去",那卡尔曼滤波做的,就是在时间轴上给两者找一个最优的折中点。
六、现实中的坑:IMU 不是"免费午餐"
卡尔曼滤波看起来很美,但接入 IMU 后有一堆工程挑战:
- 手机 IMU 质量参差不齐
- 不同机型的传感器噪声、零偏、温漂差别巨大;
- 用一套固定参数跑所有手机,很难稳定发挥出 IMU 的潜力。
- 零偏和温漂
- IMU 在静止时也会"自己乱跳",这就是"偏置";
- 温度变化会让偏置慢慢漂移,这就是"温漂";
- 一般要做静态校准 + 温度补偿,否则长时间积分后的结果会越来越离谱。
- 安装刚性
- 一旦引入外置 IMU,就必须刚性地固定到车上;
- 传感器和车体之间不能有晃动,否则你测到的是"传感器壳子晃动",而不是"车真正在动"。
这些都是把"理论上的 100Hz 高精轨迹"变成"工程上可用系统"时,必须面对的问题。
七、整体路线:从"能定位"到"敢做赛道分析"
把前面的所有内容压缩成一条"进化路线",大致是:
- 纯手机 GNSS + 网络定位
- 优点:零成本、无额外硬件;
- 缺点:频率低(1Hz)、精度米级、受环境影响大。
- 外置 GNSS 设备(如 Dragy)
- 提升采样频率(10~25Hz)、射频环境更干净;
- 精度仍然在米级,赛道级使用仍有不足。
- 引入 RTK 模块 + 差分服务
- 通过载波相位差分,把伪距测量精度从米级压到厘米级;
- 成本:专业芯片 + 差分订阅。
- 算法加持:插值提升圈速精度
- 用"定加速直线运动"插值跨线时刻,把圈速误差压到百毫秒级。
- 进一步:IMU + GNSS 融合 + 卡尔曼滤波(松耦合)
- 用 100Hz IMU 预测 + 10Hz GNSS 校正,得到近似 100Hz 的高精轨迹;
- 在 GNSS 弱/断信情况下保持轨迹连续,在恢复时自动纠偏。
最终,你能获得的是:
- 高频、平滑的轨迹(适合做赛道线分析、载荷圆、制动点优化);
- 精确的圈速统计(毫秒级别的起终点时间);
- 可扩展的定位框架(未来可以继续接入更多传感器:轮速、转向角、甚至视觉 SLAM)。