自动驾驶笔记

23. 总结

现在 我们已经明白 为什么需要定位;
以及 几种定位的方法;
和 Apollo 的定位框架。

22. 项目

看别人锻炼不能使自己减重!
自己需要动手编程,实现一些想法。

21. (3-37-9)Apollo 定位

Apollo 使用基于 GPS、IMU、激光雷达的多传感器 融合定位系统,
这种 融合方法 利用了不同传感器的互补优势;

Apollo 定位模块 依赖于 IMU、GPS、激光雷达、雷达、高精度地图。
这些传感器 同时支持 GNSS定位 和 激光雷达定位;

GNSS定位
输出位置、速度信息,
激光雷达定位
输出位置、前进方向信息
自动驾驶笔记_第1张图片
融合框架,通过卡尔曼滤波 将这些输出结合到一起

卡尔曼滤波建立在 两步 预测-量测周期之上,
Apollo的惯性导航解决方案 用于 卡尔曼滤波的预测步骤,
GNSS和激光雷达定位用于卡尔曼滤波的量测更新步骤;

20. (3-36-8)视觉定位

Camera imagines are the easiest type data to collect.
相机图像 是 收集数据的最简单类型。
摄像头 便宜且种类多样,还使用简单。

那么可以使用 图像实现定位吗?
(通过图像实现精确定位是很困难的)
实际使用时,摄像头图像 常常结合 其他传感器的数据 以准确定位。


将 摄像头图像 和 地图、GPS数据结合 定位效果更好,
粒子滤波(Partical Filter)
我们 通过观察、概率、地图来确定我们最有可能的位置。
细节描述:
想象有 一辆行驶的车 感知到右侧有一棵树,
地图上显示了全部不同位置的树,我们如何知道看到的是哪棵树?(定位)
可以用概率的方法解决这个问题,
自动驾驶笔记_第2张图片
最有可能,感知到右侧有一棵树的点,最有可能是我们实际的位置;
(可以据此排除不可能看到 树的点)
自动驾驶笔记_第3张图片
我们继续观察世界,发现右侧又有一棵树,
观察地图上的其他点之后,
最有可能,感知到右侧有两棵树的点,最有可能是我们实际的位置;
继续这个过程。


实际使用时,树是比较少的,但车道线是常见的。
使用相机拍摄车道线,进行粒子滤波,进而确定车辆在道路中的位置。
自动驾驶笔记_第4张图片
两个位置的车道线;红色——相机拍到的车道线,蓝色——地图上的车道线;


视觉定位 的优点:图像很好获取;
缺点:缺乏三维信息,和对三维信息的依赖

19. (3-35-7)激光雷达定位

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

许多算法 可以用于匹配点云
迭代最近点(ICP:Iterative Closest Point )是一种方法,
假设我们想对两次点云扫描进行匹配,
对于第一次扫描中的每个点,我们需要找到另一次扫描中 最接近的匹配点。
最终 我们会收集到许多匹配点对。
把每对点之间的距离误差相加, 然后计算平均值,
我们的目标是 通过点云旋转、平移,来尽可能降低 平均距离误差。
一旦达到了目标,就可以在传感器扫描和地图之间找到匹配。

我们 把传感器扫描到的位置 转换为 全球地图上的位置,并计算出在地图上的精确位置。


滤波算法 – 另一种激光雷达定位算法
滤波算法可以消除冗余信息,并在地图上找到最可能的车辆位置;
Apollo使用了 直方图滤波算法(或称为 误差平方和算法SSD Sum of Square Difference)
具体方法:
我们 将传感器扫描得到的点云 滑过地图上的每个位置,对于每个点 和地图上的对应点之间的误差或距离,然后平方求和。
求得结果越小,匹配越好。
自动驾驶笔记_第5张图片


卡尔曼滤波——另一种激光雷达定位方法
卡尔曼滤波是一种算法,根据 过去的状态 和新的传感器测量值结果 估计我们当前的状态。
使用了 一个 预测-更新 周期;
首先,根据过去的状态 对移动的距离和方向进行预测,的到新位置的预测值;
当然预测并不完美,所以我们根据 传感器的测量值 对预测值进行纠正(使用概率规则 将预测和测量进行结合)。


激光雷达定位的优势是——鲁棒性(Robust)
只要 有高精度地图,以及有效的传感器,我们总是能够定位。
难点在于:
构建高精度地图、并始终保持最新(可地图总是包含瞬时元素,汽车、行人)。

18. 惯性导航

我们可以使用 加速度、初始速度、初始位置 计算车辆任意时刻的车速 和位置;

那么,我们怎么测量 加速度?
我们需要一个叫做 三轴加速度计的传感器,
(有三种不同类型的三轴加速度计,它们使用不同的方法,但目标都是测加速度)
加计,根据车辆坐标系记录测量结果,
我们需要知道 如何将测量值转换到 全局坐标系下,
这种转换需要 名为陀螺仪的传感器。

三轴陀螺仪的三个外部平衡环一直在旋转,但旋转轴(Spin Axis)始终固定在世界坐标系中;
测量旋转轴和三个外部平衡环的相对位置,可以得出车辆坐标系在世界坐标系的位置。

陀螺和加计 是惯性测量单元 IMU (Inertial Measement Unit)的主要组件;


IMU 的一个重要特征是,它以高频率更新(可以达到1000赫兹);
所以,IMU 可以提供 接近实时的位置信息。
遗憾的是,IMU 的缺点在于 其运动误差随时间积累;
所以,我们智能利用IMU在短时间内定位。


我们可以结合 GPS 和 IMU 来定位:
一方面,IMU 弥补了GPS更新频率低的缺陷;
另一方面, GPS 纠正了 IMU 的运动误差;

可是,定位的问题,仍然没有完全解决,
如果我们行驶在 山间、在城市峡谷、最糟糕的 在地下隧道行驶,可能很长时间没有 GPS更新,这会让整个定位面临失败风险。

17. (3-32-4)GNSS RTK

全球定位系统 GPS (Global Positioning System)
美国政府开发(develop by),在全球范围内运营(works around the world)的 卫星导航系统;

这类系统的通用名称为:全球导航卫星系统 GNSS(Global Navigation Satellite System)

起初,GPS用于军事导航;
现在,每个人可以使用GPS接收器,从GPS卫星收集信号并使用该系统;


GPS由三部分组成:

  • 卫星(Satellites)
    在任何给定的时间,大约有30颗卫星 在外层空间运行(距地表约2万公里);
  • 世界各地的控制站(Control Station)
    用于监视 和控制卫星,
    主要目的是,让系统保持运行,并验证GPS广播信号的精度
  • GPS接收器
    存在于 手机、电脑、汽车、船舶等设备中,
    (如果 周围没有高楼、山脉环绕;如果天气良好;)
    无论你身在何处, GPS接收器每次应该至少可以检测到四颗GPS卫星

自动驾驶笔记_第6张图片


GPS接收器 并不是直接测量 卫星和我们之间的距离,
而是 测量信号飞行的时间(即,信号从卫星传播到GPS接收器所需的时间),
然后,乘以光速 计算出距离。
自动驾驶笔记_第7张图片
【注】:因为光速很大!微小的时间误差,都会造成很大的距离误差;
所以,每颗卫星都配备了 高精度的原子钟。


为了进一步减小误差,我们可以使用 RTK技术
实时运动定位(RTK Real-Time Kinematic)

RTK指 在地面上 建立几个基站,
每个基站精确已知自己的地面位置,
同时,每个基站也通过GPS测量自己的位置,
这两个位置 之间的偏差,就是GPS测量结果的误差,
然后,将这个误差传送给其他GPS接收器,以供其调整自己的位置计算结果。
自动驾驶笔记_第8张图片

通过RTK的帮助,GPS可以将自己的定位误差,限制在10厘米以内;
但GPS仍然受限于环境,且GPS的更新频率低(每秒更新10次,即更新频率10赫兹)
自动驾驶笔记_第9张图片

16. (3-31-3)GNSS RTK

三角测量:–两个维度
自动驾驶笔记_第10张图片
二维平面上,得出相对这些地标 自己的确切位置。
如果 此时再有一张标注了这些地标的位置的地图,那么,就知道了自己在地图上的位置。


想象在地球表面,三个维度的定位(三维定位)
我们将使用到 卫星,它可以传送它与我们之间的距离,
那么,需要几颗卫星可以确定自己的位置呢?


15. (3-29-1)定位

假设有一张 全球高精度地图,
定位任务 就是 确定我的无人车 在这张高精度地图上的位置;(无人驾驶车 迷路了!!?)

GPS 的精度 在1-3米,对于 无人驾驶车 来说太不准确了。
(在有些情况下,如被高楼、山脉环绕,或处于峡谷,精度更差,10-50米)

因为 无法完全相信GPS,我们需要 找到一种方法
更准确地 确定车辆在地图上的位置。

最常用的做法是:
将 汽车传感器看到的内容 和 地图上显示的内容比较
车辆将 传感器识别的地标 与 高精度地图上存在的地标 做对比,
为了进行该对比,数据 需要在 车辆坐标系 和 地图坐标系之间转换;
然后,系统在地图上以10厘米的精度确定 车辆的位置。


具体实现:
传感器 可以测量车辆与静态障碍物之间的距离,(树木、电线杆、路标等);
这些距离 是在 车辆坐标系中的投影(或者 距离和方向),进而得到 地标的传感器观测坐标值;
在高精度地图上,也可以找到该地标的 坐标;
将 这两个坐标值 进行匹配,
估计出车辆在地图上的位置;

自动驾驶笔记_第11张图片

其他的定位方法,接下来会探讨几种定位的方法(它们各有优缺点):

  • GNSS RTK;
  • 惯性导航;
  • LiDRA定位;
  • 视觉定位

最后, 我们会了解Apollo是如何解决 定位问题的。

14. (2-27-8) Apollo 高精度地图构建

五个过程组成:
数据收集;
数据处理;
对象检测;
手动验证;
地图发布
自动驾驶笔记_第12张图片
数据收集
调查车使用了多种传感器,包括GPS/IMU、激光雷达、摄像机、照相机;
Apollo 定义了一个框架,将这些传感器集成到 单个自主系统中,将这些数据融合,最终生成 高精度地图。
自动驾驶笔记_第13张图片
数据处理
是指 Apollo对 收集到的数据进行 整理、分类和清洗(cleans),以获得没有语义、注释的初始地图模板;
对象检测
使用 人工智能 来检测静态对象 并分类,
其中 包括:车道线、交通标志、甚至电线杆;
自动驾驶笔记_第14张图片
手动验证
可以确保 自动创建地图过程 可以正确进行 并且及时发现问题;
且 Apollo 软件 使手动验证团队可以 高效标记、编辑地图。
地图发布
高精度地图、上视图、和三维点云地图


在构建和更新 地图的过程中 Apollo采用了众包。

众包:Crowdsourcing,
a modern business term coined in 2006, is defined by Merriam-Webster as the process of obtaining needed services, ideas, or content by soliciting contributions from a large group of people, and especially from an online community。

众包 意味着 Apollo向公众 发布其数据采集工具;
任何人都可以参与 高精度地图的制作任务,可以通过 智能手机、智能设备、其他智能车 来实现。
自动驾驶笔记_第15张图片

13. (2-26-7)Apollo 高精度地图

Apollo 高精度地图 专门为 无人驾驶车设计,
Apollo 高精度地图 包括 道路定义、交叉路口、交通信号、车道规则以及其他用于汽车导航的元素;
保持地图更新 是一项重大的任务;

Apollo 拥有丰富的高精度地图数据,
Apollo 已经绘制了 每条中国高速公路的地图;
计划到2020年,涵盖中国所有国道以及其他等级的公路;

高精度地图的格式:
Apollo采用了 OpenDRIVE格式–一种行业制图标准
Application Programming Interface

12. (2-25-6)地图 与 规划

规划软件(Planning Software) 也依赖于 高精度地图
自动驾驶笔记_第16张图片

  • 帮助 车辆找到合适的行车空间(道路的中线);
  • 帮助 规划器确定出不同的路线选择;
  • 帮助 预测软件 预测道路上其他车辆将来的位置?

可以帮助 缩小可选择的范围。

11. (2-24-5) 地图 与 感知

正如 人的眼睛和耳朵有距离的限制一样,
传感器 也是如此。

距离–长距离过后会受到限制
恶劣天气条件、或夜间–识别能力进一步受限;
遇到障碍物时,无法确定其后的情况;

因此,高精度地图有利于感知

  • 即使没有检测到红绿灯,可以预先给出其位置;
  • 缩小检测的范围,这个范围被叫做感兴趣区域(Range Of Interest, ROI)–有助于提高准确度和速度,节约计算资源。

10. (2-23-4)地图 与 定位

高精度地图 是Apollo无人驾驶车平台 的核心;
因为 许多其他无人驾驶车模块 都有赖于高精度地图。

有了高精度地图,我们(无人驾驶车辆)要做的就是在 地图上进行自定位
(即,我们在地图上的什么位置)

  • 首先,车辆可能寻找 地标
    使用从各类传感器收集到的数据寻找 地标
    例如摄像机的图像、LiDAR的三维点云数据,–这个过程需要一些预处理(消除质量差、不准确的数据)、坐标变换(统一视角)和数据融合(融合不同车辆、不同传感器的数据);
  • 然后将找到的地标 与 已知的地标进行匹配

    一旦无人驾驶车 高精度知道了它的位置,定位的任务就完成了。
    整个 定位过程 依赖于地图,定位结果的精度也依赖于地图,这就是为什么需要 高精度的地图。

可以将 定位与拼图进行比较
自动驾驶笔记_第17张图片

9. (2-22-3)高精度地图VS传统地图

巨大区别之一:精度
传统地图:米级;

  • 我们根据地图提供的信息,以及自己对周围驾驶环境的评估(交通管制、红绿灯、限速标志)来决定直行、左转或右转;
  • 使用到了 人类固有的 视觉能力、和逻辑推理能力。

高精度地图:厘米级;

  • 大量辅助信息–道路网的精确三维表征

8. (2-20-1)地图简介

机器人环境中的 地理地图
无人驾驶车的优势:惊人的记忆能力,每一个车道、标记、每一个细节。
用途之一:定位(找出你在地球上的那个位置)
用途之二:预测规划(确定在何处拐弯)
等等

7. (1-18-10) 无人驾驶纳米学位

已经 了解Apollo架构 和 如何为无人驾驶车提供支持
下面 将学习各个关键组件

6. (1-17-9) 云服务

Apollo 云服务 是在云中运行的一套 应用程序,(在车辆本身之外)。

云:是一个术语,用来描述 通过互联网访问 服务器,(只要你有 互联网连接 以及 授权账户)。你可以 将电子数据 放入云,并且在任何地方访问。

Apollo的云服务,不仅仅 是存储数据,它提供了许多 应用程序。
(包括了可 加快构建和训练 无人车软件 的工具)

Apollo Cloud Services

  • HD Map;
  • Simulation;
  • Data Platform 数据平台;
  • Security;
  • OTA;
  • DuerOS智能语音系统

此处,主要介绍 仿真 和 数据平台:
仿真环境平台
是Apollo 开放软件栈的重要工具,
它 允许每个人根据自己的需求,来构建 仿真环境;
它 还汇聚了大量的驾驶数据(开发人员可以用这些数据验证无人驾驶软件系统);
功能1:配置不同的驾驶场景;
功能2:上传和验证模块;
功能3:评估系统;
功能4:三维可视化实时路况;


无人驾驶数据来源
1.模拟场景(虚拟场景)创建新场景;
2.道路测试(记录场景)重放传感器记录场景;

用于 训练 像深度学习网络那样的机器学习模型的数据:
带有标签的注释数据——ApolloSpace数据集;

5. (1-16-8) 开源软件架构

整体框架:
开放软件层(open software layer)分为三个子层:

  • 实时操作系统(Real-Time Operating System);
  • 运行时框架(Runtime Framework);
  • 应用程序模块层(the layer of Application Modules)

实时操作系统(Real-Time Operating System)

  • 可以确保在给定的时间内完成特定任务,
    “实时”是指无人车的操作系统能够及时进行计算、分析以及执行相应的操作,(即,在汽车的传感器收集到外界数据的短时间内完成)。
    实时性 是保证 系统稳定性和驾驶安全性的基本要求。

  • Apollo实时操作系统RTOS 是Ubuntu Linux操作系统 和Apollo内核 相互结合的成果。

自动驾驶笔记_第18张图片

运行时框架(Runtime Framework)

  • 是 Apollo的操作环境(the operating environment of Apollo),
  • 它是ROS的定制版?(the Robot Operating System)机器人操作系统,
    本质上是在Apollo RTOS上运行的 软件框架。
    自动驾驶笔记_第19张图片
    ROS有 3000多个基础库,支持应用程序的快速开发。
    ROS根据功能将 自治系统划分为多个模块。
    每个模块负责 接受(receiving)、处理(processing)和发布(publishing)自己的信息。
    这些模块 相互独立(因此调试每个模块容易),通过 运行时框架 进行通信。
    Apollo 改进了ROS的一些性能,使其适应 无人车的开发:
    共享内存功能(一对多)和性能;
    去中心化;(单点故障)公共域代替主节点
    兼容性(通信);(有助于长期发展)

应用程序模块层(the layer of Application Modules)

  • MAP引擎;(MAP Engine)
    定位;(Location)
    感知;(Perception)
    规划;(Planning)
    控制;(Control)
    端到端驾驶;(End to End)
    人机接口 (HMI,Human Machine Interface)
    每个模块都有自己的算法库
    本门课程 将学习这些模块,以及其间的关联方式。

4. (1-15-7)参考车辆平台 和 参考硬件平台

如果我们想要打造一辆无人驾驶车,
首先要开发一款可以通过 电子控制的基础车辆,(不仅仅是通过实体方向盘、油门踏板、刹车踏板)。
这种类型的车辆具有特殊的名称:线控驾驶车辆


  • 控制器区域网络(the Controller Area Network, CAN )
    是车辆的内部通信网络。 计算机系统 通过CAN卡 连接汽车内部网络,进而发送加速、制动、转向信号。

传感器:

  • 全球定位系统(the Global Position System, GPS)
    通过绕地卫星接收信号,帮助我们确定所处位置。
  • 惯性测量装置(Inertial Measurement Unit, IMU)
    通过跟踪位置、速度、加速度和其他因素,测量车辆的运动和位置。
  • 激光雷达(Light Detection And Ranging LiDAR)
    是激光探测及测距系统的简称。(LiDAR是一种 集激光,全球定位系统(GPS)和惯性导航系统(INS)三种技术与一身的系统)
    由一组脉冲激光器组成,Apollo使用的激光雷达可以360度扫描车辆,这些激光束的反射 形成了软件可用于了解环境的点云(point cloud)。
  • 摄像头
    捕获图像数据,我们可以用计算机视觉来提取这些图像的内容来了解周围的环境。(颜色信息–检测和了解交通灯)。
  • 雷达
    也用于检测障碍物,雷达的分辨率比较低,难以辨认是那种类型的障碍物,但是雷达有经济实惠的优势,且适用于各种照明和天气条件;同时,雷达擅长测量其他车辆的速度。

自动驾驶笔记_第20张图片

3. Apollo架构(1-14-6)

  • Apollo
    是提供 硬件规格(Hardware Specification )、车载软件(On Vehicle Software)和云服务(Cloud Service)的开放软件平台。任何合作伙伴可以应用此平台开发自己的无人驾驶系统。

百度最初是一家中国的互联网搜索引擎公司,现在转变为一家人工智能公司,在全球各地设有办事处。
百度的宗旨是通过技术让复杂的世界变得简单。
The Apollo Vehicle System是百度最重要的开源贡献之一。


我们开放了无人驾驶功能,让全世界的工程师都可以在Apollo上打造自己的无人驾驶车。
Apollo提供世界领先的高精度地图服务、和开源无人驾驶模拟引擎
与Closed Vehicle Systems相比,Apollo的发展速度更快,为参与者带来的收益更大。
我们的开源框架是学术界、行业研究人员和制造工程师共同努力的成果。
Apollo技术框架由四个层面组成:
参考车辆平台(Reference Vehicle Platform);
参考硬件平台(Reference Hardware Platform);
开源软件平台(Open Software Platform);
云服务平台(Clouds Service Platform);
在接下来的学习中,了解这些方面,并将其整合打造端到端无人驾驶车辆。

2. 五大核心部分

自动驾驶笔记_第21张图片
我们使用 计算机视觉 和 传感器融合,获取一幅关于我们的世界的画面,
使用定位确定我们在这个世界的精确位置,
然后使用路径规划来绘制一条通过这个世界到达目的地的路径,
然后通过控制转动方向盘、踏下油门、踩动制动器最终移动车辆沿着该轨迹行驶。

1. Self-Driving Car Fundamentals

– Featuring Apollo
百度Apollo开源无人驾驶平台

  • High Definition Maps 高精度(高分辨率)地图
  • Localization 定位
  • Perception 感知
  • Prediction 预测
  • Planning 规划
  • Control 控制

The most important reason is safety. Why we need self-driving cars?
汽车工程师
分成了6个等级,0-5
0:驾驶员–唯一的决策者;
1:驾驶员辅助(Driver Assistance)–转向、加速支持;巡航控制
2:部分自动化(Partial Automation)–控制几项功能:自动巡航控制(Automatic Cruise Control),车道保持(Automatic Lane Keeping)
3:有条件自动化(Conditional Automation)–在必要的时候,需要驾驶员接手;
4:高度自动化(No Human Interference)–不希望驾驶员参与(可能没有方向盘),被限制在特定区域(Restricted in Geofence);
5:完全自动化(Full Automation)–在所有情况下,与人类一样好
自动驾驶笔记_第22张图片

2017年,百度发布了名为Apollo的开源无人驾驶项目,该项目帮助合作伙伴整合自有车辆和硬件系统 以构建完整的无人驾驶系统。


途胜未来?
?1.SLAM?
?2.路径规划?

你可能感兴趣的:(▶,自动驾驶)