目录

  • 高精地图
  • 定位
    • GNSS RTK定位
    • 惯性导航定位
    • 激光雷达定位
    • 视觉定位
  • 感知
    • 检测与分类
    • 跟踪
    • 分割
  • 预测
  • 规划
    • 路径规划
    • 轨迹生成
    • Frenet坐标
    • 路径速度解耦规划
    • ST 图
    • 生成路径的优化,Lattice规划
  • 控制
    • PID控制
    • 线性二次调节器(LQR)
    • 模型预测控制(MPC)
  • 结语

本文主要介绍了自动驾驶的几大模块,通过阅读本篇文章,可以对自动驾驶有一个简单的认识。主要参考了:Apollo自动驾驶入门课程。

高精地图

无人驾驶使用的地图不同于汽车导航所使用的地图。由于无人驾驶对于自身位置需要自我感知,因此其使用的地图精度更高。
无人驾驶车不能够像人类一样,简单而又快速识别路上的各种交通标志及可能遇到的交通管制等,因此需要高精度的地图来帮助它。高精度地图包含着大量的驾驶辅助信息,包括道路网的精确三维表征、语义信息等。手机导航的地图精度只有米级的精度,这个精度有时候对无人驾驶来说完全不够用,甚至可能偏离道路中心,与其他车辆相撞。而一般的高精度地图都是厘米级别的精度。
高精度地图帮助定位车辆。车辆将自己感知到的信息与高精度地图相比较,从而判断自身的位置。
高精度地图也可以帮助来感知。任何传感器的探测距离都是有限的,且有可能受到障碍物阻挡。但高精度地图可以提前获知道路的状态,或者根据高精度地图集中资源寻找某一地标,即为感兴趣区域(ROI)。ROI可以帮助我们提高检测精确度和速度。
高精度地图可以提前规划大致的行车路线,从而帮助软件规划路径。同时高精度地图上的各种交通标志、速度限制等也可以辅助规划模块找到最优路径的选择。

定位

定位就是让无人驾驶车明确自身的位置。手机的GPS精度不够,并且在隧道、山林等环境下表现更差,可能定位误差在3~10米。常用方法是利用车辆传感器探测的信息在融合处理之后,与高精度地图进行对比,从而得到自身的位置。为了进行对比,需要在汽车坐标系和地图坐标系之间转换数据。定位提供了许多中方法,如GNSS、RTK、惯性导航、激光雷达定位,视觉定位等等。

GNSS RTK定位

GNSS,全球导航卫星系统。该系统由太空中的卫星、地面的控制站以及接收器组成。如下图所示。接收器并不直接测量你与卫星之间的距离,它首先测量信号的飞行时间,也即卫星传播到接收器需要多长时间。光速c*时间t=距离d。但由于光速c很大,即使时间t只有少量的误差也会在距离计算中造成巨大的误差。因此,每颗卫星都配备了高精度的原子钟。同时为了进一步地减小误差,可以使用实时运动定位(RTK)。

RTK在地面有许多基站,每个基站都知道自己精确的“地面实况”位置,每个基站也通过卫星来测量自身的位置。二者之间的差别即为卫星测量的误差,然后将这个误差传递给其他的接收器,从而调整自身的位置计算。在RTK的帮助下,可以将卫星导航系统的定位误差限制在10cm之内。但仍存在建筑物阻碍辛信号传播的问题。同时卫星导航系统的更新频率不高,大约为10Hz或每秒更新10次。因此也需要其他的定位方法来补充。

惯性导航定位

利用初始加速度和速度以及汽车的初始位置来计算车辆此刻的状态。加速度可以由加速度计来计算。三轴加速度计根据车辆的坐标系记录测量结果,然后通过三轴陀螺仪将这些测量值转换为全局坐标系。三轴陀螺仪的三个外部平衡环一直在旋转,但三轴陀螺仪的旋转轴始终固定在世界坐标系中。通过测量旋转轴和三个外部平衡环的相对位置来计算车辆在坐标系中的位置。加速度计和陀螺仪共同组成了惯性导航(IMU)的主要组成部件。
IMU的一个重要特征是它更新频率高,可达到1000Hz。但IMU同样有缺点,其测量的运动误差会随着时间的增加而增加。因此我们只能利用IMU在很短的时间范围内进行定位。将IMU与GPS结合起来,IMU弥补GPS更新频率低的缺点,GPS纠正了IMU累计的 运动误差。
然而IMU+GPS仍然不能适应所有场景,例如隧道。

激光雷达定位

激光雷达可以通过测量数据匹配高精度地图,从而获知车辆的精确位置。有很多算法可用于匹配点云,例如ICP(迭代最近点法)、滤波算法(包括直方图滤波,卡尔曼滤波等)。
关于激光雷达及卡尔曼滤波,可以参看我之前写的其他文章:
卡尔曼滤波原理详解
激光雷达系统原理及相关介绍
激光雷达方程推导与激光器参数指标
激光器对人眼安全的评估(MPE与NOHD计算)
激光雷达的优点在于其稳健性。在大多数情况下,激光雷达在拥有高精度地图的前提下,都能够准确定位。同时其主要缺点在于难以构建高精度地图并使其保持最新。

视觉定位

通过摄像头的图像实现定位显然是困难的,但将摄像头图像与来自其他传感器的数据相结合可以实现准确定位车辆。尤其是通过车道线的图像来判断车辆在道路上的位置。
视觉定位的优点在于图像数据很容易获得,缺点在于缺乏三维信息和对三维地图的依赖。

感知

感知包括:

  • Detection 检测 找出物体在环境中的位置;
  • Classification 分类 明确对象是什么;
  • Tracking 跟踪 跟踪特定的物体;
  • segmentation 语义分割 将每个图像中的像素与语义类别进行匹配。

检测与分类

汽车在路上行驶过程中可能会遇到很多静态障碍物和动态障碍物,例如树木、行人、机动车等。 汽车在检测物体后,对物体进行分类,以便确定自身下一步的运动状态。无人驾驶一般使用CNN来检测遇到的物体,再送入另一个CNN中对对象进行检测和分类。常用的还有R-CNN及其变体Fast R-CNN和Faster R-CNN。YOLO和SSD是具有类似形式的不同体系结构。

跟踪

跟踪在检测失败时是至关重要的。当在检测物体时,某对象被其他对象遮挡了一部分,检测算法可能会失败。追踪便可以解决这个问题,追踪可以保留身份,将之前帧中检测到的所有对象与当前帧检测到的对象进行匹配,从而确定前后两帧相似度最高的对象,从而确定身份。这样在某对象被障碍物遮挡时,也可以通过跟踪确定该对象,从而为自身的下一步运动提供信息。

分割

语义分割用于确定尽可能详细地了解环境,并确定车辆可驾驶的区域。语义分割依赖于全卷积网络FCN。网络中的每一层都是卷积层。卷积之后的信息比原始输入信息的大小小很多,为了使得输入输出的大小相同,对中间输出层进行上采样处理,直到最终输出的大小与原始输出图像的大小相匹配。

预测

无人车需要预测路上很多动态障碍物的行为,以便我们的无人车能够做出最佳的决策。
预测要求实时性和准确性。预测方式分为基于模型的预测(Model-Based)和数据驱动预测(Data-Driven)。基于模型的预测比较直观,数据驱动预测与深度学习有关,一般数据量越大越准确。
通过生成一条路径来预测一个物体的行为,对其他物体也这样预测生成一段路径,这些共同形成了在一段时间内的预测路径。在每一个时间段内,我们会为每一辆车辆重新计算他们所新生成的路径。从而为无人车在规划阶段做出决策提供必要的信息。
为了更好的预测,我们也需要知道障碍物的状态,包括速度、朝向、加速度以及之前时间间隔的状态信息。以便更好地做出预测。
车道预测,预测车辆会选择哪个车道,可以通过计算每个车道序列的概率进行选择。

规划

规划的主要目的时生成免碰撞和舒适的可行轨迹。
生成的轨迹由一系列的点组成。每个点都有一个关联速度以及一个指示何时应到达那个点的时间戳。

路径规划

路径规划的目标是找到地图上从A到B的最佳路径,其输入包括三个:

  • 地图,地图数据包括公路网和实时交通信息;
  • 车辆在地图上的位置;
  • 目的地

有这三个目标,路径规划模块便会提供最佳的路径。

轨迹生成

生成的轨迹包括2D平面的位置+时间。
生成的轨迹应当满足:

  1. 无障碍物(不碰撞);
  2. 考虑乘客的舒适性;
  3. 可执行性,例如车子无法实现立刻掉头;
  4. 合法。

显然,一般车子在行驶过程中,满足以上4个条件的轨迹仍有很多。可以采用成本函数来进一步地选择轨迹,给轨迹分配成本。例如认为偏离道路中心,加速度增大,超速等行为会增大成本,从而生成成本最低的轨迹。

Frenet坐标

我们所熟知的笛卡尔坐标系只能描述车辆位置而无法描述道路,判断不了道路与车辆的相对位置。

纵坐标表示在道路中的行驶距离;横坐标表示汽车偏离中心线的距离。

路径速度解耦规划

  • 路径速度解耦规划包括路径规划和速度规划。路径规划负责生成候选曲线,包括成本函数,成本函数包含平滑度、安全性与车道中心的偏离。
  • 速度规划包括生成速度曲线,对应路径点。

生成路径:

  1. 将道路分成单元格;
  2. 对于单元格中的点随机采样;
  3. 在单元格中选取点连接创建候选路径;
  4. 构建多个路径并选择成本最低的路径。

ST 图

“ST图”这一工具可以帮助我们设计和选择速度曲线。

S表示车辆纵向位移,T代表时间,斜率代表速度。ST图说明了在不同时间的位置。
为了简化速度曲线的构建,可以将ST图划分成为一个个小网格。同时认为在小网格内的车辆速度是不变的,也即斜率是一定的。这样的方法在一定程度上可以简化速度曲线的构建,维持速度曲线的近似度。

假设在 t 0 t_0 t0​和 t 1 t_1 t1​时间之间,某车阻挡了 S 0 S_0 S0​到 S 1 S_1 S1​之间的路段,那么体现在ST图上,速度曲线不能与 t 0 t_0 t0​和 t 1 t_1 t1​时间之间, S 0 S_0 S0​到 S 1 S_1 S1​之间的路段所形成的矩形框相交。如下图所示。

上述的路径规划和速度规划都基于离散化。但轨迹并不平滑,使用二次规划(Quadratic Programmming)使得拟合曲线平滑,生成平滑的轨迹。

生成路径的优化,Lattice规划

Lattice规划将横向维度和纵向维度分隔开,将三维问题转换为两个二维问题:具有时间戳的纵向轨迹(ST轨迹);相对于纵向轨迹的横向偏移(SL轨迹)。
Lattice规划分别建立ST和SL轨迹,然后将他们合并。为生成纵向和横向的二维轨迹,将初始车辆状态投射到ST坐标系和SL坐标系中去。在生成ST、SL轨迹之后,投射到笛卡尔坐标系中,完成轨迹的生成。

控制

控制需要保证可行性、平稳性以及确保到达每一个生成路径点。在百度的Apollo框架中,控制主要采用的是PID、LQR以及MPC。
控制输入包括:

  • 目标轨迹(规划模块)
  • 车辆状态(车辆位置等)

PID控制

简单但有效。PID依赖实时测量误差。

线性二次调节器(LQR)

基于模型的控制器。使用车辆状态来使误差最小化。
apollo使用LQR进行横向控制,选取的状态变量有

  • 横向误差(cte)
  • 横向误差的变化率( c t e ˙ \dot {cte} cte˙)
  • 朝向误差( θ \theta θ)
  • 朝向误差的变化率( θ ˙ \dot \theta θ˙)

也即令:

三个控制输入包括:转向(steering)、加速(throttle)、制动(brake)
也即:

将上述写成状态空间的表达形式为:
也即

在误差最小化的同时希望控制输入尽可能小,因此控制误差总和与控制输入作为系统的成本综合。
可以定义以下二次项:

写成紧凑的矩阵形式:


其中Q和R分别代表x和u的权重集合。
u一般可以通过x来表示。

模型预测控制(MPC)

模型预测控制可以参见我的另一篇博客文章:mpc模型预测控制原理详解。
优点:更精确(因为考虑了车辆的物理模型)。
缺点:更加复杂,更加难以实现。

结语

本文主要参考了Apollo自动驾驶入门课,文章中的图片部分也来自课程,如有侵权,请联系我删除。
如果觉得我写的不错,请给我一个免费的赞,如有错误,也欢迎向我反馈。

Apollo自动驾驶入门-地图、定位、感知、预测、规划、控制相关推荐

  1. Apollo自动驾驶入门课程第⑥讲 — 预测

    目录 1. 简介 2. 不同的预测方式 3. 基于车道序列的预测 4. 障碍物状态 5. 预测目标车道 6. 递归神经网络 7. 递归神经网络在目标车道预测的应用 8. 轨迹生成 本文转自微信公众号: ...

  2. Apollo自动驾驶入门课程第⑤讲 — 感知(下)

    目录 1. 卷积神经网络 2. 检测与分类 3. 跟踪 4. 分割 5. Apollo感知 6. 传感器数据比较 7. 感知融合策略 本文转自微信公众号:Apollo开发者社区 原创: 阿波君 Apo ...

  3. Apollo自动驾驶入门课程第④讲 — 感知(上)

    目录 1. 感知的概述 2. 计算机视觉 3. 摄像头图像 4. LiDAR图像 5. 机器学习 6. 神经网络 7. 反向滤波法 本文转自微信公众号:Apollo开发者社区 原创: 阿波君 Apol ...

  4. Apollo自动驾驶入门课程第②讲 — 高精地图

    目录 1. 高精地图与传统地图 2. 高精地图与定位.感知规划的关系 2.1 高精地图用于定位 2.2 高精地图用于感知 2.3 高精地图用于规划 3. Apollo高精度地图与构建 3.1 Apol ...

  5. apollo自动驾驶入门课-高精地图

    apollo自动驾驶入门课-高精地图 文章目录 apollo自动驾驶入门课-高精地图 前言 一.高精地图与传统地图的区别 二.高精度地图与感知.定位.规划的关系 2.1 高精地图与感知 2.2 高精地 ...

  6. Apollo自动驾驶入门课程第①讲—无人驾驶概览

    目录 1. 全面了解自动驾驶主要模块 2. 了解无人车的运作方式 3. 开放式软件栈 4. 本节其他重点 本文转自微信公众号:Apollo开发者社区 原创: 阿波君 Apollo开发者社区 8月1日 ...

  7. Apollo自动驾驶入门课程第⑧讲 — 规划(下)

    目录 1. 路径-速度解耦规划 2. 路径生成与选择 3. ST图 4. 速度规划 5. 优化 6. 路径-速度规划的轨迹生成 7. Lattice规划 8. ST轨迹的终止状态 9. SL轨迹的终止 ...

  8. Apollo自动驾驶入门课程第⑦讲 — 规划(上)

    目录 1. 规划简介 2. 将地图转为图形 3. 路径查找算法:A* 4. 轨迹生成 5. Fernet坐标系 本文转自微信公众号:Apollo开发者社区 原创: 阿波君 Apollo开发者社区 9月 ...

  9. Apollo自动驾驶入门课程第⑩讲 — 控制(下)

    目录 1. 线性二次调节器 2. 模型控制预测 3. 总结 本文转自微信公众号:Apollo开发者社区 原创: 阿波君 Apollo开发者社区 昨天 Apollo自动驾驶课程马上进入尾声,在无人驾驶技 ...

最新文章

  1. js验证身份证号,超准确
  2. Spring-bean的作用域
  3. pip安装库速度较慢--常用的几个国内镜像
  4. java基础(六) switch语句的深入解析
  5. Android studio 实验过程中遇到的问题之android.support.v7.app.AppCompatActivity不能使用的解决办法
  6. nssl1459-空间简单度【扫描线,线段树】
  7. BOSS直聘发起“逆行者先行”招聘专场:优先录取抗疫志愿者
  8. 软件项目建议书模板(免费)
  9. ctypes 传递opencv二值化图像给C++函数
  10. 【流水账】对Pupper的软件设备进行配置(树莓派)
  11. 什么是域名备案?为什么要进行备案?备案后你将会获得下列益处
  12. 华硕笔记本BIOS详细设置
  13. C-7统计元音字母个数
  14. C语言模块化程序设计概念理解
  15. IDEA无法启动:error launching idea (Failed to create JVM )
  16. 2的24次方等于多少MB?(附计算过程)
  17. Stream流练习题大全以及答案
  18. 渭城曲 / 送元二使安西
  19. 使用rapidxml 生成xml文件
  20. WZOI-301车牌摇号系统

热门文章

  1. 3D游戏设计读书笔记七
  2. 解决浏览器无法输出中文的问题
  3. 是不是所有行业都适合定制开发APP
  4. TP5集成PayPal支付
  5. C# 3Des加密解密
  6. 上海计算机等级考试一级题库软件,‎计算机等级考试一级最新题库 App Storessa...
  7. 计算机视觉,人工智能和机器学习概念梳理
  8. STM32F429 usart DMA 收发
  9. 加减乘除 求和,求积,求平均值样样都行
  10. 视频直播点播平台EasyDSS如何通过接口实现文件合成?