• 自动驾驶课程学习


    自动驾驶课程学习

    课程来源:百度apollo

    第一章:概述

    自动驾驶的五个层级

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

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

    无人驾驶的运作方式

    image-20191125181554214.png

    1. sensor fusion

    image-20191125181848384.png
    通过激光扫描来感知周围环境

    1. localization

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

    无人驾驶车的组成

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

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

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

    第二章:高精度地图

    高精度地图简介

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

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

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

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

    OpenDRIVE标准

    高精度地图的生产:

    image-20191125184903142.png

    第三章:定位

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

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

    image-20191125194221721.png
    借助地标行坐标系变换:

    image-20191125194307489.png

    GNSS RTK:全球导航卫星系统

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

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

    image-20191125194747063.png
    测量信号的传输时间,以获取距离信号。

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

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

    惯性导航:IMU

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

    陀螺仪:

    image-20191125195339726.png
    优点:更新频率高

    缺点:误差积累、精度差

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

    激光雷达定位

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

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

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

    视觉定位

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

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

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

    利用车道线、树

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

    image-20191125200732395.png
    优点是操作简单,缺点是缺乏三维信息、依赖三维地图

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

    第四章:感知

    使用计算机视觉技术

    CNN:卷积计算机网络

    计算机视觉

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

    image-20191125203521834.png
    检测:找出物体

    分类

    追踪:跟踪位置变化

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

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

    image-20191125204609651.png
    就是机器学习和深度学习那一套

    LiDAR图像

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

    image-20191125205212876.png
    对这样的图像也可以进行分析:

    image-20191125205258990.png

    追踪

    追踪可以解决遮挡问题:

    image-20191125205413415.png
    追踪可以保留检测到的对象的身份:

    change from

    image-20191125205429835.png
    to

    image-20191125205513313.png
    追踪的第一步是确认身份:借助特征

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

    分割

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

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

    image-20191125205942818.png

    传感器数据比较

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

    激光雷达用于检测障碍物

    雷达用于恶劣环境

    组合使用

    image-20191125210318508.png

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

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

    image-20191125210525766.png
    测量结果同步的两种方法:同步和异步

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

    image-20191125210538086.png

    第五章:预测

    对其他物体行为的预测

    实时性,延迟越低越好

    准确性

    要能动态学习新的规则

    不同的预测方法

    1. 基于模型的预测

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

      直观性

    2. 数据驱动的预测

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

    3. 基于车道的预测

      车道序列

      image-20191125211655817.png

    障碍物的状态

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

    预测目标车道

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

    image-20191125212006089.png

    递归神经网络模型(RNN)

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

    image-20191125212957865.png
    apollo的用法

    预测运动轨迹

    image-20191125213217256.png
    可能的轨迹有无穷多种,要筛选:

    • 设置约束条件
    • 去掉无法实习执行的轨迹
    • 考虑车辆实际运动情况

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

    规划

    轨迹规划:免碰撞、舒适

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

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

    输出:最优线路

    图搜索

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

    A*

    image-20191125215721868.png
    目标是找到从红色的点到绿色点的路径

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

    计算成本:

    this node-candidate node-goal node

    image-20191125215953194.png
    根据实际情况自定义value,也就是代价

    image-20191125220043500.png
    最佳节点是f最小的,f=g+h

    map in the real world:

    image-20191125220128454.png
    image-20191125220202490.png
    right最小,所以选择right

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

    image-20191125220347462.png
    时间戳是考虑到其他物体的动态

    轨迹的要求:

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

    image-20191125220542589.png
    选择最价路径:cost function,对不同的缺陷赋予代价

    image-20191125220640089.png
    注意在不同场景下,cost function的优化目标是一致的,但是cost的赋值原则是不一样的

    frenet坐标

    高中知识

    image-20191125220825920.png

    路径-速度解耦

    将路径和速度曲线相结合

    如何选择待选路径:

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

    image-20191125221131478.png

    ST图

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

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

    image-20191125221429171.png
    这是单个目标时的情况,多个时:

    image-20191125221451498

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

    优化

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

    二次规划:拟合

    image-20191125221709442.png
    image-20191125221846629.png

    Lattice规划

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

    image-20191125222042284.png
    然后合并为组合运动

    image-20191125222125320.png

    ST和SL轨迹的终止状态

    ST轨迹:

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

    SL轨迹:

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

    将ST和SL合起来:

    image-20191125222549079.png

    控制

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

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

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

    image-20191125223549736.png
    车辆状态通过地图和传感器等观察得到:

    image-20191125223626602.png
    用来评判现在的行驶状况和目标行驶状况的区别

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

    PID

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

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

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

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

    image-20191125224106333.png
    将P、i、d结合起来,形成PID Controller

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

    线性二次调节器

    基于模型的调节器

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

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

    之间的关系:

    image-20191125231619864.png
    image-20191125231649096.png
    最小化控制输入和误差:控制输入也会有消耗

    消耗函数:

    image-20191125231806191.png
    对cost函数进行最小化

    MPC

    复杂的控制器

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

    1. 建立汽车模型

    2. 确定预测的时间跨度image-20191125232114546.png

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

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

  • 相关阅读:
    常用的JS代码
    静态类相关
    并查集
    RMQ
    模考题line
    递归模考题 集合
    KMP
    快速幂
    读现代软件工程之构建之法的疑问
    实验二
  • 原文地址:https://www.cnblogs.com/jiading/p/11932716.html
Copyright © 2020-2023  润新知