3、轨迹数据采集:GPS数据格式(NMEA-0183)、基站定位、WiFi定位、惯性导航(IMU)数据融合
各位同学,咱们今天聊点实在的。
做轨迹回放,第一步就是拿到数据。数据怎么来?说白了,就是定位。但现实世界不是理想实验室,你不可能指望一种定位技术打天下。我做了这么多年轨迹回放,踩过的坑比走过的路还多。今天就把几种主流的数据采集方式,掰开了揉碎了讲给你听。
3.1 GPS数据格式:NMEA-0183
GPS 是最常见的定位方式。但 GPS 芯片吐出来的数据,不是直接给你经纬度就完事了。它有一套自己的语言,叫 NMEA-0183 协议。
嗯,这里要注意。NMEA 是一套标准,几乎所有 GPS 模块都支持。它的数据格式是纯文本,以 $ 开头,以 <CR><LF> 结尾。每一条语句叫一个 Sentence。
我个人最常用的是 $GPGGA 和 $GPRMC 这两条。前者给定位信息,后者给速度和时间。
举个例子,一条典型的 GGA 语句长这样:
$GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*47
看着乱是吧?我拆开给你看:
| 字段 | 含义 | 示例值 |
|---|---|---|
| $GPGGA | 语句头,GGA 定位数据 | - |
| 123519 | UTC 时间,12:35:19 | 12:35:19 |
| 4807.038,N | 纬度,北纬 48°07.038' | 48.1173° |
| 01131.000,E | 经度,东经 11°31.000' | 11.5167° |
| 1 | 定位质量,0=无效,1=单点,2=差分 | 1 |
| 08 | 可见卫星数 | 8 |
| 0.9 | 水平精度因子(HDOP) | 0.9 |
| 545.4,M | 海拔高度,单位米 | 545.4 |
3.2 基站定位:没 GPS 时的救命稻草
GPS 信号不好怎么办?比如地下车库、隧道、高楼林立的街道。这时候基站定位就派上用场了。
基站定位的原理很简单:手机同时连接多个基站,根据信号到达的时间差(TDOA)或者信号强度(RSSI)来估算位置。精度嘛,说实话,在城市里大概 50-200 米,郊区可能更差。
为什么精度差?因为基站的位置是固定的,而且信号会受建筑物遮挡、多径效应影响。你想想看,在密集的楼群里,信号反射来反射去,算出来的位置能准吗?
但基站定位有个好处:覆盖广。只要有手机信号,就能定位。我在做物流轨迹项目时,很多货车跑偏远山区,GPS 经常掉线。这时候全靠基站定位补数据,虽然精度差,但至少知道车大概在哪个县哪个镇。
3.3 WiFi 定位:室内定位的利器
到了室内,GPS 基本废了,基站定位精度又不够。这时候 WiFi 定位就香了。
WiFi 定位的原理是:每个 WiFi 热点(AP)都有唯一的 MAC 地址。手机扫描周围的 AP,把它们的 MAC 地址和信号强度上报给服务器。服务器有一个指纹库,里面存着每个位置能扫到的 AP 列表和信号强度。通过匹配,就能算出位置。
精度怎么样?如果指纹库建得好,可以达到 5-15 米。比基站强多了。
但有个前提:指纹库需要提前采集。说白了,你得先拿着设备在商场里走一遍,把每个角落的 WiFi 信号都记录下来。这是个苦力活。
我记得有一次给一个大型商场做室内导航,光采集指纹数据就花了三天。但效果确实好,用户反馈定位很准。
3.4 惯性导航(IMU):最后的倔强
如果 GPS、基站、WiFi 全都没信号呢?比如地下停车场、电梯、隧道深处。这时候只能靠 IMU 了。
IMU 包含加速度计和陀螺仪。加速度计测加速度,陀螺仪测角速度。通过积分,可以算出位移和姿态。
但这里有个大坑:积分会累积误差。加速度计有零偏,陀螺仪有漂移。你走 10 米,积分出来可能变成 12 米。时间越长,误差越大。
所以 IMU 不能单独用,必须和其他定位方式融合。比如在 GPS 信号好的时候,用 GPS 校准 IMU 的误差。信号丢失后,用 IMU 推算一小段距离,等信号恢复再校准回来。
我做过一个地下车库的轨迹项目,车进车库后 GPS 就没了。全靠 IMU 推算,配合车库入口处的 WiFi 定位做初始校准。最后轨迹虽然有点飘,但至少能看出车在哪个车位附近停了。
3.5 数据融合:把鸡蛋放在一个篮子里?不,是放在多个篮子里
上面讲了四种定位方式,各有优缺点。实际项目中,我们不会只用一种。而是用数据融合算法,把多种数据揉在一起,取长补短。
最常用的融合算法是卡尔曼滤波(Kalman Filter)。它的核心思想是:用预测和观测两个步骤,不断修正位置估计。
举个例子:
- 预测: 上一秒你在 A 点,速度 1 m/s,方向朝北。那我预测这一秒你在 A 点北边 1 米处。
- 观测: GPS 报了一个位置 B,离预测点有 3 米。
- 融合: 卡尔曼滤波会根据 GPS 的精度和 IMU 的精度,算出一个加权平均。如果 GPS 精度高(比如 HDOP 很小),就多信 GPS。如果 GPS 信号差,就多信 IMU 的预测。
这样,即使某一种数据突然变差,整体定位也不会崩。
下面这张图,是我总结的四种定位方式在轨迹回放中的融合逻辑:
你看,从四种数据源开始,经过预处理,再到融合算法,最后输出一条平滑的轨迹。每一步都有坑,每一步都需要经验。
我个人建议,刚开始做轨迹回放的同学,先别急着上卡尔曼滤波。先把每种数据单独吃透,搞清楚它们的特性和误差模型。然后再考虑怎么融合。否则,你连数据为什么飘都搞不清楚,融合出来的结果只会更糟。
好了,这一章的内容就到这里。数据采集是轨迹回放的地基,地基不牢,后面的一切都是空中楼阁。希望你能把这些知识点消化掉,下次遇到定位不准的问题,至少知道该从哪个方向排查。