Skip to Content
核心概念核心概念

为了真正理解 Tracelet 的后台定位引擎是如何运行的,我们必须放弃简单的“对 GPS 执行 ping 操作的计时器”的想法。相反,让我们跟随一位用户——莎拉,一名送货司机——度过她的一天。在此过程中,我们将准确了解 Tracelet 的智能算法(什么)如何解决现实世界的问题(为什么在哪里)。


场景 1:早上通勤

**探索的概念:**运动检测、自适应采样、弹性

问题

莎拉醒来,做好准备,然后离开了家。如果她睡觉时手机的 GPS 不断以 10 米的间隔进行轮询,那么在她开始轮班之前,她的电池就会没电。一旦她上车并驶上高速公路,10 米的间隔就太频繁了,会淹没数据库,但如果间隔太少,她的路线看起来就像一条穿过建筑物的直线。

Tracelet 如何解决这个问题

  1. 静止状态(motion.stopTimeout 当莎拉睡觉时,她手机的加速计检测到零移动。 5 分钟后(默认 stopTimeout),Tracelet 主动完全关闭 GPS 无线电,进入 STATIONARY 状态。她的电池电量消耗降至接近 0%。就在她拿起手机准备离开的那一刻,加速度计瞬间将Tracelet吵醒了。

  2. 自适应模式 (geo.enableAdaptiveMode) 当 Sarah 走向她的车时,Tracelet 使用 10 米的基线 distanceFilter。然而,当她以 65 英里/小时的速度并入高速公路时,enableAdaptiveMode 会检测到高速并自动将 distanceFilter 缩放至 50 或 100 米。

*为什么?*因为在高速行驶时,您会沿直线覆盖很多地面。我们不需要 100 个点来在高速公路上画一条直线。

  1. 弹性乘数 (geo.elasticityMultiplier) 该参数控制距离过滤器高速拉伸的“积极程度”。如果她是无尽沙漠高速公路上的长途卡车司机,您可以将 elasticityMultiplier 设置为 2.0 以进一步扩展过滤器,从而节省更多电池。

场景2:地铁隧道

探索的概念: 航位推算、卡尔曼滤波、里程表精度

问题

莎拉有一个包裹要送到市中心。她停好车,乘坐地铁三站。在地下时,她完全失去了 GPS 信号。普通的位置跟踪器会画一条从地铁入口跳到出口的直线,从而破坏了为她计算的工资单的总距离。

Tracelet 如何解决这个问题

GPS 信号为零(通过 deadReckoningActivationDelay 配置) 10 秒后,Tracelet 意识到她处于 GPS 拒绝的环境中。它激活航位推算引擎,融合来自加速度计、陀螺仪和指南针的数据,根据她最后已知的速度和航向猜测她穿过隧道的路径。

  1. 里程表准确度阈值 (geo.filter.odometerAccuracyThreshold) 当她走出地铁时,GPS 信号在摩天大楼周围反弹,给出了精度为 150m 的“模糊”位置。由于她的 odometerAccuracyThreshold 设置为 50 米,Tracelet 会记录该点,但“拒绝”将该距离添加到她的总行程里程表中,确保她不会因不准确的“GPS 反弹”距离而付费。

场景 3:办公桌

探索的概念: 电池预算引擎、地理围栏代理

问题

莎拉到达一个大型企业园区,并花了 45 分钟在里面走动,递送包裹。 GPS 信号微弱,电池电量开始不足。

Tracelet 如何解决这个问题

  1. 电池预算(android.batteryBudgetPerHour 您使用 batteryBudgetPerHour2.0% 配置了 Tracelet。 Tracelet 注意到由于建筑物内信号微弱,她的电池每小时消耗 3.5%。引擎自动将 desiredAccuracyhigh 降级为 medium,并增加 distanceFilter,以迫使电池消耗回到 2.0% 预算以下。

  2. 通过邻近无限地理围栏 公司园区有 500 个单独的交付区(地理围栏)。 iOS 和 Android 本身都将地理围栏限制为 20 或 100 个。 Tracelet 通过仅注册 geofenceProximityRadius 内最近的地理围栏来绕过此硬件限制。当 Sarah 穿过校园时,Tracelet 会无缝地将地理围栏加载和卸载到操作系统硬件中,从而实现无限的地理围栏。