自动驾驶技术之所需技术

之前读了一些相关的博文和技术类文章,今天来做个大汇总~~
这里写图片描述
自动驾驶涉及到的技术:从大方面来说包括硬件软件
《一》、首先我们来说硬件,有篇论文Development of Steering Control System for Autonomous Vehicle Using Geometry-Based Path Tracking Algorithm:里面详细讲到了需要的硬件:
这里写图片描述
至于自动驾驶车辆里面装哪些传感器完全由你的任务确定,比如:如果只需要完成高速公路的自动驾驶,类似Tesla 的AutoPilot 功能,那根本不需要使用到激光传感器;如果是完成城区路段的自动驾驶,没有激光传感器,仅靠视觉是很困难的。
1、选汽车*,之前读到一篇媒体报道,讲谷歌(雷克萨斯 RX450h)、苹果(雷克萨斯 RX450h)选车的门道,RX450h 是一辆混动车,附博文地址,主要是考虑到几个方面的因素,一是自动驾驶系统所消耗的电量巨大,混动和纯电动*在这方面有明显优势。另一方面是是发动机的底层控制算法相比于电机复杂太多,与其花大量时间在标定和调试底层上,不如直接选用电动车研究更高层的算法。所以尽量不要选纯汽油车。

2、还有控制器
前期算法预研阶段,推荐使用工控机(Industrial PC,IPC),因为工控机比嵌入式设备更稳定、可靠,社区支持及配套的软件也更丰富。百度开源的Apollo推荐了一款包含GPU的工控机,型号为 Nuvo-5095GC,回头可以查一查。
算法研究得较为成熟时,就可以将嵌入式系统作为控制器,比如Audi和TTTech共同研发的zFAS,目前已经应用在最新款Audi A8上量产车上了。
3、can卡
工控机与汽车底盘的交互必须通过专门的语言——CAN。从底盘获取当前车速及方向盘转角等信息,需要解析底盘发到CAN总线上的数据;工控机通过传感器的信息计算得到方向盘转角以及期望车速后,也要通过 CAN卡 将消息转码成底盘可以识别的信号,底盘进而做出响应。CAN卡可以直接安装在工控机中,然后通过外部接口与CAN总线相连。
Apollo使用的CAN卡,型号为 ESD CAN-PCIe/402
4、全球定位系统(GPS)+惯性测量单元(IMU)
无人驾驶系统依靠GPS+IMU就可以知道自己在哪(经纬度),在朝哪个方向开(航向),IMU还能提供诸如横摆角速度、角加速度等更丰富的信息,这些信息有助于自动驾驶汽车的定位和决策控制。
Apollo的GPS型号为NovAtel GPS-703-GGG-HV,IMU型号为NovAtel SPAN-IGM-A1。
5、感知传感器
感知传感器包括视觉传感器、激光传感器、雷达传感器等。
视觉传感器就是摄像头,摄像头分为单目视觉,双目(立体)视觉。比较知名的视觉传感器提供商有以色列的Mobileye,加拿大的PointGrey,德国的Pike等。
激光传感器分为单线,多线一直到64线。每多一线,成本上涨1万RMB,当然相应的检测效果也更好。比较知名的激光传感器提供商有美国的Velodyne和Quanergy,德国的Ibeo等。国内有速腾聚创和禾赛科技。
雷达传感器是车厂Tier1的强项,因为雷达传感器已经在汽车上得到了广泛使用。知名的供应商当然是博世、德尔福、电装等。
《二》、软件方面:
先说需要的东西吧!!!
(1)、操作系统
推荐使用 Linux 作为无人驾驶研究的操作系统。大部分做无人驾驶的团队都用的 Linux,最常用且普及率很高的当属 Ubuntu 系列,从稳定性上,推荐安装 14.04 版本。
链接:http://pan.baidu.com/s/1jIJNIPg 密码:147y
(2)、Linux基本指令必学指数
命令行操作不仅对开发大有帮助,且使用指令 apt-get install,可以快捷地完成很多软件的安装。
(3)、开发环境安装
开发环境涉及很多实际使用的库,下面通过安装某大牛在工作和学习中经常使用到的库,搭建环境所需安装包:
链接:http://pan.baidu.com/s/1sllta5v 密码:eyc8
开发环境介绍:
QT: 主要作用是做交互式的界面,比如在界面中显示当前传感器采集到的各种信息。界面交互会明显加快开发者调试程序和标定参数的过程。
OpenCV:一个非常强大的库,其中封装了大量的可应用于无人驾驶研究的函数,包括各种滤波器算法、特征点提取、矩阵运算、投影坐标转换、机器学习算法等。当然最重要的是,它在计算机视觉领域的影响力,相机标定,目标检测、识别、跟踪的接口使用起来十分方便。电子版:
链接:http://pan.baidu.com/s/1dE5eom9 密码:n2dn
libQGLViewer: OpenGL 适配 qt 的一个库,编程接口及方法与 OpenGL 大同小异,我们经常在各大无人驾驶公司宣传画上看到的环境感知信息的显示,就完全可以用 QGL 做出来。
官网链接:libQGLViewer Home Page
Boost:有着“C++准标准库”之称。对于C++开发者来说,方便直接调用,Boost是基于标准C++开发的.
QCustomplot:可以通过平面图的形式显示车载传感器的信息。鉴于 qt 内部只提供了基本的直线、圆等绘图工具,使用起来并不是很方便,因此QCustomplot诞生了。简单地调用API,然后把想要显示的数据作为参数输入进去,就可以绘制出下面这些很棒的图形。而且可以很方便地拖动和缩放。
这里写图片描述
官网地址:http://www.qcustomplot.com/index.php/tutorials/settingup
LCM:信号传输机制,LCM含多种语言如java,c++等专门针对实时系统在高带宽和低的延迟的情况下进行消息发送和数据封送处理。它提供了一个发布/订阅消息模型、自动封装/解封代码生成工具含多种编程语言版本。
官方网站:https://link.zhihu.com/?target=http%3A//lcm-proj.github.io/
Git & GithubGit:团队开发不可缺少的版本控制工具。使用Git可以极大地提高多人开发的效率,而且版本管理规范,代码追溯起来十分方便。Github在软件开发领域如雷贯耳,需要某些代码时,直接上去搜索即可。
Git教程:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000


软件包含四层:感知、融合、决策、控制
这里写图片描述
1.采集:
采集传感器跟我们的PC或者嵌入式模块通信时,会有不同的传输方式。比如采集来自摄像机的图像信息,有的是通过千兆网卡实现的通信,也有的是直接通过视频线进行通信的。不同的传输介质,需要使用不同的协议去解析这些信息,这就是上文提到的“驱动层”。通俗地讲就是把传感器采集到的信息全部拿到,并且编码成团队可以使用的数据。
2、预处理
并不是拿到的传感器的所有信息都是有用的。传感器层将数据以一帧一帧、固定频率发送给下游,但下游是无法拿每一帧的数据去进行决策或者融合的。因此上游需要对信息做预处理,以保证车辆前方的障碍物在时间维度上是一直存在的,所以这里就会使用到卡尔曼滤波算法。
3、坐标转换
传感器是安装在不同地方的。因为决策控制层做车辆运动规划时,是在车体坐标系下做的(车体坐标系一般以后轴中心为O点),所以最终所有传感器的信息,都是需要转移到自车坐标系下的。
这里写图片描述
4、信息融合
信息融合是指把相同属性的信息进行多合一操作。比如摄像机检测到了车辆正前方有一个障碍物,毫米波也检测到车辆前方有一个障碍物,激光雷达也检测到前方有一个障碍物,而实际上前方只有一个障碍物,所以我们要做的是把多传感器下这辆车的信息进行一次融合,以此告诉下游,前面有一辆车,而不是三辆车。
这里写图片描述
5、决策控制
这一层次主要设计的是拿到融合数据后,如何正确做规划。规划包含纵向控制和横向控制。
纵向控制即速度控制,表现为什么时候加速,什么时候制动。
横向控制即行为控制,表现为什么时候换道,什么时候超车等

阅读更多

扫码向博主提问

女王的专属领地

非学,无以致疑;非问,无以广识
  • 擅长领域:
  • 目标检测
  • 深度学习
  • 机器算法
  • 计算机视觉
  • yolo
去开通我的Chat快问
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Julialove102123/article/details/77816822
文章标签: 算法 技术
所属专栏: 目标检测和深度学习
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭