最近写了很多路径规划的程序,A*/D/RRT/RRT*,想到要从头到尾把这个领域了解一下,借助百度阿波罗来了解,把这个学习过程写成系列文章,希望可以对看到的你有帮助,我也希望可以如愿得到一份自动驾驶行业的工作,本文对新手友好
由SAE(美国汽车工程师学会)规定,将“自动驾驶”功能一共分为了6个等级,这些等级的划分是以车辆和驾驶员之间的驾驶权以及互动级别划分,也根据车辆的智能程度来定夺。
等级 | 含义 |
---|---|
L0 | 无自动化 |
L1 | 驾驶员辅助(在特定情况下,车辆可自动控制方向盘或者转速,但不可同时控制),如ACC自适应定速巡航 |
L2 | 部分自动化(车辆可以在合适情况下取代驾驶员,独立控制车辆的转向和速度,完成变道等任务) |
L3 | 特殊条件自动化(由AI人工智能系统的介入,即使车辆失去GPS的辅助,也可以在特殊条件下完成变道、超车) |
L4 | 高度自动化(车辆在特殊地形或路况下完全可以脱离人为控制,独立自主地完成车辆地运行和操作) |
L5 | 全自动化(全程不需要“驾驶员”的操作,甚至没有驾驶员的存在,乘客只需要选取目的地,车辆AI就会完全自动控制车辆,抵达目的地) |
核心技术:激光雷达(传感器收集地图信息)、by-wire control system(可以通过电脑控制整辆车),处理器(处理激光雷达产生的数据),Cloud cluster(云端控制车的运动)
无人驾驶需要:
1、高精地图:除了车道线之外,还需要红绿灯,标志,减速带等等,因为无人车需要事先知道很多信息进行预判和规划,可以减少无人车的计算量。
2、定位:GPS+IMU+Geometry Localiztion+RTK(10 CM level)
GPS:相对定位
RTK:基站,让GPS精度达到10cm左右(布置车在基站16km以内)
IMU:惯性导航,卡尔曼滤波,与GPS一起,给GPS一个运动方向
Geometry Localiztion:几何定位,从道路空间寻找一些figure(标志,如sign)就可以对定位做到很精确,达到几厘米水平
3、激光雷达
与摄像头相比,对距离的判断很精确,缺点是对环境的要求比较高,并且看不到颜色。
激光雷达的种类:机械ladar(机械化磨损可靠性较差)、棱镜旋转(稳定性较差)、镜面旋转、flash ladar(一次性发射很多激光,但看到的距离较近)
4、传感器融合(sensor fusion)
将camera、radar、ladar中获取的数据做融合,这个物体的速度与加速度
5、行为决策
对每一个获取的数据,做出相应的行为决策:是否避让、是否越过、是否停止……
6、路径规划
以上的所有行为决策称为约束条件,要在所有的约束条件下,规划出一条车可以走的路径
要求:①路径要确保安全,满足约束条件
②车要平滑:如速度、加速度、加速度的导数(推背感)都要平滑,即一阶、二阶、三阶平滑
7、by-wire control system
电脑控制整个车的速度,反映各个速度参数
8、Cloud+Vehicle(云端)
当智能车遇到一个很困难的场景,就把当前场景传到云端,就可以形成一个巨大的数据库。当升级一个新的算法时候,就利用虚拟仿真技术将云端的场景进行测试。
分为感知----->决策----->控制三个大单元
生物电传感器判断驾驶员的生理、心理状况
T-BOX:上接互联网,下接CAN总线。
①摄像头:用于车道线和交通标识牌、红绿灯检测
②激光雷达:地图、感知
③毫米级雷达:速度快、检测准确度高,不受天气状况的干扰,远距离用77G,近距离用24G
④组合导航:通过GNSS板卡、天线,接收所有可见的GPS卫星信号,进行解算和计算,得到空间位置。当车辆通过一些隧道,GPS信号产生干扰,需要融合惯性导航IMU的信息。
安装位置:
将所有的传感器信息融合到传感器单元中,完成整个时间戳的校准,将前处理的数据传输到后端的工控机或计算单元
需要完成转动、减速、加速、制动等功能
制动:EHB(电子液压制动系统)
转向:EPS转向系统
1.0版线控系统 对车辆的踏板及方向盘进行改装
2.0版 对车辆的ADAS系统进行借用,如MKZ的自动泊车以及ACC
3.0版 对车辆的控制,所有系统均可线控&手动控制
相对某一个坐标系(局部或全局),确定无人车的位置和姿态(6个自由度)
位置:(x,y,z)三维坐标
姿态:航向(Yaw)、横滚(Roll)、俯仰(Pitch)
对于无人车的定位,还需要各个方向的速度、加速度、角速度,还需要用置信度判断定位是否准确
GNSS定位、激光定位、视觉定位、惯性导航
但这四种方式各有其优缺点,所以将这四种方式进行融合,就能得到一个很好的定位系统------>多传感器融合定位
其核心是状态误差的卡尔曼滤波器,接收惯性导航的递推作为它的时间更新,保证滤波器的时间向前走,然后能够又做高频的输出,同时接收GPS、激光点云定位、视觉定位,输入位置和姿态的更新,做低频的状态的更新。
①坐标系:根据各个轴位置关系的不同,空间中的坐标系分为左手坐标系和右手坐标系。
②定位中常用的坐标系:
ECI(地心惯性坐标系),不受地球自转的影响
ECEF:(地心地固坐标系),与地球固连,随地球一起转动
当地水平坐标系:ENU,原点在载体
UTM坐标系:将地球划分很多块,
车体坐标系:与车体连在一起,随车的运动而运动
IMU坐标系:和车体坐标系有点类似,差异在安装位置
相机坐标系:局部坐标系,将相机坐标系和IMU坐标系进行转换
激光雷达坐标系:转换到IMU坐标系,通过设置外参的变化
GNSS 定位技术
GPS定位精度为5~10米,无法满足要求,因此在此基础上采用载波技术,常用的载波定位技术主要包括RTK(目前无人机在用)和PPP技术,最后能达到厘米级的定位。
无人车的GNSA角色:①GPS授时:为无人车提供纳秒(ns)级的授时精度
②HD-MAP制图
③在线定位
缺点就是在林荫道,很难达到cm级别
激光点云定位技术
包含两个模块:图像对齐和SSD-HF
图像对齐用于航向角的优化,点云定位模块
SSD-HF用于XY的优化
点云定位技术有两个输入:初始位姿、实时的点云数据
输出四个维度的信息(X,Y,Z和航向角)
激光点云定位地图分成128m×128m范围,分成若干格子,把格子中的一个拿出来,就是一个像素点,里面存储了反射值(颜色值)
图像对齐------>优化航向角
采用基于LK的算法框架,将颜色值、高度值输入,得到航向角的优化
SSD-HF
HF就是Histogram Filter(直方图滤波);SSD就是平方差总和
每个激光点有一个颜色值,将其和地图上的点找一个对应的点,求它俩的平方差,再把所有激光点的误差都加起来
有时候不仅仅用颜色值,也用高度值
融合颜色值和高度值,不能直接加起来,可以用自适应融合,最终计算出此时的X、Y
视觉定位
对于车道线、路灯可以利用摄像头视觉定位
输出X、Y、Z和航向角
算法流程:
① 3D特征地图
将车道线、路标标记、路灯、电线杆等标记出来
② 在线特征检测:检测车道线和杆状物
③ 特征匹配定位
怎么判断车在哪个车道上?
蒙特卡洛粒子滤波做特征匹配,撒很多个点,得到位姿,用位姿去投影,计算匹配度,判断在哪个车道的概率大。
惯性导航定位和组合导航定位
初始对准:用双天线或车跑起来得到速度、再用卡尔曼滤波器做状态的更新
组合导航定位:GPS+IMU+点云定位量测信息
输入IMU、GNSS、点云信息通过惯导模块进行SINS解算,卡尔曼滤波递推解算,告诉SINS模块系统误差多少,让SINS做修正。
输出通过SINS解算模块(高频),可以输出得到实时的位置、姿态信息。
我们需要将高精地图完整地表述出来,我们怎么进行表述?
数据分为两类:点云与图像
点云拼接:信号不稳定,需要通过一些SLAM和其他方式将点云进行拼接,再将三维点云分到一个一个小格子里面,每一个小格子包含反射信息、高度信息等。
图像处理:基于深度学习,需要提取所有的信息,识别道路的虚实线、路灯等
人工处理处理一些关联信息,比如遇到停止线和红绿灯。
②SL坐标系下转化为X-Y坐标
SL坐标能够对于X-Y坐标,且是唯一的
给定曲线上的坐标,如何得到世界坐标系下的坐标呢?
已知s曲线上一个点,也知道它的切线方向(theta),可以通过公式计算出(X,Y)
③XY坐标转化为SL坐标
SL坐标不是唯一的,对于绝大部分道路来说,可以设定转向半径的最小值的一个阈值,就可以做到唯一对应
平滑的道路中线非常重要。做平滑不能单独对X,Y坐标做平滑,必须要根据一个动力学系统,根据动力学模型,知道它们之间的联系,再去做平滑。
高阶的**polynomial(多项式)**不能用于平滑,抖动太大。
Bezier spine用于平滑性处理,就是取起点到终点的连线的中点,做起点到中点平滑,不断取中点,确保每一段是平滑的。
对于掉头的路径,如何设计平滑路径?
从地图拿到的线,先把它抽象成点,先控制点,生成一条光滑的曲线,在这些光滑的曲线经过这些控制点的时候,能够经过这些box,同时给一些小的误差,可以控制范围。不像插值,必须要经过这个点。这种方法不要求必须经过这个点,只要在一定范围内。
smoothing spline
用什么标准去判断曲线平滑性?就是length最小值:
smoothing spline的性质:给定一些条件,可以生成一个光滑的多项式
如果规划出来的路径中间有障碍物,可以利用分段多项式(Piecewise polynomial)去做。分段多项式只是一个表示形式,最重要的是我们怎么样去抽象这些约束、边界条件,怎么找目标函数,路径长度最短不是最好的目标函数。
怎么去生成平滑的曲线? spline 2D和螺旋曲线
spline 2D就是X求三阶导的最小,Y求三阶导数的最小,列出一个QP方程,其具有旋转不变性
spline 2D是基于凸的问题设计的,计算速度快,很简单
螺旋曲线就是从车辆本身的角度出发设计的,后续数据处理简单很多
二分法、二次动态规划、牛顿法
二次规划就是利用有限元的思想,将曲线分为n段,去这n个点的最小,但这个最小值是局部最小值,如何得到全局最小值呢?
启发式搜索:先动态规划大概看一下最小的点,然后从这个点作为起点开始牛顿迭代,可以得到全局最小值。
Quadratic programming(二次规划)
利用二次规划求一个一维的最小值,例如(x-5)2的最小值,但给定了x的范围,有一个是KKT condition方法,可以解决目前所有的QP问题。
另一种方法:active set method,意思就是先假设x满足的是一个固定值条件去算,算出来哪些不等式没有满足条件,就把这个条件放入到active constraint中,通过这种方式求到最优解。
硬约束和软约束:交通规则、人为决策、最佳轨迹(平滑)
3维优化问题:避开静态、动态障碍物,安全尽可能快地到达目标点。
两种方法:通过离散化的方式去处理、路径速度迭代算法
优化的关键步骤:
具体是怎么实现的?
planning DP
基于撒点网路,选取cost最低的路径
先对道路点采样,得到主车速度和位置以及路况信息
然后生成路径,用平滑曲线连接,路径曲率连续且可导
最后最优化路径:DP最优化Cost
Cost(代价)考虑:与路径中心线的偏差,路径曲率保持连续,与障碍物保持合理距离,路径曲率符合车辆物理特性。
得到DP之后,利用二次规划进行平滑处理。
速度也是一样的,衡量smooth平滑性的指标是,v(速度),a(加速度),j(jerk,踩油门的速度/踩刹车的速度)
强化学习就是设定好目标后,目标不变,随机找一个action,不好则修正,最后收敛到能够解决所有这类问题。
data drive可以加速问题的解决,但是不能cover所有问题。
奖励方程设置:长期奖励指标、短期奖励指标
Apollo由四层组成,由下往上分别是:
不是所有的无人驾驶车都包含以上所有模块,根据特定功能选择适当传感器与功能模块。
例如Apollo1.0是自动循迹车,人开一遍车,车记录下轨迹,车再循着刚刚的轨迹走一遍。所以只需要GPS/IMU,不需要其他传感器。
Apollo3.0更新了很多功能。
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。