Lesson 1:无人驾驶概览

2018-10-06  本文已影响0人  智车科技

从 Apollo 起步-Lesson 1:无人驾驶概览

无人驾驶概览

Udacity无人驾驶项目负责人David Silver 表示: “在全球无人驾驶技术人才奇缺的宏观现实下,如果你对无人驾驶汽车感兴趣,或者有志于从事无人驾驶开发的工作,现在就是最好的时机

你将学到什么

Apollo 无人驾驶开源平台的主要部分

无人驾驶车的核心模块——高精度地图,几乎支持着软件栈的所有其他模块,包括定位、感知、预测和规划

在定位课程中,将讨论汽车如何确定它所处的位置。这比预想得更难!汽车利用激光和雷达数据,将这些传感器感知内容与高分辨率地图进行对比,这种对比使汽车能够以个位数厘米级精度进行自定位

在感知课程中,将了解无人驾驶车如何感知这个世界。深度学习是一个重要且强有力的感知工具,卷积神经网络构成深度学习分支,对感知任务至关重要。如分类、检测和分割,这些方法适用于几种不同无人驾驶车传感器的数据来源,包括摄像头、雷达和激光雷达

我们将概述几种不同的方式,用于预测其他车辆或行人可能如何移动。一种方法称为递归神经网络。可对其他物体随时间的运动进行跟踪,并使用该时间序列数据预测未来

规划课程将涵盖如何将预测与路线相结合以生成车辆轨迹,规划是构建无人驾驶车最困难的部分之一

控制课程展示了如何使用转向、油门和制动来执行规划轨迹。我们将阐释几种不同类型的控制器,类型从简单到愈加复杂,而性能却从弱到强

希望:在完成这门课时,你将了解无人驾驶车的基本工作原理。我希望你开始这段学习之旅时,像我第一次开始学习无人驾驶车时那样激动

Apollo核心模块

在课程开始之前, 你可以先阅读Github中以下模块的Readme, 来对无人驾驶技术的架构有一个总体的了解~

为什么我们需要无人驾驶车?

最重要的原因是安全


compare human and self driving.png

无人车等级划分

汽车工程师已建立并确定了 6 个等级的无人驾驶车


自动驾驶的分级比较.jpg SAE autonomy levels.png

How self-driving cars work

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


how a self-driving car works.png

Apollo 技术框架由四个层面组成

参考车辆平台、参考硬件平台、开源软件平台和云服务平台

参考车辆与硬件平台

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

Apollo 无人驾驶车有几个不同的传感器。

下图说明如何将主要硬件组件安装到车辆上,包括摄像头、雷达、激光雷达、GPS-IMU 和 IPC


applo hardware.png

开源软件栈

软件层分为三个子层:实时操作系统(real-time operating system(ROTS))运行时框架(Runtime Framework)应用程序模块层(a layer of application modules)

实时操作系统(或 RTOS)可确保在给定时间内完成特定任务。“实时”是指无人驾驶车的操作系统能够及时进行计算、分析并执行相应的操作。实时性能是确保系统稳定性和驾驶安全性的重要要求。

Apollo RTOS 是 Ubuntu Linux 操作系统与 Apollo 内核相互结合的成果。Ubuntu 是业内顶级 Linux 发行版之一,也是最流行的云操作系统,然而 原始 Ubuntu 系统并非实时操作系统,通过加入 Apollo 设计的内核 我们可以使其成为一个 RTOS。

运行时框架 是 Apollo 的操作环境它是 ROS(机器人操作系统)的定制版,ROS 实际上是一个在 Apollo RTOS 上运行的软件框架。ROS 在机器人行业有着悠久的历史,目前有 3,000 多个基础库支持应用程序的快速开发,ROS 根据功能将自治系统划分为多个模块,每个模块负责接收、处理和发布自己的消息。由于这些模块相互独立 只能通过运行时框架进行通信,因此调整任何单一模块都很容易。ROS 是应用最广泛的机器人框架,因此它所包含的模块涉及许多最新的研究突破,所有这些功能使 ROS 成为理想的 Apollo 开发与集成框架。

为使 ROS 适应无人驾驶车,Apollo 团队改进了共享内存的功能和性能、去中心化和数据兼容性

对于一对多传输方案,共享内存支持“一次写入 多次读取”模式。例如 如果你只收到一次点云 你可以同时运行障碍物检测、定位和 GUI 工具。这可以加快通信速度

现成的 ROS 由许多节点组成,每个节点都有对应的功能。例如 一个节点可能负责收集摄像头图像,另一个节点可能负责规划轨迹,而第三个节点可能负责将控制命令发送到 CAN 总线上的车辆,但是所有这些节点都需要由单个 ROS 主节点来控制。如果这个主节点发生故障,整个系统都会失效。

为了避免这个问题,Apollo 将所有节点放在一个公共域中,域中的每个节点都有关于域中其他节点的信息,通过这种去中心化方案,公共域取代了原来的 ROS 主节点,因此消除了单点故障风险。

不同的 ROS 节点通过,名为 ROS 消息的接口语言相互通信。ROS 消息需要使用通用接口语言,使每个节点都可以解读来自其他节点的消息数据。如果消息文件的格式,与节点所期望的格式稍有不同,通信会失败,这可能会导致严重的兼容性问题。例如 当一个接口升级时,数据不兼容通常会导致系统故障。此外 必须一次又一次地转换之前所记录的测试数据, 以适应新的消息格式。

为了解决这个问题,Apollo 团队使用另一种名为 protobuf 的接口语言,来替代原生 ROS 消息。Protobuf 是一种结构化数据序列化方法. 这对开发用于通过电线彼此通信,或用于存储数据的程序非常有用。你可以将新字段添加到消息格式中 而不会破坏后向兼容性,新的二进制文件可以在解析过程中接受旧的消息格式。向 ROS 添加 protobuf 格式有助于 Apollo 的长期发展。

Apollo 的软件平台具有各种模块,这些模块包括 MAP 引擎、定位、感知、规划、控制、端到端驾驶以及人机接口(或 HMI)。每个模块都有自己的算法库,模块之间的关系非常复杂。后续将在整个课程中对这些模块及其关联方式进行研究

云服务

Apollo 云服务包含高精度地图(HD Maps)、仿真环境(Simulation)、数据平台(Data Platform)、安全(Security)、软件升级(OTA)以及被称为 DuerOS 的智能语音系统

在这里 我们将重点介绍仿真和数据平台。

该平台允许每个人出于自身需要 来构建仿真环境。该平台还聚合了大量驾驶数据,使开发人员能够检验和验证无人驾驶软件系统。仿真环境使 Apollo 车辆不仅可以查看环境,还可以了解道路情况和场景。

仿真环境平台具有许多功能。首先,仿真环境平台允许开发人员配置不同的驾驶场景,比如障碍物,路线和交通灯状态。执行模式为开发人员提供了一个在多个场景中运转的完整设置。在执行模式中 ,开发人员可以在 Apollo 环境中上传和验证模块。当前的自动评分系统,从几个指标对场景进行评估。其中包括:碰撞检测、交通灯识别、速度限制、障碍物检测和路线逻辑。最后,三维可视化描述了实时路况。在显示无人驾驶车状态的同时,使模块输出可视化。

仿真场景数据有两个不同的来源:记录场景和虚拟场景。我们可以使用记录的场景,来重放我们在实际道路测试中已经观察到的传感器数据,我们可以借助虚拟场景 使用虚拟编辑器创建新的驾驶场景,这有助于快速检验与验证算法。为了训练像深度学习网络那样的机器学习模型,我们需要带标签的注释数据,其中包括交通信号灯数据,带边界框的障碍物数据,以及语义分割数据。

此外 Apollo 已向公众发布了 ApolloScape 数据集。ApolloScape 涵盖了各种复杂路况,ApolloScape 在单个图像中列入并注释了,多达 162 辆车或 80 名行人。同时 开放数据集使用语义分割对图像进行逐像素标记,这使得 ApolloScape 成为世界上最为复杂又最精确的无人驾驶数据集。

上一篇下一篇

猜你喜欢

热点阅读