智能网联汽车(Intelligent Connected Vehicle,ICV)是指将车联网和智能车进行有机结合,最终可以替代人来操作的新一代汽车。智能网联汽车借助搭载的传感器、控制器、执行器等装置,借助现代通信与网络技术,在强有力的社会组织和协同之下,形成车与车(V2V)、车与路(V2R)、车与基础设施(V2I)……车与万物(V2X)间的信息交互和共享。
SLAM(Simultaneous Localization And Mapping,即时定位与地图构建)也被称为CML(Concurrent Mapping and Localization,并发定位与建图),研究当一个机器人被放置在未知环境中时,如何让它在探索方向的同时逐步描绘出表征该环境的地图。家用扫地机器人是最典型的例子,新购买的扫地机器人对家里完成自主建图后,即可进行自主清扫、自主避障。
智能网联汽车是由清华大学的李克强院士团队提出的,是智能汽车发展到新阶段的完整表达,是汽车与移动通信、人工智能、云计算等新一代电子信息技术相互结合和融合创新的重要载体。
自动驾驶汽车与智能汽车定义相同,是指在汽车上安装相关装置,可以部分或完全地替代人来完成汽车的驾驶操作——比如,摄像头、雷达替代了人的眼睛和耳朵去感知环境,中央控制器替代了人的大脑去进行思考决策,线控执行装置代替人的手和脚去控制加减速和转弯,从而实现各种级别的汽车自动驾驶。
顾名思义,车联网就是在汽车行驶的过程中实现车和车的联网、车和基础设施的联网、车和云平台的联网、车和其他移动端的联网,再加上车内部的通信网,最终形成一张层层嵌套、环环相扣的动态移动通信系统网。某种意义上,智能网联汽车就是自动驾驶汽车(智能汽车)发展的新阶段,也是车联网的重要组成部分。
智能网联汽车是一种跨技术、跨产业领域的新兴汽车体系,从不同角度、不同背景出发,对它的理解是有差异的。各国对于智能网联汽车的定义不同,叫法也不尽相同,但终极目标是一样的,即可实现上路安全行驶的无人驾驶汽车。智能网联汽车更侧重于解决安全、节能、环保等制约产业发展的核心问题,车辆本身具备自主的环境感知能力,这一体系的聚焦点是在车上,发展重点是提高汽车的安全性。
国家《智能网联汽车团体标准体系建设指南》(2021版)中提出“3+N”智能网联汽车相关标准研究框架,推动建立多场景标准,开展多维度应用示范。功能型无人车是“N类创新应用”中的重要组成部分,包括可自主执行物流、运输、配送、巡逻、零售、清扫、接驳、救援、侦察等各类功能型任务的无人车,是未来智能交通与智慧城市建设的核心要素,是下一代智能地面运载工具演变的基础,对我国智能汽车产业的增量发展具有重要意义。
本书介绍的SLAM相关技术在低速功能型无人车中被广泛应用,特别是需要在无交通规则的封闭道路场景中行驶或操作的无人车。
注意:
本书中提到的地图包括三维地图和二维地图,如无特别说明,一般是指点云地图,而不是传统意义上的地图,下文不再对此进行额外说明。
SLAM最早是Smith、Self和Cheeseman于1988年提出的。后来,Leonard和Reid将到目前为止SLAM的发展过程总结为3个阶段,下面简单介绍一下这3个阶段,1.4.1节有更详细的介绍。
· 经典时代(1986—2004年):早期阶段,主要研究SLAM问题的定义、基于概率框架的建模和求解方法。
· 算法分析时代(2004—2015年):深入研究SLAM问题的一些性质,比如稀疏性、收敛性、一致性等,更多样、更高效的算法也被相继提出。
· 鲁棒感知时代(2015年至今):开始考虑算法的鲁棒性、可扩展性,资源约束下的高效算法,高层语义认知任务导向等。
他们认为,正如人类的行为一样,机器人也会按照人类的行为方式来运作。为了进一步理解SLAM的功能,我们将机器人或自动驾驶车辆的算法与人类的真实行为做个类比。
假设将一个饥寒交迫的人空降在一个陌生的城市,那么这个人为了迅速熟悉环境并解决饥饿问题,可能会做以下事情。
· 首先观察周边的环境,记住相应的路标,包括路名和建筑(传感器数据输入和特征提取)。
· 把这些信息记录在脑海里,并且在脑海里回想整个路面的信息(三维重建和地图构建)。
· 尝试在这个环境里走走看看,获取新的明显的地标信息,并且修正自己头脑中的地图印象(BA优化或扩展卡尔曼滤波器)。
· 根据自己前一段时间行走得到的周边地标信息确定自己的位置。
· 根据自己所走过的路径的相关特征信息,和自己脑海中的三维重建信息进行对比,看一看是否回到了曾经走过的历史路径。
在自动驾驶汽车中上述5个步骤会同时进行,这也正是SLAM里的Simultaneous(“同时”“同步”)一词的意义。
SLAM包括两部分功能——定位(估算出机器人/无人车的状态)和建图(构建机器人所处环境的地图)。机器人/无人车状态是由其姿态(位置和方向)来描述的,可能会包含机器人运行速度等信息;而地图表示的是与环境描述有关的信息,例如地标、障碍物的位置等。
在没有环境先验信息的条件下,机器人/无人车搭载特定传感器的主体在运动过程中建立环境的模型,同时估计自己的运动。如果传感器主要为相机,那就称为视觉SLAM,如iRobot扫地机器人、依靠视觉的AVP自主泊车。如果传感器为激光雷达,那就称为激光SLAM。目前二维激光SLAM技术的发展已经较为成熟,既可用于民用服务(如扫地机器人),也可用于工业现场。基于激光点云的三维SLAM技术利用三维激光传感器获取三维空间点数据,之后通过相邻点云帧之间的扫描匹配进行位姿估计,并建立完整的点云地图,与二维激光SLAM具有相通的技术原理。三维激光雷达通过光学测距,可以直接采集到海量的具有角度和距离精准信息的点,这些点的合集被称为点云,它们可以反映出真实环境中的几何信息。由于建图直观,测距精度极高,且不容易受到光照变化和视角变化的影响,激光雷达已逐步成为室外大型环境的地图构建应用中必不可少的传感器。
日常出行人们使用的高德地图、百度地图均是导航地图,由道路、背景、注记和POI(Point of Information)组成,定位精度至少为米级。相较于人们使用的导航地图,不同自动驾驶场景下使用的地图不同,一般包括占据栅格地图(Occupancy Grid Map)、特征地图(Feature Map)、点云地图(Point Cloud Map)、高精地图(High Definition Map),下面分别介绍。
1.占据栅格地图
SLAM中建图使用较多的激光雷达会发射激光束,发射出的激光遇到障碍物会被反射,这样就能得到激光从发射到收到的时间差,使用该时间差乘以速度除以2就得到了传感器到该方向上最近障碍物的距离。为了表达周围环境中障碍物所处的相对位置,我们引入“占据栅格地图”的概念。
占据栅格地图是一种地图的描述方式,如图1—1所示,在占据栅格地图中,把空间划分为有限数量的栅格 m i ,栅格边长就是划分精度,每个栅格由栅格占用概率 P 以及相应的坐标进行描述。占据栅格地图认为每个栅格是独立的。
占据栅格地图可以分为二维占据栅格地图和三维占据栅格地图。二维占据栅格地图目前在二维激光SLAM中应用最为广泛。在三维激光SLAM中,也会用OctoMap(八叉树地图)将三维点云地图转换为二维栅格地图以用于导航。
三维占据栅格地图的一个比较典型的应用是特斯拉的Occupancy Network感知技术。特斯拉的三维占据栅格地图基于BEVNet实现,在行车过程中实时感知道路边缘语义分割、道路结构语义分割以及周围环境的三维占据表达。基本的思想是将三维空间划分成非常小的立方体体素(voxel),通过0/1赋值对voxel进行二分类:有物体的voxel赋值为1,表示voxel被物体占据;没有物体的voxel被赋值为0。当然实际的赋值可以是概率值,表示voxel存在物体的概率,也可以理解成密度或者透明度。voxel的属性除了是否被占据,还包含语义信息和速度信息等。其中速度信息是一个三维向量,用于表述voxel运动的速度和方向,类似于二维图像中的光流(Optical Flow)。通过速度信息,可以判断物体是否运动。
图1—1 占据栅格地图
2.特征地图
特征地图使用与环境有关的几何特征(如点、直线、面)表示环境,其优点是相对数据存储量和运算量比较小,大大降低了路标特征的数量。但面对复杂环境时,很难用几何特征来描述地图环境特征,导致地图构建困难、抗干扰能力差。几何特征地图只局限于表示可参数化的环境路标或者可建模对象。基于特征地图的SLAM算法是将环境表示为一组组参数化的特征值,比如点、线、角等。这些特征指的是环境中那些突显于背景、易于传感器分辨检测且可以通过参数进行描述的东西。使用这种方法的时候,必须对环境中不同类型的特征分别建立测量模型以便准确提取。
状态向量不仅包括机器人的位姿信息,还有特征的位置信息。随着新特征的不断提取与确认,状态向量的维度将不断增加。因为描述环境的特征值是相对于机器人而言的,所以环境特征测量的不确定性是与机器人位姿估计的不确定性息息相关的。可以在理论上证明,随着时间的不断推移、测量的持续进行,地图中的特征将是相互关联的,也就是说此时随意给定一个特征的绝对坐标值,都将得到一个精准的地图。
这种方法在环境特征容易识别的场合下表现很好,但是在特征不太明显的非结构化环境中则不太适用。
3.点云地图
点云是一系列点的集合,使用不同方法得到的点云有不同的数据结构,例如,根据激光测量原理得到的点云包含三维坐标和激光反射强度数据,根据视觉测量得到的点云数据包含三维坐标和颜色数据。根据点的稀疏程度不同,点云地图可以分为稀疏点云地图和稠密点云地图。稀疏点云地图主要用于机器人定位,而稠密点云地图通常规模很大,一个640×480的深度点云图像就包含30万个点数据,而且生成的点云地图是无序的,无法直接通过索引进行查询。对稠密点云地图进行体素滤波降采样后可以用于导航,比较常用的方法是通过OctoMap框架压缩地图,将其转换为八叉树地图,其分辨率可调。
4.高精地图
高精地图英文称为HD Map(High Definition Map,从数据精度和要素丰富度角度定义)或HAD Map(Highly Automated Driving Map,从自动驾驶功能的分级标准角度定义),是保障自动驾驶安全性与稳定性的关键。高精地图主要应用于高精定位、环境感知、决策规划、仿真运行4大场景。高精地图由含有语义信息的车道模型、道路部件、道路属性等矢量信息以及用于多传感器定位的特征图层构成。高精地图主要分为静态数据和动态数据两部分。其中静态数据包括道路层、车道层、交通设施层等图层信息;动态数据包括实时路况层、交通事件层等图层信息。
业界比较通用的高精地图有两种,一种是NDS(Navigation Data Standard,导航数据标准),另一种是OpenDRIVE。其他的标准还包括JDRMA标准、KIWI格式标准、GDF标准、ETAK标准、Navtech标准。OpenDRIVE是ASAM OpenX众多标准中的一个,主要用于描述路网结构,它与动态道路网络描述(OpenSCENARIO)和静态道路表面描述(OpenCRG)共同描述场景、道路和路面情况。OpenDRIVE将道路分为3个部分:道路参考线、车道和道路设施。百度Apollo在原有的ASAM组织发布的标准上进行了改进,如新增了禁停区、人行横道、减速带等元素。
高精地图的创建分为4步:数据采集、数据处理、元素识别、人工验证。
· 数据采集:高精地图的数据采集需要利用多传感器融合的SLAM技术,以构建三维点云地图。这个过程中,车辆或者设备配备了多种传感器,如激光雷达、相机、GPS(Global Positioning System,全球定位系统)等,用于感知周围环境并获取相关数据。这样的多传感器融合能够提高地图的精度和稳定性。由于高精地图包含的信息丰富,数据采集与制作必须由具备导航电子地图制作、测绘资质的团队来完成,以确保数据的准确性和可靠性。
· 数据处理:在数据采集完成后,进行数据处理是下一个关键步骤。这一步包括对GPS数据和点云数据进行后处理和对齐。通过精细的处理和对齐,可以获得更高精度的原始点云数据,为后续的地图制作打下基础。数据处理的目标是消除误差、提高数据的质量,并确保数据的一致性。
· 元素识别:数据处理完成后,地图生产线任务正式启动。在这一阶段中会使用半自动化的工具链和生产平台。标注员会对点云和原始图像进行车道级路网矢量特征的绘制,这些特征可能包括道路标线、交通信号灯、路口形状等。这一步是为了从原始数据中提取出有用的地图元素和特征,为后续的地图制作奠定基础。
· 人工验证:在元素识别完成后,地图需要经过人工验证。专业的团队将对地图数据进行仔细审查和验证,确保地图的准确性和完整性。这一步是确保高精地图质量的重要环节。通过人工验证,可以进一步修正可能存在的误差和不准确性,从而得到高质量的高精地图。
高精地图的创建是一个复杂而系统的过程,需要经过精密的数据采集、处理和验证。只有经过严格的流程和专业团队的努力,才能获得可信赖的高精地图,为自动驾驶等应用提供有力支持。高精地图生产完成后必须经过国家测绘局的加密处理才能发布。由于高精地图具有成本和法规的约束,工业界正从“重地图,轻感知”走向“重感知,轻地图”。
在一些无人车应用中,地标是已知的。例如,可以将RFIC(Radio Frequency Integrated Circuit,射频集成电路)标签或者UWB(Ultra Wide Band,超宽带)标签作为人工地标。还有一种已知地标是大家熟悉的GPS。在这些已经提供精确信标的情况下,可能不需要SLAM技术。
总的来说,SLAM技术为无人驾驶提供了一个切实可行的方案,在缺乏特定的定位设施的环境下可以采用用户自己构建的地图进行定位。这大大扩展了导航避障的应用场景。
在SLAM技术讨论中,我们经常会碰到如下两个问题。
该场景是否需要SLAM技术?
该场景里,SLAM问题是否能被有效求解?
下面我们将从SLAM的必要性和可求解性两方面来回答这两个问题。
1.SLAM必要性
讨论移动机器人SLAM时,通常构建的地图是占据栅格地图,它只能表达障碍物、边界、可自由通行区域和未知区域等有限信息。然而实际作业环境中包含更丰富、更具体的描述障碍物、边界和通行区域的信息。例如,障碍物可以是静止机器、堆放的杂物、货物等,边界可以是墙面、栅栏等,通行区域还可以区分行人区域、机器移动区域以及人机混合区域。
移动机器人的自动作业通常发生在相对简单的环境中,如工厂、仓库、小型室内环境等,因此其运动只需满足基本的“不撞墙”“不撞人”等安全要求,不需要过多的环境信息来满足其作业需求。相比之下,自动驾驶中的场景要求更丰富的环境信息,因为机动车的运动受交通规则约束,远不及移动机器人的自由运动。
在自动驾驶中,需要收集更多的环境信息用于定位和决策等后续功能逻辑模块。占据栅格地图或原始点云地图通常在移动机器人中使用,不能直接用于自动驾驶中的定位和决策。因此,高精地图的概念应运而生。它的目的是满足自动驾驶系统在复杂环境下安全稳定运行的需求,扩大车辆的环境感知范围,并辅助实时定位,增强规划和决策能力。高精地图的需求源于对复杂场景的处理需求,它是逐渐发展而来的。需要指出的是,高精地图的环境信息采集功能借用了SLAM中与建图相关的技术,因此SLAM技术在实现高精地图方面发挥着重要作用。
那使用了高精地图的自动驾驶系统,是否还需要SLAM来实现定位呢?答案是即便在有高精地图的情况下,若GPS信号被遮挡,则仍需要SLAM定位技术来辅助自动驾驶车辆进行定位。例如,虽然自动驾驶系统前端依赖GNSS(Global Navigation Satellite System,全球导航卫星系统)和IMU(Inertial Measurement Unit,惯性测量单元)进行定位,但在高架桥上行驶时需要借助SLAM定位技术,基于高精定位图层通过自动驾驶定位算法进行全局地图匹配,以消除误差、保证精度。
SLAM算法的目标是建立对全局环境的认知,包括车辆自身的运动测量和回环检测(或称闭环检测)。如果不考虑回环检测的因素,那么SLAM算法将简化为里程计算法。根据里程计的特性,它通常是通过车轮编码器的数据来计算的,而从里程计获得的位姿估计误差会随着里程的增加而快速累积,使得位姿估计结果在一定时间后便不再可靠,这是硬件特性导致的。而这个不足也成为SLAM技术发展的主要推动力之一,SLAM技术有助于缩小里程计的累积误差并对其进行纠正。因此,无人驾驶是需要完整的SLAM算法的。
首先,不管是视觉SLAM还是激光SLAM,都是基于过去10年的SLAM研究成果实现的。只不过视觉SLAM可以看作一个简化的SLAM系统,因为其中的回环检测模块被禁用了。应该说,近10年来SLAM的研究促进了传感器的融合,而这种融合则推动了无人驾驶在更具挑战性的场景下的应用。
其次,如果自动驾驶车辆只执行里程计而忽略回环检测的话,那意味着车辆一直处于一个探索新的空间的过程,而回环检测会使得车辆尝试了解当前路径是否与之前路径重叠,并且有寻找最优路径的动作。回环检测里的尺度检测和位置检测使自动驾驶车辆更容易检测到真正的回环路径,并丢弃虚假的回环。因此,SLAM技术提供了对错误数据和感知混叠的鉴别能力,避免某些位置和历史位置数据相似而导致系统判断出错,保证算法运行的鲁棒性。
最后,SLAM技术可以生成全局地图。自动驾驶技术在探索环境并描绘出该环境的全局地图时,需要确保对环境进行全面的覆盖,这同样离不开SLAM功能,只有SLAM才能完成全局一致的三维点云图重建。
2.SLAM可求解性
对于本节开始时的第二个问题,SLAM问题的有效求解涉及如下几个方面的信息。
· 自动驾驶车辆的运动类型、速度、传感器种类、车载系统可用的计算资源等。
· 自动驾驶车辆所处的环境是否存在特定的参考定位标识、动态变换的物体或人、雷同的传感器数据等。
· 对车辆状态估计的精度、地图的精度和类型,包括状态精度范围、估计延迟时间、最大操作时间、地图最大尺寸等。
上述信息直接影响该场景的SLAM问题能否被有效求解。比如,采用配备里程计和激光雷达的无人车对室内环境进行二维建图,并保证构建出来的地图具有足够的精度(<10cm)和稳健性。类似的低速无人车或机器人的应用场景都是研究较为成熟的领域,所以这些场景的SLAM问题基本都能有效求解。