阅读文章

自动驾驶汽车硬件与柔件技术介绍

[ 来源:http://www.dlsjr.com | 作者:网友 | 时间:2019-11-14

摘要:本文详细介绍了自动驾驶汽车的硬件和柔件,以及所必要做的准备做事,每个研发者或者准备投身于无人驾驶四周的人都答该益时兴一下。

全球有数不清的公司在忙着研发自动驾驶汽车,他们的产品也光怪陆离,不过基本思路和核心技术是相通的,本文详细介绍了自动驾驶汽车的硬件和柔件,以及所必要做的准备做事,每个研发者或者准备投身于无人驾驶四周的人都答该益时兴一下。

行家都清新智能车(Intelligent Vehicle)是一个集环境感知、规划决策、多等级辅助驾驶等功能于一体的综相符编制,它荟萃行使了计算机、当代传感、新闻融相符、通讯、人造智能及自动限制等技术,是典型的高新技术综相符体。

自动驾驶的关键技术挨次能够分为环境感知、走为决策、路径规划和行动限制四大片面。

自动驾驶理论听上往很浅易,四大关键技术,但到底如何实现的呢?Google 从 2009 年最先做自动驾驶,到现在已有 8 个岁首。8 个岁首的技术积累还无法将自动驾驶技术量产落地,可见自动驾驶技术并不浅易。自动驾驶是一个重大而且复杂的工程,涉及的技术许多,而且太甚详细。吾从硬件和柔件两方面谈一谈自动驾驶汽车所涉及的技术。

张开盈余94%

硬件

脱离硬件谈自动驾驶都是耍流氓。先望个图,下图基本包含了自动驾驶钻研所必要的各栽硬件。

然而,这么多传感器并纷歧定会同时出现在一辆车上。某栽传感器存在与否,取决于这辆车必要完善什么样的义务。倘若只必要完善高速公路的自动驾驶,相通 Tesla 的 AutoPilot 功能,那根本不必要行使到激光传感器;倘若你必要完善城区路段的自动驾驶,异国激光传感器,仅靠视觉是很难得的。

自动驾驶编制工程师要以义务为导向,进走硬件的选择和成本限制。有点相通于拼装一台计算机,给吾一份需求,吾就给你出一份配置单。

汽车

既然要做自动驾驶,汽车自然是必不走少的东西。从上汽做自动驾驶的经验来望,做开发时,能不选纯汽油车就别选。一方面是整个自动驾驶编制所消耗的电量重大,混动和纯电动在这方面具有清晰上风。另一方面是 发动机的底层限制算法相比于电机复杂太多,与其花大量时间在标定和调试底层上,不如直接选用电动车钻研更高层的算法。

国内也有媒体特意就测试车辆的选择做过调研。「为什么谷歌、苹果不约而同的选择了雷克萨斯RX450h(混动汽车)?」「科技公司测试本身的自动驾驶技术时,对于测试车的选择又都有哪些讲究?」等题目。他们得出的结论是「电」和「空间」对无人车改装至关危险,其次从技术层面上对车的「熟识水平」是另外一个因素,由于倘若逆现在车企相符作改装,必要「Hack(侵占)」某些限制编制。

限制器

在前期算法预研阶段,选举行使工控机(Industrial PC,IPC)行为最直接的限制器解决方案。由于工控机相比于嵌入式设备更安详、庄重,社区声援及配套的柔件也更雄厚。百度开源的 Apollo 选举了一款包含 GPU 的工控机,型号为 Nuvo-5095GC,如下图。

Github ApolloAuto

当算法钻研得较为成熟时,就能够将嵌入式编制行为限制器,比如 Audi 和 TTTech 共同研发的 zFAS,现在已经行使在最新款 Audi A8 上量产车上了。

CAN 卡

工控机与汽车底盘的交互必须议定特意的说话——CAN。从底盘获取现在车速及倾向盘转角等新闻,必要解析底盘发到 CAN 总线上的数据;工控机议定传感器的新闻计算得到倾向盘转角以及憧憬车速后,也要议定 CAN 卡将新闻转码成底盘能够识别的信号,底盘进而做出回响反映。

CAN 卡能够直接安设在工控机中,然后议定外部接口与 CAN 总线相连。Apollo 行使的 CAN 卡,型号为 ESD CAN-PCIe/402,如下图。

全球定位编制(GPS) 惯性测量单元(IMU)

人类开车,从 A 点到 B 点,必要清新 A 点到 B 点的地图,以及本身现在所处的位置,云云才能清新走驶到下一个路口是右转照样直走。

无人驾驶编制也相通,凭借 GPS IMU 就能够清新本身在哪(经纬度),在朝哪个倾向开(航向),自然 IMU 还能挑供诸如横摆角速度、角添速度等更雄厚的新闻,这些新闻有助于自动驾驶汽车的定位和决策限制。

Apollo 的 GPS 型号为 NovAtel GPS-703-GGG-HV,IMU 型号为 NovAtel SPAN-IGM-A1。

感知传感器

坚信行家对车载传感器都耳熟能详了。感知传感器分为许多栽,包括视觉传感器、激光传感器、雷达传感器等。视觉传感器就是摄像头,摄像头分为单现在视觉,双现在(立体)视觉。比较著名的视觉传感器挑供商有以色列的 Mobileye,添拿大的 PointGrey,德国的 Pike 等。

激光传感器分为单线,多线不息到 64 线。每多一线,成本上涨 1 万 RMB,自然相答的检测成就也更益。比较著名的激光传感器挑供商有美国的 Velodyne 和 Quanergy,德国的 Ibeo 等,国内有速腾聚创。

雷达传感器是车厂 Tier1 的强项,由于雷达传感器已经在汽车上得到了一般行使。著名的供答商自然 是博世、德尔福、电装等。

硬件片面总结

拼装一套能够完善某项功能的自动驾驶编制必要及其雄厚的经验,并且要对各传感器的性能边界及限制器计算能力了如指掌。特出的编制工程师能在已足功能的请求下将成本限制在最矮,使其量产、落地的能够性更大。

柔件

柔件包含四层:感知、融相符、决策、限制。

各个层级之间都必要编写代码,往实现新闻的转化,更细化的分类如下。

先分享某创业公司公开的一份 PPT。

实现一个智能驾驶编制,会有几个层级:

感知层 → 融相符层 → 规划层 → 限制层

更详细一点为:

传感器层 → 驱动层 → 新闻融相符层 → 决策规划层 → 底层限制层

各个层级之间都必要编写代码,往实现新闻的转化。

最基本的层级有以下几类:采集及预处理、坐标转换、新闻融相符。

采集

传感器跟吾们的 PC 或者嵌入式模块通信时,会有分别的传输手段。

比如吾们采集来自摄像机的图像新闻,有的是议定千兆网卡实现的通信,也有的是直接议定视频线进走通信的。再比如某些毫米波雷达是议定 CAN 总线给下游发送新闻的,因此吾们必须编写解析 CAN 新闻的代码。

分别的传输介质,必要行使分别的制定往解析这些新闻,这就是上文挑到的「驱动层」。一般地讲就是把传感器采集到的新闻通盘拿到,并且编码成团队能够行使的数据。

预处理

传感器的新闻拿到后会发现不是一切新闻都是有效的。

传感器层将数据以一帧一帧、固定频率发送给下游,但下游是无法拿每一帧的数据往进走决策或者融相符的。为什么?

由于传感器的状态不是 100% 有效的,倘若仅根据某一帧的信号往鉴定前线是否有窒碍物(有能够是传感器误检了),对下游决策来说是极不负义务的。因此上游必要对新闻做预处理,以保证车辆前线的窒碍物在时间维度上是不息存在的,而不是一闪而过。

这边就会行使到智能驾驶四周频繁行使到的一个算法——卡尔曼滤波。

坐标转换

坐标转换在智能驾驶四周相等危险。

传感器是安设在分别地方的,比如毫米波(上图中紫色区域)是安放在车辆前线的;当车辆前线有一个窒碍物,距离这个毫米波雷达有 50 米,那么吾们就认为这个窒碍物距离汽车有 50 米吗?

不是的!由于决策限制层做车辆行动规划时,是在车体坐标系下完善的(车体坐标系清淡以后轴中心为 O 点),因此毫米波雷达检测到的 50 米,转换到自车坐标系下,还必要添上传感器到后轴的距离。

最后一切传感器的新闻,都是必要迁移到自车坐标系下的,云云一切传感器新闻才能同一,供规划决策行使。

同理,摄像机清淡安设在挡风玻璃下面,拿到的数据也是基于摄像机坐标系的,给下游的数据,同样必要转换到自车坐标系下。

自车坐标系:拿出你的右手,以大拇指 → 食指 → 中指 的挨次最先念 X、Y、Z。然后把手握成如下形状:

把三个轴的交点(食指根部)放在汽车后轴中心,Z 轴指向车顶,X 轴指向车辆进取倾向。

各个团队能够定义的坐标系倾向纷歧致,只要开发团队内部同一即可。

新闻融相符

新闻融相符是指把相通属性的新闻进走多相符一操作。

比如摄像机检测到了车辆正前线有一个窒碍物,毫米波也检测到车辆前线有一个窒碍物,激光雷达也检测到前线有一个窒碍物,而实际上前线只有一个窒碍物,于是吾们要做的是把多传感器下这辆车的新闻进走一次融相符,以此通知下游,前线有一辆车,而不是三辆车。

决策规划

这一层次主要设计的是拿到融相符数据后,如何切确做规划。规划包含纵向限制和横向限制:纵向限制即速度限制,外现为什么时候添速,什么时候制动;横向限制即走为限制,外现为 什么时候换道,什么时候超车等。

幼我对这一块不是很晓畅,不敢妄作评论。

柔件长什么样子?

自动驾驶编制中的片面柔件望首来和下面相通。

柔件的名字逆映了该柔件的实际作用:

app_driver_camera:摄像机驱动

app_driver_hdmap:高精度地图驱动

app_driver_ins:惯导驱动

app_driver_lidar:激光传感器驱动

app_driver_mwr:毫米波传感器驱动

app_fusion_freespace:解放走驶区域融相符

app_fusion_lane:车道线融相符

app_fusion_obstacle:窒碍物融相符

app_planning&decision:规划决策

app_driver_camera:摄像机驱动

app_driver_hdmap:高精度地图驱动

app_driver_ins:惯导驱动

app_driver_lidar:激光传感器驱动

app_driver_mwr:毫米波传感器驱动

app_fusion_freespace:解放走驶区域融相符

app_fusion_lane:车道线融相符

app_fusion_obstacle:窒碍物融相符

app_planning&decision:规划决策

然而实际上攻城狮们会编写一些其他柔件用于本身的调试做事,比如记录数据和回放数据的工具。

还有效于传感器新闻表现的可视化程序,相通下图的成就。

掌握了柔件的思路,那么吾们来望你都要做哪些准备。

准备

操作编制安设

既然是做柔件,最先得有个操作编制。常见的操作编制 Windows/Linux/Mac...(打...的操作编制吾也没用过),考虑到社区声援、开发效率,选举行使 Linux 行为无人驾驶钻研的操作编制。

大片面做无人驾驶的团队都用的 Linux,跟着大趋势走,能够省许多事。

Linux 又分为许多版本,最常用且遍及率很高的当属 Ubuntu 系列。固然 Ubuntu 已更新至 17.04,但从安详性上,选举安设 14.04 版本。

选举用一块单独的 SSD 安设 Linux,或者行使虚拟机安设,最不选举装双编制(不太安详)奉上 Linux Ubuntu 14.04 安设包 虚拟机安设手段。(链接:http://pan.baidu.com/s/1jIJNIPg 暗号:147y。)

Linux 基本指令

行为 Linux 的核心——命令走操作不光对开发大有协助,而且是装 X 利器。另一个益处是行使指令 apt-get install,能够迅速地完善许多柔件的安设,不必像 Windows 那样,在网上四处追求适配的安设包。Linux 的指令许多,而且比较杂,行使首来必要多学,多用。

开发环境安设

开发环境会涉及许多实际行使的库,分别的程序员处理相通的题目,能够行使分别的库。下面议定安设吾在做事和学习中频繁行使到的库,抛砖引玉,将开发者「引进门」。

搭建环境所需安设包:

(链接:http://pan.baidu.com/s/1sllta5v 暗号:eyc8)

附:开发环境介绍

集成开发环境 IDE

前线安设了一款开源的 IDE qt,现在 qt 在 Linux 中的地位,就和 Visual Studio 在 Windows 中的地位相通。除非是不行使 IDE 开发的高玩,大片面在 Linux 下做开发的团队照样会选择用 qt 开发的。

qt 的主要作用是做交互式的界面,比如在界面中表现现在传感器采集到的各栽新闻。界面交互会清晰添快开发者调试程序和标定参数的过程。

Tips:

熟识 qt 能够网上找教程,吾更选举编制地学习,比如买一本 Qt 的书。

买书或者往图书馆借书,珍惜望写书的日期,越新越益,太老的书,相答的版本也很旧。

熟识 qt 能够网上找教程,吾更选举编制地学习,比如买一本 Qt 的书。

买书或者往图书馆借书,珍惜望写书的日期,越新越益,太老的书,相答的版本也很旧。

OpenCV

OpenCV 是一个特意富强的库,其中封装了大量的可行使于无人驾驶钻研的函数,包括各栽滤波器算法、特征点挑取、矩阵运算、投影坐标转换、机器学习算法等。

自然最危险的是,它在计算机视觉四周的影响力,相机标定,现在的检测、识别、跟踪的接口行使首来相等方便。行使 OpenCV 库十足能够做出这张图表现的成就。

Tips:

请起码购买版本为 2.4 以上的教程学习 OpenCV,但现在市面上买得到的 OpenCV 中文教程都讲的太浅,甚至连经典的 Kalman Filter 都不介绍。吾选举直接学习英文版的 Learning OpenCV3。

奉上电子版,讲解很详细,每次打印一章浏览,循规蹈距。

(链接:http://pan.baidu.com/s/1dE5eom9 暗号:n2dn)

libQGLViewer

libQGLViewer 是远近著名的 OpenGL 适配 qt 的一个库,编程接口及手段与 OpenGL 大同幼异,吾们频繁在各大无人驾驶公司宣传画上望到的环境感知新闻的表现,就十足能够用 QGL 做出来。

Tips:

学习 libQGLViewer 不必要购买任何教材,官网及压缩包内的 example 就是最益的先生,依照官网的tutorial,把每个例子实现一遍,就基本入门了。

官网链接:libQGLViewer Home Page

Boost

Boost 库是有着「C 准标准库」之称。这个库内里有大量的「轮子」,对于 C 开发者来说,方便直接调用,避免重造「轮子」。

Tips:

Boost 是基于标准 C 开发,其组织用尽巧妙手段,不要贸然费时研读,找一份和 Boost 库有关的(电子或纸质)书,把现在录读一遍,大致清新内里有哪些功能即可,必要时就某一个点,花时间做钻研。

QCustomplot

除了上面挑到的 libQGLViewer 外,还能够议定平面图的样式表现车载传感器的新闻。鉴于 qt 内部只挑供了基本的直线、圆等绘图工具,行使首来并不是很方便,因此 QCustomplot 诞生了。浅易地调用 API,然后把想要表现的数据行为参数输入进往,就能够绘制出下面这些很棒的图形。而且能够很方便地拖动和缩放。

下面是吾在实际开发过程中,行使 QCustomplot 表现的片面传感器新闻。

Tips:

官网挑供了该库的源码下载,你只必要在你的工程中导入 .cpp 和 .h 文件即可。跟着官网挑供的 tutorials 学习,能够迅速上手。对照着 example 中的例程写代码,能够迅速把本身的数据变成可视化图像。

LCM(Lightweight Communications and Marshalling)

团队开发柔件一定存在程序(多进程)的通信题目,多进程通信的手段许多,也各有优弱点,行使首来就见仁见智了。2014 年 12 月 MIT 公布了他们在美国 DARPA 机器人挑衅赛中行使到的信号传输机制 LCM,出处:MIT releases LCM driver for MultiSense SL。

LCM 含多栽说话如 java,c 等特意针对实时编制在高带宽和矮的耽延的情况下进走新闻发送和数据封送处理。它挑供了一个发布/订阅新闻模型、自动封装/解封代码生成工具含多栽编程说话版本。这个模式和 ROS 现在节点间的通信手段很相通。

Tips:

LCM 两个进程间通信的 demo 官网上有源代码,依照官网上的 tutorial 就能迅速竖立属于你本身的 LCM 通信机制。

官方网站:LCM Projcect

Git & Github

Git 是团队开发不走欠缺的版本限制工具,行家在写论文时一定每天一个版本,倘若异国稀奇标注每个版本改了些什么时间久了就会遗忘。写代码更是如此。

行使 Git 能够极大地挑高多人开发的效率,而且版本管理规范,代码追溯首来相等方便。

Github 在柔件开发四周如雷贯耳,必要某些代码时,直接上往搜索即可。

Tips:

现活着面上介绍 Git 的书,让人望首来相等吃力,而且对细枝幼节的东西介绍地太甚深入,让人无法迅速上手。

于是吾要凶猛选举 Git 入门的教程:廖雪峰的 Git 教程,浅易易懂,而且还协调图文 视频,简直良心。

以上基本介绍完了,掌握益这些东西,你就变成无人驾驶四周的老司机了。

转载自知乎,文中不悦目点仅供分享交流,不代外本公多号立场,如涉及版权等题目,请您告知,吾们将及时处理。

-- END --

相关文章

产品中心

回到顶部
友情链接

Powered by 世爵登录注册 @2018 RSS地图 html地图

Copyright 站群 © 2013-2019 优游 版权所有