从零开始做自动驾驶定位(十三): 关于建图的讨论

文纯属转载,并认真学习一遍,感谢大佬分享!

注释:文中蓝色文本是自己加上去的

 

本文章配套源代码地址:https://github.com/Little-Potato-1990/localization_in_auto_driving

测试数据:https://pan.baidu.com/s/1TyXbifoTHubu3zt4jZ90Wg提取码: n9ys

代码在后续可能会有调整,如和文章有出入,以实际代码为准

========================================

系列文章进行到这里,建图部分算是基本完工了。

但是关于建图这件事倒还有几句话想说。

现在是早上7:25,在熬了一个通宵debug之后,打了这些字,浑浑噩噩,乱七八糟,胡说八道。

所以,对各位只有一个请求,就是读完这篇之后如果觉得浪费时间,别骂人就行了。

关于是否需要地图这个问题,高翔博士已经在别的文章里回答过了(文章链接),而且答得非常好,反正比我好,在观点上我和大佬是一致的,这里我想补充谈一些我的想法。

我想往这个问题的背后走一走,所以就不局限于城市自动驾驶场景,而是着眼于多场景的定位需求。

其实要不要建图的问题在不同场景的定位需求下确实有不同的答案,也即在不同场景的任务中要适应性地改变方案。

作为融合定位工程师,为了能够准确给出匹配的方案,我们首先要明白定位方案设计的核心思想是什么,各种不同的方案其实只是核心思想在不同场景下的应用而已。

我总结的核心其实就三个字:“互补性”。

1. 什么是互补性

“互补性”这三个字怎么强调都不为过,定位方案中传感器选择的过程,就是“寻找互补性”的过程,而融合的过程,就是“执行互补性”的过程。

不妨举几个例子。

第一个是IMU和GNSS的例子,前者有累计误差,但是没有位姿跳变,后者没有累计误差,但受干扰或遮挡时会跳变。二者融合,既能消除累计误差,又能避免跳变。可以抽象表述为,误差在“累积性”和“噪声性”上都有互补,那么融合既消除了累计性,又消除了噪声性。

第二个是GNSS和点云地图定位的例子,二者均不随时间累计,均有位姿跳变,前者在场景稀疏的情况下定位良好,但受高楼和树木遮挡时表现不好,后者在空旷处无法定位,但是就喜欢稠密的地方,二者融合,两种场景皆可解决。可以总结为在“异常场景”上有互补,融合使其场景适应性增强。

第三个是IMU和激光里程计的例子,二者均有累计误差,但是前者随时间累计,后者随距离累计。二者融合,速度快时,经过同样距离,imu累计误差比激光里程计小,应以imu定位结果为主,速度慢时,经过同样距离,imu累计误差更大,应以里程计定位为主。这样融合后的累计误差均比单一传感器时要小。可以总结为在“误差累计方式”上存在互补,融合使其累计误差减小。但是“累计性”仍然存在,并没有被消除。

这样的例子太多了,但是从上面三个例子中已经足以发现一个规律,融合消除或者减弱的是其有差异的那部分特性,具体包括IMU误差累积性与GNSS误差不累计性之间的差异,GNSS喜空旷与点云地图定位喜稠密之间的差异,IMU随时间累计与激光里程计随距离累计之间的差异,融合使他们的性能都有大幅度提升。但是我们同时也注意到,他们共同具有的那部分特性并没有被消除,比如IMU和激光里程计均具有累计性,融合之后仍有累计误差,虽然误差减小了。可以想见,即使再拿一万个具有累计误差的传感器和他们融合,融合结果的误差仍然是有累计的。

所以,我们有必要强调:只有差异性才能在融合中得到补偿

这句话也可以换一种表述方式:通过融合消除误差的过程,就是为该误差寻找差异性信息的过程。

这个差异性就是互补性。

《机器人学中的状态估计》有这样一句话“状态估计的过程,是理解传感器本质的过程”。在我的理解里,与其他传感器的互补性就是这个“本质”的重要组成部分。

2. 要寻找的是什么样的差异性?

差异性无处不在,我们面对一个系统,为了提高它的性能,应该怎样从众多的差异性中找到最重要的那个?

举个例子,在IMU和GNSS组合的方案中,融合结果之所以既不累计又不跳变,是因为GNSS的“不累计性”跟IMU“累计性”形成了一对差异性。现在把它放在城市环境下,有很大概率GNSS信号受遮挡,无法定位,这时这一对差异性就消失了,无法形成互补,那么融合结果就又重新具有了“累积性”。

要解决这个问题,就要从差异性消失的原因入手。

因为GNSS被稠密环境遮挡,导致我们需要的“不累计性”消失了,那么就要提供一个同样具有“不累计性”,并且在“遮挡性”上和GNSS能形成互补的信息,比如基于点云地图的定位就具备这个要求,所以加上这个信息之后,不仅提供了另一个“不累计型”,而且它和GNSS有形成了场景的互补性,那么这个融合系统就同时具备了“不累计性”和“稠密环境适应性”。

所以,解决故障时最缺失的那个差异性,就是我们最需要寻找的差异性。

这好像是一句废话。

为了证明这句废话并没有完全非废,我们举一个反例。

在上面这个故障中,如果我不添加点云地图定位,而是再添加一个轮速计,跟添加点云地图定位比,它是更好了,还是更坏了呢?(我们这里的讨论以性能为目的,暂不考虑复杂度、成本、数据下发等运营相关事项)。

添加轮速计以后,IMU+轮速计的组合把里程精度提高了,但是“累计性”仍然存在,它会让你不超差的时间长一些,能在指标内保持行走更远的距离。如果这个自动驾驶车就是在一个区域内来回清扫,这个区域两边都是楼,RTK几乎没有固定解,虽然区域并不是很大,但是车辆来回走,总路程很长,所以仍然会导致超差。所以这种做法只是给他续了命,并没有给他看好病。

我再举一个例子,同样是IMU和GNSS的组合方案,这次是在高速路场景下,用在卡车上,遇到的问题是高速路上偶尔会有一些隧道,进入隧道以后GNSS信号消失,IMU的位置保持精度又不足以保证在出隧道之前不超差,这时应该怎么办?

如果我们仍像上一个例子那样加一个点云地图定位可以吗?如果做过这方面工作的应该都知道,隧道内随着距离推进,点云是无差异性的,也就是说点云和地图匹配容易匹配不上。

反过来,如果我加一个轮速计呢,加上轮速计以后虽然有累计误差,但是累计误差减小了,而且车是单方向通过隧道,不会像清扫车那样在一个没信号的区域里来回走,所以需要保持的距离没那么长,在这种情况下,添加轮速计反而比添加点云地图定位要好。

我们把这两个例子在一起看,能发现什么呢?

我们能够发现同一套组合方案,出现同样的故障,同样的原因,但是解决方案不一样。而且在上一个例子中被抛弃的方案反而成了这个例子中的优选,而上一个例子中的优选,却在这个例子中被抛弃。

所以,我们把刚才的那句废话再说一遍:解决故障时最缺失的那个差异性,就是我们最需要寻找的差异性。

--- 方法的本人并无好坏,只需根据不同情况采用不同的方法,故视情况而定,

并且,在它的后面再追加一句:缺失程度是由目标任务决定的。

3. 系统性能的短板是由最缺失的那个差异性决定的

这一点其实是上一点的延续,之所以单独作为一个点来说,是因为它很重要。

我们或许见过这样的例子,有一个项目,需要在一个城市环境下,完成20cm以内的定位需求,而目前的方案中GNSS+IMU+轮速计精度不行,经常超差,原因就是城市中高楼和树木太多,导致观测信息有效率和质量都很差。

如果我们按照刚才的思路分析原因,这里的故障状态就是GNSS“非累计性”消失,导致融合系统重新出现“累积性”,解决故障就是要重新给这个“累积性”寻找差异信息,并且要和GNSS的“稠密遮挡性”形成差异。

而有些做法却是再添加一个具有“累计性”的东西,比如添加一个激光里程计,像loam那样。虽然它也和IMU与轮速计提供了差异性,但是这个不是最缺失的那个差异性,“累计性”是他们的共性,是消除不了的。所以这样的差异性再加一万个过来,也无法解决问题。如果是刚才清扫车的任务,那么超差是必然的。

既然这个系统里,性能的短板是由“累积性”决定的,不给它提供差异性信息,性能永远不会有本质上的提高。

4. 怎样利用互补性的原则设计方案

上面几个部分我们分析了什么是互补性、找什么样的互补性、以及怎样找(瞄准短板)

这就是我们一开始提到的定位方案设计的核心思想。

定位方案设计的过程,就是核心思想在不同场景下的运用过程,即抽象问题具象化。

列几个常见场景:

1)城市环境清扫车

a. GNSS和IMU是基础,二者融合消除了“累积性”

b. 由于经常出现GNSS长时间受遮挡,所以要寻找同样具有“非累积性”且“遮挡性”与GNSS互补的方案,即点云地图定位

c. 有些区域雷达容易受遮挡,比如人流量大,此时可低速或停车,IMU随时间累计,需增加不随时间累计的信息,即轮速计

d. 轮速计打滑、GNSS位姿跳变、点云地图位姿跳变均与IMU噪声特性形成互补

2)港口卡车

a. GNSS+IMU组合,GNSS信号有效率和质量均较高

b. 偶尔有起重架遮挡,正常通行可依赖IMU

c. 若在起重架下行驶慢,甚至停留,IMU随时间累计,误差增大,需要加轮速计

3)矿区

a. GNSS+IMU组合,GNSS信号有效率和质量均较高,基本够用

b. 偶尔有信号不好路段,需要增加额外里程计,因为矿区环境多变,点云地图方案不合理,而轮速计在坑洼路面表现不好,所以加激光里程计

 

 

 

上一篇:从零开始做自动驾驶定位(十二): 前端里程计扩展

下一篇:从零开始做自动驾驶定位(十四): 基于地图的定位

©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页