功能控制逻辑
与记忆泊车类似,记忆行车这一功能主要实现简单的面向服务的应用服务。实现的典型应用场景包括:上下班路线,接送儿童,商超采购等。即,驾驶员通过在系统上设置想要到达的目的地,激活记忆行车功能后,智驾车辆可以参照之前记忆的行车路线自主驾驶到目的地。期间,系统需要记忆用户示教路线,实现从 A 到 B 点的全场景领航辅助驾驶,包含自动通过路口、掉头、变道等。
实现记忆行车功能的步骤主要分为两步:
1)首先,驾驶员在手动驾驶下,将车辆从起始点A开到终点B。期间,记忆行车系统需要在后台完成如下工作:
后台通过即时定位建图构建驾驶员开车行驶过的路段对应的实时局部地图;
后台需要结合构建的地图在其行驶期间同步实现对环境信息(主要指路标)的实时记录;
后台通过类似影子模式一样的功能记录驾驶员的整个驾驶习惯;
后台需要结合对应构建的地图、环境信息、车辆行驶控制状态、驾驶习惯控制状态信息进行实时记录;
2)其次,在激活记忆行车功能后,系统需要实现包含如下子功能:
后台需要通过识别的道路环境信息以及车身姿态,确认车辆当前位置是否是在之前定义的记忆行车路线上;
如果路线重定位成功,则控制车辆沿着既定的路线向前行驶至目的地。期间,整个车辆的智驾功能调用控制可以完全参照之前存储的驾驶数据进行控制;
如果重定位不成功,则提示不可激活记忆行车,并在驾驶员控制车辆手动驾驶至目的地时,将当前路段信息重新构建到新的地图中,新构建的地图可以认为是之前即时建图的补充。后续做记忆行车控制前可以将两条路径均纳入备选路径中。
一个比较尖锐的问题就是记忆行车和传统的城市自动驾驶在对整车场景的控制上会有哪些相同和不同点呢?
实际上,记忆行车可以看成一种狭义上的城市自动驾驶NOA。他们应用的传感器单元是完全一致的,唯一的差别的就是对地图的利用上。对于城市自动驾驶NOA来说,通常是会考虑直接导入高精地图做精确定位,并融合导航信息寻找车辆的下一步的行驶路径,而这里的记忆行车则需要区分为用户陪驾和系统试校准两步。
①用户陪驾/手动建图
用户陪驾阶段又称为手动建图阶段。其过程是驾驶手动驾驶车辆过程中系统通过后台偷偷调用在线感知模块端口进行即时定位建图,使得临时的建图可以更好的替代城区/高速路所构建的地图,这个过程类似于在城市自动驾驶中的众包建图。这里需要注意的是,考虑到国家对数据安全、信息安全以及地图资质的问题,我们通过记忆建图的地图一般就是单车类型,该图是不能通过网络上传至云端的。当然,如果是针对由同一家tier1开发的同类车型可考虑通过软件升级方式将地图包在该车型内部进行资源共享。
②智能建图
对于记忆行车功能而言,还会充分考虑在智能驾驶系统功能激活的过程中,利用后台记录的方式进行智能建图。这种智能建图过程一般还需要融合传统高精定位地图传递的一部分先验知识数据,对当前即时建图进行有效补充。比如,当车辆行驶在某段位置路段上,对于记忆行车来说,考虑到算力、识别能力、存储能力等,只会考虑固定的横向距离(一般为10m范围内)对自车道及旁车道的三条车道进行建模。而高精地图则可以考虑更宽范围的建图(甚至达到5-6条车道)。这样就可考虑在记忆地图与高精地图匹配上后,将高精地图的数据补充到记忆地图中间,扩展记忆地图的识别范围和建图能力。
当然,如智能建图所描述的功能来说,要求同时进行两层次的计算。就有可能造成对资源的巨大消耗。这点上就对智驾域控的计算资源提出更大的需求。
③智能推荐
智能推荐是记忆行车功能相对于传统智驾系统功能较大的区别点。一般情况下,传统的ADAS系统功能的激活通常是由驾驶员主动发起,系统处于被动激活。当然也有一些主机厂倾向于将整个功能做成可推荐式激活的方式。而记忆行车功能最大的特色就是“重定位+智能推荐”。即进入之前已经完成建图的某条路径上时,会对自车姿态和位置做定位匹配,再根据一定的HMI交互规则对进行智能推荐是否打开记忆行车功能。
这里需要注意的是,如果从A点到达B点过程中,驾驶员有可能在两段不同的时间内选择不同的驾驶路径行驶至终点。对于记忆建图来说,可能会存在存两段图的情况。记忆行车感知智驾系统步骤分解
对于智驾域最重要的感知源处理而言(无论是视觉点云、激光点云还是毫米波点云),总体可以分为四个层面的处理过程:场景重建、要素识别、关键目标重组和自车重新定位。
“场景重建”意味着从视频序列推断场景中的几何体,包括车辆在场景中的位置。“要素识别”是一个术语,用于将语义标签附加到视频图像或场景的各个识别对象中,识别中包括各种不同的层次结构。“自车重新定位”是指车辆相对于其周围环境的位置识别和度量定位。“关键目标重组”是将重定位、识别、重建形成的三个组成部分信息重新整合成统一表示的方法。
对于如上几种感知如何应用到实际的感知场景的分析过程可以通过如下例子对过程进行详细分析。
这里我们可以针对智能行车功能中的新的一项功能——“记忆行泊车”进行说明。记忆行泊车这类功能需要在自动驾驶的视觉环境中,通过驾驶员手动驾驶阶段在后台提前绘制车辆周围环境的地图,同时在用户地图中估计车辆的当前姿态。对于建图和重定位的关键任务之一是根据之前记录的车辆行驶路径重定位来重新定位行驶轨迹的方法。
1)自车建图重定位
首先,在场景训练阶段需要将自车行驶通过训练的“封闭路段”(这里的封闭是个广义的概念),针对从基础设施传输的地图HDMap作为底图进行智慧建图。当然,从车端的角度,也是需要结合一圈摄像头进行场景BEV建图。这里需要说明的是,从优先级上讲,我们一般会考虑在HDMap能够保证一定的精度进行正常发送时,一般以HDMap作为底图输入给车端。而BEV则作为HDMap失效后的兜底,为自车提供后备车辆定位地图。
下图显示了一个经典的基于特征的重定位pipelines。
2)环境目标语义识别
其次,在场景理解阶段进行三维重建(即恢复场景三维几何要素)和要素识别。包括场景绘制、障碍物避免、机动车辆控制、甚至反射照明场景元素等特性。场景要素识别实际是一种对于场景元素的高级推理。即将场景中的汽车、二轮车、卡车等元素进行空间层次结构划分子集,每个子集进行信息标注。
在图像识别的关键要素中,首要是需要提取图像中的显著特征。图像中的一个显著特征可能是像素区域,其中强度以特定方式变化,例如边缘、角落或斑点。要估计地标在世界坐标系上的位置,就需要执行特定目标跟踪,其中可以匹配相同特征的两个或多个视图。一旦车辆移动的足够远导致对于图像特征目标抓取不够清晰时,算法则会拍摄另一张图像并重新提取相应的特征。通过重建相应的特征信息来获得它们在真实世界中的坐标和姿态。然后,这些检测到的、描述的和定位的地标被存储在永久存储器中,以描述车辆轨迹的相对位置。如果车辆返回限定范围内的相同位置,实时特征检测将与存储的地标匹配,以恢复车辆相对于存储轨迹的姿态。
3)后融合处理
最后,则是最重要的一步,控制自车对预先登记的轨迹进行跟随行驶。这个过程实际是对于前期识别和重建结果进行进一步处理,通过相机在世界坐标系中绘制目标地图,参照当前车辆的位置、位姿、自身信息等状态对该预先设置的轨迹做时空物体跟踪。比如,通过训练过的路段时,需要进行后期融合,将传感输出的数据进行路径复制,指导车辆按照既定的路径行驶。记忆行车技术支持
1)记忆建图需求
记忆建图原则是一种纯车端传感感知的功能,但是考虑到建图过程中需要进行重定位和路径规划。因此,还需要结合GPS定位和导航地图这类关联系统的功能输入。
并且考虑定位的精准性、实时性,最好还能结合RTK这类即时定位修正单元对实际的定位过程进行实时修正。
2)建图存储空间需求
整个记忆行车功能比较大的资源消耗基本都体现在对于建图、存图和重定位上。特别是根据环境目标来即时建图上,需要充分考虑所构建的地图大小。这里和高精地图的众包建图类似,实际它是一种车端的建图过程。
由于记忆行车建图所构建的地图整体是通过车端传感器对整个环境信息的识别上。识别的过程实际就是一种即时定位建图、存图的过程。因此如上过程需要对中央计算单元的算力和存储能力提出需求。
这里需要说明的是整个记忆行车功能激活的路线长度需要做一定程度的限定。通常需要考虑在就近行驶情况。比如上下班的日常通勤时间,为1小时(大概为35km左右)。如考虑超过1.5小时通勤时一般会存在一定的高速/快速场景(大概为 40~50km),路程约为70-80km。我们考虑的记忆行车过程其最大的记忆路线通常设置为150km,每2M/公里触发一次地图数据存储。并且,对于记忆行车来说,其建图过程还涉及包含对一些高精地图覆盖的内部道路进行建图。这类稍微极端的建图成功率一般能达到90%。
建图过程主要采用小图到大图的拼接过程。即,通过通过定位的车身位置,考虑在其周围10-20m的范围内进行小图建图,随后通过小图拼接可以形成大图,最终使得拼接结果接近真值。
对于这类记忆建图来说一般会充分考虑采用差分数据更新的方式进行。通常,针对如上路段的存储需求一般10GB足够,这类地图通常也是存储在EMMC里面。
3)建图实时性要求
通常情况下,我们这里提到的记忆建图是在中低速情况下进行。因为速度越低意味着对同一个类似场景下的感知建图所处理的时间就越长。但是,如果考虑一些较长距离的通勤情况,在高速路段下的特征是否支持记忆建图呢?
记忆行车与NOA融合下的智能行车模式
主要考虑记忆地图和高精地图融合的技术难度和实现可能性,是否存在一键激活和后台自主切换模式。这里我们需要说明的是实际上ADAS系统功能本身在很多场景应用下也是和记忆行车有一定的重叠的。比如在考虑同一段行驶路线上的场景,当事前通过记忆行车功能对该段行驶路径已经完成建图后,当驾驶员重新驶入该路段起点,并且系统通过重定位成功后,便可以很顺利的进入记忆行车模式(当然这种进入前最好是需要通过HMI提示驾驶员是否准予进入)。但是,如果驾驶员这时候强制切换进入了ADAS系统功能,比如点对点驾驶辅助功能NOA后,系统是会根据驾驶优先级选择响应当前驾驶员主动操作指令的。那么从另一个角度上说,如果驾驶员首先进入的是NOA功能呢?当由于某些特殊原因,比如高精地图/导航地图短暂丢失导致NOA功能降级无法正常使用,但是记忆建图的信息仍旧存在时,是否可以很好从后台实现无感切换,从而确保用户更好的感知体验呢?
从基础原理上讲答案是肯定的。但是需要注意以下几点:
1)NOA无感切换到记忆行车,需要重点审视NOA的设置目的是否和记忆行车一致。如果一致才考虑切换,否则可能将用户送至另外的目的地,这是完全不能被接受的。
2)如果NOA的目的地和记忆行车完全匹配。期间,如果因为NOA的高精地图/导航地图丢失而导致的降级切入记忆行车,如果后续又重新识别到高精地图/导航信号恢复,那么是否还需要重新切换回NOA。
3)如果NOA的目的地和记忆行车部分匹配。在匹配的路端行驶期间,如果因为NOA地图丢失导致降级切入记忆行车,后续是否考虑短暂切入记忆行车维持一部分主动驾驶后再地图重新识别后,重新切换回NOA。当然这个过程需要冒一定风险,比如即使重叠路端走完,也还没有重新识别到数据,是否就需要真正的退出ADAS系统功能了。
记忆建图与传统ADAS系统功能时序示意图
整个记忆行车处理时序图如下所示。整个记忆行车模块包括操作者Driver、MAD状态机、任务管理器、地图引擎、定位模块、感知模块、环境模型、规控等多个模块。首先,启动车辆上电后,记忆行车MAD的状态机变通过自检后反馈状态可用,然后派发任务项给记忆“地图引擎”,这里实际上是类似模仿高精地图的叫法。同时,也将感知任务派发给感知模块,感知模块启动感知任务后反馈检测结果给MAD状态机,MAD状态机通过重定位模块检查感知数据是否能够能够与之前建立的记忆地图相匹配。如果重定位成功,MAD状态机则派发成功标志给环境模型,同时,记忆地图和定位模块也会将相应的地图信息进行融合。最后,在规控模块进行整个轨迹规划和控制模块执行。
总结
记忆行车作为一种新兴的自动驾驶功能,可以说也是参照记忆泊车的功能设计方式形成的一种高效的行车场景驾驶方式。相比于记忆泊车而言,记忆行车基本对场景边界没有提出太大的要求,一般的道路均可以作为行驶条件。但是记忆行车强依赖于前置地图构建过程,当前置地图构建失败或者准确率不够时,就无法在通过记忆泊车进行有效的重定位和车辆控制。因此,本文也重点阐述了记忆泊车的地图构建、资源需求和重定位的基础算法。