介绍 - 什么是地图匹配

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 字段描述UC0UC1UC1.1UC1.2UC1.3UC1.4UC1.5输入预期错误数据影响
location.position.point.latitude纬度值,单位度 [-90.0, 90.0]🟢🟢🟢🟢🟢🟢🟢
  • 输入按顺序到达且遵循清晰轨迹

  • 开阔道路上位置误差约为 15 米以内

  • 指示箭头匹配错误,跳跃,意外重新规划
location.position.point.longitude经度值,单位度 [-180.0, 180.0]🟢🟢🟢🟢🟢🟢🟢
  • 城市峡谷中误差约 30 米,深城市峡谷中约 50 米
  • GNSS 一西格玛误差准确反映实际定位精度
location.position.horizontalError1-σ 水平误差,单位米,或 null🟢🟢🟢🟢🟢🟢🟢
  • UC0:隧道内不期望位置更新

  • UC1:隧道漂移应低于 500 米

location.velocity.speed.value车辆地面速度(GNSS),单位 m/s;静止时为 0🟢🟢🟢🟢🟢🟢🟢
  • 值应小于 400 km/h —— 不是硬性限制,而是车辆速度的预期指导。更高值可能导致意外的地图匹配行为
  • 错误速度可能导致匹配到与错误速度更兼容的平行道路
  • 指示箭头不跟随任何道路
location.velocity.speed.error1-σ 速度误差,单位 m/s,或 null🟡🟡🟡🟡🟡🟡🟡
  • 速度不应与基于时间和距离差的估计相差超过 50%
  • 速度必须始终为正——倒车由驾驶方向字段指示
location.time.utcMillisecondsUTC 定位时间(含闰秒),单位毫秒🟡🟡🟡🟡🟡🟡🟡
  • UTC 时间戳应与接收位置的时间紧密匹配
  • 对实时匹配无影响,但会增加日志分析和问题调查难度
location.time.monotonicNanoseconds定位单调时间戳(纳秒);必须使用单一时钟🟢🟢🟢🟢🟢🟢🟢
  • 单调时钟必须持续递增——无倒退跳变。值必须为正,单位为纳秒
  • 指示箭头偏离道路,意外重新规划,卡住或跳跃
location.attitude.course.value地面航向(0–360°,相对于北方);GNSS/INS 值在静止时应冻结🟢🟢🟢🟢🟢🟢🟢
  • 值不应与车辆实际方向相差超过 25°,或与两个连续原始位置输入估计值相差超过 40°
  • 指示箭头在分叉路口、十字路口或高速出口错误跟随道路,导致意外重新规划
location.attitude.course.error航向误差(1-σ),或 null🟡🟡🟡🟡🟡🟡🟡
location.provider枚举:GnssGnssInsNetworkGnssIns 扩展了 Android 提供者集🟢🟢🟢🟢🟢🟢🟢
  • 值应匹配位置更新的来源
  • 网络提供者将始终导致离线道路位置
location.position.altitude.value椭球面高度(WGS-84/GCJ-02),单位米 [–20000, 20000],或 null;UC1.5 不使用
  • 高度应在 [-400, 5000] 米范围内——超出范围可能表示数据错误
  • 此数据不用于地图匹配,因此无直接影响。负面影响取决于下游使用
location.position.altitude.error高度误差(1-σ),单位米;或 null
location.satellites.visible可见卫星数量 [0–999],或 null🟢
  • 未知时应为 null,无可见卫星时为 0,或为实际可见卫星数的正数
  • 指示箭头在隧道附近/内部错误跟随远处或错误道路,或在隧道内不跟随任何道路
location.satellites.used用于定位的卫星数量 [0–999];未知时应为 null🟢
  • 未知时应为 null,无卫星参与定位时为 0,或为参与定位的卫星数正数
location.distanceTraveled.value自上次更新以来的行驶距离,单位米(如果启用)🟢🟢
  • 值与实际自上次更新以来行驶距离的差异不应超过 30%
  • 指示箭头在路口后跟随错误道路;可能跳跃前进或后退以调整
location.distanceTraveled.error自上次更新以来的距离误差(1-σ),单位米;或 null🟡🟡
location.drivingDirection行驶方向:0 = 前进,1 = 倒车(可为空)🟢
  • 若提供,值必须准确反映标记的行驶方向
  • 指示箭头与行驶方向不符,卡住或不跟随任何道路
location.turnLightIndicator转向灯:0 = 关闭,1 = 左转,2 = 右转,3 = 双闪;或 null🟡
  • 提供的指示灯值应反映实际状态。驾驶员必须在偏离前打灯以利用此功能
  • 地平线数据可能延迟,偏离无法提前预测
location.perception.lanesInView

行驶方向上检测到的可行驶车道数;启用时 >0,否则 Perception = null

🟢🟢🟡
  • 值必须 ≥ drivenLaneIndex + 1,仅包含行驶方向上的车道。即使车道部分被遮挡或超出摄像头视野,也应保持准确。TomTom 地图数据有助于减轻不准确,但不能保证完全正确
  • 偏离后指示箭头仍沿原路线,或出现在错误车道
location.perception.drivenLaneIndex

当前车道索引(0 = 最左侧,行驶方向);启用时 ≥ 0,否则 Perception = null

🟢🟢🟡
  • 车道索引应匹配当前车道。当车辆约 60% 或更多进入新车道时应更新
location.attitude.pitch.value

俯仰角(–45° 至 45°),绕中间导航框架 y′ 轴旋转;或 Attitude.pitch = null [*]

🟢
  • 俯仰角必须在 [–45°, 45°] 范围内,反映车辆实际角度。误差范围应在 [0°, 360°]
  • 指示箭头在坡度不同的分叉路口或交叉口匹配错误道路
location.attitude.pitch.error

俯仰角误差(1-σ),单位度;或 null [*]

🟡
location.attitude.yaw.value

偏航角(0°–360°),绕导航框架 z 轴旋转;或 Attitude.yaw = null [*]

  • 值必须在 [0°, 360°] 范围内
  • 以下数据未被使用,因此不会对地图匹配性能产生负面影响。影响取决于下游使用
location.attitude.yaw.error

偏航误差(1-σ),单位度;或 null [*]

location.attitude.roll.value

横滚角 [–180°, 180°],绕中间导航框架 x″ 轴旋转;或 Attitude.roll = null [*]

  • 值范围:[–180°, 180°]。误差范围:[0°, 360°]
location.attitude.roll.error

横滚误差(1-σ),单位度;或 null [*]

[*] 姿态类和旋转顺序

Attitude 类定义了从本地导航(北-东-下,NED)框架到车辆/机体坐标系的偏航、俯仰和横滚旋转角,遵循 z–y′–x″ 旋转顺序。机体框架定义如下(参见 SAE J670e / SAE J2945/1):

  • x 轴 指向车辆前方。
  • y 轴 指向车辆右侧。
  • z 轴 指向下方。

旋转顺序定义如下:

  1. 偏航:绕 zn 轴旋转导航框架的 xn 和 yn 轴,旋转角为偏航角。
    → 产生中间参考框架,轴为 x′、y′、z′,其中 z = zn

  2. 俯仰:绕 y′ 轴旋转 x′ 和 z′ 轴,旋转角为俯仰角。
    → 产生另一个中间框架,轴为 x″、y″、z″,其中 y = y′。

  3. 横滚:绕 x″ 轴旋转 y″ 和 z″ 轴,旋转角为横滚角。
    → 三次旋转后产生的框架即为机体框架

SAE diagram
SAE J2945/1