现代信息技术发展史
20世纪60年代:仙童电子和Intel通过硅晶体微处理器技术的创新开创了信息技术的新时代(硅谷的起源)
20世纪80年代:软件系统发展、图形界面广泛应用、个人电脑概念普及
21世纪初:Google互联网&搜索引擎将信息互联
2004年:Facebook革新的社交网络模式
互联网人口膨胀:Airbnb&Uber等公司通过共享经济的思维把人类社会经济模式推广到互联网社会
now:机器人开始出现作为服务成载体
———————————————————————————————————————————————————
研究显示无人驾驶会带来的颠覆性改善:
无人驾驶系统组成:
云平台主要从分布式计算及分布式存储两方面对无人驾驶系统提供支持。Spark构建分布式计算平台、OpenCL构建异构计算平台、Alluxio作为内存存储平台。
无人驾驶作为人工智能的重大应用是众多技术的整合,需要算法创新、系统融合、云平台支持。
无人驾驶技术是多技术集成:传感器、定位与深度学习、高精地图、路径规划、障碍物检测与规避、机械控制、系统集成与优化、能耗与散热管理等
传感器采集阶段:GPS(定位)、光学雷达(定位及障碍物检测)、照相机(深度学习的物体识别、定位辅助)
感知阶段:定位与物体识别(可以通过滤波方法对各种传感器信息融合,光学雷达扫描信息与已知高精地图做对比或与之前扫描信息用ICP算法做对比获得当前车辆位置)
计划与控制阶段:根据位置信息和识别信息调节行车计划并转化为控制信号操控车辆。全局路径规划可用A-Star类似算法实现,局部路径规划可用DWA等算法实现。
光学雷达(LiDAR),先向目标发射一束激光,根据接受反射的时间间隔确定距离,根据距离和激光发射角度通过集合变化推出物体位置信息。激光传播受外界干扰小,检测距离一般可达100m以上。商用LiDAR激光波长远低于传统雷达,因此在测距和表面形状更精准,一般可达厘米级。
LiDAR系统分为三部分:
每一个检测点都包括了空间坐标信息(x,y,z)、光强度信息
LiDAR每个激光发射器都有其编号和固定的垂直角度,LiDAR每旋转一周,收集到的所有反射点坐标的集合就形成了点云。
高精地图是由众多的点云拼接而成,主要用于无人车的精准定位。地图数据采集车在需要绘制高精地图的路线上反复行驶收集点云数据,后期由人工标注,过滤一些点云图中的错误信息,然后进行对其拼接形成最终的高精地图。(此处想起百度数据采集车的豪华传感器阵容,价值千万)
高精度军用差分GPS在静态时可以在理想的环境下达到厘米级精度(理想是指大气没有太多悬浮介质且测量时GPS有较强的接受信号)。无人车动态环境且在城市中普遍存在GPS多路径反射(卫星GPS信号在楼宇之间反射最终到达接收器的距离要大于实际两者之间距离)这样GPS很容易达到几十厘米甚至几米的误差。所以需要GPS以外的手段增强无人车定位精度。
可以通过观察到的环境信息帮助定位,简化为概率表示,根据贝叶斯法则给定当前位置观测到点云信息的概率分布(一般分为局部估计(通过当前时刻点云和上一时刻点云的匹配,借助几何推导估计无人车在当前位置的可能性)和全局估计(利用当前时刻点云和高精地图做匹配,得到当前位置相对地图某一位置的可能性)实际会将两种定位方法结合使用);还要乘上对当前位置的预测的概率分布(可以简单用GPS给出的位置信息作为预测)。通过计算后验概率,估算无人车在哪一个位置的可能性最高。
单一摄像头2D图像无法得到准确距离信息,多摄像头生成深度图计算量很大,另外光学摄像头受光照条件影响巨大,物体识别准确度不稳定,2D物体识别由于维度缺失会出现特殊情况。而利用LiDAR生成的点晕可以提高物体检测准确度,并且算法复杂度较低更能满足无人车实时性需求。
LiDAR的精度也会受天气的影响,空气中的悬浮物、大雾、雨天、会影响光线接收。(MIT近期似乎研究声称找到一种复杂天气中不影响雷达探测距离的方法)
16线LiDAR每秒要处理30w个点,大量的数据处理是无人车定位算法和障碍物检查算法实时性需要面临的挑战,对计算资源(CPU、GPU、FPGA)提出了很大的需求。
成本下不来会大大阻碍无人车的商业化
无人驾驶技术渐趋成熟,但LiDAR是一个始终绕不过去的技术,纯视觉与GPS/IMU的定位及笔账方案价格虽低却不成熟,很难应用于户外。但是LiDAR价格高居不下。比较有希望的方法是用较低价的LiDAR与其他低价传感器做信息混合,较精确的推算出车辆的位置(用更好的算法弥补硬件传感器的不足),这应该是近期无人车的发展方向。
GPS更新频率低,惯性传感器更新频率高,可以形成很好的互补,通过基于卡尔曼滤波的传感器融合技术可以达到较好的定位效果。
无人驾驶对可靠性和安全性要求非常高,除了基于GPS及惯性传感器的定位还可以使用LiDAR点晕与高精地图匹配,以及视觉里程计算法等定位算法,各种定位法互相纠正以达到更精准的定位。
GPS系统:太空中32颗GPS卫星、地面上1个主控站、3个数据注入站、5个检测站、用户端GPS接收机
最少只需其中3颗卫星,就能确定用户端位置和海拔。民用GPS可达十米左右的定位精度。由于GPS系统使用低频信号,天气不佳信号仍可保持相当的穿透性
GPS定位利用基本三角定位原理,通过无线电信号传输时间来测量距离。
一般光速乘时间得到距离信息,但测量的传播时间有一点误差就会造成距离上的巨大误差。我们日常使用的时钟存在一定误差。为解决这个问题,每颗卫星上都安装了原子钟以达到纳米级精度。但是为了使卫星定位系统使用同步时钟,需要在所有卫星和接收机上都安装原子钟(价格在几万美元),显然这不现实。为解决这个问题,卫星上使用原子钟,接收机使用经常需要调校的普通石英钟:接收机接收来自四颗或更多卫星的信号并计算自身误差就可将自身时钟调整到统一时间值。
差分GPS的原理:如果两个GPS接收机的距离非常近两者具有相似的误差,如果其中一个误差可以精确计算出另一个的结果就可以修正,差分的概念是其中一个GPS接收机是精确地点的基准站,通过对比测量坐标与已知坐标对比可以计算出误差,基准站再将误差值发送给方圆100km内的差分GPS接收器去纠正。
GPS在理想环境中较为准确,但是在城市环境中楼宇之间对GPS信号的反射与折射会造成测量的混乱。
惯性传感器(IMU):检测和测量加速度与旋转运动
基础惯性传感器:加速度计、角速度计
基于MEMS的六轴惯性传感器(包含三个轴加速度传感器和三个轴的陀螺仪)
MEMS惯性传感器的三个级别:低精度惯性传感器(误差比较大,用于消费电子)、中级惯性传感器(误差一定修正,但有累计误差,用于汽车电子和GPS辅助导航)、高精度惯性传感器(军用级、宇航级)
MEMS加速度计原理:靠MEMS中可移动部分的惯性(中间悬臂构造的电容板)P35
MEMS角速度计原理:角动量守恒原理(角速度与电容变化成正比)
由于制作工艺,测量数据通常会有一定误差。
第一种误差:偏移误差(陀螺仪加速度计不运动时会有非零数据输出);两次积分得到位移数据会放大偏移误差,并且会随时间累积。
第二种误差:比例误差(测量的输出和被检测输入的变化之间的比率)两次积分位移误差会不断累积。
第三种误差:背景白噪声
为纠正以上误差需要找出偏移误差和比例误差,用校准参数对惯性传感器原数据进行修正。但是复杂惯性传感器误差会随温度变化,终究会有累积误差。所以很难单独用IMU进行无人车定位。
GPS相对精准、更新频率低、不能满足实时要求
IMU定位误差时间累积、频率高
所以这两种定位方法可以互相补偿
卡尔曼滤波器可以从一组有限、包含噪声、通过对物体位置的观察序列预测物体位置坐标及速度,并且具有很强的鲁棒性(即使对物体观测有误差,也可以根据历史状态与当前相对位置观测推出物体位置)。
卡尔曼滤波器运行两个阶段:预测阶段基于上个时间点的位置信息去预测当前的位置信息;更新阶段通过当前对物体位置的观测去纠正位置预测,更新物体位置。
在上一次位置估算的基础上使用惯性传感器对当前位置进行实时预测,用新收到的GPS数据对当前位置预测进行更新;不断执行以上两步可以对无人车进行准确实时定位(可以根据GPS与IMU更新频率判断需要的数据量)。
GPS&IMU定位系统:低频精确GPS、高频漂移IMU、卡尔曼滤波器融合
除了GPS&IMU还可以使用LiDAR点云与高精地图进行匹配、视觉里程计等定位,互相纠正。
广义视觉传感器:超声波雷达、毫米波雷达、LiDAR、摄像头
超声波雷达:倒车雷达
激光雷达/毫米波雷达:中长距测据和环境感知(激光雷达测量精度和速度更出色,但毫米波雷达更能适应恶劣天气)
网站:http://www.cvlibs.net/datasets/kitti/
数据采集设备有:一对140w像素彩色摄像头、一对140w像素的黑白摄像头、一个激光雷达、一个GPS/IMU定位系统
用激光雷达提供的数据作为ground truth,建立了面向多个测试任务的数据集:
1、Stereo/Optical Flow数据集:由图片对组成(Stereo图片对是两个摄像头在不同的位置时拍摄的,Optical Flow图片对是一个摄像头在相邻时间点拍摄的)
2、视觉里程测量数据集:由22个Stereo图片对序列组成
3、三维物体检测数据集:手工标注,用三维框标注物体大小和朝向
4、物体追踪数据集:手工标注(行人、轿车)
5、路面和车道检测数据集:手工标注
例如:交通灯识别(谷歌)、高速公路车道检测定位(特斯拉)
CV在无人车场景解决主要问题分为物体识别与跟踪、车辆本身定位。
物体识别与跟踪:深度学习识别场景、物体、标志等。需要Optical Flow等运动预测算法实现运动物体跟踪。
车辆本身定位:基于拓扑与地标的算法、基于几何的视觉里程计算法
在CV领域Optical Flow是图片序列或视频中像素级密集对应关系(例如在每个像素上估算一个二维的偏移矢量,得到的Optical Flow以二维的矢量场表示)(单摄像头连续时刻图像)立体视觉是从多视图像中建立对应关系(多摄像头同一时刻图像)。
需要基本假设:不同图像中对应点相似、不同图像对应点集合的空间变换基本满足刚体条件
P43 :改进深度学习中的Siamese网络
物体识别是CV核心问题之一,近年深度学习革命性发展,CV领域大量使用CNN,物体识别准确度和速度有很大提升,但物体识别算法输出一般有噪声:识别不稳定、物体被遮挡、短暂误识别
如何基于有噪声的识别结果获得鲁棒的运动轨迹:基于马尔可夫决策过程(MDP)的MOT(multi-object tracking)算法(运动目标追踪用一个MDP建模)P45
基于视觉的定位算法:基于拓扑与地标的算法(把所有地标组成一个拓扑图,相对简单些)、基于几何的视觉里程计算法(分为单目、双目)纯单目存在无法推算出观察到的物体大小,需要假设或推算初步大小,或与传感器结合定位;双目通过左右图计算特征点深度,推算出物体大小。
纯视觉定位计算的问题是算法对光线相当敏感
验证一个方案是否可行需要标准的测试方法(KITTI数据集)、视觉主导的无人车系统是目前研究的前沿。
卷积神经网络(Convolutional Neural Network,CNN):适用于连续输入信号的一种深度神经网络(声音、图像、视频),在神经网络的结构上针对视觉输入本身特点做了特定的设计。
相比于通常的深度神经网络(Deep Netural Network,DNN)的主要特点:
1、高层神经元只接受某些低层神经元的输入
2、同一层中不同神经元的输入权重共享
激光雷达提供高精离散三维点云,通过摄像头可以得到密集的3D信息。为获得空间点深度,通常做基于局部的图片匹配(由于单个像素值可能不稳定,所以需要利用周围的像素和平滑性假设,将求解变成最小化问题)和Optical Flow任务解决的问题类似。
下面介绍的算法对两者都适用
该算法用一个CNN计算matching cost,网络的输入是两个图片的一小块,输出是这两块不匹配的概率,相当于一个cost函数,两者匹配是时0,不匹配时最大可能为1。通过对一个给定的图片位置搜索可能的d(空间中一点到两个摄像头所成图像上的偏移)取值,找到最小的CNN输出,就得到这一点局部的偏移估算。
接下来做一些后续处理:
1、Cross-based cost matching:对邻近的像素值相似的点的偏移求平均,提高估计的稳定性和精度。
2、Semi-global matching:邻近的点的平移应该相似,加入平滑约束并求偏移的最优值。
3、插值和图片边界修正:提高精度,填补空白
FlowNet速度很快,采取了encoder-decoder的框架,把一个CNN分成了收缩可扩张两个部分。
收缩部分的两种可能的模型结构:
1、FlowNetSimple:把两幅图片叠起来输入到一个“线性”CNN中,输出为每个像素的偏移量(模型弱点是计算量大,而且无法考虑全局优化,因为每个像素的输出是独立的)
2、FlowNetCorr:先对两幅图片分别进行特征的提取,然后通过一个相关层把两个分支合并起来并继续下面的卷积层运算(相关层的计算和卷积层类似,只是没有了学习到的特征权重,而是由两个分支得到的隐层输出相乘求和)
FlowNet网络收缩部分减少了CNN的计算量,起到了在图像平面上聚合信息的作用,也导致了分辨率的下降。于是在网络扩张部分使用了upconvolution来提高分辨率(不仅使用了上一层的低分辨率输出,还使用了网络收缩部分相同尺度的隐层输出)
CNN用于物体识别之前通常用类似于DPM(Deformable Parts Model)的解决方案:在图像上抽取局部特征的组合作为模板(如基于图像空间梯度的HOG特征),为处理形变、遮挡的那个变化,建立一个“弹性”结构把这些刚性部分组合起来,最后加上一个分类器判断物体是否出现(算法复杂度高、改进优化难度大)
R-CNN算法是两段式的算法,把物体识别分为两方面:
1、物体可能所在区域的选择(Region Proposal Network,RPN)
2、候选区域的识别(Fast R-CNN)
算法最新版本是Faster R-CNN
RPN高效产生一个候选列表(物体可能所在区域)。
RPN以CNN为基础,图片通过一些卷积层进行特征提取,在最后一个卷积层输出的特征图上使用一个3x3的滚动窗口连接到一个256或512维的全连接隐层,最后再分支到两个全连接层,一个输出物体类别 ,一个输出物体的位置大小。为能够使用不同的物体大小(128x128、256x256、512x512)和长宽比(1:1、1:2、2:1)一共9种组合,最后根据空间重叠度去掉冗余的候选区域。
候选区域分类阶段使用基于全连接的神经网络
针对物体尺度变化很大的场景,MS-CNN(Multi-scale CNN)对此做出尝试。CNN的层级结构由于pooling层的存在自然形成了和不同尺度的对应关系,所以MS-CNN考虑将对物体的检测放到CNN的不同层里。
选择物体候选区域阶段:卷积层视为主干在conv3、conv4、conv5三个卷积层后都长出了分支,每个分支都连接了一个检测层,负责一定的尺度范围,多个分支一起就能覆盖比较宽的物体尺度范围。
候选区域识别阶段:让上一阶段多个检测层的输出特征图分别输入到一个子网格里:
1、第一层是deconvolution层,用于提高特征图的分辨率,保证物体检测的准确率(尤其是尺度偏小的物体)
2、deconvolution后在抽取物体特征的时候(外框)同时提取了物体周边的信息(内框)
相比于Fast R-CNN识别准确度有很大提高(尤其是物体尺度变化情况下),但是Fast R-CNN还是有速度优势
虽然Fast R-CNN比R-CNN快很多但是还不能实时
SSD(Single Shot Detector)能实时运行且准确度更佳,沿用了滑动窗孔的思想,通过离散化物体的位置、大小、长宽比使用CNN高效计算各种可能的物体情况。
SSD(高速的物体检测算法)使用VGG-16网络做底层图片特征提取,取消生成候选区域、图片缩放和特征图采样的步骤,一步到位判断物体位置和分类。在VGG网络的基础上加入逐步变小的卷积层(分别用3x3的卷积核进行物体位置偏移和分类判断)可以检测不同大小物体。
无人驾驶感知部分是CV研究的相关问题,而CNN在无人驾驶的应用主要包括3D感知与物体检测。
增强学习的目的是通过和环境交互学习到如何在相应的观测中采取最优行为(行为的好坏可以通过环境给的奖励确定,不同的环境有不同的观测和奖励),相比于传统机器学习有以下优势:
1、不需标注过程,可以解决环境中存在的特殊情况
2、把整个系统作为一个整体的系统,对其中一些模块更加鲁棒
3、较为容易的学习到一系列的行为
这些特性适用于无人驾驶中的决策过程
增强学习(Reinforcement Learning)是近几年机器学习领域最新进展,与传统机器学习最大区别是增强学习是闭环学习的系统,算法选取的行为会直接影响环境进而影响环境中得到的观测。传统机器学习将收集训练数据和模型学习作为两个独立的过程,增强学习尝试预测通过反馈统一训练数据和模型学习的过程。
如何在可能行为数量较多的情况下有效的进行探索是增强学习最重要的问题之一。增强学习可以做到,即使在某些模块失效的情况下也能做出稳妥的行为;增强学习能够学会自动修正偏移
增强学习中的每个时刻,算法和环境通过执行行为进行交互,得到观测和奖励。一般假设环境是存在马尔科夫性质(随机过程中某时间的发生只取决于它的上一事件、是无记忆过程)的,也就是环境的变化完全可以通过状态转移概率刻画出来(下一时刻的观测与给定当前时刻的观测和行为都没有关系);增强学习的目的就是在给定的任意环境下,通过对环境进行探索,学习到最佳的策略函数最大化。
接下来是两种常用的增强学习的算法
最简单的增强学习算法
基本思想:在环境里执行当前的策略直到一个回合结束,根据得到的奖励可以计算出当前策略的梯度(通过从环境中获得的奖励判断执行的行为好坏);用这个梯度更新当前的策略得到新的策略;迭代知道计算出的梯度足够小为止得到最优策略。
存在的问题:执行一个行为之后的所有奖励都被认为是因为这个行为产生的(显然不合理);即使通过重复执行策略取平均值很大可能得到正确梯度,但实际考虑效率不可能执行太多次,所以可能有较大误差;另外有可能会收敛到局部最优点;只有环境存在回合概念时才能使用。
基于Q函数的增强学习算法,对复杂的、每部行为之间存在较强相关性的环境有很好的学习效果;概算法基础为Bellman公式。
使用深度神经网络逼近Q函数存在很多问题:
1、一回合内各时刻数据有相关性,若全部使用可能得到偏的梯度
2、训练策略可能出现震荡
3、Q函数动态范围很大,可能会使Q-Learning的工程中的梯度很大,导致训练不稳定。
Deep Q-Learning是使用经验回放的算法
基本思想:记住算法在这个环境中执行的历史信息,不止通过当前执行的策略的结果进行学习还会利用之前的历是执行的策略的经验进行学习。
现有的深度增强学习解决的问题中我们执行的行为一般只对环境有短期影响;对于复杂觉得的情景直接学习出正确的Q函数是非常困难的,只有结合基于搜索的算法和基于增强学习的算法才能有效地解决这类问题。
基于搜索的算法一般是通过搜索树(二叉树)实现的;现有的增强学习和搜索结合的算法只能用于确定性的环境中;环境非确定且转移函数未知的情况下,如何将增强学习和搜索结合是增强学习领域中没有解决的问题。
无人驾驶人工智能包括:感知、决策、控制
基于规则的决策系统不可能枚举所有突发情况,需要一种自适应的系统。
基于规则的决策系统大部分可以用有限状态机表示,决策系统根据目标决定执行高层行为,再根据规则生成底层行为,缺乏灵活性。
可以模拟环境中场景、回访真实场景中采集到的数据、和真车的接口保持一致。
功能:验证衡量算法的性能;增强学习(模拟各种突发情况)
无人驾驶模拟器是核心技术
TORCS是一个赛车的模拟器
增强学习真正应用与无人驾驶需要很多改进:
1、增强学习的自适应能力:少量样本学习到正确行为
2、模型的可解释性:深度神经网络可解释性比较差,出了问题很难找到原因,难以排查,尤其在无人驾驶关于生命安全的任务中。
3、改进推理和想象的能力:人不需要开车出车祸也知道严重的后果
控制规划:路由寻径、行为决策、动作规划、反馈控制
与Goole、百度、高德地图导航显著不同:普通导航只解决的是两点间道路层面路由寻径问题,最小元素具体到某一条路的某一个车道;虽然无人驾驶的寻径问题也是解决两点间的路由问题但是层次要更加深入到无人车使用的高精地图的车道级别;此模块的输出严格依赖无人车高精地图的绘制
与普通地图导航不同,无人车Routing不局限于路径长短和拥堵情况还要考虑执行某些特定行驶动作的难易程度(短距离换到可能会尽量避免,处于安全考虑对换道路径赋予更高权重)
无人车在告警地图上Lane级别寻径问题可抽象为在有向带权图上的最短路径搜索问题
Dijkstra算法是图论中常见的最短路径算法
此算法是启发式的搜索算法(某种程度上和广度优先搜索(BFS)、深度优先搜索(DFS)类似,按照原则确定如何展开需要搜索的节点树状结构);可以认为是一种基于“优点”的搜索算法;作为一种最优优先算法可看作是Dijkstra算法的一种扩展(Dijkstra算法可以看成是A*算法中启发函数为0的一种特例)
实际无人车路由寻径计算问题中,往往更重要的不是算法的选择而是路权的设置策略(如把拥堵Lane的cost提高)
强Routing:严格遵守路由寻径模块的输出
弱Routing:变道超越
这两种在紧急避让情况下都按照安全第一的原则
该模块收集所有重要的车辆周边信息:
1、所有路由寻径结果
2、无人车当前自身状态
3、无人车历史信息
4、无人车周边障碍物信息
5、无人车周边交通标识信息
6、当地交通规则
在这些信息基础上,做出如何行驶的决策;由于考虑如此多种信息很难通过一个单纯的数学模型解决,更适合行为决策策略模块的解决方法,是利用一些软件工程的先进观念来设计一些规则系统。
一个马尔可夫决策过程(MDP),由五元组定义(S,A,Pa,Ra,γ)
S:无人车所处有限状态空间
A:无人车的行为决策空间
Pa(s,s’)= P(s’|s,a)是一个条件概率,表示无人车在状态s和动作a下,到达下一个状态s’的概率
Ra(s,s‘)是一个激励函数(Reward),代表无人车在动作a下,从状态s到状态s’所得到的激励
γ∈(0,1)是激励的衰减因子(含义是当前的激励总是比未来的激励重要)
——————————————————————————
第七章的路径规划内容多且杂,需要大量时间,暂时涉及不到以后慢慢更。
无人驾驶系统包含多个传感器产生很大数据量,分配系统资源便成了一个难题。
存在几个问题:
1、软硬件模块数据增加,运行期间难免有些模块会出现异常退出,或导致系统崩溃。如何为系统提供自修复能力?
2、模块之间有很强的联系,如何管理模块间的有效通信?关键模块间的通信,信息不可丢失,延时不可过高。
3、功能模块间如何进行资源隔离,如何分配计算与内存资源,当资源不足时如何确认更高的优先级执行?
简单的嵌入式系统不能满足上述无人驾驶系统的要求。
ROS特点为:点对点设计、不依赖编程语言、开源,是热门的仿真开发操作平台。
被称为操作系统的原因:硬件抽象、底层驱动管理、消息传递
ROS代码复用性强、硬件抽象性强、采用分布式架构、提供常用硬件驱动接口、是基于消息传递通信的分布式多进程框架。
ROS重要概念:节点、节点管理器、参数服务器、消息、主题、服务、任务等
节点(Node):实现运算功能的进程
节点管理器(Master):Node需要Master实现Node名字注册,Node间相互查找也需要在Master内进行
参数服务器(Parameter Server):在节点运行时用来存取参数
消息(Message):节点间通信内容
主题(Topic):主题名称是传输消息的主要内容,特定主题下节点可发布满足消息类型要求的消息;一个节点可以同时发布和接收多个主题;主题的发布/接收模式是一种弹性异步通信方式
服务(Service):是一种利用同步通信方式请求/回复交互的分布式系统
任务(Action):Action功能包主要用来实现服务器端和和客户端间的信息交换
ROS 2.0为让ROS符合工业级的运行标准,主要采用了DDS这个工业级别中间件负责可靠通信,通信节点动态发现,且使用shared memory方式使得通信效率更高;还在开发中,功能不完整;暂时选择ROS 1.0作为无人车驾驶系统开发平台
ROS重要节点需要热备份,宕机可以随时切换
软件架构分为3部分:
1、ROS节点层的监控数据API
2、监控服务端定期从节点获取监控数据
3、获取监控数据后,监控服务端对数据进行整合、分析记录,察觉异常时报警
在ZooKeeper框架下实现
三方面:
1、目前ROS节点间通信使用网络栈的loop-back机制,没个数据包都要经过多层软件栈处理,造成延时;可以使用共享内存的方法把数据memory-map到内存中,只传递数据地址与大小信息,降低延时节省CPU资源
2、目前ROS做数据broadcast时底层使用multiple unicast(数据传给5个节点就要复制5份)造成资源浪费;可以采用组播multicast机制:发送节点和每个接收节点间实现点对多点的网络连接,提高数据传送效率
3、ROS通信延时在数据的序列化与反序列化的过程中;可以使用轻量级的序列化程序降低了50%延时
假想两个简单的攻击场景:
1、ROS节点被劫持不断进行内存分配导致系统内存消耗殆尽,造成OOM关闭不同ROS节点进程,导致无人驾驶系统崩溃
2、ROS的service或topic被劫持,导致ROS节点间传递信息被伪造导致无人驾驶系统异常
如何解决资源分配与安全问题是无人驾驶技术的一个大课题。作者通过Linux Container(LXC)管理每一个ROS节点进程(LXC提供轻量级的虚拟化,隔离进程和资源相当于C++中NameSpace);LXC提供沙盒支持,使得系统可限制ROS节点进程的权限;为防止节点中通信被劫持,实现了节点中通信的轻量级加密解密机制,使得黑客不能回放或更改通信内容。
复杂系统需要成熟有效的管理机制,ROS提供了一部分但是不能满足全部需要所以需要进一步提高
无人驾驶系统包含多个传感器产生大量数据,有实时处理的要求,计算平台对决策、实时性、安全性、可靠性、持续性至关重要;同时要兼顾功耗、散热、硬件体积等问题
ECU:汽车专用微机控制器
主流:雷达、车载摄像头
趋势:多传感器融合发展
工作原理:可见和近红外光波发射反射和接收探测物体
缺点:无法探测被遮挡物体和光束无法到达物体(镜面、雾天、雨天)
作用:3D建模环境感知、SLAM加强定位
分类:单线(2D数据(无高度信息))、多线(2.5D/3D数据、精度高于单线、4线、8线、16线、32线、64线(数据量、价格递增))
普及解决方案:低线数雷达配合其他传感器、采用固态激光雷达(激光雷达最贵的就是机械旋转部件,固态激光雷达采用电子设备替代,方便集成、可靠性提高、成本降低;但水平视角小于180°需要多个组合使用)
固态激光雷达(相控阵(SAR)技术、混合固态镭射雷达还是有旋转部件)
固态激光雷达研发核心在于半导体工艺突破
原理:发射无线电信号接收反射信号测定物理环境信息(相对距离、相对速度、角度、运动方向等)
特点:工作频段30GHz~300Ghz,波长1-10mm(介于厘米波与光波之间)、不受天气限制
缺点:与激光雷达比较精度低可视范围小、由于原理不能检测上过漆的木头或塑料(隐形战机表面涂料躲避雷达信号)、行人几乎没有反射波、对金属很敏感(弯曲金属表面可能认为是巨大表面、可乐罐可能判断为巨大路障)、在大桥和隧道效果同样不佳
分类:频段24GHz(中短距主流)、60GHz、77GHz(中长距主流)、79GHz(频段高准确度高、测速高、精确度高、可检测行人自行车、体积更小)
2015年日内瓦世界无线电通信大会将77.5~78.0GHz频段划分给无线电定位业务,最终毫米波雷达将会统一于77GHz(76-81GHz)频段。
ACC:自适应巡航
ADAS:高级驾驶辅助系统
原理:采集图像处理、将突破转换为二维数据、模式识别、图像匹配识别、估算相对距离和相对速度
缺点:受光天气影响较大、物体识别需要数据库训练周期长难识别非标准物体、摄像头边缘畸变准确度降低
分类:单目、后视、立体(双目)、环视摄像头四种
单目摄像头:技术难点在于模型机器学习智能程度和模式识别精度
后视摄像头:技术难点在于如何适应不同恶劣环境
立体(双目)摄像头:技术难点在于双目标定和双目定位、计算两巨大
环视摄像头:四个广角摄像头组合图像拼接全景图
AEB:自动紧急刹车
GPS:城市中多路径反射问题、更新频率低
IMU:累积误差
通过传感器融合技术(基于卡尔曼滤波)结合GPS高精度和IMU自主性实时性
优点:1、系统精度提高,2、系统抗干扰能力增强,3、导航信息的补全(位置、速度、加速度、姿态、航向)
V2X = Vehicle to Vehicle(车车通信) +Vehicle to Instruction(车路通信)+Vehicle to Pedestrian(车人通信)
原理:利用无线电通信技术实现三者信息互通
优势:1、覆盖面更广,2、有效避免盲区,3、对隐私信息的安全保护性更好
尤其在5G时代 V2X将会发展迅速
某四级无人驾驶公司计算平台:两个计算盒(Intel 至强E5处理器(12核)、4-8颗NVIDIA K80 GPU加速器)执行完全相同任务(热备份)、计算峰值功耗5000W、成本2w-3w美元/每个计算盒
1、基于GPU计算解决方案
GPU浮点运算、并行计算能力强于CPU上百倍、在深度学习芯片市场非常受欢迎
例如NVIDIA的PX2平台
2、基于DSP的解决方案
DSP(Digital Singnal Processor)实时运行速度可达每秒数以千万条复杂指令程序
特点:运算能力强、速度很快、体积很小、软件编程灵活性高。
3、基于FPGA的解决方案
特性:硬件配置灵活、低能耗、高性能、可编程、适合感知计算、价格比GPU便宜(性价比不一定)
缺点:硬件编程难度高(也出现了软件平台编程FPGA)
4、基于ASIC的解决方案
MobilEye是一家领先的基于ASIC的无人驾驶解决方案提供商
5、其他芯片解决方案
1)google TPU芯片
AlphaGo战胜李世石的芯片,TPU更适合做训练后的分析决策
2)后起之秀概率芯片
通过牺牲微小的计算精度换取能耗明显降低,处理速度比传统处理器快了近100倍,而能耗还不到传统的2%
3)中国的芯片方案
寒武纪:中国的智能芯片(预计2018年上市)
中星微NPU