前面所有定位手段有一个共同前提:得有人跟你说话——卫星、基站、Wi-Fi 灯塔,总得有个外面的声音。可你开车进一条长隧道,所有声音都断了,导航上的箭头却还在往前爬,出隧道那一刻和 GPS 重新接上时,位置往往八九不离十。这几十秒里,手机靠的是一种完全不需要外界的古老智慧:记住自己每一个动作,从上一个已知位置一步一步推出来。
水手的老手艺
这套思路比无线电老几百年。大航海时代的水手在看不见陆地的海上,靠的就是它:我知道昨天中午在哪,知道船朝哪个方向开、开了多快、开了多久,于是今天的位置 = 昨天的位置 + 方向 × 速度 × 时间。这叫航位推算(dead reckoning)。它不需要星星、不需要陆地,只需要一本记得很勤的航海日志。
你的手机干的是一模一样的事,只是「航海日志」由两枚比指甲盖还小的芯片来写:
- 加速度计:感受「手机正在被往哪个方向推」。你起步、刹车、转弯,它都能感觉到那个推背感。本质上它内部就是一个悬在微型弹簧上的微型重物——你推手机,重物因为惯性落后一点,测出这个落后量就知道加速度。只是这整个「弹簧加重物」被刻在了硅片上,比头发丝还细。
- 陀螺仪:感受「手机转了多少」。航位推算里「方向」这一项由它负责——车头向左偏了两度,它都记着。
有了「每个瞬间的加速度」和「每个瞬间的朝向」,手机就能像水手一样记账:这个瞬间往前挪了一点,下个瞬间拐了个弯又挪了一点……把无数个「一点」累加起来,就是你在隧道里走过的轨迹。
致命的算术:误差会平方
这套系统听起来完美,但有个刻在数学里的缺陷。问题出在「累加」的方式上。
从加速度到位置,要连续做两次「累加」(数学上叫积分):加速度累加成速度,速度再累加成位置。而加速度计的读数永远带一点噪声——它分不清「车在加速」和「手机在支架上抖」。这点噪声经过第一次累加,变成一个缓慢跑偏的速度;跑偏的速度再经过第二次累加,变成一个加速跑偏的位置。
大白话:这就像蒙眼走直线。每一步的方向误差只有一度,第一步几乎没影响,但一百步之后你已经斜出去好几米——而且斜得越来越远。误差不是一步步线性攒的,是滚雪球。用手机级的传感器做纯航位推算,位置误差一分钟就能漂出几十米,几分钟后就完全没法看。
这就是为什么纯惯性导航是「奢侈品」。核潜艇用的惯性导航系统,陀螺仪精密到漂一天误差不到一海里,代价是上百万美元和一整台机柜。你手机里那套几毛钱的 MEMS 芯片(就是刚才说的硅片刻出来的微型机械),精度差了不知道多少个零——但它的任务是撑过一条隧道的一分钟,不是横跨太平洋的三十天。对一分钟来说,够用了。
正确的用法:不当主角,当胶水
所以你手机上惯性传感器的真实角色,不是「独立定位系统」,而是胶水:
- 填空:GPS 一秒才更新一次,惯性传感器一秒更新上百次。两次 GPS 读数之间的空白,由它来填——导航上那个平滑移动的箭头,平滑感来自它。
- 救场:隧道、地库、高楼遮挡的几十秒,它临时接管,把位置往前推。
- 辨真伪:GPS 因为楼体反射突然跳变一百米时,惯性数据会说「不可能,我刚才没感觉到任何急转弯」,帮手机识别并压下这个假信号。
注意这三种用法里,惯性数据永远在「被纠正」和「纠正别人」之间来回——它知道自己会漂,所以只要一有外界信号,就赶紧对表清零,把滚起来的雪球敲碎。可「什么时候信 GPS、什么时候信惯性、信多少」,这不是拍脑袋能决定的,需要一套精密的加权机制。这套机制有个名字,也是第九章的主角:卡尔曼滤波——把所有「都不太准」揉成「比较准」的数学炼金术。