02_两小时了解自动驾驶

目标

两小时系统了解无人驾驶的基本原理

你将学到什么

  1. 高精地图:几乎支持着软件栈的所有其他模块

  2. 定位:汽车如何确定它所处的位置,以个位数厘米级别精度进行自定位

  3. 感知:无人驾驶如何感知世界,深度学习是一个重要且强有力的感知工具,卷积神经网络,构成深度学习的分支,对感知任务至关重要,如分类,检测和分割.输入来源camrea,lidar,radar

  4. .预测:预测其他车辆或行人可能如何移动;

    递归神经网络可对其他物体随实践的运行进行跟踪,并使用该时间序列数据预测未来
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6Q0WTkY8-1651645013900)(D:\自动驾驶\AutoDriving\note\picture\image-20220305213015715.png)]

  5. 规划:将预测与路线相结合,规划是构建无人驾驶车最困难的部分之一,以生成车辆轨迹

  6. 控制:如何使用转向,油门和制动来执行规划轨迹

什么是无人驾驶

无人驾驶可以给我们带来安全和高效,无人驾驶有6个等级(0-5)),目前接近3

无人驾驶的运作方式

无人驾驶车包括五个核心部件

  1. 计算机视觉:摄像头成像,知道世界长什么样

  2. 传感器融合:合并其他传感器的数据(lidar,redar)更深入的了解周围环境

  3. 定位:有足够对周围的感知,就知道在世界的哪个位置(精度) [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-10ThSQjX-1651645013902)(D:\自动驾驶\AutoDriving\note\picture\image-20220305220112630.png)]

  4. 路径规划:使用这个位置来路径规划,绘制这个世界的路线

  5. 控制:为了控制如何行走
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1P7Mlroo-1651645013902)(D:\自动驾驶\AutoDriving\note\picture\image-20220305214756500.png)]
    绿色部分子在黄线上,绿线是它的车辆根据方向盘,油门以及制动命令,预测它将遵循的轨迹,期望是绿线和黄线完全的重合,当然这很难
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZdTB4tlL-1651645013902)(D:\自动驾驶\AutoDriving\note\picture\image-20220305220507419.png)]

参考车辆与硬件平台

一块可以通过电子控制的基础车辆,要具备线控驾驶车辆

  1. 控制区域网络(can),计算机通过cna卡链接汽车内部网络,发送加速,制动信号
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U5vl2hlt-1651645013903)(D:\自动驾驶\AutoDriving\note\picture\image-20220305223738016.png)]
    2. 全球定位系统 GPS
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x8IbGxhV-1651645013903)(D:\自动驾驶\AutoDriving\note\picture\image-20220305223933023.png)]
    3. IMU
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uC25WKTs-1651645013903)(D:\自动驾驶\AutoDriving\note\picture\image-20220305224025717.png)]
  2. lidar 了解环境点云
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ztR9FuZA-1651645013904)(D:\自动驾驶\AutoDriving\note\picture\image-20220305224116496.png)]5. camera 计算机视觉来提取[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6U4ND5gw-1651645013904)(D:\自动驾驶\AutoDriving\note\picture\image-20220305224217513.png)]
    camera,laida,radar,gps,imu,ipc?
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RHtvDbaE-1651645013904)(D:\自动驾驶\AutoDriving\note\picture\image-20220305224414778.png)]

开源软件架构

软件栈有

  1. 实时操作系统:确定稳定性和实时性RTOS
  2. 运行时框架:ROS的定制版,去中心化,共享内存,protobuf格式替换message
  3. 应用程序模块:map引擎,定位,感知,规划,控制,端到端驾驶以及人机接口

仿真环境

地图简介

地图一个重要的作用就是定位

高精地图与传统地图

高精地图包含大量的辅助信息,有道路网的精确三维表征,重要的特征是精度

地图与定位,感知,规划的关系

定位可以形象的比喻成拼图,地图可以帮助传感器缩小搜索范围.

高精地图

厘米级别的精度,减少计算资源,高精地图格式有很多,apollo采用OpenDriver

定位简介

定位是让无人驾驶车知道自身确切位置的方法,对无人驾驶很重要.

坐标转换的前提条件是定位

每种导航各有优缺点,GNSS,imu,lidar定位和视觉定位.

为什么需要如此精确的定位?

GNSS RTK

三颗卫星可以知道自己在什么位置
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6xyctK9m-1651645013905)(D:\自动驾驶\AutoDriving\note\picture\image-20220306112605430.png)]
GPS是使用最为广泛的GNSS系统

GPS由三部分组成
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uvvzOIM4-1651645013905)(D:\自动驾驶\AutoDriving\note\picture\image-20220306112855961.png)]
gps缺点高楼的阻挡,信号弱,跟新频率低

惯性导航

通过加速度和初始速度,初始位置,计算任何时间点的车辆位置.需要三轴加速度计
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8JLCIDIG-1651645013905)(D:\自动驾驶\AutoDriving\note\picture\image-20220306113356563.png)]
三轴陀螺仪,解决的是把加速度的坐标转换.

IMU频率高,但是随着时间的推移,会产生误差

GPS与IMU融合可以起到取长补短.但是也有一些情况处理不了-长隧道

激光雷达定位

利用激光雷达,可以通过点云匹配来对汽车进行定位,方法是将lidar检测的数据与预先存储在高精地图连续匹配,通过比较,获知汽车在高精地图上的位置和行驶方向,滤波算法是lidar定位的另一种方法

视觉定位

视觉定位的优点在于,图像数据很容易获得,缺点子啊与缺乏三维信息和对三维地图的依赖

融合定位

gps,imu,lidar多传感器融合,组合定位.不同传感器之间的优势互补,提高稳定性和准确性.融合框架,通过卡尔曼滤波将这些输出结合在一起,卡尔曼滤波建立在两步预测量周期之上

感知简介

计算机视觉,最广泛使用的方法为CNN即卷积神经网络,感知是无人驾驶中最重要的一部分

计算机视觉

无人驾驶车有四个感知世界的核心任务

  1. Detection 检测是找出物体在环境中的位置
  2. Classification 分类:是指明确对象是什么
  3. Tracking 跟踪:随时间的推移观察移动物体,如其他车辆,行人,自行车
  4. segmentation 语义分割:将图像中的每个像素与语义类别进行匹配,如道路,汽车或天空
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lCrEgvbb-1651645013906)(D:\自动驾驶\AutoDriving\note\picture\image-20220306141512131.png)]
    将分类最为研究计算机视觉一般数据流程为例子

图像分类器:是一种将图像作为输入,并输出标识该图像的标签或"类别"的算法

  1. 计算机接收camera设备的输入的一系列图像
  2. 通过预处理,调整图像大小,旋转,灰度处理,可以帮助模型更快的处理和学习图像
  3. 特征提却,游离缘计算机理解图像,例如车与自行车的显著特征
  4. 最后将特征输入到分类模型中

模型是帮助计算机了解图像内容的工具
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4jh2dmbc-1651645013906)(D:\自动驾驶\AutoDriving\note\picture\image-20220306141853845.png)]

摄像头图像

对图像像素处理,将深度视为三重叠加的二维色层很有帮助
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Vhq08IYQ-1651645013906)(D:\自动驾驶\AutoDriving\note\picture\image-20220306150700945.png)]

Lidar图像

用激光来测量,在环境中反射该光纤的物体之间的距离,lidar发射激光脉冲并测量物体,将每个激光脉冲反射回传感器所花费的时间,反射需要的时间越长,物体离传感器越远.激光雷达正是通过这种方式来构建世界的视觉表征
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K3fdjaho-1651645013907)(D:\自动驾驶\AutoDriving\note\picture\image-20220306151302388.png)]
lidar通过发射光脉冲来检测汽车周围的环境,蓝色点表示反射激光脉冲的物体,中间的黑色区域是无人驾驶车本身占据的空间.点云中的每个点代表反回传感器光束.可以返回很多信息,比如其形状和表面纹理
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-glzXuTbA-1651645013907)(D:\自动驾驶\AutoDriving\note\picture\image-20220306151801192.png)]
红点表示行人,绿点表示其他车辆

lidar数据用于构建世界视觉表征的足够空间信息

计算机视觉技术,不仅可以使用摄像头图像进行对象分类,还可以使用点云和其他类型的空间相关数据进行对象分类

机器学习

机器学习是训练计算机从数据中学习的计算机科学领域,通常,这种学习结果会存放在一种被称为"模型"的数据结构中.

模型可以理解成,用于理解和预测世界的数据结构

机器学习涉及使用数据和相关的真值标记来进行模型训练

模型利用了人类创造的真值标记成为监督式学习,让机器自己判断是行人还是车辆,由机器自己去判断称为无监督学习,还有半监督学习,钱花学习

神经网络

人类的生物神经元,通过互相链接,形成了神经元网络.类比创建一个用于机器学习的人工神经网络,人工神经网络通过数据来学习复杂模型的工具,通过密集的训练,计算机可以辨别汽车,行人等
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ooQ96x6z-1651645013907)(D:\自动驾驶\AutoDriving\note\picture\image-20220306153251795.png)]
我么很难直观的理解该数学模型,我们开到图像,大脑是如何工作的呢?

  1. 识别特征,权重放在特征上
  2. 大脑将这些特征对图像进行检测和分类
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vqHxdrGv-1651645013908)(D:\自动驾驶\AutoDriving\note\picture\image-20220306155121456.png)]
    同样的机器神经网络也会从图像中提取许多特征,但是这些特征是人类无法描述或甚至无法理解的特征.但是我们不需要理解这些特征,计算机会根据特征权重,完成任务,这就是深层神经网络的思维方式
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2dWHw5n1-1651645013908)(D:\自动驾驶\AutoDriving\note\picture\image-20220306155503541.png)]

反向传播算法

我们已经了解,神经网络如何通过数据进行学习,学习是如何发生的呢?

训练由三部循环组成:

  1. 前馈
  2. 误差测定
  3. 反向传播

首先随机分配初始权重,即人工神经元的值,通过神经网络来馈送每个图像,产生输出值,这被称为前馈
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Oxu9dCUp-1651645013908)(D:\自动驾驶\AutoDriving\note\picture\image-20220306162415387.png)]
误差测定误差是真值标记与前反馈过程所产生输出之间的偏差
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r56F5RDJ-1651645013909)(D:\自动驾驶\AutoDriving\note\picture\image-20220306162802463.png)]
最后一步反向传播是通过神经玩咯反向发送错误误差,此过程类似前馈过程,只是以相反方向进行,每个人工神经都对其值进行微调,这是基于通过神经网络后向传播的误差,所有这些独立调整的结果,可生成更准确的网络
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7dc8BdbP-1651645013909)(D:\自动驾驶\AutoDriving\note\picture\image-20220306162954125.png)]
为了寻猎网络需要数千个这样的周期

,最终的结果是模型能偶根据新数据做出准确预测

卷积神经网络(CNN)

是一种人工神经网路,它对感知问题特别有效.cnn接收多维输入,它包括定义大多数传感器数据的二位和三维形状.

如果使用标准神经网络对图像进行分类,需要一种方法将图像连接到网络的第一层,保准的做法是通过将图像矩阵重塑为一个矢量,并在一个大行中链接所有的列,将图像展开为一维像素阵列,然而这种方法打破了图形中所嵌入的空间信息
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ObdyON5G-1651645013910)(D:\自动驾驶\AutoDriving\note\picture\image-20220306163738310.png)]
过滤器连续划过图像来收集信息,每次收集信息时,只对整个图形的一小部分区域进行分析,这被称为卷积.
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d3e8Ryly-1651645013910)(D:\自动驾驶\AutoDriving\note\picture\image-20220306164322881.png)]
当我们子整个输入图像上对一个过滤器进行"卷积"时,我们将该信息与下一个卷积层相关联
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VypuFq0N-1651645013911)(D:\自动驾驶\AutoDriving\note\picture\image-20220306164653378.png)]

  1. CNN 可以识别第一个卷积层中的基本边缘和颜色信息
  2. 然后通过在第一层上卷积过滤器,cann可以使用边缘和颜色信息,来归纳更复杂的结构,如车轮,车门,挡风玻璃
  3. 另一个卷积可使用车轮和车门,挡风玻璃来识别整个车辆
  4. 最后神经网络可使用这以高阶信息,对车辆进行分类(组后的bus处)
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zzGez89F-1651645013912)(D:\自动驾驶\AutoDriving\note\picture\image-20220306164838630.png)]
    cnn根据其任务查找真正需要的特征,任务可能是i图像的检测,分类

检测与分类

在感知热内中,首先想到的是障碍物的检测和分类,形式过程中由静止障碍物和移动障碍物,汽车根据感知的对象,来确定速度和路径

使用什么算法来对障碍物进行检测和分类?

  1. 先使用CNN来查找图像中的对象的位置

  2. 在对图像中的对象进行定位后,将图像给另外一个CNN进行分类

YOLO和SSD是具类似形式的不同体系结构.

跟踪

在检测完对象后,我们需要跟踪它们

追踪在检测失败时时至关重要的,如果在进行检测算法时,对象被其他对象遮挡一部分,则检测算法可能会失败,追踪可以解决遮挡问题

另外一个原因,追踪可以保留身份.
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1ogTtKcI-1651645013912)(D:\自动驾驶\AutoDriving\note\picture\image-20220306194630753.png)]
追踪的第一步为确认身份,通过查询特征相似度最高的对象,将在之前的帧中检测到的所有对象与在当前的帧中检测到的对象进行匹配

分割

语义分割及对图像的每个像素进行分类,确定车辆的可行使区域

语义分割依赖于一种特殊类型的CNN(全卷积网络FCN)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6ZQHFlw9-1651645013913)(D:\自动驾驶\AutoDriving\note\picture\image-20220306195138981.png)]
FCN提供可可在阮氏输入图像之上叠加的逐像素输出,典型CNN中,经过多次卷积后,所产生的输出比原始输入图像小的多

  1. 网络中的每一层都是卷积层,因此称为全卷积网络
  2. 为了分割像素,输出尺寸必须与原始图像的尺寸相匹配
  3. 对中间输出进行上采样处理,直到输出的大小与原始输出图像的大小相匹配
  4. 网络的前半部分通常被称为编码器(Encode),这部分网络对输入图像的特征进行了提取和编码
  5. 网络的后半部分通常被称为解码器(decode),对特征进行了解码,并将其应用于输出
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z7c3I0Cp-1651645013913)(D:\自动驾驶\AutoDriving\note\picture\image-20220306195414056.png)]

apollo感知

apollo在高精地图上使用感兴趣区域(ROI),来重点关注相关对象,将ROI应用于点云,以缩小搜索范围并加快感知

通过检测网络馈送已过滤的点云,输出用于构建围绕对象的三维边界框
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gSTikwxC-1651645013914)(D:\自动驾驶\AutoDriving\note\picture\image-20220306202832551.png)]
我们使用被称为检测跟踪关联的算法,来跨时间步识别单个对象,该算法先保留在每个时间步要跟踪的对象列表,然后在下一个时间步中找到每个对象的最佳匹配
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c5ERHibZ-1651645013915)(D:\自动驾驶\AutoDriving\note\picture\image-20220306203111608.png)]
对于交通灯的分类,apollo先使用高精地图来确定前方是否存在交通信号灯,如果前方有信号灯,则高精地图返回信号灯的位置,这侧重于摄像头搜索范围,使用检测网络对图像中的灯进行定位,从较大的图像中提取交通信号灯,将裁剪的交通灯图像提供给分类网路,以确定颜色.

如果有许多灯,则系统需要选择哪些灯与其车道相关
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YZNRPZp5-1651645013915)(D:\自动驾驶\AutoDriving\note\picture\image-20220306203620596.png)]
apollo 使用YOLO网络来检测车道线和动态物体,其中包括车辆,卡车…;在经过YOLO网络检测后,在线检测模块会并入来自其他传感器的数据,对车道线预测进行调整,车道线最终被并入名为"虚拟车道"的单一数据结构中.同样,也通过其他传感器的数据对YOLO网络所检测到的动态对象进行调整.以获得每个对象的类型,位置,速度和前进的方向,虚拟通道和动态对象,均被传递到规划与控制模块
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GJtWnqZt-1651645013916)(D:\自动驾驶\AutoDriving\note\picture\image-20220306204458968.png)]

预测

预测周围的环境很重要,当你想要去某个地方

通过生成一条路径来预测一个物体行为,预测路径有实时性要求,实时性时指我们想要算法的延迟越短越好,下一个目标就是准确性

预测模块也因该学习新的行为,使用多元的数据训练,可以使算法随着时间的推移而提升预测能力.

apollo 两种基本的预测类型

  1. 基于模型,更具有分析性
  2. 数据驱动

预测也将称为决策的核心,好的预测,才能做出更好的决策

不同的预测方式

基于模型的预测与数据驱动的预测

此时我们不清楚其他的车辆时右转还是执行

  1. 基于模型的方法,构建两个候选的预测模型

    1. 一个描述该车进行右转弯,用绿色表示轨迹
    2. 另一个模型描述了该车继续直行,用蓝色轨迹表示

    此刻,我们认为任意一种模型发生的概率都是相同的,我们两个候选模型都有了自己的轨迹,继续观察移动车的移动,看他与那一条轨迹更加匹配,如果我们看到车辆向左变道,我们会更加的确认,车辆最终会直行.

    如果我们看到车在右转弯车道保持执行,会更加倾向于预测对车辆右转

    优点,更直观,而且结合了我们现有的物理知识以及交通法规还有人类行为多方面的知识

  2. 数据驱动预测使用机器学习算法,通过观察结果来训练模型,一旦机器学习模型训练好,我们就可以在显示世界中利用此模型去做出预测,

    优点时,训练数据越多,模型效果越好
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KC8vVEtf-1651645013916)(D:\自动驾驶\AutoDriving\note\picture\image-20220306215332213.png)]

基于车道的预测

apollo提供了一种基于车道序列的方法.

为了简历车道序列,我们先将道路分成多个部分,每个部分都覆盖了一个易于描述车辆运动的区域

比如在十字路口,车辆如何在这些区域内转换

将车辆的行为划分为一组有限的组合模式,并将这些模式组合描述为车道序列

例如执行汽车的引动可以描述为0-1-3-7
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WvTUDVQG-1651645013917)(D:\自动驾驶\AutoDriving\note\picture\image-20220306221304724.png)]

障碍物的状态

为了预测,我们也需要知道物体的状态,我们通过观察一个物体的朝向,位置,速度和加速度来预测它将会做什么.
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W6P6v8qO-1651645013917)(D:\自动驾驶\AutoDriving\note\picture\image-20220306222029247.png)]
无人车还要考虑车道段内物体的位置.

例如,从物体到车道线段边界的纵向和横向距离
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bwqtjndn-1651645013917)(D:\自动驾驶\AutoDriving\note\picture\image-20220306222255685.png)]
预测模块还包含之前时间间隔的状态信息,以便做出更准确的预测

预测目标车道

使用车道序列框架的目标是,为道路上的物体生产轨迹,这是一个复杂的问题.

假设我们在车道段0中检测到一辆车,并且我们会预测在接下来的几个时间段中它将如何行驶.

现有两个显而易见的选择,它可能停留在车道段0然后向右转,或者可能转向车道段1然后直行.

这个分析实际上是我们前进的一大步,将预测问题简化成选择问题,接下来选择车辆最有可能采取的车道顺序,通过每个车道序列的概率来进行选择
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b3Tcvby5-1651645013918)(D:\自动驾驶\AutoDriving\note\picture\image-20220306225515336.png)]
我们需要一个模型,将车辆转台和车道段作为输入,该模型用于提供车辆可能采用每个车道序列的概率,

使用观测数据对模型进行经验性训练,训练时,将真是的车辆行为提供给模型,不仅包括车道段和对象的状态
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YyE7Mahw-1651645013918)(D:\自动驾驶\AutoDriving\note\picture\image-20220306230200398.png)]

递归神经网路

递归神经网络或RNN是一种利用时间序列数据特征的一种预测方法

神经网络是可训练的多层模型,神经网络从输入提取高级特征,并使用这些特征来计算得出输出
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RdALYFdD-1651645013918)(D:\自动驾驶\AutoDriving\note\picture\image-20220307214022811.png)]
例如有个神经网络,来分类图像是否包含汽车,网络中间层将提取特征,如轮胎和窗户.

神经网络有许多结构,一个基本的神经网络首先得到输入,然后将数据通过隐藏层,然后经过处理得到输出,这种结果有时也被称作多层感知网络或MLP,在训练的过程中,会有很多训练数据输入模型,每一个数据都由原始的数据和对应的标签组成.

例如输入是一个car图像,而标签就是一个包含汽车的符号或者是其他符号

神经网络从数据中学习的方式叫做后向传播.

首先.神经网络得到输入并产生输出

然后,计算机比较输出与真值之间的误差

接着,这种误差通过向后传回整个网络

中间的隐藏层根据观察到的这种差别调整其中的中间值或者叫权重,这样可以在未来提高神经网络的准确率
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VXccRZjy-1651645013918)(D:\自动驾驶\AutoDriving\note\picture\image-20220307215023045.png)]
多重结构的递归神经网络,我们称之为MLP单元

从数据序列中提取出高级特征,每个MLP单元将序列的一个元素作为输入,并预测序列的下一个元素作为输出.

为了对元素之间的顺序关系建立模型,我们在每个单元之间建立一个额外的连接,这意味着每个单元根据原始输入和前一个单元的输出进行预测,这是RNN的基本结构
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HipEzFnE-1651645013919)(D:\自动驾驶\AutoDriving\note\picture\image-20220307222436563.png)]

递归神经网络在目标车道预测的应用

apollo 使用RNN建立一个模型来预测车辆的目标车道,apollo为车道序列提供一个RNN模型,为相关对象状态提供另一个RNN模型.

apollo链接这两个RNN的输出并将它们馈送到另一个神经网络,该神经网络会估计每个车道序列的概率

具有最高概率的车道序列,是我们预测目标车辆将遵循的序列.

为了训练整个网络,使用现有的记录,每条记录都包含一个车道序列

相关的对象状态和一个标签,用于指示对象是否遵循此特定车道序列,在训练中,我们比较网络输出和真值标记,并使用反向传播来训练网络
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eCvHM86p-1651645013919)(D:\自动驾驶\AutoDriving\note\picture\image-20220307223224764.png)]

轨迹生成

轨迹生成时预测的最后一步,一旦我们预测到物体的车道序列,我们就可以预测物体的轨迹

在任何两点A和B之间,物体的行进轨迹有无限的可能
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DlKQLxXx-1651645013919)(D:\自动驾驶\AutoDriving\note\picture\image-20220307223513564.png)]
通过设置约束条件,去除大部分候选轨迹

首先我们假定汽车将与目标车道的中心对齐,我们继续去除车辆无法实际执行的轨迹,通过考虑车辆当前的速度和加速度从剩余的轨迹中进行选择
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-urNuPYMU-1651645013919)(D:\自动驾驶\AutoDriving\note\picture\image-20220307223853020.png)]
通过初始状态和最终状态来拟合一个多项式模型

规划简介

规划的第一步时路线导航,侧重于如何从地图上的A前往B.

在进行路线规划时,将地图数据作为输入,并输出可形式路径.手机导航系统时路线规划的一个示例.

通过轨迹规划,做出微妙的决策,以避开障碍物,并为乘客创造平稳的乘车体验

轨迹规划的目标是生成避免碰撞和舒适的可执行轨迹,该轨迹由一系列点定义,每个点都有一个关联速度和一个指示何时应抵达那个点的时间戳

在两种背景下来讨论"规划"

  1. 你要去的地方,也就是一个象征性的城市,计划一下需要花多少时间才能到达目的地
  2. 运动轨迹水平,用来决定执行特定操作时,汽车应该采取哪种转向,这些轨迹不只是时间曲线,也不只是空间曲线

路由

路线规划的目标时,找到从地图上的A前往B的最佳路径,路线规划使用了三个输入

  1. map:包括公路网和实时交通信息
  2. 当前在地图上的位置
  3. 目的地:由乘客决定

当从A到B,通常会沿着道路追踪路径,以查看是否存在通往目的地的任何路径,这被称为搜索.

在收索之前,将地图数据重新格式化为"图形"的数据结构,该图形由"节点"和"边缘"组成,节点代表路段,边缘代表这些路段之间的连接.

例如在交叉口,汽车可从节点1移动到节点2,节点3或节点4,对一个节点移动到另一个节点所需的成本进行建模.

在现实中,拐过一个交叉路口比直行更费劲,所有1-4 成本高于1-3的成本
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ywyGTHCB-1651645013920)(D:\自动驾驶\AutoDriving\note\picture\image-20220307231707082.png)]](https://img-blog.csdnimg.cn/734b0455414146c4af786a20f758b788.png
将地图转换为图形的好处在于在极端及科学领域中,有许多用于在图形中查找路径的快速算法,将图形中的路径重新转换为地图上的路径

网格世界

A* 是经典的路径查找处理算法.

A*是如何通过网格工作?

我们将网格中的每个单元格当作一个节点,我们能够从任何一个节点移动到其任意相邻节点,这个特殊网格包含一些阻挡潜在路径的墙壁

灰色单元格的是障碍物,红色单元格时出发点,绿色单元格目的地
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uN2L1ezj-1651645013920)(D:\自动驾驶\AutoDriving\note\picture\image-20220308215958493.png)]
对人们来说,可以通过查看图形便可以轻易找出最佳路径,但对于计算机而言,这并不明显.

计算机必须检查是否存在通往目的地的任何路径,竭尽所能尝试所有可能的路径,已找到最短路径,但是这需要消耗大量的时间,尤其是地图非常大的时候.

从任何给定的节点来看,我们最多有8个用于下一步的选项,因为有相邻的八个单元格
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Mlj71WlF-1651645013920)(D:\自动驾驶\AutoDriving\note\picture\image-20220308220654219.png)]
对于这8个选项中的每一个,我们在下一步有另外8个选项
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GJUhQ2Je-1651645013921)(D:\自动驾驶\AutoDriving\note\picture\image-20220308220817328.png)]
如果我们展开所有节点,搜索将暴增,即使最快的计算机也无法处理的程度.

从初始节点开始,我们需要确定8个相邻节点中,哪个时最有希望的候选节点,对于每个候选节点,我们考虑两件事

  1. 计算从开始节点到候选节点的成本
  2. 估计从候选节点前往目的地的成本

计算前往候选节点的成本很容易,因为它已经与我们相邻,从候选节点到目的地的成本很困难,但是通过简单计算,从候选节点到目的地的距离,我们通常可以做出很好的估计.

我们使用变量g和h来表示每个成本,g值为从开始节点前往候选节点的成本.h为从候选节点前往目的地的估计成本或启发式成本.

例如交通阻塞会增加前往目的地的成本,所以交通繁忙的路径具有更高的成本.

对于每个候选节点,我们通过添加g值和h值来计算总和即f值

最佳候选节点时f值最小的点,每当我们抵达新节点时,我们通过重复此过程来选择下一个候选节点,而且总是选择我们尚未访问过,且具有最小f值的节点
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2c8drvCX-1651645013921)(D:\自动驾驶\AutoDriving\note\picture\image-20220308222432329.png)]
A*算法建立了一条稳定前往目的地的路径

从路由到轨迹

高等级地图路线知识规划过程中的一部分,我们仍需要构建沿这条路线前进的低等级轨迹.

这意味着要处理不属于地图的物体,如其他车辆,自行车或行人,试图在我们前面掉头的汽车互动
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7a8H4RJG-1651645013921)(D:\自动驾驶\AutoDriving\note\picture\image-20220308223514693.png)]
这些场景需要更低级别没更高精度的规划,我们将这一级别的规划成为 轨迹生成

3D轨迹

轨迹生成的目标是生成一系列路径点所定义的轨迹

我们为每个路径点分配了一个时间戳和速度,我们让一条曲线与这些路径点拟合,生成轨迹的几何表征.

由于一定的障碍物可能会暂时阻挡部分路段,轨迹中的每个路点都有时间戳

我们可以将时间戳与预测模块的输出相结合,以确保在我们计划通过时,轨迹上的每个路径段均未被占用.

这些时间戳建立了一个三维轨迹,每个路径点由空间的两个维度,以及时间上的第三个维度来定义
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WMStGLeX-1651645013921)(D:\自动驾驶\AutoDriving\note\picture\image-20220308225345422.png)]
我们还为每个路径点指定了一个速度,速度用于确保车辆按时到达每个路径点

评估一条轨迹

现实世界中的规划面临多种约束

  1. 轨迹应能免于碰撞,这意味这必须无障碍物

  2. 要让乘客感到舒适,路径点之间的过渡以及速度的任何变化都必须平滑 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0sfl3Bwl-1651645013922)(D:\自动驾驶\AutoDriving\note\picture\image-20220309214448418.png)]

  3. 路径点对车辆应实际可行,例如告诉行驶的汽车不能立即做180°转弯,我们不能构建包含这种不可行动的轨迹
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0s1xSFot-1651645013922)(D:\自动驾驶\AutoDriving\note\picture\image-20220309214631159.png)]

  4. 轨迹应合法,我们需要了解每个路径点的交通法律,并确保轨迹遵守这些法律法规

在道路上的任何两点之间,可能会有多个不会碰撞,舒适,可行且合法的轨迹,如何选择最佳轨迹呢?

答案是使用"成本函数"

成本函数为每个轨迹分配了一个"成本",我们选择成本最低的轨迹.

轨迹成本由各种犯规处罚组成,例如偏离道路中心,有可能会碰撞,超出速度限制或轨迹的曲率和加速度让乘客感到不舒服均会增加成本

轨迹成本将所有这些缺陷聚合为单个数字

这使我们能对不同的轨迹进行排名
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-25OZQY5X-1651645013922)(D:\自动驾驶\AutoDriving\note\picture\image-20220309220059617.png)]
车辆甚至可能在不同的环境使用不同的成本函数,例如,高速公路可能与停车场的成本函数不同

Frenet坐标系

我们通常使用笛卡尔坐标系描述物体的位置,但是笛卡尔坐标系对车辆来说并不是最佳的选择.

即使给出车辆位置(x,y),如果我们不知到道路在哪里,也很难知道车辆行驶了多远,也很难确认它是否偏离车道中心
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P929lIxY-1651645013922)(D:\自动驾驶\AutoDriving\note\picture\image-20220309220710377.png)]
笛卡尔坐标系的替代解决方案为Frenet坐标系,

Frenet坐标系描述了汽车相对于道路的位置,在Frenet框架中S代表沿道路的距离,也被称为纵坐标,d代表与纵向线的位移,也被称为横坐标.

在道路的每个点上,横轴和纵轴都是垂直的.纵坐标表示在道路中的行驶距离,横坐标表示汽车靓丽中心线的距离
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-irrx6B6R-1651648208341)(D:\自动驾驶\AutoDriving\note\picture\image-20220309221125535.png)]

路径-速度解耦规划

路径-速度解耦规划将轨迹分为两步:路径规划和速度规划

首先,在速度规划步骤中,生成候选曲线,这是车辆可行使的路径,我们使用成本函数对每条路径进行评估,

该函数包含平滑度,安全性,与车道中心的偏离,以及我们想要考虑的其他任何因素

我们按照成本对路径进行排名,并选择成本最低的路径.

下一步是确定沿这条路线行进的速度,我们可能希望改变在该路径上的速度

所以我们真正需要选择的是与路径相关的一系列速度,而不是单个速度

我们将该序列称作"速度曲线"

我们可以使用优化功能为路径选择受到各种限制的良好速度曲线

通过将路径和速度曲线相结合,可构建车辆行驶轨迹

路径生成与选择

为了在路径-速度解耦规划中生成候选路径

我们首先将路段分割成单元格
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1B5DGaC9-1651645013923)(D:\自动驾驶\AutoDriving\note\picture\image-20220309230912341.png)]
然后对这些单元格中的点进行随机采样
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p1y5bI8t-1651645013923)(D:\自动驾驶\AutoDriving\note\picture\image-20220309231043225.png)]
通过从每个单元格中取一个点,并将点连接,我们创建了候选路径
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X2s9kWGh-1651645013924)(D:\自动驾驶\AutoDriving\note\picture\image-20220309231337308.png)]
通过重复此过程,我们可以构建多个候选路径

我们使用成本函数对这些路径进行评估
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oezYzhbs-1651645013924)(D:\自动驾驶\AutoDriving\note\picture\image-20220309231437487.png)]
并选择最低成本路径
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uscRnXQn-1651645013924)(D:\自动驾驶\AutoDriving\note\picture\image-20220309231538488.png)]
成本函数可能考虑以下因素

  1. 与车道中心的距离
  2. 与障碍物的距离
  3. 速度和曲率的变化
  4. 对车辆的压力

或我么希望列入的任何其他因素

ST图

选择路径后的下一步是选择与该路径相关的速度曲线,一个被称为"ST"图的工具可以帮助我们设计和选择速度曲线.

在ST图中,"S"表示车辆的纵向位移 ."t"表示时间.

ST图上的曲线是对车辆运动的描述,因为它说明了车辆在不同时间的位置,

由于速度是位置变化的速率,所以我们可以通过查看曲线的斜率从ST图上推断速度
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SFNtZXob-1651645013924)(D:\自动驾驶\AutoDriving\note\picture\image-20220310220805873.png)]
斜坡越陡,则表示,在更短的时间内有更大的移动,对应更快的速度.

速度规划

为构建最佳速度曲线,我们需要将ST图离散为多个单元格.

单元格之间的速度有所变化,但在每个单元格内,速度保持不变.

该方法可简化速度曲线的构建,并维持曲线的近似度.

在ST图中,可以将障碍物绘制为在特定时间段内,阻挡道路的某些部分的矩形.

例如,假设预测模块预测车辆,将在t0到t1的时间段内驶入我们的车道,由于该车将在此期间占据位置S0到S1.

因此我们在ST图上绘制了一个矩形,它将在时间段t0到t1期间阻挡位置s0到s1,为了避免碰撞,速度曲线不得于此矩形相交.

既然吼了一张各单元格被阻挡的ST图,我们便可以使用优化引擎为该图选择最佳的速度曲线
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q7MpD6OZ-1651645013925)(D:\自动驾驶\AutoDriving\note\picture\image-20220310221857889.png)]
优化算法通过复杂的数学运算来搜索,受到各种限制的低成本解决方案,限制包括,法律法规,速度限制,距离限制,汽车的物理限制
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TCy2SrKC-1651645013926)(D:\自动驾驶\AutoDriving\note\picture\image-20220310222027647.png)]

优化

路径-速度解耦规划在很大程度上取决于离散化,

路径选择涉及将道路划分为单元格

速度规划涉及将ST图划分为单元格
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ctIjDqrb-1651645013926)(D:\自动驾驶\AutoDriving\note\picture\image-20220310222345974.png)]
尽管离散化使这些问题更容易解决,但该解决方案生成的轨迹并不平滑,为了将离散解决方案转化为平滑轨迹,我们可以使用"二次规划技术"

二次规将平滑的非线性曲线与这些分段式线性段拟合
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TRXRw536-1651645013926)(D:\自动驾驶\AutoDriving\note\picture\image-20220310222732221.png)]
一旦路径和速度曲线就绪,我们便可以用其构建三维轨迹

路径-速度规划的轨迹生成

端到端 路径-速度解耦规划

假设我们正在路上行驶,感知系统观察到一辆缓慢行驶的车辆离我们越来越近,

首先,我们在这辆车的周围生成多条候选路线,我们使用成本函数对这些候选路径进行评估,并选择成本最低的路径,

然后我们使用ST图来进行速度规划,我们根据其他乘凉随时间变化的位置阻挡了ST图的部分区域

优化引擎可帮助我们确定该图的最佳速度曲线,该曲线受制于约束和成本函数
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QBvh4ZYz-1651645013927)(D:\自动驾驶\AutoDriving\note\picture\image-20220310223508155.png)]
使用二次规划让路径和速度曲线变平滑,最后将路径和速度去点合并构建轨迹

这里的轨迹在速度较快时为红色,在速度较慢时为蓝色,我们使用该轨迹来安全的绕开其他车辆,并继续我们的旅程
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LmgARzb2-1651645013927)(D:\自动驾驶\AutoDriving\note\picture\image-20220310223713465.png)]

Lattice规划

我们来学习一种称为Lattice 规划的轨迹生成方法,通过使用Frenet坐标,我们可以将环境投射到纵轴和横轴上.

我们的目标时生成三维轨迹-纵向维度-横向维度-时间维度.将三维问题分解成两个单独的二维问题.

这是通过分离轨迹的纵向和横向分量来解决的,其中一个二维轨迹时具有时间戳的纵向轨迹

另一个二维轨迹是相对于纵向轨迹的横向偏移我们称为SL轨迹

Lattice规划具有两个步骤,即分别建立ST和SL轨迹,然后将它们合并,为生成纵向和横向二维轨迹,我们先将初始车辆状态投射到

ST坐标系和SL坐标系中,通过对预选模式中的多个候选最终状态进行采样,来选择最终车辆状态,对每个候选状态,我们构建了一组轨迹.

将我们的车辆从其初始状态转换为最终状态,并选择成本最低的轨迹
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DUkN5mh9-1651645013927)(D:\自动驾驶\AutoDriving\note\picture\image-20220311222507108.png)]

ST轨迹的最终状态

根据情况,我们可以将状态分为3组,巡航,跟随与静止.

巡航意味着车辆将在完成规划步骤后定速行驶,我么实际上在对图上的点进行采样,在图中,横轴代表时间,纵轴代表速度.

对于该图上的点,这意味着汽车将进入循环状态,在时间t以s点的速度巡航,对于这种模式所有最终状态的加速度均为零.
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-32f2zJ60-1651645013928)(D:\自动驾驶\AutoDriving\note\picture\image-20220311223430618.png)]
下一个要考虑的模式为跟随车辆,在这种情况下,我们要对位置和时间状态进行采样,并尝试在时间t出现在某辆车后面,在跟随车辆时,

我们需要与前方的车保持安全距离,这时,速度和加速度将取决于我们要跟随的车辆,这意味着,在这种模式下,速度和加速度都会进行修正
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zKaWqj9P-1651645013928)(D:\自动驾驶\AutoDriving\note\picture\image-20220311224123798.png)]
最后一种模式是停止,对于这种模式,我们只需对汽车何时何地地停止进行抽样
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s2WxGRxs-1651645013928)(D:\自动驾驶\AutoDriving\note\picture\image-20220311224340440.png)]
这里速度和加速度会被修正为0

SL轨迹的终止状态

我们会根据这样一个假设来进行SL规划,即无论车辆进入怎样的终止状态,车辆都应该稳定地与车道中心线对齐。

当我们用横向位置与纵向位置作图时,我们想要的候选轨迹应该以车辆与车道对齐并直线行驶而结束
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5u2dIxlm-1651645013928)(D:\自动驾驶\AutoDriving\note\picture\image-20220312115659614.png)]
为了达到这种终止状态,车的朝向和位置的一阶和二阶导数,都应该为零,这意味着车辆既不是横向移动的,那是一阶导数

也不是横向加速,那是二阶导数。这意味着车辆正沿着车道直行

Lattice规划的轨迹生成

一旦我们同时拥有了ST和SL轨迹,我们就需要将它们重新转换为笛卡尔坐标系,然后可以将它们相结合,构建由二维路径点和一维时间戳组成的三维轨迹
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hrqnwkZg-1651645013929)(D:\自动驾驶\AutoDriving\note\picture\image-20220312120405921.png)]
ST轨迹是随时间变化的纵向位移,SL轨迹是纵向轨迹上每个点的横向偏移,由于两个轨迹都有纵坐标S,

所以我们可以通过将其S值进行匹配来合并轨迹。

项目示例路径规划

规划是构建无人驾驶车辆时最困难和最具挑战性的部分之一,规划项目,有限状态机的新算法。规划器选择一种行为,如变道,加速度或减速,然后规划器构建用于执行该行为的轨迹

控制简介

控制时驱使车辆前行的策略,对汽车而言,最基本的控制输入为转向,加速和制动。

通常,控制器使用一系列路径点来接收轨迹,控制器的任务是使用控制输入,让车辆通过这些路径点
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KHz0CwRz-1651645013929)(D:\自动驾驶\AutoDriving\note\picture\image-20220312122032235.png)]
首先控制器必须准确,这意味着它应该避免偏离目标轨迹,这对于安全性来说,这尤为重要,即使路面潮湿或道路比较陡峭,控制器仍需要精确地执行轨迹
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PYIBjNLY-1651645013929)(D:\自动驾驶\AutoDriving\note\picture\image-20220312122410741.png)]
其次控制策略对汽车因该具备可行性。

例如,如果你的汽车向北行驶,而你希望它立即转向东转,你可以在游戏中做到这一点,但在现实中无法实现
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UwrXGByj-1651645013929)(D:\自动驾驶\AutoDriving\note\picture\image-20220312122935312.png)]
最后,需要考虑地一点是平稳度,舒适地驾驶非常重要,如果车辆行驶地不规律,
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DbehhpO8-1651645013930)(D:\自动驾驶\AutoDriving\note\picture\image-20220312123112827.png)]
驱动必须是连续的,这意味着你应该避免突然转向,加速或驱动
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tLtQIEkS-1651645013930)(D:\自动驾驶\AutoDriving\note\picture\image-20220312123230458.png)]
总之,我们地目标是使用可行地控制输入,最大限度地降低与目标轨迹地偏差,最大限度地提高乘客地舒适度
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UolwIpar-1651645013930)(D:\自动驾驶\AutoDriving\note\picture\image-20220312124803952.png)]
可用于实现这些目标地三种控制策略

  1. 比例积分微分控制(PID)是一个非常合适地控制机制

  2. 线性二次调节器(LQR)包含地内容更广泛

  3. 模型预测控制(MPC)

领会几种不同地车辆控制策略,控制是让汽车在既定轨迹上平稳运行地学问

控制流程

我们地控制器预计由两种输入,即目标轨迹与车辆状态。

目标轨迹来自规划模块,在每个轨迹点处,规划模块指定一个位置和一个参考速度
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l4yWibwx-1651645013931)(D:\自动驾驶\AutoDriving\note\picture\image-20220312125533039.png)]
在每个时间步,都对轨迹进行更新,我们还需要了解车辆状态,其中b包含车辆位置,这通过本地化模块来计算。

该状态还包括我们从车辆内部传感器获取地数据,如速度,转向和加速度。

我们使用这两个输入来计算目标轨迹与实际行进轨迹之间地 偏差。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5sFfly59-1651645013931)(D:\自动驾驶\AutoDriving\note\picture\image-20220312125925837.png)]
控制器地输出是控制输入,(转向,加速和制动)地值,当偏离目标轨迹时,我们希望通过采取行动来纠正这种偏差
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RqI6TS7K-1651645013931)(D:\自动驾驶\AutoDriving\note\picture\image-20220312130152380.png)]
对于普通汽车,我们使用方向盘控制行驶方向(即转向),使用油门加速,使用刹车减速(即制动),这也是无人即使汽车所作地。

一旦将这三个值传递给车辆,汽车实际上已经开始无人驾驶了!接下来我们将学习,如何计算出这三个输出 转向-加速-制动

PID控制

这个控制器地优点在于它非常简单,只需要知道与目标轨迹有多大地偏离。

PID地第一个组件为P代表“比例”(proportional),设想一辆车正试图遵循目标轨迹,P控制器在车辆开始偏离时,立即将其拉回目标轨迹
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OXFSRGkG-1651645013931)(D:\自动驾驶\AutoDriving\note\picture\image-20220312130859203.png)]
比例控制意味着,车辆偏离越远,控制器就越难将其拉回目标轨迹。

在实践中P控制器地一个问题在于,它很容易超出参考轨迹,当车辆越来越接近目标轨迹时,我们需要控制器更加稳定
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mGXOwEce-1651645013932)(D:\自动驾驶\AutoDriving\note\picture\image-20220312131131322.png)]
PID控制器中地D致力于使运动处于稳定状态,D代表微分。

PD控制器类似于P控制器,它增加了一个阻尼项,可最大限度地减少控制器输出地变化速度
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U3QvrDrB-1651645013932)(D:\自动驾驶\AutoDriving\note\picture\image-20220312131416824.png)]
PID控制器中地最后一项I,表示积分(Integral),该项负责纠正车辆地任何系统性偏差,例如转向可能失准,这可能造成恒定地转向偏移,在这种情况下,我们需要稍微向一侧转向,以保持执行,为解决这一问题,控制器会对系统地累积误差进行惩罚。

我们可以将P,I和D组件组合,构成PID控制器
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aJHrktZ7-1651645013932)(D:\自动驾驶\AutoDriving\note\picture\image-20220312131932099.png)]

PID优劣势对比

它在很多地情况下效果很好,对于PID控制器,你只需要知道你的车辆与目标轨迹之间地偏差。

但是PID控制器只是一种线性算法,对于非常复杂的系统而言,这是不够的。

例如为控制具有多个关节的四轴飞行器或机器人,我们需要建立机器人的物理模型,对无人车而言,我们需要应用不同的PID控制器

来控制转向和加速,这意味着很难将,横向和纵向控制结合起来。

另一个问题在于PID控制器依赖于实时误差测量,这意味着受到测量延迟限制时可能会失效

线性二次调节器

线性二次调节器(LQR)是基于模型的控制器,它使用车辆的状态来使误差最小化,Apollo使用LQR进行横向控制

横向控制包含四个组件:

  1. 横向误差
  2. 横向误差的变化率
  3. 朝向误差
  4. 朝向的变化率

变化率与导数相同,我们用变量名上面的一个点来表示这个,我们称这四个组件的集合为X,这个集合X捕获车辆的状态

除了状态以外,该这有三个控制输入,转向,加速和制动。

我们将这个控制输入集合称为U,LQR处理线性控制,这种类型的模式可以用等式来表示
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z6Be4eRL-1651645013932)(D:\自动驾驶\AutoDriving\note\picture\image-20220312134607129.png)]
X(上方带点)= Ax + Bu

X(上方带点)向量使导数或x向量的变化率,所以x点的每个分量只是x相应分量的导数。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pDIiVyeO-1651645013933)(D:\自动驾驶\AutoDriving\note\picture\image-20220312135729426.png)]
等式x点 = Ax + Bu

该等式捕捉状态里的变化。即X 点使如何受当前状态x和控制输入u的影响的,这个等式使线性的。

因为当我们用Δx 来改变X时,并用ΔU 来改变U,x点的变化,也会让这个等式成立。

现在我们理解了LQR的L
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d0GGgwnJ-1651645013933)(D:\自动驾驶\AutoDriving\note\picture\image-20220312135858963.png)]
这里的目标就像控制的目标一样的模型,为了让误差最小化,但是我们也希望尽可能减少的使用控制输入,由于使用这些会有成本

例如会耗费气体或电力,为了尽量减少这些因素,我们可以保持误差的运行总和和控制输入的运行总和。

当汽车往右偏转的特别厉害之际,添加到误差总和中,当控制输入将汽车往左侧转时。从控制输入总和中减去一点,然而这种方法会导致问题因为右侧的正误差,只需将左侧的负误差消除即可,对控制输入来说也是如此。

相反,我们可以让x乘以U,这样负值也会产生正平方
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xY4abi44-1651645013933)(D:\自动驾驶\AutoDriving\note\picture\image-20220312140632652.png)]
我们称这些为二次项,我们为这些项分配权重,并将它们加在一起,最优的u因该加倍减总和
20220312140812771
在数学中,我们将这个值称为成本函数,我们经常写出加权二次项的总和,以紧凑的矩阵行驶呈现,这里的Q和R代表x和u的权重集合
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L7FuzYV7-1651645013935)(D:\自动驾驶\AutoDriving\note\picture\image-20220312141018665.png)]
Xt和Ut时转置矩阵,这意味着它们几乎与x和u相同,只是重新排列以便矩阵乘法

x乘以Xt u乘以Ut实际上时将每个矩阵乘以它自己,最小化成本函数时一个复杂的过程

,但通常,我们可以依靠数值计算器为我们找到解决方案。

在LQR中,控制方法被描述为 u= -Kx,其中K代表一个复杂的skeme,代表如何从x计算出u,所以找到一个最优的u就是找到一个最优的K。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xD04kH8r-1651645013935)(D:\自动驾驶\AutoDriving\note\picture\image-20220312141521586.png)]
许多工具都可以轻松的用来解决K,尤其当你提供了模拟车辆物理的A,B,以及Q,R 它们的x和u的权重

模型预测控制

MPC是一种更复杂的控制器,它非常依赖于数学优化,但基本上可以将MPC划分为三个步骤

  1. 建立车辆模型
  2. 使用优化引擎计算有限时间范围内的控制输入
  3. 然后执行第一组控制输入

MPC是一个重复过程,它着眼于未来计算一系列控制输入,并优化该序列,但是控制器实际上只实现了序列中的第一组控制输入

然后控制器再次重复该循环。为什么我么不执行整个控制输入序列呢?

那是因为我们仅只采用了近似测量与计算,如果实现了整个控制输入序列,实际产生的车辆状态将与我们的模型有很大差异,

最好在每个时间步,不断地重新评估,控制输入地最优序列

时间范围与车辆模型

MPC地第一步为定义车辆模型,该模型近似于汽车地物理特性,特别是该模型估计了假如将一组控制输入应用于车辆时会发生什么
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cMiGxuJR-1651645013936)(D:\自动驾驶\AutoDriving\note\picture\image-20220312201246151.png)]
接下来,我们决定MPC预测未来地能力,预测越深入,控制器就越精确,不过需要地时间也越长,所以我们需要在准确度与快速获取结果之间做出取舍,获取结果地速度越快,越能快速地将控制输入应用到实际车辆中
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MskD7evY-1651645013936)(D:\自动驾驶\AutoDriving\note\picture\image-20220312201658343.png)]
下一步是将模型发送到,搜索最佳控制输入地优化引擎,该优化引擎地工作原理是通过搜索密集数学空间来寻求最佳解决方案。

为缩小搜索范围,优化引擎依赖于车辆模型地约束条件

MPC优化

优化引擎可间接评估控制输入,是通过使用这些方法对车辆轨迹进行建模的,可根据成本函数对轨迹进行评估。

成本函数主要基于与目标轨迹的偏差,其次基于其他因素,如加速度和提升乘客舒适度的措施
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bdzy5Om3-1651645013936)(D:\自动驾驶\AutoDriving\note\picture\image-20220312202440193.png)]
为了使乘客感觉更舒适,对控制输入的调整应该很小,因为动作变化幅度过大会让乘客感到不舒服。根据具体情况,我们可能需要为其考虑进一步的成本,并设计成本函数。模型,约束和成本函数并在一起,并作为优化问题加以解决,我们可以在不同的优化引擎中选择一种来寻找最佳解决方案。

MPC优劣对比

模型预测控制考虑了车辆模型,因此比PID控制更精确,它也适用于不同的成本函数,所以可以在不同情况下优化不同的成本。

另一方面与PID控制相比,模型预测控制相对更复杂,更缓慢,更难以实现。

在实践中,无人驾驶车的控制可扩展性的重要程度,通常意味着值得为MPC投入实现成本

所以MPC成为了一个非常重要的无人驾驶车控制器

课程综述

控制使汽车工程中研究的最深入的问题之一,控制是无人驾驶汽车实现自动移动的方式

在控制中,我们使用转向,加速和制动来运行我们的目标轨迹

感兴趣点我blibli

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值