Map matching
介绍 - 什么是地图匹配
Map Matching 组件负责确定在地图上放置指示箭头的位置。
从视觉上看,它比显示平台的原始位置(例如 GNSS、GNSS-INS 等)提供了更清晰的用户体验:它可以将指示箭头吸附到正在行驶道路的中心线,纠正信号弱或不可靠时的位置误差,并平滑现实世界与用于导航的地图之间的差异。
从功能上看,它承担着将原始位置信息转换为可用于更广泛导航环境和已知道路网络格式的重要角色——例如,确定限速是多少,用户是否应预期交通拥堵,是否偏离了规划路线,或者预计到达时间(ETA)是多少。
本文档详细说明了 TomTom Map Matching 为了良好运行所需的输入——具体来说,是哪些因素使其能够准确反映用户的实际位置。它分解了仅依赖 GNSS 不足的常见用例,并概述了为获得正确结果所需的额外数据及其格式。
用例 - 范围描述
本节定义了支持的地图匹配用例。每个用例都带有描述性标题和唯一的 ID 代码,该代码也用于下方的输入需求表中。
基本功能(UC0)
UC0 涵盖仅使用 GNSS 系统的基本导航功能。它定义了地图匹配功能必须支持的最小字段集——这些字段是严格必需的。
地图匹配在以下理想条件下高度可靠:
- 车辆行驶在映射良好的高速公路和 B 级道路上,道路等级与车辆配置匹配。
- 环境为非城市区域,天空无遮挡。
- 道路网络不复杂,且不存在特别的平行道路。
- 用户未偏离规划路线(如果存在),且不预期执行异常或复杂的操作。
- 车辆以相对较高的速度行驶。
然而,当多个条件不满足时,地图匹配性能可能开始下降。在这种情况下,算法会尝试补偿接收数据中的不准确。例如,当 GNSS 信号在隧道内丢失时,地图匹配会激活软件推算定位——沿着之前已知路径推进指示箭头,以提供无缝的驾驶体验。
汽车级地图匹配(UC1)
这是基本汽车级地图匹配的用例。它要求支持与 UC0 相同的最小输入字段,但这些字段来自传感器融合的 GNSS-INS 解决方案(INS 代表惯性导航系统,也称为汽车推算定位)。
通过使用惯性导航系统,车辆即使在没有 GNSS 信号的情况下,也能始终提供一定的定位信息。当卫星可用时,系统还能进一步微调定位数据。因此,这些输入的质量通常高于仅 GNSS 系统,并且更稳定可用。这意味着地图匹配组件对内部算法的依赖较少,不必过多纠正可能被视为错误的数据。
例如,UC0 中提到的软件推算定位不会在已经提供汽车推算定位的系统中激活,因为我们可以依赖该系统始终提供输入。因此,与 UC0 相比,导航体验更准确、更稳定,猜测成分更少。
UC0 和 UC1 需要的字段也适用于所有后续用例。
注意:
UC0 和 UC1 代表所有后续用例的最低要求。它们定义的字段被视为地图匹配组件的核心功能部分。
UC0 和 UC1 在范围上没有区别,但在质量上不同:GNSS-INS 比纯 GNSS 更可信。TomTom 地图匹配算法对通过 GNSS-INS 接收的数据应用的修正较少。
为支持 UC1 并与 UC0 区分,集成商必须至少提供一个额外字段。提供本文档中其他用例(即 UC1.1 至 UC1.5)所需的任何数据即可。 这向地图匹配组件表明输入数据可以被更高程度地信任。
隧道和城市峡谷中的正确定位(UC1.1)
必需字段:UC1 的所有字段 + satellites.visible + satellites.used + distanceTraveled.value
可选字段:distanceTraveled.error
UC1.1 涵盖 GNSS 不可用或受限的情况,例如隧道或某些城市峡谷。
UC1.1 指定的字段用于纠正缺乏(可靠)GNSS 时输入位置自然产生的漂移。
GNSS-INS 系统集成了汽车传感器数据,但在暂时无法用 GNSS 校准时,会提供逐渐偏离车辆实际位置的定位数据。在这些情况下,逐渐增加的 horizontalError 有助于地图匹配组件确定需要应用多少位置(漂移)修正。distanceTraveled 有助于判断车辆在隧道中的进度。卫星信息则帮助确定何时应用该修正。
倒车时显示正确车辆朝向(UC1.2)
必需字段:UC1 的所有字段 + distanceTraveled.value + drivingDirection
可选字段:distanceTraveled.error
UC1.2 涵盖倒车导航的情况。期望指示箭头向后移动,同时仍指向车辆前端(车头)方向。
如果未提供 UC1.2 所需字段,驾驶员可能会遇到指示箭头朝向翻转、卡住,或者最糟糕的情况——系统可能假设车辆在与报告的行驶方向匹配的其他位置,从而重新规划路线。
高速公路上更快的路线偏离检测(UC1.3)
必需字段:UC1 的所有字段 + lanesInView + drivenLaneIndex
可选字段:turnLightIndicator
UC1.3 涵盖行驶道路包含多车道的情况,可用于指示驾驶员将行驶的车道——例如高速公路出口。
在地图中有车 道信息的区域行驶时,集成 UC1.3 所需字段可实现更快甚至即时的路线偏离检测、路线切换或重新规划。如果未提供这些字段,或地图数据不足,地图匹配组件只能依赖其他指标,可能会延迟检测和显示偏离。
车道级引导(UC1.4)
必需字段:UC1 的所有字段 + lanesInView + drivenLaneIndex
可选字段:无
UC1.4 涵盖车道级引导——能够在车道级别向驾驶员显示当前位置及继续沿规划路线所需所在车道。这对于涉及多车道的复杂操作非常有价值。
它需要感知系统能够传递车辆当前车道信息,以及地图中有车道级数据。
堆叠道路上的正确车辆位置(UC1.5)
必需字段:UC1 的所有字段 + pitch.value
可选字段:lanesInView + drivenLaneIndex + pitch.error
UC1.5 涵盖堆叠道路(也称“3D 道路”)的情况——多条道路在纬度和经度上重叠,但海拔不同。
由于卫星难以准确估计高度,支持 UC1.5 的关键输入是车辆的俯仰角数据。将俯仰角与附近连接道路的坡度匹配,通常是帮助导航系统区分匝道、出口匝道和平行道路的最有效方法,尤其是在复杂的多层道路环境中。
必需输入 – 按用例细分
下表详细列出了支持每个用例所需的字段。
UC0 和 UC1 的字段构成基线,所有后续用例必须支持。
当字段可能报告为 null 时,其值被视为可选——但提供准确值将提升整体性能。
表中:
🟢 绿色圆圈表示必需字段(支持该用例所必需)。
🟡 黄色圆圈表示可选字段(非严格必需,但可能提升性能)。
| NavSDK 字段 | 描述 | UC0 | UC1 | UC1.1 | UC1.2 | UC1.3 | UC1.4 | UC1.5 | 输入预期 | 错误数据影响 |
|---|---|---|---|---|---|---|---|---|---|---|
| location.position.point.latitude | 纬度值,单位度 [-90.0, 90.0] | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 |
|
|
| location.position.point.longitude | 经度值,单位度 [-180.0, 180.0] | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 |
| |
| location.position.horizontalError | 1-σ 水平误差,单位米,或 null | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 |
| |
| location.velocity.speed.value | 车辆地面速度(GNSS),单位 m/s;静止时为 0 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 |
|
|
| location.velocity.speed.error | 1-σ 速度误差,单位 m/s,或 null | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 |
| |
| location.time.utcMilliseconds | UTC 定位时间(含闰秒),单位毫秒 | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 |
|
|
| location.time.monotonicNanoseconds | 定位单调时间戳(纳秒);必须使用单一时钟 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 |
|
|
| location.attitude.course.value | 地面航向(0–360°,相对于北方);GNSS/INS 值在静止时应冻结 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 |
|
|
| location.attitude.course.error | 航向误差(1-σ),或 null | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 | ||
| location.provider | 枚举:Gnss、GnssIns 或 Network;GnssIns 扩展了 Android 提供者集 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 |
|
|
| location.position.altitude.value | 椭球面高度(WGS-84/GCJ-02),单位米 [–20000, 20000],或 null;UC1.5 不使用 |
|
| |||||||
| location.position.altitude.error | 高度误差(1-σ),单位米;或 null | |||||||||
| location.satellites.visible | 可见卫星数量 [0–999],或 null | 🟢 |
|
| ||||||
| location.satellites.used | 用于定位的卫星数量 [0–999];未知时应为 null | 🟢 |
| |||||||
| location.distanceTraveled.value | 自上次更新以来的行驶距离,单位米(如果启用) | 🟢 | 🟢 |
|
| |||||
| location.distanceTraveled.error | 自上次更新以来的距离误差(1-σ),单位米;或 null | 🟡 | 🟡 | |||||||
| location.drivingDirection | 行驶方向:0 = 前进,1 = 倒车(可为空) | 🟢 |
|
| ||||||
| location.turnLightIndicator | 转向灯:0 = 关闭,1 = 左转,2 = 右转,3 = 双闪;或 null | 🟡 |
|
| ||||||
| location.perception.lanesInView | 行驶方向上检测到的可行驶车道数;启用时 >0,否则 | 🟢 | 🟢 | 🟡 |
|
| ||||
| location.perception.drivenLaneIndex | 当前车道索引(0 = 最左侧,行驶方向);启用时 ≥ 0,否则 | 🟢 | 🟢 | 🟡 |
| |||||
| location.attitude.pitch.value | 俯仰角(–45° 至 45°),绕中间导航框架 y′ 轴旋转;或 | 🟢 |
|
| ||||||
| location.attitude.pitch.error | 俯仰角误差(1-σ),单位度;或 null [*] | 🟡 | ||||||||
| location.attitude.yaw.value | 偏航角(0°–360°),绕导航框架 z 轴旋转;或 |
|
| |||||||
| location.attitude.yaw.error | 偏航误差(1-σ),单位度;或 null [*] | |||||||||
| location.attitude.roll.value | 横滚角 [–180°, 180°],绕中间导航框架 x″ 轴旋转;或 |
| ||||||||
| location.attitude.roll.error | 横滚误差(1-σ),单位度;或 null [*] |
[*] 姿态类和旋转顺序
Attitude 类定义了从本地导航(北-东-下,NED)框架到车辆/机体坐标系的偏航、俯仰和横滚旋转角,遵循 z–y′–x″ 旋转顺序。机体框架定义如下(参见 SAE J670e / SAE J2945/1):
- x 轴 指向车辆前方。
- y 轴 指向车辆右侧。
- z 轴 指向下方。
旋转顺序定义如下:
-
偏航:绕 zn 轴旋转导航框架的 xn 和 yn 轴,旋转角为偏航角。
→ 产生中间参考框架,轴为 x′、y′、z′,其中 z = zn。 -
俯仰:绕 y′ 轴旋转 x′ 和 z′ 轴,旋转角为俯仰角。
→ 产生另一个中间框架,轴为 x″、y″、z″,其中 y = y′。 -
横滚:绕 x″ 轴旋转 y″ 和 z″ 轴,旋转角为横滚角。
→ 三次旋转后产生的框架即为机体框架。