1. 自动驾驶概述与Apollo平台介绍
category
type
status
slug
date
summary
tags
password
icon
引言
自古以来,交通工具的革新始终是推动人类文明跃进的关键力量。从千年前的马车到百年前的汽车,每一次飞跃都深刻重塑了人们的出行方式与社会结构。而今,自动驾驶汽车的兴起,正引领我们步入一个更加安全、高效且经济的道路交通新时代。
这一未来已来,且比想象中更近。2024年5月,百度在武汉发布了其第六代“萝卜快跑”无人驾驶汽车,该车型搭载了全球领先的L4级别无人驾驶技术,标志着自动驾驶技术迈向了新的里程碑。不仅出租车、网约车司机抱怨被“抢了饭碗”,无数游客更是将其视为网红打卡项目。
自动驾驶技术的触角正以前所未有的广度与深度,渗透到社会经济的方方面面。2023年,国内无人驾驶汽车市场规模已突破118.5亿元大关,预示着行业正处于爆发前夜。预计至2025年前后,将迎来规模性产业化的黄金时期,而到了2029年,这一市场规模更有望膨胀至千亿级别。
不管你是一名学生、开发者还是创业者,面对这样一个新鲜诱人的蛋糕,我想你一定会心动不已。那么就跟随我的脚步,一起推开这扇大门吧!
一、自动驾驶概述
1. 自动驾驶系统构成
一个车端的自动驾驶系统通过传感器接收数据,发送至算法模块进行处理,最后将控制信号发送至线控底盘。
其中,算法模块是自动驾驶中最为核心的部分,它由以下几个部分构成:高精地图(HD Maps)、定位、感知、预测、规划和控制,下面简单的对这几部分介绍一下。
- 高精度地图
HD Maps在整个系统中起到全局支持的作用。
HD Maps最重要的特征之一是精度,传统手机地图只能达到m级精度,而高精度地图具有cm级精度,这对确保无人驾驶安全性至关重要;同时,它包含了大量的驾驶辅助信息,具有精准的道路三维特征,例如交叉路口布局和路标位置;另外,它还包含很多语义信息,地图会报告交通灯上不同颜色的含义、指示道路的速度限制,以及左转车道开始的位置。
- 定位
定位的任务的目标是确定车辆在高精度地图上的位置。
在户外,GPS+IMU是一种常见的传感器组合,IMU输出高频惯导的定位结果,GPS输出低频卫星定位结果。GPS的定位精度在1-3m之间,通过RTK技术可以使GPS误差降低至10cm以内。在GPS信号差或无法接收到的情况下,可以通过激光雷达(Lidar)或摄像头基于HD Maps进行点云或视觉特征匹配实现定位。融合多种传感器,可以得到更加鲁棒的定位结果。
- 感知
感知是汽车获取环境信息并理解环境的过程。
在感知任务中,不仅要检测道路上的车辆、行人等动态障碍物,还需要检测车道线、交通灯、路标等信息,用于辅助决策。摄像头与雷达是感知中重要的传感器,前者能够获取图像中色彩和纹理信息,而后者能够获取深度信息。各个传感器相辅相成,对其信息进行融合能够增强感知性能,减小跟踪误差。
- 预测
预测任务通过生成路径来预测道路上动态障碍物的行为,这些路径为无人车的决策规划提供了必要信息。
预测可以分为基于模型和数据驱动两种方式。基于模型预测利用交通规则、车辆运动学预定义模型,再依赖统计技术从当前状态推测未来轨迹,适用在结构化的道路上。数据驱动包括经典机器学习、深度学习等方法,它能够捕捉更复杂的时间序列的依赖关系,提升预测精度,但可解释性较差。
- 决策规划
决策规划任务需要根据环境信息和目标,制定车辆行驶路径和策略,来确保安全、高效完成行驶任务。
这一过程一般分为三个层次:路径规划、行为决策和轨迹规划。路径规划是在HD Maps中搜索出一条从起始点到目的地的最优全局路径;行为决策是根据场景选择不同的驾驶行为,例如保持车道、变道、超车等;最后,通过轨迹规划生成一条带有时间戳的平稳可到达的轨迹。
- 控制
控制任务是通过控制车辆的油门、刹车、转向使其实际行驶路径跟随规划的轨迹。
通常,对控制器有准确、可行、平稳的要求。准确要求汽车跟踪目标轨迹的偏差应尽可能的小,哪怕在崎岖、潮湿的路面仍然要达到这一效果;可行要求考虑汽车运动学,例如转向限制;平稳要求驱动是连续的,应避免突然转向,加减速的剧烈变化等情况,来保证乘客的舒适度。
2. 自动驾驶面临的挑战和人才需求
由于自动驾驶汽车行驶环境的复杂性,以及行驶过程安全性的要求。自动驾驶汽车是一个技术挑战非常大的系统工程。那我们选择这一领域,目前可以从事的岗位有哪些呢?
- 人工智能算法
自动驾驶汽车所行驶环境复杂多样,感知算法如何能像人一样理解周边环境,准确识别出障碍物;决策规划算法如何像人类老司机一样,做出安全且高效的决策控制指令,处理各种极端的情况;定位算法如何提供实时的cm级定位能力。这都需要算法不断地迭代更新,同时也需要更多的数据来帮助AI算法不断学习和提升认知。
解决这些挑战,就需要特定领域的算法人才,下面是一些算法方面的岗位例子。
- 软件工程
对于高速行驶的自动驾驶汽车,摄像头、雷达等传感器获取的数据可以达到每秒千兆级别,而自动驾驶系统需要基于这些输入数据提供极短的端到端响应时间,一般来说,这个时间应该控制在200-300ms内。人一般是0.5s以上,因而自动驾驶可以做到更加安全,而实现这一目标需要一个非常及时可靠的系统框架来保障。其次,还需要基于大量数据的研发云平台,来迭代优化算法模型。
这些都需要有丰富的计算机工程经验的人才,比如C++车端工程师,仿真云服务工程师,就是对应车端和云端的工程人才需求。传统互联网工程背景的同学,其实是比较匹配的。
- 硬件
硬件包括车辆、传感器、计算硬件等,自动驾驶的普及需要更低成本、更高性能、更可靠的硬件来支撑。这看似相互矛盾的三个点,不仅依赖生产制造的规模化、也更依赖硬件的创新来解决。需要更多车辆、硬件相关人才投入其中。下面是自动驾驶硬件方面岗位案例。
以上是自动驾驶三大类人才需求,从这个人才需求分类上可以看出,各类人才的背景差异是很大的,但作为一个完整的系统,彼此之间又相互依赖。在我们的实际工作中,创新往往是在基于对整体的理解和把握上,因而我们不仅需要专业深度的人才,跨领域的复合人才更是稀缺。
二、Apollo开源平台介绍
刚刚我们介绍了自动驾驶是什么,以及这个行业需要什么,可如何系统地进行学习还是一头雾水。Apollo作为一个完整、开源的自动驾驶平台,其实就是一个最佳的自动驾驶学习平台。
从2017年,Apollo发布第一个版本1.0,到现在最新的9.0,已经迭代了13个版本。整体架构涵盖了车辆硬件设备、软件核心、软件应用、云端服务四个层次。以及单车智能、车路协同等多种解决方案,非常完整。其既能满足前面各类开发者对于自动驾驶领域深度学习的需求,同时又能帮助开发者对自动驾驶有整体性的认识和理解。
1. Apollo开源平台框架
下图是Apollo 9.0总体框架,从下到上分为四层,我们依次来介绍。
- 硬件设备层
自动驾驶离不开车辆和硬件设备。比如计算单元、传感器、激光雷达、摄像头、毫米波雷达等等。但Apollo是软件开源平台,并不造车和硬件。Apollo通过开放硬件标准协议,车辆线控标准协议,与认证符合标准的参考硬件和线控车辆来吸引生态合作伙伴,为开发者提供丰富的自动驾驶车辆和设备选择。
- 软件核心层
往上一层是软件核心,提供了搭建基于Apollo自动驾驶系统的核心软件子集,这里包括了操作系统层,基于Ubuntu 18.04+版本。还有Cyber RT实时的计算框架,取代了之前的ROS 框架,已经在Apollo的商业项目,如Robotaxi上得到了验证和应用。最上层是自动驾驶处理的逻辑模块,从静态感知相关的地图引擎、定位到动态感知、预测、规划、控制等等。
- 软件应用层
软件核心之上是软件应用层,为开发者提供了基于软件包管理的Apollo软件模块的使用方法和扩展方式。软件应用层提供了各类场景应用代码库,如开放城市道路应用场景应用、D-kit上车演示场景应用、上机仿真场景应用。此外,我们还提供了方便开发者自定义扩展的样例场景应用工程。
- 工具服务层
最上层是云服务,主要包括研发相关的云服务基础设施,如仿真、模型训练、传感器标定、高精地图等等。
再回到前面自动驾驶的三类人才,硬件车辆人才可以从“硬件设备层”了解到自动驾驶对于硬件相关的技术规范和要求;工程架构人才可以通过学习使用Cyber RT,了解自动驾驶实时系统的设计、实现和使用,通过使用仿真、数据流水线等云服务了解自动驾驶研发平台。算法人才通过学习感知、定位、预测、规划、控制等逻辑模块的代码,更深入了解各种算法设计和实现。更重要的是,Apollo提供了工具链、开发套件等产品,能够帮助开发者快速闭环验证相关的技术模块。
2. Apollo核心能力
接下来,我们再详细介绍一下Apollo开源平台的核心能力。
- 丰富自动驾驶算法
首先,Apollo采用多视角的感知架构,提供基于视觉的信号灯探测、车道线识别、障碍物识别,同时还提供激光点云障碍物识别,以及多传感器和车路协同的感知融合,这些都可以根据开发者的实际情况进行灵活的裁剪。
其次,是基于场景的规划,提供如适合高速场景的Lattice、Navi规划器,适合城市开放道路的公路道路规划器,此外还提供了适合泊车等场景的开放空间规划器和基于机器学习的规划器。
在控制上,提供了常见的PID、LQR、MPC控制器,此外还提供了MRAC双循环控制器,具有更快更精准的转向控制能力,能实现高速情况下的连续超车控制。
最后是定位,除了基础的RTK定位,还提供基于激光雷达点云特征、GNSS、IMU三者数据融合的多传感器融合定位,开发者都可以基于自己的兴趣方向,深入学习相关的算法。
- 基于ROS优化的实时系统(通信框架)
实时系统与算法的关系就好比是骨骼、血管、肌肉与大脑的关系。所以,这第二个核心的能力就是Apollo所采用的实时通信框架,Cyber RT。它担负着把各个算法模块组织凝聚起来的重任,同时保证在数据处理过程中的实时性和可靠性。
Cyber RT有如下几个优点:首先非常简易的部署体验,不用关注其调度机制与通信机制,就能提供非常好的实时性和可靠性,且不需要复杂的配置;第二,加速了自动驾驶研发,提供了可视化的诊断工具;最后,专注自动驾驶,专为自动驾驶设计的组件模块,简化自动驾驶应用的搭建时间。
下图是Cyber RT的运作流程图。Cyber RT通过Component来封装每个算法模块,通过有向无环图(DAG)来描述Components之间的逻辑关系,对于每个算法模块,也有其优先级、运行时间、使用资源等方面的配置。系统启动时,结合DAG调度配置等,创建相应的任务,从框架内部来讲就是协程,图中间的调度器把任务放到各个处理器的队列中,然后由左上角Sensor输入的数据驱动整个系统运转。
- 硬件标准与开放车辆认证平台
硬件就好比一个人身上的装备,不同的装备可以适用不同的场景。Apollo提供了丰富的装备选择,让开发者可以根据自身场景来灵活选择。
此外,对于不同的装备类型,Apollo也提供了适合Apollo穿戴的各种标准,开发者也可以根据这个标准来设计打造定制装备。比如,在开放车辆认证平台中,Apollo就提供了适合Apollo要求的线控标准。开发者可以以此来打造与Apollo适配的车辆。
- 车+云一体工具链
自动驾驶与传统互联网软件研发不同,一是实车测试成本太高,二数据量非常之大。而一套能够满足自动驾驶开发流程需求,并提升研发效率的研发基础设施就非常之重要。
Apollo研发工具链就是为此而生,它通过云端的方式,解决了数据利用效率的问题。通过与仿真结合,降低了实车的测试成本,能够极大的提升基于Apollo的自动驾驶研发效率。
从研发流程上来讲,Apollo车端通过数据采集器,生成了开放的数据集,并通过云端大规模集群训练,生成各种模型和车辆配置,之后通过仿真验证,最后再部署到Apollo车端,无缝的连接。
这整个过程其实包含了两个迭代循环。一个是模型的迭代,一个是代码的迭代,都通过数据来驱动。因而,Apollo的工具链就好比一个人的技能训练场,能不断训练你的大脑能力和身体协调,而且该训练场还是虚拟的。
结语
目前看来,自动驾驶汽车是机器人领域发展的比较成熟的一个分支。其实,对于不同机器人载体,感知、规划、控制的许多问题是共性的,技术路线和理论是相通的。因此,学习自动驾驶,对于研究或开发其他场景下的无人自主系统都是很有裨益的。
对我来说,自动驾驶也是目前我的研究课题。在此期间,我会笔耕不辍,不仅分享Apollo的学习内容,对于其中涉及到的理论知识、代码架构以及整车调试中的经验,都会详实记录,并提炼生发,和大家一起学习提升。
上一篇
动手学控制理论
下一篇
端到端-理论与实战视频课程
Loading...