|
" 本文详细介绍了自动驾驶汽车的软件,每个研发者或者准备投身于无人驾驶领域的人都应该好好看一下 " 自动驾驶汽车中的软件软件 软件包含四层:感知、融合、决策、控制。 各个层级之间都需要编写代码,去实现信息的转化。 实现一个智能驾驶系统,会有几个层级: 感知层 → 融合层 → 规划层 → 控制层更具体一点为: 传感器层 → 驱动层 → 信息融合层 → 决策规划层 → 底层控制层最基本的层级有以下几类:采集及预处理、坐标转换、信息融合。 采集 传感器跟我们的 PC 或者嵌入式模块通信时,会有不同的传输方式。 比如我们采集来自摄像机的图像信息,有的是通过千兆网卡实现的通信,也有的是直接通过视频线进行通信的。再比如某些毫米波雷达是通过 CAN 总线给下游发送信息的,因此我们必须编写解析 CAN 信息的代码。 不同的传输介质,需要使用不同的协议去解析这些信息,这就是上文提到的「驱动层」。通俗地讲就是把传感器采集到的信息全部拿到,并且编码成团队可以使用的数据。 预处理 传感器的信息拿到后会发现不是所有信息都是有用的。 传感器层将数据以一帧一帧、固定频率发送给下游,但下游是无法拿每一帧的数据去进行决策或者融合的。为什么? 因为传感器的状态不是 100% 有效的,如果仅根据某一帧的信号去判定前方是否有障碍物(有可能是传感器误检了),对下游决策来说是极不负责任的。因此上游需要对信息做预处理,以保证车辆前方的障碍物在时间维度上是一直存在的,而不是一闪而过。 这里就会使用到智能驾驶领域经常使用到的一个算法——卡尔曼滤波。 坐标转换 坐标转换在智能驾驶领域十分重要。 传感器是安装在不同地方的,比如毫米波(上图中紫色区域)是布置在车辆前方的;当车辆前方有一个障碍物,距离这个毫米波雷达有 50 米,那么我们就认为这个障碍物距离汽车有 50 米吗? 不是的!因为决策控制层做车辆运动规划时,是在车体坐标系下完成的(车体坐标系一般以后轴中心为 O 点),因此毫米波雷达检测到的 50 米,转换到自车坐标系下,还需要加上传感器到后轴的距离。 最终所有传感器的信息,都是需要转移到自车坐标系下的,这样所有传感器信息才能统一,供规划决策使用。 同理,摄像机一般安装在挡风玻璃下面,拿到的数据也是基于摄像机坐标系的,给下游的数据,同样需要转换到自车坐标系下。
各个团队可能定义的坐标系方向不一致,只要开发团队内部统一即可。 信息融合 信息融合是指把相同属性的信息进行多合一操作。 比如摄像机检测到了车辆正前方有一个障碍物,毫米波也检测到车辆前方有一个障碍物,激光雷达也检测到前方有一个障碍物,而实际上前方只有一个障碍物,所以我们要做的是把多传感器下这辆车的信息进行一次融合,以此告诉下游,前面有一辆车,而不是三辆车。 决策规划 这一层次主要设计的是拿到融合数据后,如何正确做规划。规划包含纵向控制和横向控制:纵向控制即速度控制,表现为什么时候加速,什么时候制动;横向控制即行为控制,表现为 什么时候换道,什么时候超车等。 自动驾驶系统中的部分软件 软件的名字反映了该软件的实际作用:
实际上工程师会编写一些其他软件用于自己的调试工作,比如记录数据和回放数据的工具。
还有用于传感器信息显示的可视化程序,类似下图的效果。
软件的准备工作 操作系统安装 既然是做软件,首先得有个操作系统。常见的操作系统 Windows/Linux/Mac,考虑到社区支持、开发效率,推荐使用 Linux 作为无人驾驶研究的操作系统。 大部分做无人驾驶的团队都用的 Linux,跟着大趋势走,可以省很多事。 Linux 又分为很多版本,最常用且普及率很高的当属 Ubuntu 系列,推荐安装 14.04 版本。 推荐用一块单独的 SSD 安装 Linux,或者使用虚拟机安装,最不推荐装双系统(不太稳定)奉上 Linux Ubuntu 14.04 安装包 + 虚拟机安装方法。
Linux 基本指令 作为 Linux 的核心——命令行操作不仅对开发大有帮助,而且是装 X 利器。另一个好处是使用指令 apt-get install,可以快捷地完成很多软件的安装,不用像 Windows 那样,在网上四处寻觅适配的安装包。Linux 的指令很多,而且比较杂,使用起来需要多学,多用。 开发环境安装 开发环境会涉及很多实际使用的库,不同的程序员处理相同的问题,可能使用不同的库。下面通过安装我在工作和学习中经常使用到的库,抛砖引玉,将开发者「引进门」。 搭建环境所需安装包:
|




