《第一本无人驾驶技术书》

第一章 无人车:正在开始的未来
个人书本建议:
1.书籍中没有太多关于检测,分割,融合的算法,所以算法方面还是看2019年底英文的那一本新书。
2.这本书可以当综述看看,把握AD整体,并不适合专项技术的研究。
1.3.对自己来说,可以从感知以外的领域去了解各个模块,比如PNC,比如仿真,比如地图,比如系统。

无人车:正在开始的未来:
无人车的优势
A.死亡人数,尤其是高速死亡人数全球每年在124万,这些都是劳动力的丧失与经济损失。
B.死亡往往和疲劳驾驶和酒后驾驶有关
C.死亡类别基本都围绕在,car,bigcar,pedestrian,cyclist之间的互相碰撞。
D.当安装自动安装装置的时候,会让高速公路的死亡数量降低31%,设备基本包括碰撞警告检测,碰撞制动,车道偏离警告和盲点监测,其实也就是增强人的感知能力,看到人眼看不到的东西,然后进行pnc方面的联动还有系统方面的提醒。
E.缓解交通拥堵, 交通拥堵也会造成竞技的损失每年均成本会不停地增加, 我觉得车流量检测可以一部分缓解红绿灯动态分配时间的问题,但是由于无法和智能车一样实时交互,所以我觉得还是车载感应器和智能交通系统联合工作比较靠谱。
F.以前我觉得是伪需求的自动泊车也不太一样了,因为我以前没有考虑到车停车和人停车的区别,无人车停车大概能给每侧人为预留的空间减少10厘米,每个停车位大概就能减少1.95平方米,层高也可以按照车身进行设计,如果无人车与传统汽车进行混用,大概减少26%,如果直接给自动泊车使用,大概减少62%。
G.提高燃油利用率,大概提升4-10%,当然啦,自然而然就一下子减少了很多衍生垃圾,比如空气污染。

2.自动驾驶分级
自然是L0-L4
L0:屁都没有
L1:单一功能,各种辅助。
L2:部分自动化,需要短时间准备随时接管,就是硅谷钢铁侠公司提出的autopilot
L3:恭喜!来到有限情况下自动驾驶的世界,除了紧急情况不需要接管。
L4:完全自动驾驶!!!!

ADAS大属于0-2
L3基本就可以了,除了一些奇怪的情况,火山喷发,地震?!
无人驾驶和自动驾驶不同,无人驾驶是自动化驾驶的最高形态。

个人想法:全自动自动驾驶应该比目前的半自动驾驶更加安全,半自动驾驶时候,驾驶者/安全员接管车的时间会比系统发出警报的时间远远要长,基本上需要17秒。而人为反应刹车提示也远大于系统自己的判断(1.2>0.2秒),而在一个75英里/h的速度下,差距会相差37码,所以我觉得自动驾驶的安全方面也会想一个寒冬一样,熬到全自动的时代(L3+),会有一个质的飞跃。

3.无人驾驶系统简介。
无人驾驶系统是一个复杂的系统。主要有三个方面完成:算法,client,云端。算法就是感知,地图分析,决策,路径规划,路径预测等等。client就是综合这些的一个系统,主要包括机器人操作平台以及硬件平台。云端就是包括数据存储,模拟,高精度地图的绘制以及深度学习模型的训练。

主要步骤就是,算法对行车过程中传感器原始数据中提取有意义的信息以了解周遭的环境情况,并根据环境做出决策。client端融合多种算法来满足实时性和可靠性也就是对车子整体的操作。云平台就是为无人车提供离线计算以及存储功能,通过云平台,我们就可以测试新的算法,更新高精度地图并训练并训练更加有效地识别,追踪和决策模型。

算法由,传感器传感,感知,定位,决策组成。

传感器一般有多种,有效的融合之后能互补大家的劣势。一般由GPS/IMU,LIDAR,CAMERA,雷达和声呐组成。

GPS可以全球定位,但是10HZ的评率让其不能提供实时的位置更新,而且IMU准确度随着时间降低,因此长时间并不能保证位置更新的准确性,但是有GPS的实时性,可以>200HZ。通过融合GPS和IMU就可以提供准确且实时的位置更新。

激光雷达可以用来绘制地图,定位,避障,准确率非常高。激光雷达就是以激光作为光源,通过探测激光与探测物体相互之间的光波信号来完成遥感测量。但是如果是为了避障并不能满足感知能力,因为所有的东西都是障碍物的话,如何预测之后物体的路径的?人在驾车过程中,不是一般也要预测这个车之后会在哪儿么,如果单纯的只是避障,并不能对不同的物体预测不同的速度来行动,但是如果是激光点云的话,应该有一些几何方法来扣出一个物体的点云,需要之后查看一下传统论文。目前基本上是2017年开始的PointNet之后,开始用深度学习进行3D检测了,目前其实算力还是一定的限制并不能达到体素程度的卷积,但未来很有希望达到2D领域的检测精度,未来可期。

由于激光雷达方面对颜色的弱性,所以检测有颜色的物体或者体积很小的物体的时候,摄像头就很重要了,常见就是车道线,交通灯,人行道之类的。一般至少要配备八个摄像头,前后左右。

雷达就是静距离的避障最后一道保障,可以用来表示车前进方向上最近的障碍物的距离来在紧急情况下完成避障,声呐和雷达系统产生的数据不需要过多的处理,可以直接被控制处理器采用,并不需要主计算流水线的介入,因此可以实现转向,刹车等紧急功能。

定位:
camera图像也可以用于定位(需要自我推导)
如果视差图可以用于推导距离,那么从2D用内外参数矩阵转3D然后计算间隔应该也可以。这样就不需要双目摄像头了。但是精度应该不高,如果有深度摄像头也可以直接用来计算。
本文中的方法:
A.通过对立体图像的三角部分,首先获得视差图用以计算每个点的深度信息;
B.通过匹配连续立体图像帧之间的显著特征
C.通过比较捕捉到的显著特诊和已知地图上的点计算车辆与当前位置。
但是我觉得这个方法在扯淡,因为来一个强光,全就没用了,至少目前来说。

所以!!!传统的激光雷达方法来作为主传感器,对点云环境惊醒”形状性描述“,并不足以区分不同的点,通过粒子滤波,系统可以将已知地图和观测到的具体形状进行比较以减少位置的不确定性。误差大概在10cm内的实时定位,在复杂城市环境内尤为有效。然而,激光雷达有其固有的缺点,如果空气中有悬浮的颗粒(比如雨滴或者灰尘),测量结果就会有极大的扰动,所以我们需要利用多种传感器融合的技术进行多类型传感器数据融合,处理以整合所有传感器的有点,完成可靠的定位。

物体识别与跟踪
识别,嗯,这里说的我知道。
跟踪这里用于追踪临近车辆或行人,保证过程中不会与其他物体发生碰撞。

决策
在决策阶段,行为预测,路径规划以及避障机制三者结合起来实时的完成无人驾驶动作规划。

行为预测就是考验司机如何应对其他行驶车辆的可能行为,这种预判断直接影响了司机本人的架势决策,特别是在多车道环境或交通灯变灯的情况下,司机的预测决定下一秒的行车安全。所以,过度到无人车架势系统中,决策模块如何根据周围车辆的形式状况决策下一秒的行驶行为就显得至关重要。可以使用随机模型产生这些车辆的可达位置的集合,并用概率分布方法预测每一个可达位置集的相关概率。

路径规划
原本是搜索完全可能的路径并利用代价函数的方式确定最佳路径。然后,完全确定模型对计算性能有很高的算力要求,所以概率模型会变成主要的优化方向。

避障
安全性因为过于重要,至少要两层级的避障机制来确保车辆不会再行驶过程中发生碰撞。第一层级是基于交通情况预测的前瞻等级,估计碰撞发生时间与最短距离等参数。基于这些数据估计,避障机制将被启用以执行本地路径重规划。如果前瞻层级预测失效,则第二级实时反映层将使用的雷达数据再次进行本地路径重规划。一旦雷达侦测到路径前方出现障碍我,则立即执行避障操作。

用户端系统有三个要求
A.捕捉大量传感器数据可以快速得到处理
B.如果系统某部分失效,则系统需要足够的健壮性能从错误中回复
C.系统必须在设计的能耗和资源限定下完成所有的计算操作。

机器人操作系统ROS有很大潜力,baidu的apollo系统就是基于ros开发的。但是还有有一些问题:
可靠性:比如单节点控制,并没有监控机制可以恢复失效的节点
性能:当节点之间使用广播消息的方式进行通信时,将产生多次信息复制导致性能下降。
安全:ROS中没有授权加密机制,因此安全性收到很大的威胁。

尽管ROS2.0承诺将解决上述问题,但是现有版本的ROS并没有解决方案。

对于可靠性,我们需要开启ZooKeeper方案,健康了那个并自动重启失效节点,以确保整个ROS系统在任何时刻都是双备份模式。

对于性能:因为ROS节点之间交互非常频繁,所以设计高效的通信机制对确保ROS的性能很重要。首先本地节点和其他节点通信时都要走完整个TCP/IP全栈协议、有20微秒的延迟。取消TCP/IP同行模式,用共享内存的方式完成节点通信,ROS在广播消息时,消息被多次复制与传输,消耗了大量的系统带宽。如果改成目的地更明确地多路经传输机制则将极大改善系统的带宽和吞吐量

对于安全,如果一个ROS节点被挟制后,就会不停地进行内存分配,整个系统最终将因内存耗尽而导致剩余节点失效而全线崩溃,本身没有加密机制,黑客很容易在节点之间窃听消息并完成系统的入侵。为了解决问题,使用Linux containers,LXC的方法限制每个节点可供使用的资源数,并用沙盒的方式确保每个节点的运行独立。这样可以最大限度的防止资源泄露。对通信消息进行加密和解密,防止窃听。

云平台
云平台主要是移动系统,因此需要云平台的分布式计算和分布式储存。

仿真
通过仿真降低真车的测试成本很重要,可以让迭代周期变得小很多。如果没有仿真,每个小模拟测试都会消费数个小时去真实场景。
在云平台中,spark管理着分布式的多个计算节点,在每一个计算节点中,都可以部署一个场景下的ROS回访模拟。在无人驾驶物体识别测试中,单服务器需消耗3小时完成算法测试,如果使用8机spark肌群,则时间可以缩短至25分钟。

高精度地图生成。
高精度地图的产生过程十分复杂,设计原始数据的处理,点云生成,点云对齐,2D反射地图生成,高精度地图标注,地图生成等阶段。使用spark可以将所有这些阶段整合成一个spark作业。由于spark有天然的内存计算的特征,在作业运行过程中产生的中间数据都储存在内存中。当整个地图产生作业提交以后,不同阶段之间产生的大量数据不需要使用磁盘存储,从而极大提高高精度地图产生的性能。

展望!!!!!
通过这一下午系统的学习,原本我就知道无人驾驶就不是一个单一技术,但是没想到有那么多潜在的需求点和具体整合系统方法。现在的序幕才刚刚开启,其中有着千千万万的机会有待发掘,目前自动驾驶产业化在多个方面都取得了很大进步,其中合作共享已成为共识,产业链不断整合,业界企业相继展开合作,传感器价格将不断下降,算力成本也在不断下降,未来可期。