引言

如何学习自动驾驶?

  • 自动驾驶是集车辆、计算机、电子电气、人工智能、通信等多学科应用为一体的的复杂系统。针对自身专业背景结合自动驾驶发展进行学习;

  • 自动驾驶是通过智能系统来驾驶汽车从而取代了驾驶员,因此学习自动驾驶需要理解人类驾驶员驾驶汽车的过程。

自动驾驶与人工驾驶

人工驾驶流程:

#mermaid-svg-jl9QMxtXTxw5NInl {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-jl9QMxtXTxw5NInl .error-icon{fill:#552222;}#mermaid-svg-jl9QMxtXTxw5NInl .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-jl9QMxtXTxw5NInl .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-jl9QMxtXTxw5NInl .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-jl9QMxtXTxw5NInl .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-jl9QMxtXTxw5NInl .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-jl9QMxtXTxw5NInl .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-jl9QMxtXTxw5NInl .marker{fill:#333333;stroke:#333333;}#mermaid-svg-jl9QMxtXTxw5NInl .marker.cross{stroke:#333333;}#mermaid-svg-jl9QMxtXTxw5NInl svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-jl9QMxtXTxw5NInl .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-jl9QMxtXTxw5NInl .cluster-label text{fill:#333;}#mermaid-svg-jl9QMxtXTxw5NInl .cluster-label span{color:#333;}#mermaid-svg-jl9QMxtXTxw5NInl .label text,#mermaid-svg-jl9QMxtXTxw5NInl span{fill:#333;color:#333;}#mermaid-svg-jl9QMxtXTxw5NInl .node rect,#mermaid-svg-jl9QMxtXTxw5NInl .node circle,#mermaid-svg-jl9QMxtXTxw5NInl .node ellipse,#mermaid-svg-jl9QMxtXTxw5NInl .node polygon,#mermaid-svg-jl9QMxtXTxw5NInl .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-jl9QMxtXTxw5NInl .node .label{text-align:center;}#mermaid-svg-jl9QMxtXTxw5NInl .node.clickable{cursor:pointer;}#mermaid-svg-jl9QMxtXTxw5NInl .arrowheadPath{fill:#333333;}#mermaid-svg-jl9QMxtXTxw5NInl .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-jl9QMxtXTxw5NInl .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-jl9QMxtXTxw5NInl .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-jl9QMxtXTxw5NInl .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-jl9QMxtXTxw5NInl .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-jl9QMxtXTxw5NInl .cluster text{fill:#333;}#mermaid-svg-jl9QMxtXTxw5NInl .cluster span{color:#333;}#mermaid-svg-jl9QMxtXTxw5NInl div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-jl9QMxtXTxw5NInl :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}

短期记忆
长期记忆
动机
开车经验决策
控制
执行

自动驾驶流程:

#mermaid-svg-plVxffboG1oEYpWQ {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-plVxffboG1oEYpWQ .error-icon{fill:#552222;}#mermaid-svg-plVxffboG1oEYpWQ .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-plVxffboG1oEYpWQ .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-plVxffboG1oEYpWQ .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-plVxffboG1oEYpWQ .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-plVxffboG1oEYpWQ .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-plVxffboG1oEYpWQ .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-plVxffboG1oEYpWQ .marker{fill:#333333;stroke:#333333;}#mermaid-svg-plVxffboG1oEYpWQ .marker.cross{stroke:#333333;}#mermaid-svg-plVxffboG1oEYpWQ svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-plVxffboG1oEYpWQ .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-plVxffboG1oEYpWQ .cluster-label text{fill:#333;}#mermaid-svg-plVxffboG1oEYpWQ .cluster-label span{color:#333;}#mermaid-svg-plVxffboG1oEYpWQ .label text,#mermaid-svg-plVxffboG1oEYpWQ span{fill:#333;color:#333;}#mermaid-svg-plVxffboG1oEYpWQ .node rect,#mermaid-svg-plVxffboG1oEYpWQ .node circle,#mermaid-svg-plVxffboG1oEYpWQ .node ellipse,#mermaid-svg-plVxffboG1oEYpWQ .node polygon,#mermaid-svg-plVxffboG1oEYpWQ .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-plVxffboG1oEYpWQ .node .label{text-align:center;}#mermaid-svg-plVxffboG1oEYpWQ .node.clickable{cursor:pointer;}#mermaid-svg-plVxffboG1oEYpWQ .arrowheadPath{fill:#333333;}#mermaid-svg-plVxffboG1oEYpWQ .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-plVxffboG1oEYpWQ .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-plVxffboG1oEYpWQ .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-plVxffboG1oEYpWQ .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-plVxffboG1oEYpWQ .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-plVxffboG1oEYpWQ .cluster text{fill:#333;}#mermaid-svg-plVxffboG1oEYpWQ .cluster span{color:#333;}#mermaid-svg-plVxffboG1oEYpWQ div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-plVxffboG1oEYpWQ :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}

Perception Localization
HDMap
Routing
Planning
Control
By Wire

由此可见,自动驾驶本质上是模拟人类驾驶员进行驾驶操作的过程,将人类驾驶员进行驾驶操作进行模块化解耦,众多开发者根据需求来针对性的研究其中某一个模块。

场景案例

假如说我们要外出游玩,需要开车从入住的宾馆行驶到游玩的景点。由于我们此前并不了解这段路径,采取的行为方式是:

  1. 驾驶员查看周围环境,根据车辆所在位置开车行驶;{短期记忆 ---- Perception & Localization}
  2. 利用导航软件来进行导航从而确定行驶路径;{长期记忆 ---- HDMap}
  3. 设定从宾馆到景点的路线;{动机 ---- Routing}
  4. 行驶的某一段路上我们需要行驶的轨迹(假如前方车辆减速刹车,我们要面临选择:或减速刹车、或变道及超车);{开车经验决策 ---- Planning}
  5. 决策给的指令进行对车操控;{控制 ---- Control}
  6. 操控车辆正常的运行 ;{执行 ---- By Wire}

1. 自动驾驶人才需求与挑战

1.1 自动驾驶的挑战

1.1.1 人工智能与算法的挑战

自动驾驶汽车所行驶的环境的复杂多样的,感知算法如何像人类一样理解周边的环境,准确的识别障碍物;决策规划算法如何像人类驾驶经验丰富的司机一样针对各种驾驶工况安全高效的应对

定位算法怎样提供实时地、厘米级的定位能力。以上都需要算法不断的迭代更新,同时需要更多数据来帮助人工智能算法不断提升认知,解决以上挑战则需要特定领域的算法人才。

1.1.2 软件工程技术的挑战

对于高速行驶的自动驾驶汽车,摄像头、雷达等传感器获取的数据可达到千兆每秒的级别,而自动驾驶系统需要基于这些数据在极短的时间内做出响应。一般情况,自动驾驶汽车端到端(从传感器感知-环境障碍物-决策-下发控制指令-在车上执行)的时间需要控制在200-300ms之内。

满足以上要求则需要及时可靠的系统框架保证实时性以及需要处理数据的云平台;这些需要有丰富经验的计算机人才来应对此类挑战

1.1.3 硬件层面的 挑战

自动驾驶汽车的普及需要更低成本、更高性能、更可靠的硬件来支持,这个层面需要生产技术的规模化以及硬件技术的创新。

1.2 自动驾驶的人才需求

2. Apollo开源平台介绍

Apollo自2017年发布第一个版本,到2022年10月已经发布11个版本,目前Apollo累计开源70万行代码,架构覆盖车辆、硬件、软件、云服务四个层次,以及单车智能、车路协同等多套方案,既能满足开发者对于专业领域深度学习的需求,同时也能帮助开发者对于自动驾驶有整体性的认识和理解。

2.1 Apollo7.0开源平台架构图

2.1.1 车辆认证平台

提供了开放的符合Apollo要求的线控车辆的接口的标准,同时发布了经过Apollo认证的线控车辆以及对应线控车辆代码

2.1.2 硬件开发平台

提供相关的硬件,包括:车载计算单元、摄像头、激光雷达等

2.1.3 开源软件平台

Apollo的核心部分,开源部分主要是在这个部分。

  • 基于 Ubuntu 18.04 LTS版本。Apollo 3.5 以前使用ROS,之后使用Cyber RT,并且已经在商业化项目(Robotaxi)得到应用
  • 自动驾驶应用模块:地图、定位、感知、预测、规划、控制等

2.1.4 云端服务平台

运营相关的云服务和研发相关的云服务

2.2 丰富的自动驾驶算法

2.2.1 多视角感知

  1. 视觉信号灯识别
  2. 视觉车道线检测
  3. 视觉障碍物识别
  4. 激光点云障碍物识别
  5. 多传感器融合障碍物识别
  6. 车路协同感知融合

2.2.2 基于场景的规划

  1. 公共道路规划器
  2. Lattice 规划器
  3. Navi 规划器
  4. RTK 规划器
  5. 基于模型的规划器
  6. 基于模型的开放空间规划器

2.2.3 精准的控制

  1. PID 控制器
  2. LQR 控制器
  3. MPC 控制器
  4. MRAC 双循环控制器

2.2.4 多融合定位

  1. RTK 定位
  2. 多软干起融合(MSF)定位

2.3 Cyber RT 实时通信框架

2.3.1 Cyber RT 功能:

将自动驾驶的各个算法模块,组织起来、处理数据的能力,同时需要保证数据梳理过程的实时性和可靠性

2.3.2 Cyber RT 优点:

  • 易于部署、忽略底层调度和通信机制、提供很好的实时性和可靠性;
  • 通过可视化诊断工具加速自动驾驶开发
  • 专注于自动驾驶的组件模块,简化自动驾驶搭建时间

2.4 硬件开发/车辆认证平台

2.5 Apollo 工具链

Apollo 工具链通过云端的方式来解决数据运用效率的问题,通过与仿真结合去降低实车测试成本,可以极大的提升研发效率

3. 如何使用Apollo开始学习

3.1 上机学习

3.1.1 实施框架——Cyber RT

  • 掌握 Cyber RT 开发工具
  • 使用 Cyber RT API 进行 Apollo 开发

如何通过 Apollo 学习自动驾驶通信

通信学习:

  • 分布式系统开发模式:三种通信模式(talk-listen、service-client、共享内存通信)等
  • 系统开发调试

掌握Cyber开发工具:

  • Cyber Visualizer:可视化
  • Cyber monitor:消息展示
  • Cyber recorder

3.1.2 决策与规划——Dreamview/Dreamland

  • 了解 Apollo 决策规划流程和算法;{源码与文档的学习}
  • 使用 Dreamview 进行控制在环的规划调试;{Dreamland Scenario Editor / Dreamview Simulation}
  • 基于 Apollo 开发新的规划场景和算法;{规划扩展文档的学习}
  • 使用 Dreamland 进行控制在环的规划仿真评测;{Dreamland的学习}

3.1.3 感知——Dreamview/Visualizer

  • 了解传感器特性
  • 了解 Apollo 感知流程及算法
  • 使用 Dreamview/Perception Visualizer 进行开发调试
  • 扩展部署新的感知模型
  • 扩展训练新的感知模型并验证

3.2 上车学习

3.2.1 线控协议——车辆适配工具链

  • 了解 Apollo 线控标准
  • 开发符合 Apollo 要求的线控车辆与 DBC
  • 在 Apollo 中开发与车辆通信的 CANBus 驱动
  • 使用 teleop 开环验证车辆

3.2.2 集成——Fuel云服务/D-KIT

  • 学习传感器布置与链接
  • 了解车辆标定与传感器标定
  • 了解循迹原理
  • 通过循迹实现控制与线控实车闭环验证

3.2.3 测试与调车——Dreamview/D-KIT

  • 了解车辆安全操作
  • 了解基础测试流程和实车数据录制
  • 了解实车控制调参
  • 了解实车定位调试

3.2.4 Apollo D-KIT 开发套件

  • 开源开放的Apollo平台——降低软件门槛
  • 底盘与感知一体式套件——降低硬件门槛
  • 车+云研发模式——降低工程门槛
  • 丰富学研方案与应用——赋能人才培养

4. Apollo自动驾驶课程概述

每周六、周日以直播的形式进行课程学习。

参考文章及视频

星火第一讲-使用Apollo 学习自动驾驶

Apollo星火计划学习笔记——第一讲 使用Apollo学习自动驾驶相关推荐

  1. 惯性导航系统学习笔记——第一讲

    惯性导航系统学习笔记 第一讲 惯性导航系统概述 一.惯性导航基本概念 二.惯性导航基本原理 三.惯性导航应用与发展 四.小结 第一讲 惯性导航系统概述 本文为学习朱家海教授<惯性导航系统> ...

  2. 视觉SLAM十四讲学习笔记-第一讲

    第一讲:预备知识 SLAM介绍 SLAM 是 Simultaneous Localization and Mapping 的缩写,中文译作"同时定位与地图构建".它是指搭载特定传感 ...

  3. 原创 | 斯坦福Machine Learning with Graphs 学习笔记(第一讲)

    作者:林夕 本文长度为2900字,建议阅读9分钟 本文为大家介绍图网络的基本概念.网络的应用以及图的结构. 标签:机器学习 目录 一.Why Networks 二.网络的应用     2.1 应用领域 ...

  4. 麻省理工公开课《算法导论》学习笔记:第一讲

    主题:简介课程,渐近概念的大局观,插入排序和归并排序,递归式函数时间分析(递归树方法) 教材:<算法导论> 收获:很感动地看到算法分析那个log(n)是为什么出现了,更深层还要听第二讲,若 ...

  5. 集体智慧编程学习笔记——第一讲

    1. 用户相似度评价 (1)欧几里德距离 (2)皮尔逊相关度评价 (3)jaccard 系数 (4)曼哈顿距离算法 转载于:https://www.cnblogs.com/gylhaut/p/9377 ...

  6. 离散数学学习笔记——第一讲——集合论基础(1.5可数集合与不可数集合)

    1. 无限生于有限,量变引起质变 2. 自然数集的定义1--皮亚诺公理 3. 自然数集的定义2--冯·诺伊曼的自然数定义 4. 集合大小的比较 5. 集合的等势 6. 可数集合 7. 从有限到无限,不 ...

  7. 离散数学学习笔记——第一讲——集合论基础(1.4集合的运算定律)

    1. 集合运算的基本等式(集合的运算定律) 包括:幂等律.交换律.结合律.同一律.零律.分配律.吸收律.矛盾律.排中律.双重否定律.德摩根律 2. 使用文氏图表示集合的运算(比较形象) 3. 集合相等 ...

  8. Apollo星火计划学习笔记第二讲——自动驾驶调试及仿真实践

    Apollo学习笔记 零.目录 一.自动驾驶的开发流程 1.1 引言 二.Apollo调试工具的使用 2.1 实验内容 2.2 实验流程 三.Apollo仿真工具的使用 3.1 实验内容 3.2 实验 ...

  9. 视觉SLAM十四讲学习笔记-第二讲-开发环境搭建

    专栏系列文章如下: 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 ​​​​​​​ lin ...

最新文章

  1. pcb入门之完整原理图绘制过程
  2. easypoi教程_SpringBoot图文教程17—上手就会 RestTemplate 使用指南
  3. 使用NW.js封装微信公众号菜单编辑器为桌面应用
  4. 在Win平台得到磁盘、CPU、用户信息
  5. mysql学生选课系统的关系模型_使用PowerDesigner搭建学生选课管理系统(学生老师管理员一体系结构)由基础设计至数据库生成(SQL语句源代码的生成)全过程实例操作...
  6. Android之智能问答机器人
  7. 鸿蒙宴原文及翻译,《鸿门宴》文言文原文及全文详细翻译
  8. 需要知道的面向对象设计的基本原则
  9. 手撸反向传播算法(附代码)
  10. 练习1,从文件到数据库
  11. 编程之美---电梯调度算法
  12. 别折腾安全软件了 你的手机也许还不配被黑客破解
  13. C#+Winform用ReportViewer控件制作报表
  14. 天创速盈:拼多多新店什么时候适合直通车?
  15. 数据库基础、使用C语言构建一个数据库、SQL语言、MySQL
  16. 产品思考 - 不剪发的Tony老师
  17. [编程题] 翻转数列--附详细分析思路
  18. [LeetCode]179.Largest Number
  19. BZOJ3118 : Orz the MST(对偶费用流)
  20. windows7以上平台NDIS6框架的NDIS协议驱动开发

热门文章

  1. Java-JavaWeb—(4)MySQL数据库
  2. Linux之创建、删除文件及目录命令touch、echo、mkdir、rm、rmdir
  3. 初识Hibernate——关系映射
  4. Scratch快速入门(一)
  5. Python作画玫瑰花
  6. MyRolan (快速启动小工具)
  7. 梦熊杯-十二月月赛-白银组题解-A.自由
  8. Excel用户打死想不到:表格能做APP,WPS用户:金山系出品就是牛
  9. EditText输入完成后自动关闭输入法
  10. 家谱只能记家族好事吗?家丑不可外扬,后人读谱一脸懵?