无人驾驶系统是一个复杂的系统。
系统主要由三个部分组成:算法端、Client端、云端。
算法子系统从传感器原始数据中提取有意义的信息以了解周围环境情况,并根据环境变化做出决策。
Client子系统融合多种算法以满足实时性与可靠性的要求。举例来说,传感器以60HZ的速度产生原始数据,Client子系统需要保证最长的流水线处理周期也能在16ms内完成。
云平台为无人车提供离线计算以及存储功能。通过云平台,我们能够测试新的算法、更新高精度地图并训练更加有效的识别、追踪、决策模型。
传感,就是从传感器原始数据中提取有意义信息。通常来说,不管是人也好,汽车也好,都是通过传感器来感知外界,例如我们人,使用眼睛去看画面,使用耳朵去听声音,使用皮肤去感受触觉,机器也需要不同类型的传感器去感知不同的外界物理量,一辆无人驾驶汽车装备有许多不同类型的主传感器。每一种类型的传感器都各有优劣,而且每一种传感器往往都只能感受到一部分的物理量,因此,来自不同传感器的传感数据应该有效地进行融合。
现在无人驾驶中普遍使用的传感器包括以下几种:
GPS/IMU、LIDAR、摄像头、雷达和声呐
GPS是全球定位系统,但是其所有权归美国,我们国家也发展出了自己的全球定位系统,即北斗,在商用方面已经有了很多的应用。GPS是一个相对准确的定位用传感器,但是它的更新频率过低,仅仅有10HZ,不足以提供足够实时的位置更新。
IMU是惯性测量单元,测量物体三轴姿态角(或角速率)以及加速度,通过这些数据可以计算出物体的姿态和位移。IMU的准确度随着时间降低,在长时间内并不能保证位置更新的准确性,但是,它有着GPS所欠缺的实时性,IMU的更新频率可以达到200HZ或者更高。
单一的传感器都有着其缺陷,通过整合GPS与IMU,在GPS得到数据的时候参考GPS的数据,而在没有GPS的数据的时候依赖IMU来计算出汽车的相对位移和姿态,并且通过随时重置IMU的基准参考点来消除其误差,我们可以为车辆定位提供既准确又足够实时的位置更新。
激光雷达可被用来绘制地图、定位以及避障。雷达的准确率非常高,因此在无人车设计中雷达通常被作为主传感器使用。激光雷达是以激光为光源,通过探测激光与被探测无相互作用的光波信号来完成遥感测量。激光雷达可以用来产生高精度地图,并针对高精地图完成移动车辆的定位;以及满足避障的要求。以Velodyne 64-束激光雷达为例,它可完成10HZ旋转并每秒可达到130万次读数。
被广泛使用在物体识别以及物体追踪等场景中,像是车道线检测、交通灯侦测、人行道检测中都以摄像头为主要解决方案。为了加强安全性,现有的无人车实现通常在车身周围使用至少八个摄像头,分别从前、后、左、右四个维度完成物体发现、识别、追踪等任务。这些摄像头通常以60HZ的频率工作,当多个摄像头同时工作时,将产生高达1.8GB每秒的巨数据。
此处的雷达是指毫米波雷达,一般的频率为77GHz和24GHz,声呐是指超声波传感器,雷达通过把电磁波能量射向空间某一方向,处在此方向上的物体反射碰到的电磁波;雷达再接收此反射波,提取有关该物体的某些信息(目标物体至雷达的距离,距离变化率或径向速度、方位、高度等)。雷达和声呐系统是避障的最后一道保障。雷达和声呐产生的数据用来表示在车的前进方向上最近障碍物的距离。一旦系统检测到前方不远有障碍物出现,则有极大的相撞危险,无人车会启动紧急刹车以完成避障。因此,雷达和声呐系统产生的数据不需要过多的处理,通常可直接被控制处理器采用,并不需要主计算流水线的介入,因为可实现转向,刹车、或预张紧安全带等紧急功能。
在传感部分获得了很多有效的数据后,数据奖杯推送到感知子系统,使得汽车可以充分了解其所处的周围的环境。所以感知子系统主要做的事情可以分为以下几部分:
GPS以较低的更新频率提供相对准确的位置信息;IMU则以较高的更新频率提供准确性偏低的位置信息。我们可使用卡尔曼滤波来整合两类数据各自的优势,合并提供准确且实时的位置信息更新。如图2所示,IMU每5ms更新一次,但是期间误差不断累积精度不断降低。所幸的是,每100ms可以得到一次GPS数据更新,以帮助我们校正IMU积累的误差。因此,我们最终可以获得实时并准确的位置信息。然而,我们不能仅仅依靠这样的数据组合以完成定位工作。原因有三:
因此作为补充方案,摄像头也被用为定位。简化来说,如图所示,基于视觉的定位由三个基本步骤组成:
借助于大量粒子滤波的激光雷达通常作为车辆定位的主传感器。由激光雷达产生的点云对环境进行了“形状化描述”,但并不足以区分各自不同的点。通过粒子滤波,系统可将已知地图与观测到的具体形状进行比较以减少位置的不确定性。
为了在地图中定位运动的车辆,我们使用粒子滤波的方法来关联已知地图和激光雷达测量过程。粒子滤波可以在10厘米的精度内达到实时定位的效果,在城市的复杂环境中尤为有效。然而,激光雷达也有其固有的缺点:如果空气中有悬浮的颗粒比如雨滴或者灰尘,测量结果将受到极大的扰动。因此,为了完成可靠并精准的定位,需要传感器融合,如图所示,处理来整合所有传感器的优点。
激光雷达可提供精准的深度信息,因此常被用于在无人驾驶中执行物体识别和追踪的任务。近年来,深度学习技术得到了快速的发展,通过深度学习可达到较显著的物体识别和追踪精度。通常采用卷积神经网络(CNN)来进行物体识别。
物体追踪可以被用来追踪邻近行驶的车辆或者路上的行人,以保证无人车在驾驶的过程中不会与其他移动的物体发生碰撞。近年来,相比传统的计算机视觉技术,深度学习技术已经展露出极大的优势,通过使用辅助的自然图像,离线训练好的模型直接应用在在线的物体追踪中。
但是依靠深度学习而来的模型也会有一些弊端,例如无法识别一些极端情况下的特殊物体,往往是一些一般情况下不会出现在路上或者路边的物体,我们在学习的时候没有提供足够多的样本,因此很难识别。
我们得到了传感器的数据,并且通过感知层判断了汽车自己的位置和所处的环境,那么接下来就是需要作出决策,即车应该怎么开。在决策层细化的话,有这么几个部分:
行为预测在我们人开车的时候往往是体现在经验层面上,我们会通过周围的所有信息判断周围的行人和车辆怎么走,红绿灯是否要变,以及路况是否适合开快等等,四级对于周围环境的下一秒的预测决定了汽车到底该怎么开。在无人驾驶系统中,这个过程由电脑来完成,电脑基于传感和感知到的数据,通过特定的模型来预测下一秒的环境状况,因为行为预测直接决定了下一秒汽车所执行的动作,因此行为预测在自动驾驶中至关重要。
为无人驾驶在动态环境中进行路径规划是一件非常复杂的事情,尤其如果车辆是在全速行驶的过程中,不当的路径规划有可能造成致命的伤害。路径规划中采取的一个方法是使用完全确定模型,它搜索所有可能的路径并利用代价函数的方式确定最佳路径。然后,完全确定模型对计算性能有着非常高的要求,因此很难在导航过程中达到实时的效果。为了避免计算复杂性并提供实时的路径规划,使用概率性模型成为了主要的优化方向。
安全性是无人驾驶中最为重要的考量,我们将使用至少两层级的避障机制来保证车辆不会在行驶过程中与障碍物发生碰撞。第一层级是基于交通情况预测的前瞻层级。交通情况预测机制根据现有的交通状况如拥堵、车速等,估计出碰撞发生时间与最短预测距离等参数。基于这些估计,避障机制将被启动以执行本地路径重规划。如果前瞻层级预测失效,第二级实时反应层将使用雷达数据再次进行本地路径重规划。一旦雷达侦测到路径前方出现障碍物,则立即执行避障操作。
Client系统就是整合之前提到的各种算法系统,例如避障、路径规划等,同时由于汽车的特殊性,要满足可靠性及实时性等要求。具体来说吧要克服以下三个方面的问题:
无人车是移动系统,因此需要云平台的支持。云平台主要从分布式计算以及分布式存储两方面对无人驾驶系统提供支持。无人驾驶系统中很多的应用,包括用于验证新算法的仿真应用,高精度地图产生和深度学习模型训练都需要云平台的支持。
这里推荐使用Spark构建分布式计算平台。
当我们为无人驾驶开发出新算法时,我们需要先通过仿真对此算法进行全面的测试,测试通过之后才进入真车测试环节。真车测试的成本非常高昂并且迭代周期异常之漫长,因此仿真测试的全面性和正确性对降低生产成本和生产周期尤为重要。在仿真测试环节,我们通过在ROS节点回放真实采集的道路交通情况,模拟真实的驾驶场景,完成对算法的测试。如果没有云平台的帮助,单机系统耗费数小时才能完成一个场景下的模拟测试,既耗时同事测试覆盖面有限。
在云平台中,Spark管理着分布式的多个计算节点,在每一个计算节点中,都可以部署一个场景下的ROS回访模拟。在无人驾驶物体识别测试中,单服务器需耗时3小时完成算法测试,如果使用8机Spark机群,时间可以缩短至25分钟。
如图所示,高精度地图产生过程非常复杂,涉及到:原始数据处理、点云生成、点云对其、2D反射地图生成、高精地图标注、地图生成等阶段。使用Spark,我们可以将所有这些阶段整合成为一个Spark作业。由于Spark天然的内存计算的特性,作业运行过程中产生的中间数据都存储在内存中。当整个地图生产作业提交之后,不同阶段之间产生的大量数据不需要使用磁盘存储,数据访问速度加快,从而极大提高了高精地图产生的性能。
下篇预告: 激光雷达的知识及应用
参考链接:
http://www.hkaco.com/
http://www.hongketest.com/forum.php
如有问题,欢迎随时联系我