自动驾驶学习过程(Apollo)

文章目录

  • 前言
  • 一、自动驾驶基础概念
    • 1. 自动驾驶等级
    • 2. 无人驾驶车的核心
    • 3. 自动驾驶的研发流程
    • 4. 自动驾驶汽车的硬件系统
      • 4.1 核心传感器:
      • 4.2 传感器单元(Sensor box)
      • 4.3 线控系统:
    • 5. 自动驾驶汽车的软件系统
      • 5.1 定位
        • 5.1.1 什么是无人车的自定位系统
        • 5.1.2 自动驾驶汽车定位系统指标要求(L4)
        • 5.1.3 定位方式的分类:
        • 5.1.4 定位基础知识
        • 5.1.5 应用于无人车的定位技术
      • 5.2 高精地图
        • 5.2.1 高精地图的采集和生产
        • 5.2.2 高精地图的格式规范
        • 5.2.3 Apollo地图采集方案
        • 5.2.4 Apollo高精地图生产流程
      • 5.3 决策规划
        • 5.3.1 路径规划方法
        • 5.3.2 随着环境变化的路径规划
        • 5.3.3 路径规划平滑性
        • 5.3.4 非线性规划问题的最优解
        • 5.3.5 百度阿波罗的规划
        • 5.3.6 强化学习和数据驱动方法
    • 二、Apollo(阿波罗)
    • 1.什么是Apollo?
  • 总结


前言

最近写了很多路径规划的程序,A*/D/RRT/RRT*,想到要从头到尾把这个领域了解一下,借助百度阿波罗来了解,把这个学习过程写成系列文章,希望可以对看到的你有帮助,我也希望可以如愿得到一份自动驾驶行业的工作,本文对新手友好


一、自动驾驶基础概念

1. 自动驾驶等级

由SAE(美国汽车工程师学会)规定,将“自动驾驶”功能一共分为了6个等级,这些等级的划分是以车辆和驾驶员之间的驾驶权以及互动级别划分,也根据车辆的智能程度来定夺。

等级 含义
L0 无自动化
L1 驾驶员辅助(在特定情况下,车辆可自动控制方向盘或者转速,但不可同时控制),如ACC自适应定速巡航
L2 部分自动化(车辆可以在合适情况下取代驾驶员,独立控制车辆的转向和速度,完成变道等任务)
L3 特殊条件自动化(由AI人工智能系统的介入,即使车辆失去GPS的辅助,也可以在特殊条件下完成变道、超车)
L4 高度自动化(车辆在特殊地形或路况下完全可以脱离人为控制,独立自主地完成车辆地运行和操作)
L5 全自动化(全程不需要“驾驶员”的操作,甚至没有驾驶员的存在,乘客只需要选取目的地,车辆AI就会完全自动控制车辆,抵达目的地)

2. 无人驾驶车的核心

核心技术:激光雷达(传感器收集地图信息)、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(云端)
当智能车遇到一个很困难的场景,就把当前场景传到云端,就可以形成一个巨大的数据库。当升级一个新的算法时候,就利用虚拟仿真技术将云端的场景进行测试。

3. 自动驾驶的研发流程

  1. 软件在环
    基于仿真和模拟器
  2. 硬件在环
    基于必要的硬件平台
  3. 车辆在环
    在封闭场地,基于车辆
  4. 司机在环
    用于研究人-车-路-交通,基于实际交通

4. 自动驾驶汽车的硬件系统

分为感知----->决策----->控制三个大单元
自动驾驶学习过程(Apollo)_第1张图片
生物电传感器判断驾驶员的生理、心理状况
T-BOX:上接互联网,下接CAN总线。

4.1 核心传感器:

①摄像头:用于车道线和交通标识牌、红绿灯检测
②激光雷达:地图、感知
③毫米级雷达:速度快、检测准确度高,不受天气状况的干扰,远距离用77G,近距离用24G
④组合导航:通过GNSS板卡、天线,接收所有可见的GPS卫星信号,进行解算和计算,得到空间位置。当车辆通过一些隧道,GPS信号产生干扰,需要融合惯性导航IMU的信息。
安装位置:
自动驾驶学习过程(Apollo)_第2张图片

4.2 传感器单元(Sensor box)

将所有的传感器信息融合到传感器单元中,完成整个时间戳的校准,将前处理的数据传输到后端的工控机或计算单元

4.3 线控系统:

需要完成转动、减速、加速、制动等功能
制动:EHB(电子液压制动系统)
转向:EPS转向系统
1.0版线控系统 对车辆的踏板及方向盘进行改装
2.0版 对车辆的ADAS系统进行借用,如MKZ的自动泊车以及ACC
3.0版 对车辆的控制,所有系统均可线控&手动控制

5. 自动驾驶汽车的软件系统

5.1 定位

5.1.1 什么是无人车的自定位系统

相对某一个坐标系(局部或全局),确定无人车的位置和姿态(6个自由度)
位置:(x,y,z)三维坐标
姿态:航向(Yaw)、横滚(Roll)、俯仰(Pitch)
对于无人车的定位,还需要各个方向的速度、加速度、角速度,还需要用置信度判断定位是否准确

5.1.2 自动驾驶汽车定位系统指标要求(L4)

精度、鲁棒性、场景
自动驾驶学习过程(Apollo)_第3张图片

5.1.3 定位方式的分类:

GNSS定位、激光定位、视觉定位、惯性导航
但这四种方式各有其优缺点,所以将这四种方式进行融合,就能得到一个很好的定位系统------>多传感器融合定位
其核心是状态误差的卡尔曼滤波器,接收惯性导航的递推作为它的时间更新,保证滤波器的时间向前走,然后能够又做高频的输出,同时接收GPS、激光点云定位、视觉定位,输入位置和姿态的更新,做低频的状态的更新。

5.1.4 定位基础知识

坐标系:根据各个轴位置关系的不同,空间中的坐标系分为左手坐标系和右手坐标系。
自动驾驶学习过程(Apollo)_第4张图片
定位中常用的坐标系
ECI(地心惯性坐标系),不受地球自转的影响
自动驾驶学习过程(Apollo)_第5张图片
ECEF:(地心地固坐标系),与地球固连,随地球一起转动
当地水平坐标系:ENU,原点在载体
UTM坐标系:将地球划分很多块,
车体坐标系:与车体连在一起,随车的运动而运动
IMU坐标系:和车体坐标系有点类似,差异在安装位置
相机坐标系:局部坐标系,将相机坐标系和IMU坐标系进行转换
激光雷达坐标系:转换到IMU坐标系,通过设置外参的变化
自动驾驶学习过程(Apollo)_第6张图片

5.1.5 应用于无人车的定位技术
  1. GNSS 定位技术
    GPS定位精度为5~10米,无法满足要求,因此在此基础上采用载波技术,常用的载波定位技术主要包括RTK(目前无人机在用)和PPP技术,最后能达到厘米级的定位。
    无人车的GNSA角色:①GPS授时:为无人车提供纳秒(ns)级的授时精度
    ②HD-MAP制图
    ③在线定位
    缺点就是在林荫道,很难达到cm级别

  2. 激光点云定位技术
    包含两个模块:图像对齐SSD-HF
    图像对齐用于航向角的优化,点云定位模块
    SSD-HF用于XY的优化
    点云定位技术有两个输入:初始位姿、实时的点云数据
    输出四个维度的信息(X,Y,Z和航向角)
    激光点云定位地图分成128m×128m范围,分成若干格子,把格子中的一个拿出来,就是一个像素点,里面存储了反射值(颜色值)
    图像对齐------>优化航向角
    采用基于LK的算法框架,将颜色值、高度值输入,得到航向角的优化
    SSD-HF
    HF就是Histogram Filter(直方图滤波);SSD就是平方差总和
    自动驾驶学习过程(Apollo)_第7张图片
    每个激光点有一个颜色值,将其和地图上的点找一个对应的点,求它俩的平方差,再把所有激光点的误差都加起来
    有时候不仅仅用颜色值,也用高度值
    融合颜色值和高度值,不能直接加起来,可以用自适应融合,最终计算出此时的X、Y

  3. 视觉定位
    对于车道线、路灯可以利用摄像头视觉定位
    输出X、Y、Z和航向角
    算法流程:
    自动驾驶学习过程(Apollo)_第8张图片
    ① 3D特征地图
    将车道线、路标标记、路灯、电线杆等标记出来
    ② 在线特征检测:检测车道线和杆状物
    ③ 特征匹配定位
    怎么判断车在哪个车道上?
    蒙特卡洛粒子滤波做特征匹配,撒很多个点,得到位姿,用位姿去投影,计算匹配度,判断在哪个车道的概率大。

  4. 惯性导航定位和组合导航定位
    初始对准:用双天线或车跑起来得到速度、再用卡尔曼滤波器做状态的更新
    自动驾驶学习过程(Apollo)_第9张图片
    组合导航定位:GPS+IMU+点云定位量测信息
    输入IMU、GNSS、点云信息通过惯导模块进行SINS解算,卡尔曼滤波递推解算,告诉SINS模块系统误差多少,让SINS做修正。
    输出通过SINS解算模块(高频),可以输出得到实时的位置、姿态信息。

5.2 高精地图

5.2.1 高精地图的采集和生产
  1. 采集地图中需要的传感器:GPS、MIU、轮速计、激光雷达
  2. 制图方案:基于激光雷达制图、视觉制图
    视觉制图一般和激光雷达结合,激光雷达距离的检测非常准确,但是图像信息少,依靠摄像头的信息,可以获得高精地图。视觉制图也可以仅仅以来摄像头进行,有一些国内的公司,如宽腾,达到厘米级。
5.2.2 高精地图的格式规范

我们需要将高精地图完整地表述出来,我们怎么进行表述?

  1. NDS:规范重,国内用的很少
  2. OpenDRIVE:一条道路被切分成很多section,比如道路数变化少了一条车道或多了一条车道的情况
    自动驾驶学习过程(Apollo)_第10张图片
    reference lane----->图中0
    junction,(红色线)包含虚拟路,用来连接可通行方向
    自动驾驶学习过程(Apollo)_第11张图片
    tracking ---->偏移量
5.2.3 Apollo地图采集方案
  1. 基础传感器配置:64线激光雷达平装、16线激光雷达斜向上装用来检测红绿灯、GPS&IMU、长焦相机、短焦相机
  2. 提供一键式采集方案,传感器需要标定
  3. 输出一个bag包,将每一次采集行为放入一个bag中
5.2.4 Apollo高精地图生产流程

数据分为两类:点云与图像
点云拼接:信号不稳定,需要通过一些SLAM和其他方式将点云进行拼接,再将三维点云分到一个一个小格子里面,每一个小格子包含反射信息、高度信息等。
图像处理:基于深度学习,需要提取所有的信息,识别道路的虚实线、路灯等
人工处理处理一些关联信息,比如遇到停止线和红绿灯。自动驾驶学习过程(Apollo)_第12张图片

5.3 决策规划

  1. 规划的本质是一个搜索,找一个最优解,给定一个先决条件,寻找一个路径的最优解
  2. 规划问题的三个领域:机器人领域、控制理论、人工智能
    机器人领域:RRT、A*、Dlite、Lattice Planning
    控制理论:MPC,LQR
    AI:强化学习,end to end imitation learning
    规划问题:path Finding Problems
    分为Non informatic search和启发式算法,如BFS、DFS属于是Non informatic search ,它不知道目标点位置,进行搜索
    这并不能找到最短路径
    启发式算法,如A
    search算法
    还可以分为全局规划和局部,全局规划需要有全局的感知,有时候无法实现
    需要利用局部规划领域,可以利用贪心算法,如D*lite
    还可以分为动态规划,需要处理动态障碍物
  3. 平滑性算法
    用平滑的线连接路径
  4. 处理动态障碍物、实时计算(反应时间0.2~0.3秒)
5.3.1 路径规划方法
  1. 路径规划方法
    ①roadmap methods:其中有一种是visibility graph:将所有障碍物、起点、终点标记成点,用一些线段去连接
    ②cell decomposition(栅格法):例如A*
    ③potential field(人工势场法)
  2. 如果环境连续,障碍物连续,空间也连续,如何离散化整个空间?
    PRM:在空间中撒点,如果有障碍物,那么就把这个点抹去,接下来用A处理就可以
    但A
    是全局规划方法,有时候对于环境的感知我们无法获取全局信息,因此在此基础上,发展出RRT
    RRT通过随机撒点,但往往不够平滑,在不规则的道路下很实用
  3. 自动驾驶中的路径规划(平滑性处理)
    Lattice search,网格离散化
    动态规划要考虑车不是一个点,是几何形状的
    Quadratic programming:要求空间是凸的,但是实际不是
    Splines 是先规划后平滑,规划路径后做平滑处理
5.3.2 随着环境变化的路径规划
  1. Vehicle state and model(车运动模型如何建立)
    ①bicycle model自动驾驶学习过程(Apollo)_第13张图片
    转向半径的倒数是关于转向半径的一个函数,这个函数的关系满足一定条件----->远动轨迹
    两个轮子的转动半径不一样
    自动驾驶学习过程(Apollo)_第14张图片根据公式,可以算出方向盘应该打多少度。

②SL坐标系下转化为X-Y坐标
SL坐标能够对于X-Y坐标,且是唯一的
自动驾驶学习过程(Apollo)_第15张图片
给定曲线上的坐标,如何得到世界坐标系下的坐标呢?
已知s曲线上一个点,也知道它的切线方向(theta),可以通过公式计算出(X,Y)
③XY坐标转化为SL坐标
SL坐标不是唯一的,对于绝大部分道路来说,可以设定转向半径的最小值的一个阈值,就可以做到唯一对应

5.3.3 路径规划平滑性

平滑的道路中线非常重要。做平滑不能单独对X,Y坐标做平滑,必须要根据一个动力学系统,根据动力学模型,知道它们之间的联系,再去做平滑。
高阶的**polynomial(多项式)**不能用于平滑,抖动太大。
Bezier spine用于平滑性处理,就是取起点到终点的连线的中点,做起点到中点平滑,不断取中点,确保每一段是平滑的。
对于掉头的路径,如何设计平滑路径?
从地图拿到的线,先把它抽象成点,先控制点,生成一条光滑的曲线,在这些光滑的曲线经过这些控制点的时候,能够经过这些box,同时给一些小的误差,可以控制范围。不像插值,必须要经过这个点。这种方法不要求必须经过这个点,只要在一定范围内。
smoothing spline
用什么标准去判断曲线平滑性?就是length最小值:
自动驾驶学习过程(Apollo)_第16张图片
smoothing spline的性质:给定一些条件,可以生成一个光滑的多项式
如果规划出来的路径中间有障碍物,可以利用分段多项式(Piecewise polynomial)去做。分段多项式只是一个表示形式,最重要的是我们怎么样去抽象这些约束、边界条件,怎么找目标函数,路径长度最短不是最好的目标函数。
怎么去生成平滑的曲线? spline 2D和螺旋曲线
spline 2D就是X求三阶导的最小,Y求三阶导数的最小,列出一个QP方程,其具有旋转不变性
spline 2D是基于凸的问题设计的,计算速度快,很简单
螺旋曲线就是从车辆本身的角度出发设计的,后续数据处理简单很多

5.3.4 非线性规划问题的最优解

二分法、二次动态规划、牛顿法
二次规划就是利用有限元的思想,将曲线分为n段,去这n个点的最小,但这个最小值是局部最小值,如何得到全局最小值呢?
启发式搜索:先动态规划大概看一下最小的点,然后从这个点作为起点开始牛顿迭代,可以得到全局最小值。
Quadratic programming(二次规划)
利用二次规划求一个一维的最小值,例如(x-5)2的最小值,但给定了x的范围,有一个是KKT condition方法,可以解决目前所有的QP问题。
自动驾驶学习过程(Apollo)_第17张图片
另一种方法:active set method,意思就是先假设x满足的是一个固定值条件去算,算出来哪些不等式没有满足条件,就把这个条件放入到active constraint中,通过这种方式求到最优解。

5.3.5 百度阿波罗的规划

硬约束和软约束:交通规则、人为决策、最佳轨迹(平滑)
自动驾驶学习过程(Apollo)_第18张图片
3维优化问题:避开静态、动态障碍物,安全尽可能快地到达目标点。
两种方法:通过离散化的方式去处理、路径速度迭代算法
优化的关键步骤:
自动驾驶学习过程(Apollo)_第19张图片
具体是怎么实现的?
planning DP
基于撒点网路,选取cost最低的路径
先对道路点采样,得到主车速度和位置以及路况信息
然后生成路径,用平滑曲线连接,路径曲率连续且可导
最后最优化路径:DP最优化Cost
Cost(代价)考虑:与路径中心线的偏差,路径曲率保持连续,与障碍物保持合理距离,路径曲率符合车辆物理特性。

自动驾驶学习过程(Apollo)_第20张图片
得到DP之后,利用二次规划进行平滑处理。
自动驾驶学习过程(Apollo)_第21张图片
速度也是一样的,衡量smooth平滑性的指标是,v(速度),a(加速度),j(jerk,踩油门的速度/踩刹车的速度)

5.3.6 强化学习和数据驱动方法

强化学习就是设定好目标后,目标不变,随机找一个action,不好则修正,最后收敛到能够解决所有这类问题。
data drive可以加速问题的解决,但是不能cover所有问题。
奖励方程设置:长期奖励指标、短期奖励指标

二、Apollo(阿波罗)

1.什么是Apollo?

Apollo由四层组成,由下往上分别是:

  1. 线控车
    补充一个概念:什么是线控?
    线控就是指信号发生器与信号接收器之间的连接方式是通过线缆或其他动作传到物体进行连接的。
  2. 计算平台
    传感器感知获得的信息进行计算
    摄像头、雷达、激光雷达、惯性传感器IMU/GPS、HMI Device(与人交互)、黑盒子(记录信息)
  3. 软件平台
    操作系统的底层框架+消息的分发机制(ROS)
    map engine(获取高精地图)
    定位
    感知
    规划
    控制
    HMI
  4. cloud service(云端服务平台)
    HD map 高精地图
    simulation 仿真
    Data Platform 数据平台
    Security 安全
    OTA:空中下载技术,是通过移动通信的空中接口实现对移动终端设备及SIM卡数据进行远程管理的技术
    DuerOs:百度度秘事业部研发的对话式人工智能系统

不是所有的无人驾驶车都包含以上所有模块,根据特定功能选择适当传感器与功能模块。
例如Apollo1.0是自动循迹车,人开一遍车,车记录下轨迹,车再循着刚刚的轨迹走一遍。所以只需要GPS/IMU,不需要其他传感器。
Apollo3.0更新了很多功能。
自动驾驶学习过程(Apollo)_第22张图片


总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

你可能感兴趣的:(自动驾驶,学习,人工智能)