自动驾驶课程学习
课程来源:百度apollo
第一章:概述
自动驾驶的五个层级
完全人工控制-部分自动化-有条件的自动化(人类需要随时准备接管)-有地理围栏的自动化-完全自动化
利用云计算来加速计算,算力要达到十倍家用电脑左右
无人驾驶的运作方式
- sensor fusion
通过激光扫描来感知周围环境
- 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不一样的地方:
传感器数据比较
摄像头主要用于检测红绿灯和车道
激光雷达用于检测障碍物
雷达用于恶劣环境
组合使用
感知融合策略:传感器融合
卡尔曼滤波:预测、更新测量
测量结果同步的两种方法:同步和异步
同步方法同时更新不同传感器的测量结果,但是异步是逐个的更新
第五章:预测
对其他物体行为的预测
实时性,延迟越低越好
准确性
要能动态学习新的规则
不同的预测方法
基于模型的预测
对所有可能性build a model,初始时认为每一种概率都是一样的。继续观察,看和哪个模型更加匹配。
直观性
数据驱动的预测
使用机器学习算法,通过数据来预测行为。使用train好的model直接用于判断
基于车道的预测
车道序列
障碍物的状态
位置,速度,朝向,以及其他因素
预测目标车道
预测其他车辆最可能选择的车道
递归神经网络模型(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
复杂的控制器
只执行第一组控制输入,因为有误差,执行的越多越不准确
建立汽车模型
确定预测的时间跨度
利用优化引擎搜索最佳控制输入:通过成本函数对控制输入策略进行评价
考虑了车辆模型,所以比PID更加准确,并且可以使用不同的cost函数,是一个很重要的控制器
来源:https://www.cnblogs.com/jiading/p/11932716.html