自动驾驶课程学习

这一生的挚爱 提交于 2019-11-26 00:44:59

自动驾驶课程学习

课程来源:百度apollo

第一章:概述

自动驾驶的五个层级


完全人工控制-部分自动化-有条件的自动化(人类需要随时准备接管)-有地理围栏的自动化-完全自动化

利用云计算来加速计算,算力要达到十倍家用电脑左右

无人驾驶的运作方式

  1. sensor fusion


通过激光扫描来感知周围环境
  1. localization

要利用算法和高精度地图将距离限定在厘米级别

无人驾驶车的组成


CAN(控制器区域网络)、GPS、雷达和接收器、摄像头

雷达的弊端:无法分辨障碍物的类型

雷达的优点:便宜、不受天气条件影响、测速方便

第二章:高精度地图

高精度地图简介

在高精度地图上进行自定位:将高精度地图和车辆通过雷达和摄像机感知到的环境对比,从而准确找到自己的位置:预处理(去掉不合理数据)、坐标转换(将不同视角的数据转化到同一坐标系下)、数据融合(将不同车辆和不同传感器的数据融合)。

利用高精度地图进行探测:借助地图上的数据,弥补传感器在测量长度以及测量条件上的限制,也可以通过地图给出大概范围,从而缩小传感器探测的范围(感兴趣区域,ROI),提高速度和准确率。

利用高精度地图进行规划:和普通地图在导航软件上的使用类似

地图维护团队需要经常地对地图进行更新。

OpenDRIVE标准

高精度地图的生产:

第三章:定位

在高精度地图上确定自己的位置

GPS只能达到1-3m的精度


借助地标行坐标系变换:

GNSS RTK:全球导航卫星系统


三个坐标就可在二维平面唯一确定一个位置:GPS定位的原理

GPS的组成:导航卫星、控制站、接收设备


测量信号的传输时间,以获取距离信号。

RTK:实时运动测量,借助地面站对GPS的误差进行矫正


RTK可以使得GPS的精度达到10厘米级别,但是GPS的更新不够迅速,大概10秒左右

惯性导航:IMU

借助初始位置、初始速度和加速度计算运动情况:加速度计

陀螺仪:


优点:更新频率高

缺点:误差积累、精度差

与GPS搭配正合适,但依然不能解决没有GPS信号的问题

激光雷达定位

ICP:迭代最近点算法:对点云扫描结果以及地图上的点云进行匹配,通过旋转和偏移使得距离平方和最小从而计算出精确位置

滤波算法:将扫描得到的点云在地图上进行扫描,寻找误差最小的地方。

卡尔曼算法:利用之前的结果预测现在的位置,再利用现在的传感器探测结果来更加精确地确定位置

视觉定位

借助图像进行定位:不够精确,通常组合使用

使用概率来确定可能位置:


观察时间越长、现象越多,高概率的点越少,地点越精确

利用车道线、树

还可以将摄像头的图像和地图图像进行比对


优点是操作简单,缺点是缺乏三维信息、依赖三维地图

例如Apollo,是这几种方法结合起来用的

第四章:感知

使用计算机视觉技术

CNN:卷积计算机网络

计算机视觉

计算机视觉在无人驾驶中的四个主要任务


检测:找出物体

分类

追踪:跟踪位置变化

语义分割:将图像中的每一个像素和特定的语义类别对应,例如路、天空等等

不同的分类器分别对某一类图像进行归类。流程:


就是机器学习和深度学习那一套

LiDAR图像

雷达传感器的反射图像也可以用来识别:


对这样的图像也可以进行分析:

追踪

追踪可以解决遮挡问题:


追踪可以保留检测到的对象的身份:

change from


to


追踪的第一步是确认身份:借助特征

身份确认之后,可以预测对象的运动,这有助于在接下来更加有效地识别对象

分割

分割借助于FCN(Fully Convolution Network,全卷积网络)


特殊的是,为了语义分割,输出的图像大小要和输入的一样,这是和一般的CNN不一样的地方:

传感器数据比较

摄像头主要用于检测红绿灯和车道

激光雷达用于检测障碍物

雷达用于恶劣环境

组合使用

感知融合策略:传感器融合

卡尔曼滤波:预测、更新测量


测量结果同步的两种方法:同步和异步

同步方法同时更新不同传感器的测量结果,但是异步是逐个的更新

第五章:预测

对其他物体行为的预测

实时性,延迟越低越好

准确性

要能动态学习新的规则

不同的预测方法

  1. 基于模型的预测

    对所有可能性build a model,初始时认为每一种概率都是一样的。继续观察,看和哪个模型更加匹配。

    直观性

  2. 数据驱动的预测

    使用机器学习算法,通过数据来预测行为。使用train好的model直接用于判断

  3. 基于车道的预测

    车道序列

障碍物的状态

位置,速度,朝向,以及其他因素

预测目标车道

预测其他车辆最可能选择的车道

递归神经网络模型(RNN)


在MLP之间加上连接,使得每个MLP在判断时不仅基于输入,也基础前一个MLP的结果:RNN


apollo的用法

预测运动轨迹


可能的轨迹有无穷多种,要筛选:
  • 设置约束条件
  • 去掉无法实习执行的轨迹
  • 考虑车辆实际运动情况

利用运动模型的初始状态和最终状态(方向、位置),拟合多项式模型来进行预测

规划

轨迹规划:免碰撞、舒适

规划出预期的点以及计划到达这些点的时间戳

输入:地图、当前位置、目的地

输出:最优线路

图搜索


对不同Node之间的edge的值进行建模:可以理解为node之间transform的代价

A*


目标是找到从红色的点到绿色点的路径

从开始的节点开始,我们要找到周围8个节点哪一个是最有希望的。

计算成本:

this node-candidate node-goal node


根据实际情况自定义value,也就是代价


最佳节点是f最小的,f=g+h

map in the real world:



right最小,所以选择right

注意这只是从大方向上确定了路径,但是依然需要更加低级别的、更加精确、更加具体的规划:轨迹生成


时间戳是考虑到其他物体的动态

轨迹的要求:

轨迹必须免于碰撞、舒适(速度变化平滑)、切实可行(符合车辆机动能力)、合法(符合交通规则)


选择最价路径:cost function,对不同的缺陷赋予代价

(Error:This picture is not found in the List!)
注意在不同场景下,cost function的优化目标是一致的,但是cost的赋值原则是不一样的

frenet坐标

高中知识

路径-速度解耦

将路径和速度曲线相结合

如何选择待选路径:

将路分成单元格,每个格中随机取点,然后连接各个格子中的点形成不同的路径线

ST图

距离和时间图,从斜率推断速度

当我们预测了,对方车辆会在t0到t1时间内进入距离为s0到s1的这一部分时,我们设计的路径要从ST图上就规避与之相交:


这是单个目标时的情况,多个时:


之后使用优化算法选择最优的路径

优化

上面使用的都是连续问题离散化的思路。它虽然使得问题更容易被解决,但是也使得生成的路径不够平滑。

二次规划:拟合


Lattice规划

将纵向和横向的运动分开进行规划,分别建立图像:

(Error:This picture is not found in the List!)
然后合并为组合运动

ST和SL轨迹的终止状态

ST轨迹:

巡航(速度恒定)、跟随(跟随前车,速度和加速度不确定)和停止(速度和加速度为0)

SL轨迹:

车辆在任何终止状态都一个稳定地和中线平行

将ST和SL合起来:

控制

三种实现控制的技术:PID:比例积分微分控制、LQR:线性二次调节器、MPC:模型预测控制

输入:目标轨迹和车辆状况

目标轨迹来自规划,指定了每一个位置的速度,并且实时更新:


车辆状态通过地图和传感器等观察得到:


用来评判现在的行驶状况和目标行驶状况的区别

输出:转向、制动和加速的值。只要输入了这三个值,汽车就能实现自动驾驶

PID

优点:简单,线性算法。只需要知道当前轨迹和目标轨迹的偏移情况

P:比例。通过偏移的比例进行控制。但是缺点是不够稳定。

D:微分。减少速度的变化

I:积分,纠正车辆的系统性偏差:


将P、i、d结合起来,形成PID Controller

PID的问题:依赖于实时测量,所以延迟会造成影响。

线性二次调节器

基于模型的调节器

车辆状态集合:横向误差及变化率、朝向误差及变化率

控制输入集合:转向、加速和制动

之间的关系:



最小化控制输入和误差:控制输入也会有消耗

消耗函数:


对cost函数进行最小化

MPC

复杂的控制器

只执行第一组控制输入,因为有误差,执行的越多越不准确

  1. 建立汽车模型

  2. 确定预测的时间跨度

  3. 利用优化引擎搜索最佳控制输入:通过成本函数对控制输入策略进行评价

    考虑了车辆模型,所以比PID更加准确,并且可以使用不同的cost函数,是一个很重要的控制器

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!