估算器内部:GNSS、IMU 和传感器如何协同工作

简而言之: 此前,我们将导航引擎描绘为一组模块:测量建模、动力学建模、估计器以及RTK定位。本文将深入探讨“估计器”这一模块。估计器的真正作用并非依赖任何单一传感器,而是根据已知信息对每项测量数据进行权衡,随后将所有数据整合为一个滤波状态,同时追踪其对结果的置信度。

目前,测量数据已处理得相当完善。时间同步为所有数据提供了统一的时间基准。预处理对原始数据流进行了清理。导航引擎对每个传感器应测得的数值进行了建模,而RTK定位将GNSS测量精度提升到了厘米级。

在这一切的核心,是估计器。它是系统中负责将分散的、有时几乎毫无关联的测量值——这些测量值都反映了外界的状态——整合成一个答案的部分。

这篇文章将介绍估算器内部究竟发生了什么。

状态向量:估计量究竟在估计什么

状态向量(或称滤波器状态)是估计器试图确定的数值集合。位置、速度和姿态是其中显而易见的参数。但状态通常还包含一些不那么明显的量:针对存在固有误差的传感器所做的校正,以及系统仅作为副产品进行估计的其他值——因为系统需要这些值才能获得准确的位置。

有些测量结果能直接告诉你状态向量中的某个信息。位置测量是最简单的情况:测量结果直接告诉你一个位置。而其他测量则是间接的。车轮转速告诉你移动的速度,却不能告诉你所在的位置。到卫星的距离能提供一些关于位置的信息,但只有结合许多其他距离数据才能得出结论。

估计器的任务是将所有这些直接和间接的信息综合起来,并将其转化为对你真正关心的那个量值的最新估计。它无法一蹴而就。它会随着时间的推移逐步学习系统状态,并随着每次新测量的数据到来而不断优化该估计。

加权:置信度与预期误差

估计器最重要的工作就是对每一项测量结果进行权衡。

每次测量都存在一定的误差范围,即预期的误差。估计器会将该误差与它对当前估计值的现有置信度进行比较。我认为自己目前对位置的了解程度如何?对方位的了解程度又如何?那些存在噪声或与状态仅松散相关的测量结果,其权重会低于那些精确且可信度高的测量结果。

这种平衡会随着时间推移而发生变化。当你第一次开启设备时,估计器几乎一无所知。位置、姿态、传感器误差:所有这些都充满不确定性。在这种状态下,即使是带有噪声的测量数据也具有价值,因为有总比没有好,而系统会依靠新接收到的数据进行学习。

一旦系统开始运行并对自身位置有充分把握,这种关系就会发生逆转。假设你已获得RTK定位结果,并且非常清楚自己的位置,此时收到一条受建筑物或其他误差源影响而出现故障的GNSS测量数据。 估计器可以将该测量值及其通常应包含的误差,与系统当前的估计值进行对比。如果该测量值远超出预期误差范围,估计器可以降低其权重,甚至直接将其剔除。(第3部分将更详细地介绍这种异常值处理方法。)

互补传感器:两全其美

剔除一个不准确的GNSS测量值并不意味着系统会“失明”。其他传感器仍在持续提供数据。

这就是多传感器融合的优势所在:这些传感器具有互补性。车轮速度数据对街区尽头的那栋高楼一无所知,也不关心它。GNSS测量数据可能会因那栋楼而受到影响,但当不受影响时,其精度可以非常高。 惯性测量单元(IMU)运行迅速,其更新速度甚至快于GNSS,从而填补了两者之间的运动数据空白。车轮转速数据的传输速率可能较低,有时甚至比GNSS更少。随着时间的推移,它们彼此互补。将它们结合起来,就能弥补彼此的不足:当GNSS运行正常时,它提供绝对精度;当GNSS出现故障时,则提供稳定的运动感知。

两大体系:INS 与 纯 GNSS

在估计器能够预测测量间状态如何变化之前,它必须先知道自己运行在什么样的系统上。这里存在一条明确的分界线,而这归根结底取决于一个传感器。

惯性导航系统(INS)配备有惯性测量单元(IMU),而纯GNSS系统则没有。这一区别在发动机中比其他几乎所有因素都更为重要。

惯性测量单元(IMU)能够非常精确地测量加速度和角速度。将这些数据随时间积分,即可直接了解位置和速度的变化情况。当平台移动时,IMU能反映状态的变化情况,而全球导航卫星系统(GNSS)或计算机视觉等绝对测量方法则能提供关于设备外部世界的信息。IMU的质量与其成本、功耗及其他因素密切相关,它决定了所能达到的精度水平。

一旦失去惯性测量单元(IMU),情况就会变得棘手得多。试想一下,你在高速公路上行驶并驶入隧道。在进入隧道之前,全球导航卫星系统(GNSS)信号良好,一切正常。但进入隧道后,GNSS信号便消失了。如果有惯性测量单元(或车轮转速传感器,或其他相对运动传感器),你就可以在信号中断期间继续进行推算导航。如果没有这些传感器,你可能只能靠猜测维持几秒钟,之后就完全无法确定位置了。

如果没有这些相对运动传感器,你所能做的就是依据此类载具的正常运动方式来推断。我们对汽车的行为模式相当了解:它们通常不会向上移动,不会向下移动,左右摇晃幅度不大,更不会翻车。 船只或飞机的情况则截然不同。这些假设——由于惯性测量单元(IMU)能直接测量运动,惯性导航系统(INS)对它们的依赖程度要低得多——却是仅靠全球导航卫星系统(GNSS)的系统必须依赖的。(关于不同平台的动力学特性,即汽车、飞机与摩托车的对比,请参见第3部分。)

这种“惯性导航系统(INS)与纯全球导航卫星系统(GNSS)”的区分,正是Atlas INS方案的基础:将功能强大的定位引擎与惯性传感技术相结合,从而确保在失去卫星信号时,系统仍能持续提供可用的位置信息。

伪测量:制造你从未测量过的信息

这是该估算器拥有的比较有趣的技巧之一。学术界通常将此类方法称为“伪测量”:利用你对车辆的了解,来限制系统被允许做什么,以及哪些情况根本说不通。

静止状态的检测是最典型的例子。假设惯性测量单元(IMU)报告称你没有旋转——因为旋转率正是它所测量的量——同时也报告称你没有加速度。严格来说,没有加速度意味着你的速度没有变化,而非速度为零。但实际车辆几乎从未保持完全恒定的速度,因此实际上,当IMU显示没有加速度且没有旋转时,可以很有把握地认为你处于静止状态。

实际上,我们不会直接读取原始的旋转和加速度数值,然后将其与零值进行比较。毕竟,加速度从来不会真正为零,因为重力始终存在,并分布在各个轴上——除非设备恰好处于完全水平状态。相反,我们会观察这些信号在一定时间窗口内的变化情况以及噪声大小。一辆真正停下来的车辆会产生一种独特且稳定的信号特征,通过这种方式进行分析,我们就能在忽略传感器自身偏置的情况下检测到车辆的停止状态。

一旦确认车辆已停止,这一技巧便大显身手。静止的汽车既不横向滑动也不纵向俯仰,因此我们可以断定其真实旋转角速度为零、真实速度为零,将这些值作为伪测量值反馈进去,并测量传感器读数与该值的偏差。这一偏差就是传感器误差,被彻底揭示出来。 基于此,我们构建传感器校正项,例如“该特定传感器以这种方式偏离了这个数值”,并将这些校正项应用于动力学模型和实时测量数据,从而使整个解决方案随着时间的推移变得更加精确。

这些校正并非一成不变,而是会不断演变。温度和其他环境因素会影响它们,因此系统在运行过程中会不断重新学习这些校正。但一旦准确掌握了它们,即使在理论上本不该有如此高精度的测量中,也能获得极高的精度。

模块与主机:估计器在何处运行

这一切听起来像是纯粹的数学,确实如此,但数学并非免费的。将估计量向前传播并运行动力学建模,都需要消耗实际的计算资源。

首先,计算可以驻留的两个位置。当定位在模块上运行时,估算器位于一个小型、自成体系的设备上,该设备拥有独立的处理器和独立的功耗预算,是一块专用于执行单一任务的电路板。当定位在主机上运行时,估算器则运行在车辆或机器人上已安装的更大主计算机上,该计算机采用与负责感知、规划以及应用程序其余部分相同的处理器类别。 模块结构紧凑、能效高,且易于集成到设计中。主机则拥有远超模块的计算能力和内存余量。本节剩余部分将重点探讨这种性能余量的差异。

这里有一个值得关注的历史背景:我们今天在估计量方面所做的大部分工作,都是为了让这类计算对小型计算机来说足够经济而发展起来的,其渊源可以追溯到阿波罗导航计算机。因此,从某种意义上说,该领域一直致力于将估计方法适配到资源受限的硬件上。但这都是相对而言的。

在性能较弱的设备上,比如模块中的嵌入式处理器,你可能会直接面临性能瓶颈。如果你向其输入数据速率极高的惯性测量单元(IMU)数据,或者运行特别耗资源的计算或算法,设备可能在物理层面上无法跟上。而其后果绝不仅仅是“运行变慢”这么简单。 试想一辆动态特性复杂且振动剧烈的赛车,其中高采样率的测量数据恰恰包含了你想要捕捉的细节。如果处理器无法以该速率跟上,你可能被迫使用低采样率的测量数据,而较低的采样率可能会掩盖那些至关重要的信息。或者,你可能被迫限制或禁用导航引擎中通常依赖的功能,从而导致性能下降。

这只是众多例子中的一个,但很好地说明了这一观点。为了达到最高精度,你需要使用的一些技术在某些设备上根本难以实现,因为这些设备同时还要处理其他诸多任务。这就是运行在模块上的功能强大的引擎与运行在主机处理器上、且留有充足余量的更健壮引擎之间的实际界限。这也正是为什么正确答案完全取决于平台的原因。

值得思考的问题

如果您正在构建自己的技术栈,或者正在评估一款商用定位引擎:

  • 估计量是如何根据自身的置信度对测量值进行加权的?当收到一个错误的GNSS测量值时,原本置信度较高的估计量会发生什么变化?
  • 该系统是否能实时学习传感器校正值,并且随着温度和环境条件的变化,是否会持续重新学习这些校正值?
  • 它能否利用诸如静止检测之类的伪测量结果,还是仅按传感器提供的原始数据进行处理?
  • 与仅使用GNSS相比,搭配IMU时其表现如何?当天空无法被观测时,会采用何种备用方案?
  • 该引擎针对的是哪种硬件?您所需的高速处理路径是否真的能与处理器上运行的其他所有内容一同容纳其中?

接下来会发生什么

估计器已经完成了它的任务。它每秒会生成几次甚至多次精确的滤波器状态。但仍有两个问题。首先,为了处理顺序错乱的测量数据,引擎可能被迫以略微滞后于实时的方式运行,这意味着其最新结果会略显过时。其次,该结果目前仅是引擎内部的数值;系统中的其他部分尚无法使用它。

在下一篇博文中,我们将介绍管道的最后一个阶段:能够实时恢复状态的输出传播器,以及将滤波器状态转换为您的堆栈能够实际消费的消息的输出和传输服务。

常见问题解答

定位引擎中的估计器究竟起什么作用?

它将来自不同传感器、有时几乎毫无关联的测量数据整合为单一的滤波器状态。其核心任务是根据每个测量值的预期误差及其与系统现有置信度的权重进行权衡,然后据此更新状态,而不是完全信任任何单个传感器。

什么是状态向量?

状态向量是指估计器正在求解的一组值。它包括位置、速度和姿态,以及一些不太明显的量,例如针对存在固有误差的传感器所做的校正,以及系统在求得准确位置的过程中作为副产品估计出的其他值。

INS系统与纯GNSS系统之间有什么区别?

惯性导航系统(INS)包含一个用于测量加速度和角速度的惯性测量单元(IMU),因此它能够追踪绝对定位点之间的位置和速度变化,并在隧道等信号中断的情况下继续进行推算导航。而仅依赖GNSS的系统则没有此类传感器,一旦失去卫星信号,就必须依赖对车辆运动的一般性假设。

在传感器融合中,什么是伪测量?

伪测量是基于系统对平台的认知而推导出的约束条件。例如,一旦发动机检测到车辆已停止,它就可以断定真实的转速和速度为零,将该值反馈给系统,并测量传感器读数与该值的偏差。这种偏差揭示了传感器误差,系统随后可以对此进行校正。

定位引擎是在模块上运行还是在主处理器上运行,这有区别吗?

是的。模块的计算能力和功耗均有限,如果遇到高负载需求(例如采样率极高的惯性测量单元(IMU)或计算成本较高的算法),可能会导致测量速率降低或某些功能被禁用。而主处理器具有更大的性能余量,因此能够实现模块无法支持的技术。具体选择取决于平台。


这是我们关于定位系统架构系列文章的第5部分。第1部分介绍了时间同步。第2部分介绍了预处理和传感器策略。第3部分介绍了导航引擎。第4部分介绍了RTK定位。

免费试用我们的RTK网络价格实惠,覆盖全球,精准无忧。立即开始免费试用

目录

免费试用我们的RTK网络

价格实惠,全球精准,省心省力

亚当·夏皮罗
Point One Navigation 的导航软件负责人,负责领导定位引擎和实时高精度导航算法的开发工作。