自动驾驶车辆通常都是预先建立地图,然后利用此图进行定位,所以真正的、完整的、高贵的SLAM只发生在第一次采集并生成地图之后,后续就是如何用这些地图进行定位导航的问题。另一方面,自动驾驶用的地图和机器人的地图。
低速自动驾驶车辆的地图
乘用车,大家也了解,一年半载的肯定没法实际上路,上了路还有一系列的法律法规问题,还有一堆的世(shi)界(shi)难(ju)题(keng)等着各位工程师去解决(tian keng)呢,所以这会儿我们也不需要多么着急(反正有更着急的人在)。
而对于低速车来说,相对安全,避不了障大不了先停在原地让人先过,还显得文明礼让(我家的产品避障完全没问题啊!)。这两年各种配送、清扫、挖矿之类的自动驾驶低速车会慢慢的抬头,大家应该会渐渐看到一些功能和价格都能够接受的产品。而我自己是做SLAM的,所以主要谈谈这类车上的SLAM问题。
和学术界平时说的SLAM不同,自动驾驶车辆通常都是预先建立地图,然后利用此图进行定位,所以真正的、完整的、高贵的SLAM只发生在第一次采集并生成地图之后,后续就是如何用这些地图进行定位导航的问题。另一方面,自动驾驶用的地图和机器人的地图,对,就是你平时见到的那种,ROS里的黑白灰图,也会有点差别。
ROS里的占据栅格地图,我喜欢叫它黑白灰图
机器人用的栅格地图,很显然,主要表达何处有障碍物,何处是可通行的区域,此外就没有了。它具有基础的导航与定位功能,精度也不错(厘米级),制作起来十分简单,基本可以让机器人自动生成。对于送餐扫地的室内机器人来说,这种地图基本就够用了。但是为什么自动驾驶不用这种图呢?它和高精地图有哪些差别呢?
一条很明显的区别是:在室内,机器人可以去任意可以通过的地方,不会有太多阻拦。而对于自动驾驶来说,每条路都有对应的交通规则:有些地方只能靠右行驶,有些地方不能停车,十字路口还有复杂的通行规则。
智行者科技无人清扫消毒车蜗小白
室内机器人可以利用栅格地图进行导航,但在室外可不能在十字路口上横冲直撞。所以,在导航层面,室内与室外的机器人出现了明显的区别。室内的导航可以基于栅格来实现诸如A*那样的算法,但室外基本要依赖事先画好的车道。如果你希望你的外卖机器人既能在室内取货,又要跑到马路上送到2公里外面的客户家中,那么就得同时考虑这两种地图的使用方法了。所以你看,低速车辆是界于传统移动机器人与乘用车之间的产物,它的地图比两边现成产品都要复杂。
我们会用不同的术语来描述地图的构建阶段。大体来说,从一无所有的采集过程开始,我们会碰到两个大阶段:
1、SLAM阶段:解决从原始传感器数据开始,构建某种基础地图的过程(一般是三维点云或二维图像、栅格);
2、标注阶段:在SLAM结果基础上进行人为标注,实现更精细的交通规则控制。
SLAM阶段往往是自动的,而标注阶段目前还主要是人工的,完美体现了“人工智能”相合作的过程。目前乘用车高精地图生产主要成本是在标注阶段,通常是一群人在在电脑前加班加点地赶着各种工程排期。显然,这个标注过程的好坏直接影响地图质量,一旦标错就等着观赏车辆各种怪异行为吧。
然而,我们也没法完全实现标注过程的自动化,因为很多人为规则并不体现在场景数据里。比如公园里的草坪,物流车大概不能走上去,而洒水车大概就应该在草坪上行走,而我们无法通过点云或图像识别出此类规则,给此类地图带来了很大的人工工作量。
比如下面这个点云图,虽然结构上看不出来,但实际上中间一圈是一个草坪,正常情况下车辆是不能进去的。所以,只能通过人工来标注车辆的行驶区域,才能让小车正确地导航。
标注过程通常是一些非常繁琐的步骤,而且因为繁琐所以价格还挺高。根据2019年的《高精地图产业发展现状及趋势》,一公里高精地图的成本费用还在几千至几万元。采集车虽然贵但毕竟只有几台,计算机开一下程序也只需要一些电费,所以成本主要还是在标注上面。这里的商业化道路还是挺困难的,然而也没什么办法(摊手)。
问题低速车辆的SLAM
由于我个人是做SLAM的,咱们还是把主题回到SLAM上来。目前室外车辆的SLAM还是以多线激光为主。虽然激光SLAM原理上比较成熟,然而实际结合其他传感器来SLAM,还是有一些问题的。学术界的论文总喜欢挑好看的结果来发表,而现实问题往往是肮脏的、动态的、复杂的,这一点,没解决过实际问题的人可能感受不深。
低速车辆如果真正应用,那么地图构建时间就不能太长。如果我们在意地图质量的话,标注工作基本是省不了的,所以对SLAM端的要求就可以总结为:自动化、高可靠性,以及对复杂环境的适应能力(不需要现场人员调参)。这件事情看似简单,但实际用来总有各种各样的问题。
激光SLAM
激光SLAM的基本原理就是点云拼接,有些地方也叫注册、配准,等等。可以利用柱状物等特征信息来拼接,也可以直接用点来拼接,总之这方面各种方法大同小异,区别不大。激光SLAM的开源项目也有很多,感兴趣同学可以看看LOAM/Lego-Loam等经典的方案。
Lego-LOAM Demo图
当然,论文上的图片肯定是美丽的,实际当中也肯定是会遇到问题的。如果只靠激光配准就可以把地图生成出来,那这边SLAM也就没什么难度可言了。我们不妨来看看激光SLAM有什么实际问题。
1、点云拼接是个类似于里程计的过程,它们计算的是局部点云之间的相对运动关系。这个运动误差会逐渐累计,直到地图出现严重变形。其中,高度上的变形会比较明显,你会发现地图一端可能会“翘起”或“下沉”。
激光SLAM的累计误差使得地图高度出现错误,两侧对不上
2、点云拼接的结果依赖于现场的实际三维结构。在结构化道路中,基本可以期待地图由中间的马路与两侧的路牙、树木、护栏组成;但在非结构化道路中,很难对场景结构有一个先验的知识。它可以是普通马路,也可能是人来人往的商业街,也可能是万众聚会的广场……总之,你很容易看到激光失效的场景。
激光匹配在广场或单侧台阶等场景下会导致失效,原本直线前进的轨迹会出现扭曲情形,并使得远处物体模糊
3、更常见的就是来回路段由于匹配失误导致地图出现重影,有些论文也称为“鬼影”。这种现象出现的原因,是两个激光点云看到了同样的结构,但由于距离较远,匹配算法没法将它们完整匹配起来。
4、最后,纯粹由激光匹配得到的地图,没有现实世界物理位置信息。如果缺少物理世界信息,那么你没法按照点云图把车辆导航到指定位置;如果有两个激光点云时,也很难把它们完美地拼接起来。
所以,我们需要处理激光与其他传感器的组合。在点云失效时,尝试用其他传感器进行补偿;在点云出现累计误差时,用其他传感器来进行修复。
激光SLAM和GPS组合
室外自动驾驶车辆通常有一个GPS接收器,指示其物理世界位置。结合GPS信号,我们就可以构建带有物理世界经纬度的地图。这个物理坐标在某些业务中是很重要的,因为车辆很可能需要导航到另一个真实世界的建筑物中。相对的,纯室内的小车就不需要这种坐标,因为它们只在一间或几间屋里导航,而不必关心这间屋子在真实世界当中什么位置。
智行者科技无人清扫消毒车蜗小白
GPS的一大特点就是“看天吃饭”。信号好的时候它可以到达厘米级定位,可以直接使用差分GPS+IMU的结果来进行组合导航。这种做法在如今的无人车、无人机里还很常见。对于天天在高速公路上奔跑的乘用车来说,绝大部分情况下可以以GPS为主导;但是,对于园区里运营的小车,进个树林穿个夹层都是稀松平常的,GPS“信号不好”比“信号良好”更加常见。你能够接受无人车因为“信号不好”半路抛锚的情况吗?
在公园、景区的道路上,小车会经常穿梭于树林、桥梁之中。这些地形上GPS很有可能出现大范围不可用的情形
GPS噪声是个很有意思的模型。通常GPS接收器根据自身接收情况,会给出一个信号强弱的判断。然而,由于著名的多径效应,GPS也可能给出一个信号很强,但位置错误的数据。这就要求SLAM算法对各种信号下的GPS都有稳定的表现。在GPS好时,应该听从GPS的轨迹走向;在GPS不好的区域,能够正确识别并改进。
GPS信号良好的路段例子。左侧:点云地图;右侧:轨迹图。轨迹图中红色为优化后轨迹,蓝色为GPS轨迹。由于GPS全程良好,优化轨迹与GPS重合。
GPS信号不佳的例子。可以看到右侧蓝色轨迹在无规律跳动,但是点云仍需要正常构建。
GPS信号的不确定还会带来一些实际的问题。例如,如果车辆开机时GPS信号不好,那么车辆如何确定自身的物理位置?它应该是开到一个开阔区域,等待GPS信号变好,还是以一种“不确定物理位置,但有相对位置”的状态开始运行?
假设如此,那么运行一段时间后GPS信号变为正常,定位信息应该直接跳到GPS指向的物理位置吗?这种跳变会不会对控制产生不良的影响?另一方面,在建图时,我们通常需要按照物理位置来区分不同的地图,例如公园北侧和南侧很可能使用两个不同的地图。如果GPS信号不好,车辆应该如何确定使用哪一张地图?这些问题都需要一个实际的解决方案。
GPS的处理方式是室内外车辆SLAM的一个很大的不同点。这会让SLAM的逻辑变得更加复杂。我们需要结合其他的传感器位置来判断GPS信号的有效性,这往往要用到一些全局轨迹的估计方法,而像卡尔曼滤波器这样有时间顺序的算法会受到干扰。
另外,如果我们还使用了基于位置的回环检测算法,那么它会明显受到GPS信号好坏的影响。一旦GPS信号变差,激光SLAM的性质就变为一个里程计,其累计误差变大之后,基于位置的回环检测算法就很可能失效。
激光SLAM的退化特性
激光SLAM存在各种失效情况,有些你甚至很难事先预料到,例如:
在广场、机场等开阔区域,即使是多线激光,也只能看到几圈地面上的点云。仅使用地面点云进行匹配,很可能在水平面上发生随机移动。
在长隧道、单侧墙、桥梁等场地中,激光匹配会存在一个方向上的额外自由度。也就是说,沿着隧道前进时,获取到的激光点云是一样的,使得匹配算法无法准确估计这个方向上的运动。类似地,如果机器绕着一个圈柱形物体运动时,也会发生这种情况。
在一些异形建筑面前,激光可能发生意想不到的失效情形。
这些结果被称为激光的“退化”,也就是说,本来能够估计6自由度的激光匹配算法,由于场景结构的限制,某几个自由度上的运动无法估计。这时,就需要建图算法来降低激光轨迹的权重,利用其他轨迹来补偿激光的失效了。
位于长沙的梅溪湖艺术中心是令我印象深刻的地方(虽然我本人并没有去过现场)。但在这个区域的中心,激光匹配就会非常不稳定,给出一些错误的结果
大型地图的拼接与回环检测
室外SLAM的另一个特点是:室内地图通常有一个面积限制,例如大多家居面积都在200平方米以内;而室外地图可能达到几十万平米,乘用车甚至可以建立城市公路级别的地图。
智行者科技无人乘用车星骥系列
对于扫地机这些家用机器人,我们允许它自由地在室内探索,因为室内面积毕竟是有限的;而对于室外车辆,如果自由探索的话,很可能沿着一个方向出去就回不来了。这就要求室外高精地图有一个事先的采集过程。
目前各家公司对高精地图的采集方式并不一样。乘用车通常需要驾驶员在采集区域内行驶固定圈数,然后把数据带回数据中心进行解算。乘用车的数据量非常大,一般几十GB至TB级别水平,其解算也需要大量计算资源。
而对于低速车,它们运动范围受业务和电池限制,通常在几十公里以内,适配时间在一两天以内。而对更大的区域,往往进行分块、分区的建图方式。
对于较大的地图,通常使用分段采集、建图、拼接的方式
低速车辆由于业务变更较快,对地图的构建时间和灵活性有一定的要求。例如,清扫车这一周可能在东区运行,下一周就可能在西区运行。或者,可能要求在以往的清扫区域基础上添加一块新的区域。这种需求一方面要求地图能够以更快的速度进行构建,一方面也要求地图能够快速地进行拼接与合并。同时,由于场景的客观通行限制,低速车辆有时候并不能“绕场景一整圈”,而必须一段一段地采集数据。
在这个数据中,我们先采集了横向的道路,然后分别采集两次纵向道路,最后进行合并
地图合并算法可以自由设计。我们可以把两个局部地图视为固定不变的点云,然后使用简单的ICP进行刚性拼接。如果局部地图本身没有畸变,这种做法的效果也挺不错。但是,如果拼接地图存在多个重叠区域,这种刚性拼接就可能导致“拼对了头但拼错了尾”的情况。所以,我们更倾向于借助类回环检测与Pose Graph的方法,对两条轨迹进行融合而非刚性拼接。
团队沟通和其他问题
当然,现实当中还会存在算法之外的问题。毕竟大多数地方只有几位算法工程师,而数据则来自全国各地成千上万台运营的小车。终端的运营人员也好,采集人员也好,大部分并不具备地图定位的相关知识,往往不理解“怎样才是科学的采图轨迹”。这种沟通问题是我们日常工作中见到的最多的问题。
智行者科技无人物流配送车
由于场景的复杂性,建图算法不可能保证100%的成功率。如果碰到一个全程缺少GPS的开阔、弱纹理、高动态场景,任何算法都无法完全保障。这听着像是在抬杠,但是很遗憾的是,现实当中某些大型车库、大型车站内部、高楼间商业街正属于此类场景。这些场景中最容易出现的问题是由于GPS的缺失,地图累计误差过大,出现错位或重影的情况。在这些情况中,我们就只能借助人工的方式来辅助建图了。
在地图出现明显错位情况下,我们利用可视化软件,对融合轨迹进行人工干预,修复累计误差,使地图回到正确的情况
小结
以上我们谈论了一部分低速自动驾驶车辆在建图中碰到的实际问题。对于建图算法的开发人员来说,能够足不出户看到全国各地的地图,也是一件令人欣慰的事情。相信很多人也会享受这一过程,参与到地图构建算法研发的过程中来吧。
虽然非结构化道路激光SLAM中的挑战很多,但是在发现问题中去享受解决问题的快感,是一件能让人很爽的事情,我将永远乐此不疲。
机器人公司 机器人应用 智能医疗 物联网 机器人排名 机器人企业 教育机器人 机器人开发 独角兽 消毒机器人品牌 消毒机器人 |