本文是对百度 Apollo 自动驾驶入门课程的的脉络整理笔记,仅用于个人学习记录。

新人之旅

自动驾驶关键技术(Key technique in self-driving)

自动驾驶所需人才(Talent)

专业领域+跨界复合型人才

(1) 人工智能算法:感知,定位,决策规划等算法工程师 (2) 软件工程技术架构(及时可靠的系统框架+研发云平台):C++ 车端工程、仿真云服务工程师、上机仿真工程师,实车试验工程师,数据工程师 (3) 硬件车辆:域控制工程师、结构设计工程师、硬件设计工程师

Apollo 开源平台

Apollo8.0 开源平台架构图

Apollo车云协作开发平台

Apollo自动驾驶算法

CyberRT 实时通信框架

学习路线

  1. 上机学习
    • 实时框架 CyberRT
      • 掌握 CyberRT 开发工具,使用其 API 进行 Apollo 开发
      • 通过 CyberRT 了解分布式系统开发的模式,了解 CyberRT 的 Talker/Listener、Service/Client、Parameter Service 三种通信模式
      • 掌握 Cyber Monitor、Cyber Visializer 等工具
    • 决策与规划 Dremview/Dreamland
      • 了解 Apollo 决策规划流程和算法
      • 使用 Dreamview 进行控制在环的规划调试
      • 基于 Apollo 开发新的规划场景和算法
      • 使用 Dreamland 进行控制在环的规划仿真评测
    • 感知 Dremview/Visualizer
      • 通过 Apollo 的传感器原始数据集了解传感器特性
      • 通过源码和文档了解 Apollo 感知流程及算法
      • 使用 Dremview/Perception Visualizer 进行开发调试
      • 通过模型部署想到扩展部署新的感知模型
      • 通过模型验证工具链扩展训练新的感知模型并验证
  2. 上车实践:解决车辆闭环和集成验证问题
    • 线控协议-车辆适配工具链
      • 了解 Apollo 线控标准
      • 开发符合 Apollo 要求的线控车辆和 DBC
      • 开发与车辆通信的 canbus 驱动
      • 使用 teleop 开环验证车辆
    • 集成-Fuel云服务/D-KIT
      • 学习传感器布置与链接
      • 了解车辆标定与传感器标定
      • 了解循迹原理
      • 通过循迹实现控制与线控实车闭环验证
    • 决策与规划-Dreamview/D-KIT
      • 了解车辆安全操作
      • 了解基础测试流程和实车数据录制
      • 了解实车控制调参
      • 了解实车定位调试

Apollo 概览

Apollo 技术框架

Apollo 技术框架由四个层面组成,参考车辆平台、参考硬件平台、开源软件平台、云服务平台,其中主要模块包括高精度地图、定位、感知、预测、规划、控制等模块。

为什么需要无人驾驶?

无人驾驶分级

无人驾驶车核心部件

无人驾驶车包括 5 个核心部件,计算机视觉、传感器融合、定位、路径规划、控制。本质上来讲,其他一切无人车都是这些核心功能更复杂的实现。

参考车辆和硬件平台

开源软件架构

开源软件架构 分为三个子层 :实时操作系统、运行时框架和应用程序模块层。

仿真环境平台

仿真环境平台 是Apollo开放软件栈的重要工具,该平台允许每个人出于自身需要来构建仿真环境,该平台还聚合了大量驾驶数据,使开发人员能够检验和验证无人驾驶软件系统。

高精地图

高精度地图与传统地图的区别

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

高精度地图构建

高精度地图构建主要有5个过程:数据收集、数据处理、对象检测、手动验证、地图发布。

Apollo 高精度地图构建

定位

GNSS RTK

三角测量:自身所处的位置可以通过自身与不在同一条直线上的3个静态参考物的相对距离确定。

GPS的工作原理:只是以卫星为参考系,三颗卫星和另一颗定位高度的卫星,4颗卫星就可以自定位。这类系统的通用名称是全球导航卫星系统或 GNSS,GPS 是使用最广泛的 GNSS 系统。

GPS 接收器实际上并不直接探测自身与卫星之间的距离,它首先测量信号的飞行时间即信号从卫星传播到GPS接收器所需的时间,通过将光速乘以这个飞行时间来计算离卫星的距离。由于光速的值很大,即使是少量的时间误差也会在距离计算中造成巨大的误差。因此每颗卫星都配备了高精度原子钟。

实时运动定位(RTK):RTK 涉及在地面上建立几个基站,每个基站都知道自己精确的“地面实况”位置,并且每个基站也通过 GPS 测量自己的位置。已知的“地面实况”位置与通过 GPS 测量的位置之间的偏差,为 GPS 测量结果中的误差。然后将这个误差传递给其他 GPS 接收器以供其调整自身的位置计算。在 RTK 的帮助下,GPS 可以将定位误差限制在 10 厘米以内。

GPS 存在的缺点:(1) 高楼或其他障碍物可能遮挡GPS信号;(2) GPS的更新频率很低,大约为10Hz。而无人驾驶车处于快速移动时,需要更频繁地更新位置。

惯性导航

已知汽车的初速度、加速度、行驶时间、初始位置,就可以通过计算得到任意时刻后汽车的速度和位置。

三轴加速计提供瞬时加速度,三轴加速计有三种不同类型,采用的方法也不同。加速度计提供的不仅是加速度,还测量了重力加速度,所以用的时候需要先把重力加速度剔除掉。加速度计根据车辆的坐标系记录测量结果,还需要陀螺仪传感器将测量值转换为全局坐标系测量值。

三轴陀螺仪提供瞬时角速度,三个外部平衡环一直在旋转,但三轴陀螺仪中的旋转轴始终固定在世界坐标系中。在坐标系中的位置是通过测量旋转轴和三个外部平衡环的相对位置来计算的。

IMU 的工作过程:加速度计和陀螺仪是惯性测量单元(IMU)的主要组件。首先是角速度通过积分后得到一个姿态,并把它应用到加速度上,对加速度积分得到速度,再得到最后的位置。

如果结合 GPS 和 IMU 来定位汽车,一方面 IMU 弥补了 GPS 更新频率较低的缺陷,另一方面 GPS 纠正了 IMU 的运动误差。但是 GPS 和 IMU 系统的结合也不能完全解决定位问题,如果车辆在山间行驶或城市峡谷中或在地下隧道中行驶,可能长时间没有 GPS 更新,使得定位失败。

Lidar 激光雷达定位

利用激光雷达,可以通过点云匹配来对汽车进行定位。该方法将来自激光雷达传感器的检测数据与预先存在的高精度地图连续匹配,通过这种比较可获知汽车在高精度地图上的全球位置和行驶方向。

匹配点云的方法

LiDAR定位的主要优势在于稳健性,只要从高精地图开始并且存在有效的传感器,就始终能够进行定位。主要缺点在于难以构建高精地图并使其保持最新,事实上几乎不可能让地图完全保持最新,因为几乎每个地图均包含瞬态元素,汽车、行人、停放的汽车、垃圾等。

视觉定位

图像是要收集的最简单的数据类型,摄像头便宜且种类繁多、易于使用。

通过图像实现精确定位却非常困难,实际上摄像头图像通常与来自其他传感器的数据相结合以准确定位车辆,将摄像头数据与地图和 GPS 数据相结合,比单独使用摄像头图像进行定位的效果更好。

假设一辆车正在路上行驶,感知到右边有树,但是地图显示道路右侧有几棵树有很多不同的点位置,但这样可以排除右边没有树的点。继续前进发现右边又出现一棵树,这样就可以排除右边只有一颗树的点。继续这个过程,通过观察结果、概率和地图来确定最可能的位置,这个过程称为粒子滤波,即用粒子或点来估计最可能的位置。

Apollo定位

Apollo使用基于GPS、IMU、激光雷达的多传感器融合定位系统,这种方法利用了不同传感器的互补优势,也提高了稳定性和准确性。

Apollo定位模块依赖于IMU、GPS、激光雷达、雷达、高精地图,这些传感器同时支持 GNSS 定位和 LiDAR 定位,GNSS 定位输出位置和速度信息,LiDAR 定位输出位置和行进方向信息。

融合框架通过卡尔曼滤波将这些输出结合在一起。卡尔曼滤波建立在两步预测测量周期之上,在Apollo中,惯性导航解决方案用于卡尔曼滤波的预测步骤,GNSS 和 LiDAR 定位用于卡尔曼滤波的测量结果更新步骤。

Apollo 融合框架

Apollo 定位

感知

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

分类器步骤:

  1. 首先计算机接收类似摄像头等成像设备的输入。
  2. 通过预处理发送每个图像,预处理对每个图像进行了标准化处理,常见的预处理包括调整图像大小、旋转图像、将图像从一个色彩空间转换为另一个色彩空间,比如从全彩到灰度,处理可帮助我们的模型更快地处理和学习图像。
  3. 提取特征,特征有助于计算机理解图像,例如将汽车与自行车区分开来的一些显著特征。
  4. 这些特征被输入到分类模型中。此步骤使用特征来选择图像类别,例如分类器可以确定图像是否包含汽车、自行车、行人、不包含这样的对象。

图像数据

机器学习与深度学习

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

人工神经网络:通过数据来学习复杂模式的工具。

训练由三步循环组成:

CNN 卷积神经网络

检测和分类

感知任务中,首先是障碍物检测和分类。在驾驶过程中会遇到许多障碍物,静态障碍物或者动态障碍物。

计算机首先需要知道障碍物的位置,然后进行分类。在路中行驶的无人驾驶车可能会探测到许多不同的物体,汽车根据所感知的物体类型来确定路径和速度。如果感知到前方有一辆自行车,汽车可能会决定减速和变道,以便安全驶过自行车。但是如果感知到前方有另一辆车,并预测到前方车辆也将以接近限速的速度行驶,可能会保持其速度和车道。

另一个示例为交通信号灯检测分类,首先将使用计算机视觉对图像中的交通信号灯进行定位,然后根据灯光显示颜色对交通信号灯进行分类。

无人驾驶中,使用 CNN 对障碍物进行检测和分类。可以先使用检测 CNN 来查找图像中的对象的位置,在对图像中的对象进行定位后,可以将图像发送给另一个 CNN 进行分类,也可以使用单一 CNN 体系结构对对象进行检测和分类,一种通常的做法为在单个网络体系结构的末端附加几个不同的“头”,一个头可能执行检测,另一个则可能执行分类。经典体系结构为 R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD 等,YOLO 和 SSD 是具有类似形式的不同体系结构。

跟踪

对象跟踪的意义:

对象跟踪的步骤

  1. 确认身份,通过查找特征相似度最高的对象,将在之前的帧中检测到的所有对象与在当前的帧中检测到的对象进行匹配。
    • 对象具有各种特征,可能基于颜色、基于形状,计算机视觉算法可以计算出复杂的图像特征,如局部二值模式和方向梯度直方图。
    • 当然也需要考虑连续视频帧中,两个障碍物之间的位置和速度,由于两帧之间的对象位置和速度没有太大变化,该信息也可以帮助快速找到匹配的对象。
  2. 在确定身份后,可以使用对象的位置并结合预测算法以估计在下一个时间步的速度和位置,该预测可帮助识别下一帧中的相应对象。

分割

语义分割涉及对图像的每个像素进行分类,用于尽可能详细地了解环境并确定车辆可驾驶区域。

语义分割依赖于一种特殊类型的 CNN,被称为全卷积网络 FCN。FCN 用卷积层来替代传统 CNN 体系结构末端的平坦层,网络中的每一层都是卷积层,因此名称为“全卷积网络”。

FCN 提供了可在原始输入图像之上叠加的逐像素输出,通过编码器-解码器网络结构使得输出尺寸与原始图像的尺寸相匹配。网络的前半部分通常被称为编码器,因为这部分网络对输入图像的特征进行了提取和编码。网络的后半部分通常被称为解码器,因为它对这些特征进行了解码并将其应用于输出。

Apollo 感知模块

Apollo 开放式软件栈可感知障碍物、交通信号灯、车道。

可感知障碍物的检测步骤:

  1. 对于三维对象检测,Apollo 在高精度地图上使用感兴趣区域 ROI 来重点关注相关对象。Apollo 将 ROI 过滤器应用于点云和图像数据,以缩小搜索范围并加快感知。
  2. 然后通过检测网络馈送已过滤的点云,输出用于构建围绕对象的三维边界框。
  3. 最后使用被称为检测跟踪关联的算法来跨时间步识别单个对象,该算法先保留在每个时间步要跟踪的对象列表,然后在下一个时间步中找到每个对象的最佳匹配。

交通信号灯的分类:

  1. 先使用高精度地图来确定前方是否存在交通信号灯。
  2. 如果前方有交通信号灯,则高精度地图会返回灯的位置。后续根据位置,摄像头搜索范围。
  3. 在摄像头捕获到交通信号灯图像后,Apollo使用检测网络对图像中的灯进行定位,然后从较大的图像中提取交通信号灯。
  4. 将裁剪的交通灯图像提供给分类网络以确定灯颜色,如果有许多灯则系统需要选择哪些灯与其车道相关。

车道线和动态物体检测:

  1. Apollo使用 YOLO 网络来检测车道线、动态物体其中包括车辆、卡车、骑自行车的人、行人。
  2. 在经过 YOLO 网络检测后,在线检测模块会并入来自其他传感器的数据对车道线预测进行调整,车道线最终被并入名为“虚拟车道”的单一数据结构中。
  3. 同样也通过其他传感器的数据对 YOLO 网络所检测到的动态对象进行调整,以获得每个对象的类型、位置、速度、前进方向。
  4. 虚拟通道和动态对象均被传递到规划与控制模块。

Apollo 车道线和动态物体检测

传感器数据比较

传感器数据比较

雷达传感器:

激光雷达传感器:

感知融合策略

感知融合策略

Apollo使用激光雷达和雷达来检测障碍物,用于融合输出的主要算法为卡尔曼滤波。

卡尔曼滤波有两个步骤:第一步为预测状态,第二步是更新测量结果。设想正在跟踪一名行人,这里的状态表示行人的位置和速度,从已经掌握的行人状态开始,使用这些信息来执行卡尔曼滤波的第一步,即预测行人在将来的状态;下一步为误差结果更新,使用新的传感器来更新所认为的行人状态,卡尔曼滤波算法是预测和更新步骤的无限循环。

有两种测量结果更新步骤:同步和异步。同步融合同时更新来自不同传感器的测量结果,而异步融合则逐个更新所收到的传感器测量结果。

传感器融合可提高感知性能,因为各传感器相辅相成,融合也可以减少跟踪误差。

预测

无人车需要预测周围移动物体的行为,确保做出最佳决策。通过生成预测路径预测其他物体的行为,在每一个时间段内会为每一辆汽车重新计算预测他们新生成的路径,这些预测路径为无人车在规划阶段做出决策提供了必要信息。

预测路径要求:

预测方式

基于模型预测

对于当前物体可能的运行状态分别建立预测模型,继续观察物体的运动,与预测模型进行匹配,更匹配的模型将更倾向是物体将来的运动状态。

e.g 对 T 型路口的白色汽车进行预测。用基于模型的方法可以为此场景构建了两个候选的预测模型。一个模型描述了进行右转弯,用绿色轨迹表示,另一个模型描述了继续直行,用蓝色轨道表示。认为任意一种模式发生的概率都是相同的。继续观察移动车的运动,看它与哪一条轨迹更加匹配,如果看到车辆开始向左改变车道,则更加确信车辆最终会直行;另一方面如果看到车在右转弯车道保持前行,则更加倾向于预测对车辆右转。

基于模型的方法的优点在于它的直观,并且结合了现有的物理知识以及交通法规还有人类行为多方面知识。

白色汽车轨迹预测

数据驱动预测

数据驱动预测使用机器学习算法,通过观察结果来训练模型,可以在现实世界中利用此模型去做出预测。

数据驱动方法的优点是训练数据越多,模型效果越好。

基于车道序列的检测(Apollo)

十字路口车道序列

为了建立车道序列,首先将道路分成多个部分,每一部分都覆盖了一个易于描述车辆运动的区域。

如图是一个部分区域的十字路口。为了预测,我们更关心车辆如何在这些区域内转换,而不是在某个区域内的具体行为。可以将车辆的行为划分为一组有限的模式组合并将这些模式组合描述为车道序列,例如直行汽车的运动可以描述为车道序列是 0-1-3-7。

使用车道序列框架的目标是为道路上的物体生成轨迹。从预测车道线段之间的过渡开始,汽车可能会在车道段 0 然后右转,或者转向 1 车道后直行,从而将预测问题简化为选择问题。

障碍物状态

预测目标车道

预测目标车道:接下来选择车辆最有可能采取的车道顺序,可以通过计算每个车道序列的概率来进行选择。

  1. 将车辆状态和车道段作为输入,该模型用于提供车辆可能采用每个车道序列的概率,希望模型能够学习新的行为因此应该使用观测数据对模型进行经验性训练。
  2. 在训练中将真实的车辆行为提供给模型,不仅包括车道段和对象的状态,还包括对象最终选择哪条车道序列。
  3. 记录随着时间增加,模型可以自我迭代更新,精确度不断提升。
  4. 每个记录将由观察对象跟随的车道段序列和对象的相关状态组成,在每个时间点,对象占用一段并具有特定的状态,整个记录由一系列车道段和对象的相关状态组成。

递归神经网络 RNN 和目标车道检测

RNN基本结构

Apollo 使用 RNN 建立一个模型来预测车辆的目标车道,为车道序列提供一个 RNN 模型,为相关对象状态提供另一个 RNN 模型。连接这两个 RNN 的输出并将它们馈送到另一个神经网络,该神经网络会估计每个车道序列的概率,具有最高概率的车道序列是我们预测目标车辆将遵循的序列。

为了训练这个网络,使用现有的记录,每条记录都包含一个车道序列、相关的对象状态、一个标签,用于指示对象是否遵循此特定车道序列。在训练中,比较网络输出和真值标记并使用反向传播来训练网络。

RNN目标车道检测

预测轨迹生成

轨迹生成是预测的最后一步,预测物体的车道序列后就可以预测物体的轨迹。

在任何两点 A 和 B 之间,物体的行进轨迹有无限的可能。可以先通过设置约束条件来去除大部分无法实际执行的候选轨迹,例如考虑车辆当前的速度和加速度。

在数学理论上来实现列出物体所有可能的轨迹,注意车辆在两点的位置和方位,这两个姿势表示运动模型的初始状态和最终状态,可以使用这两个条件来拟合一个多项式模型,在大多数情况下这种多项式足以进行预测。

规划

A* 搜索算法

在进行智能搜索算法以前,我们需要将地图数据重新格式化为“图”的数据结构。图由“节点”(node)和“边缘”(edge)组成,节点代表路段,边缘代表这些路段之间的连接。对一个节点移动到另一个节点所需的成本进行建模,这些成本又称为“代价”。

A* 是经典的路径查找处理算法。成本 f=g+h,g 值为开始节点前往候选节点的成本,h 值为候选节点前往目的地的估计成本或启发式成本。根据具体情况,可以自定义成本估算方式。例如,交通堵塞会增加前往目的地的成本,所以交通繁忙的路径具有更高的成本。

最佳候选节点是 f 值最小的节点。每当我们抵达新节点时,我们通过重复此过程来选择下一个候选节点,而且总是选择我们尚未访问过且具有最小 f 值的节点。

A_star搜索算法示例

轨迹生成

高等级地图路线只是规划过程中的一部分,仍需要构建沿这条路线前进的低等级轨迹。这意味着要处理一些不属于地图的物体:如其他车辆、自行车或行人。例如,需要与试图前面掉头的汽车互动,或者希望超过一辆在公路上行驶的慢车。这些场景需要更低级别、更高精确度的规划,称为轨迹生成。

3D轨迹

轨迹生成的目标是生成一系列路径点所定义的轨迹。每个路径点都分配了一个时间戳和速度,由于移动的障碍物可能会暂时阻挡部分路段,轨迹中的每个路径点都有时间戳,将时间戳与预测模块的输出相结合,以确保计划通过时,轨迹上的每个路径点均未被占用。这些时间戳和空间上的两个维度(2D position)共同创建了一个三维轨迹(3D Trajectory)。每个路径点都指定了一个速度,用于确保车辆按时到达每个路径点。

轨迹评估

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

在道路的任何两点,可能会有多个不会发生碰撞、行驶舒适、可行且合法的轨迹,使用成本函数可以选择最佳轨迹。轨迹成本由各种犯规处罚组成,例如:偏离道路中心,有可能产生碰撞,速度限制,轨迹的曲率和加速度让乘客感到不舒服等。

Frenet 坐标:笛卡尔坐标系的替代解决方案

Frenet坐标系

Frenet 坐标系描述了汽车相对于道路的位置。在 Frenet 框架中,s 代表沿道路的距离,也被称为纵坐标。d 表示与纵向线的位移,也被称为横坐标。在道路的每个点上,横轴和纵轴都是垂直的。纵坐标表示道路中的行驶距离,横坐标表示汽车偏离中心线的距离。

路径-速度解耦规划

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

路径生成与选择

  1. 为了在路径-速度解耦规划中生成候选路径,首先将路段分割成单元格,对这些单元格中的点进行随机采样。
  2. 从每个单元格中取一个点并将点连接创建候选路径,重复此过程构建多个候选路径。
  3. 使用成本函数对这些路径进行评估并选择成本最低的路径,成本函数可能考虑以下因素:与车道中心的偏离、与障碍物的距离、速度和曲率的变化、对车辆的压力、或希望列入的任何其他因素。

ST 图

选择路径后就可以选择与该路径关联的速度曲线,“ST 图”能够帮助设计和选择速度曲线。

在 ST 图中,“s”表示车辆的纵向位移,“t”表示时间。ST 图上的曲线是对车辆运动的描述,因为它说明了车辆在不同时间的位置。由于速度是位置变化的速率,所以可以通过查看曲线的斜率从 ST 图上推断速度。斜坡越陡则表示在更短的时间段内有更大的移动,对应更快的速度。

ST图

速度规划

速度限制

  1. 为了构建最佳速度曲线,需要将 ST 图离散为多个单元格。单元格之间的速度有所变化,但在每个单元格内速度保持不变。
  2. ST 图中可以将障碍物绘制为在特定时间段内阻挡道路的某些部分的矩形。
    • 假设预测模块预测车辆将在 t0 到 t1 的时间段占据位置 s0 到 s1,在 ST 图上绘制了一个矩形,它将在时间段 t0 到 t1 期间阻挡位置 s0 到 s1。
    • 为避免碰撞,速度曲线不得与此矩形相交。
    • 然后就可以使用优化引擎为该图选择最佳的速度曲线。
  3. 优化算法通过复杂的数学运算来搜索受到各种限制的低成本解决方案。这些限制可能包括:法律限制,如速度限制;距离限制,如与障碍物的距离;汽车的物理限制,如加速度限制。

二次规划

路径选择涉及将道路划分为单元格,速度曲线构建涉及将 ST 图划分为单元格。尽管离散化使这些问题更容易解决,但该解决方案生成的轨迹并不平滑。

为了将离散解决方案转换为平滑轨迹,可使用“二次规划”技术(Quadratic Programming)。二次规划将平滑的非线性曲线与这些分段式线性段拟合。一种由 Apollo 推出的运行方案来生成平滑的轨迹,一旦路径和速度曲线就绪,便可以用其构建三维轨迹。

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

  1. 感知系统观察到一辆缓慢行驶的车辆正在接近。
  2. 在这辆车的周围生成多条候选路线,使用成本函数对这些候选路径进行评估并选择成本最低的路径。
  3. 使用 ST 图来进行速度规划,根据其他车辆随时间变化的位置阻挡了 ST 图的部分区域。优化引擎可帮助确定该图的最佳速度曲线,该曲线受制于约束和成本函数。
  4. 使用二次规划让路径和速度曲线变平滑。
  5. 最后,将路径和速度曲线合并构建轨迹。这里的轨迹在速度较快时为红色,在速度较慢时为蓝色。使用该轨迹来安全地绕开其他车辆并继续前进。

合并构建轨迹

Lattice规划

Lattice 规划通过使用 Frenet 坐标可以将环境投射到纵轴和横轴上,目标是生成三维轨迹:纵向维度、横向维度、时间维度。

可以将三维问题分解成两个单独的二维问题,这是通过分离轨迹的纵向和横向分量来解决的。其中一个二维轨迹是具有时间戳的纵向轨迹称之为 ST 轨迹,另一个二维轨迹是相对于纵向轨迹的横向偏移称之为 SL 轨迹。

ST轨迹和SL轨迹

ST轨迹的终止状态

将状态分成 3 组:巡航 、跟随、停止:

SL轨迹的终止状态

SL 规划的假设:无论车辆进入怎样的终止状态,车辆都应该稳定地与车道中心线对齐。所以只需要在道路上相邻车道中心线周围的位置对横向终止位置进行采样。为了确保稳定性,汽车驶向的终止状态应该与车道中心一致。

当用横向位置与纵向位置作图时,想要的候选轨迹应该以车辆与车道对齐并直线行驶而结束。为了达到这种终止状态,车的朝向和位置的一阶和二阶导数都应该为 0。一阶导数为 0 意味着车辆不是横向移动,二阶导数为 0 意味着车辆不是横向加速,一阶导数和二阶导数都为 0 意味着车辆正沿着车道直行。

Lattice规划的轨迹生成

ST和SL轨迹合并

  1. 分别建立 ST 和 SL 轨迹
  2. 将它们重新转换为笛卡尔坐标系,由于两个轨迹都有纵坐标 S,所以可以通过将其 S 值进行匹配来合并轨迹。

控制

控制是驱使车辆前行的策略。对于汽车而言,最基本的控制输入为转向、加速和制动。通常,控制器使用一系列路径点来接收轨迹。控制器的任务是使用控制输入让车辆通过这些路径点。

控制策略的评估标准

  1. 控制器必须准确,避免偏离目标轨迹。这对于安全来说尤为重要,即使路面潮湿或者道路比较陡峭,控制器仍然需要准确地执行轨迹。
  2. 控制策略对汽车应该具备可行性。
  3. 平稳度。舒适的驾驶非常重要,要使控制顺利进行,驱动必须是连续的,应避免突然转向、加速或制动。

控制流程

目前有三种可用于实现这些目标的控制策略:(1) PID: 比例积分微分控制;(2) LQR: 线性二次调节器;(3) MPC:模型预测控制。

PID 控制

PID 控制器

PID 控制器的优缺点

线性二次调节器 (Linear Quadratic Regulator, LQR)

线性二次调节器是基于模型的控制器,它使用车辆的状态来使误差最小化。

Apollo 使用 LQR 进行横向控制。横向控制包含四个组件:横向误差、横向误差的变化率、朝向误差和朝向误差的变化率。这四个组件的集合为 X,这个集合 X 捕获车辆的状态。除了状态之外,该车有三个控制输入:转向、加速和制动,这个控制输入集合称为 U。

线性二次调节器

模型预测控制 MPC

模型预测控制依赖于数学优化,基本上可以归结为三个步骤:

  1. 建立车辆模型,以估计控制输入对车辆的影响,并决定预测未来的深度。预测时间越长,控制器越精确,但需要更长时间来获取结果。
  2. 使用优化引擎计算有限时间范围内的最佳控制输入。优化引擎依赖于车辆模型的约束条件和成本函数,以间接评估控制输入并寻找最佳解决方案。
  3. 执行第一组控制输入并重复上述步骤。由于近似测量和计算的原因,每个时间步都需要重新评估控制输入的最优序列。

MPC 的优缺点

Reference