从算法上解读自动驾驶是如何实现的?

转载 2017年01月29日 17:55:05

从算法上解读自动驾驶是如何实现的?

科技新闻小鹏汽车2016-03-28 10:42
3评论

[摘要]车辆路径规划问题中路网模型、路径规划算法和交通信息的智能预测为关键点。

由于驾驶员的驾驶工作繁重,同时随着汽车拥有量的增加,非职业驾驶员的数量增多,导致交通事故频繁发生。如何提高汽车的主动安全性和交通安全性已成为急需解决的社会性问题。

从算法上解读自动驾驶是如何实现的?

图1 智能汽车示意图

随着计算机技术、电子技术、图像处理等信息处理技术研究的发展,研究人员开始将各种先进的技术应用于汽车控制上,辅助驾驶员进行汽车的操纵控制。在这些汽车电子控制系统研究的基础上,结合蓬勃发展的智能化信息处理技术,逐步产生了一个新兴的交叉学科——车辆的自动驾驶(又称为智能汽车)。未来实用化的智能汽车将最大限度地减少交通事故、提高运输效率、减轻驾驶员操纵负担,从而提高整个道路交通的安全性、机动性与汽车行驶的主动安全性。科技部于2001年已正式启动实施了十五计划中的国家科技攻关计划重大项目“智能交通系统关键技术开发和示范工程” 来提高我国整个运输系统的管理水平和服务水平,提高效率和安全性,车辆的自主驾驶是实现ITS(Intelligent Transport System,智能交通系统)的关键。

从算法上解读自动驾驶是如何实现的?

图2 智能交通系统示意图

车辆自主驾驶系统从本质上讲是一个智能控制机器,其研究内容大致可分为信息感知、行为决策及操纵控制三个子系统。路径规划是智能车辆导航和控制的基础,是从轨迹决策的角度考虑的,可分为局部路径规划和全局路径规划。

全局路径规划的任务是根据全局地图数据库信息规划出自起始点至目标点的一条无碰撞、可通过的路径。目前正在研究的有准结构化道路环境多种约束条件下的路径规划技术,自然地形环境下的路径规划技术,以及重规划技术等。由于全局路径规划所生成的路径只能是从起始点到目标点的粗略路径,并没有考虑路径的方向、宽度、曲率、道路交叉以及路障等细节信息,加之智能车辆在行驶过程中受局部环境和自身状态的不确定性的影响,会遇到各种不可测的情况。因此,在智能车辆的行驶过程中,必须以局部环境信息和自身状态信息为基础,规划出一段无碰撞的理想局部路径,这就是局部路径规划。通常路径规划的方法有:空间搜索法、层次法、动作行为法、势场域法、栅格法、模糊逻辑法和神经网络法等。

汽车自动驾驶任务可以分为三层,如图3所示,每层执行不同任务,包括上层路径规划、中层行驶行为规划和下层轨迹规划。

从算法上解读自动驾驶是如何实现的?

图3 汽车自动驾驶任务

上层路径规划在已知电子地图、路网以及宏观交通信息等先验信息下,根据某优化目标得到两点之间的最优路径,完成路径规划的传感信息主要来自于GPS定位信息以及电子地图。中层行驶行为规划是指根据主车感兴趣区域内道路、交通车等环境信息,决策出当前时刻满足交通法规、结构化道路约束的最优行驶行为,动态规划的行驶行为序列组成宏观路径。行为规划的传感信息主要来自车载传感器如雷达、照相机等,用以识别道路障碍、车道线、道路标识信息和交通信号灯信息等。下层轨迹规划是指在当前时刻,以完成当前行车行为为目标,考虑周围交通环境并满足不同约束条件,根据最优目标动态规划决策出的最优轨迹。同时,车辆的动力学约束也会在下层得到体现,下层轨迹规划除了必要的外部环境信息外,还需要对主车状态信息进行测量或估计。

车辆路径规划问题中的几个关键点:路网模型、路径规划算法和交通信息的智能预测,涉及的方面较多,本文主要针对路径规划过程做简单的探讨。

一.问题引入

我们尝试解决的问题是把一个游戏对象(game object)从出发点移动到目的地,如图2所示。路径搜索(Pathfinding)的目标是找到一条好的路径——避免障碍物、敌人,并把代价(燃料,时间,距离,装备,金钱等)最小化。运动(Movement)的目标是找到一条路径并且沿着它行进,当游戏对象开始移动时,一个老练的路径搜索器(pathfinder)外加一个琐细的运动算法(movement algorithm)可以找到一条路径,游戏对象将会沿着该路径移动而忽略其它的一切。一个单纯的运动系统(movement-only system)将不会搜索一条路径(最初的“路径”将被一条直线取代),取而代之的是在每一个结点处仅采取一个步骤,即朝着某个方向行进一段距离,同时需要考虑周围的障碍物环境避免碰撞的产生。显然,同时使用路径搜索(Pathfinding)和运动算法(movement algorithm)将会得到最好的效果。

移动一个简单的物体(object)看起来是容易的,而路径搜索是复杂的,为什么涉及到路径搜索就产生麻烦了?考虑以下情况:

从算法上解读自动驾驶是如何实现的?

图4 避碰路径规划

物体(unit)最初位于地图的底端并且尝试向顶部移动,物体扫描的区域中(粉红色部分)没有任何东西显示它不能向上移动,因此它持续向上移动。在靠近顶部时,它探测到一个障碍物然后改变移动方向,然后它沿着U形障碍物找到它的红色的路径。相反的,一个路径搜索器(pathfinder)将会扫描一个更大的区域(淡蓝色部分),但是它能做到不让物体(unit)走向凹形障碍物而找到一条更短的路径(蓝色路径)。

针对以上情形,如图5所示,可以扩展一个运动算法,用于对付上图所示的障碍物,或者避免制造凹形障碍,或者把凹形出口标识为危险的(只有当目的地在里面时才进去)。比起一直等到最后一刻才发现问题,路径搜索器能提前作出规划,选择一条更优的运动路径。

从算法上解读自动驾驶是如何实现的?

图5 避障优化路径规划方法

二、问题描述

汽车轨迹规划及智能决策是实现汽车智能化的关键技术之一,其主要任务是依据环境感知系统处理后的环境信号以及先验地图信息,在满足汽车行驶诸多约束的前提下,以某性能指标最优为目的,规划出车辆的运动轨迹。

智能车的自动驾驶行为即是将车从起始位姿“搬运”到目标位姿,车辆的运动限制在路面上、同时其运动学及动力学模型使得其不能像空中的无人机一样随意调整航向角,因此,规划的路径除了考虑路程最短、无碰撞外还需要考虑车辆运动轨迹的可执行性。

三.车辆路径规划算法

根据车辆导航系统的研究历程, 车辆路径规划算法可分为静态路径规划算法和动态路径算法。静态路径规划是以物理地理信息和交通规则等条件为约束来寻求最短路径,静态路径规划算法已日趋成熟, 相对比较简单, 但对于实际的交通状况来说,其应用意义不大。动态路径规划是在静态路径规划的基础上, 结合实时的交通信息对预先规划好的最优行车路线进行适时的调整直至到达目的地最终得到最优路径。下面介绍几种常见的车辆路径规划算法。

1. Dijkstra算法

从算法上解读自动驾驶是如何实现的?

图6 Dijkstra算法示意图

Dijkstra(迪杰斯特拉)算法是最短路算法的经典算法之一,由E.W.Dijkstra在1959年提出的。该算法适于计算道路权值均为非负的最短路径问题,可以给出图中某一节点到其他所有节点的最短路径,以思路清晰,搜索准确见长。相对的,由于输入为大型稀疏矩阵,又具有耗时长,占用空间大的缺点。其算法复杂度为O(n2),n为节点个数。

2.Lee算法

Lee算法最早用于印刷电路和集成电路的路径追踪, 与Dijkstra算法相比更适合用于数据随时变化的道路路径规划, 而且其运行代价要小于Dijkstra 算法。只要最佳路径存在, 该算法就能够找到最佳优化路径。Lee算法的复杂度很难表示, 而且对于多图层的路径规划则需要很大的空间。

3. Floyd算法

Floyd算法是由Floyd于1962年提出的, 是一种计算图中任意两点间的最短距离的算法。可以正确处理有向图或负权的最短路径问题,同时也被用于计算有向图的传递闭包,Floyd-Warshall算法的时间复杂度为O(n3),空间复杂度为O(n2),n 为节点个数。与对每一节点作一次Dijkstra算法的时间复杂度相同,但是实际的运算效果比Dijkstra算法要好。

4.启发式搜索算法——A* 算法

从算法上解读自动驾驶是如何实现的?

图7 A* 算法动态示意图

启发式搜索有很多的算法,如: 局部择优搜索法、最好优先搜索法、A* 算法等。其中A* 算法是由Hart、Nilsson、Raphael等人首先提出的,算法通过引入估价函数,加快了搜索速度,提高了局部择优算法搜索的精度,从而得到广泛的应用,是当前较为流行的最短路算法。A* 算法所占用的存储空间少于Dijkstra算法。其时间复杂度为O(bd),b为节点的平均出度数,d为从起点到终点的最短路的搜索深度。

5. 双向搜索算法

双向搜索算法由Dantzig提出的基本思想,Nicholson正式提出算法。该算法在从起点开始寻找最短路径的同时也从终点开始向前进行路径搜索,最佳效果是二者在中间点汇合,这样可缩短搜索时间。但是如果终止规则不合适,该算法极有可能使搜索时间增加1倍,即两个方向都搜索到最后才终止。

6. 蚁群算法

从算法上解读自动驾驶是如何实现的?

图8 蚁群算法示意图

蚁群算法是由意大利学者M.Dorigo等于1991年提出的,它是一种随机搜索算法, 是在对大自然中蚁群集体行为的研究基础上总结归纳出的一种优化算法,具有较强的鲁棒性,而且易于与其他方法相结合,蚁群算法的算法复杂度要优于Dijkstra算法。

此外, 还有实时启发式搜索算法、基于分层路网的搜索算法、神经网络、遗传算法及模糊理论等,由于实际需求不同对算法的要求和侧重点也会有所不用,所以也出现了许多以上算法的各种改进算法。大多数算法应用于求解车辆路径规划问题时都会存在一定的缺陷,所以目前的研究侧重于利用多种算法融合来构造混合算法。

四.总结

目前, 投入市场应用的成熟车辆导航系统大多基于静态的路径规划, 然而面对存在众多不稳定因素的交通现实, 用户并不满足于现有的系统。尤其是发生交通事故和交通堵塞时, 静态路径规划不能及时改变路线。因此, 车辆导航动态路径规划就成为新一代智能车辆导航系统的研究热点问题。车辆动态路径规划基于历史的、当前的交通信息数据对未来交通流量进行预测, 并用于及时调整和更新最佳行车路线, 从而有效减少道路阻塞和交通事故。

从算法上解读自动驾驶是如何实现的?

图9 多导航器协调规划示意图

随着计算机科学技术、无线通信技术以及交通运输业的高速发展,车辆导航系统的动态路径规划研究趋势还将向多导航器相互协调规划的方向发展。现在的车辆导航都是单个车辆为对象进行路径引导,而没有考虑到总体的大局协调,这样容易引起新的交通拥塞等问题,所以多导航器协调规划将是一种更加符合实际需求的规划方法。

参考文献:

1、 考虑全局最优性的汽车微观动态轨迹规划

2、 车辆导航动态路径规划的研究进展

3、 Adaptive Routing for road traffic

【自动驾驶】深度学习用于自动驾驶技术 DeepDriving(ICCV 2015)

无人驾驶技术在最近几年得到了迅猛发展,今天将分享 ICCV 2015 的一篇有关方面的论文: DeepDriving: Learning Affordance for Direct Percept...
  • bcj296050240
  • bcj296050240
  • 2016-12-27 19:38:18
  • 5216

一种智能车控制算法的设计和实现

智能汽车与一般所说的自动驾驶有所不同,它指的是利用多种传感器和智能公路技术实现的汽车自动驾驶。智能汽车首先有一套导航信息资料库,存有全国高速公路、普通公路、城市道路以及各种服务设施(餐饮、旅馆、加油站...
  • roslei
  • roslei
  • 2016-11-13 21:03:15
  • 3191

自动驾驶智能汽车:理论,算法和实现

  • 2017年03月27日 20:30
  • 4.83MB
  • 下载

人工智能之自动驾驶系列(一):概要

人工智能之自动驾驶系列(一):概要 版权声明:本文系个人经多处资料学习、吸收、整理而得,如需装载,请注明出处:作者名+链接。文中若有笔误或不正确的地方,烦请包涵并指出,谢谢。 内容...
  • wangdaiyin
  • wangdaiyin
  • 2017-08-19 10:15:44
  • 4211

自动驾驶大量资料

https://handong1587.github.io/deep_learning/2015/10/09/dl-and-autonomous-driving.html Deep ...
  • AMDS123
  • AMDS123
  • 2017-03-22 00:58:31
  • 9164

无人车、自动驾驶相关的文章整理

【无人驾驶系列】光学雷达(LiDAR)在无人驾驶技术中的应用 【无人驾驶系列】基于ROS的无人驾驶系统 无人车技术连载(一):国外无人车技术 无人车技术连载(二):军用无人地面车辆及在无人战争中的应...
  • sinat_31135199
  • sinat_31135199
  • 2016-10-25 20:34:32
  • 833

【自动驾驶】如何利用深度学习搭建一个最简单的无人驾驶系统

新智驾按:本文为新智驾独家专栏,作者系佐思产研研究总监周彦武,新智驾经授权发布。 国内最牛的无人驾驶厂家的运算平台是这样的: 一个英特尔至强 E5 的 CPU,拥有 12 内核,3...
  • np4rHI455vg29y2
  • np4rHI455vg29y2
  • 2017-11-02 00:00:00
  • 1673

George Hotz 自动驾驶 深度学习

George Hotz:请收下我的智驾系统代码(附论文) 举报   1 新智元原创      【新智元导读】我知道以GeoHot的脾气,最终 comma.ai 全套...
  • tellyounews
  • tellyounews
  • 2016-11-26 13:32:24
  • 3014

【Udacity自动驾驶课程笔记】---- 车道线检测1

Udacity无人驾驶课程笔记
  • sgfmby1994
  • sgfmby1994
  • 2017-11-29 22:20:20
  • 1083

优达学城自动驾驶汽车-Project 1: Finding Lane Lines 学习笔记1

在RGB 三信道 的图片中, 白色有很高的R, G, B 的像素值。 所以我们就可以根据这个来threshold并且把低于threshold的像素给filter out 掉。 这里用Python来做演...
  • junjiejin
  • junjiejin
  • 2017-03-30 14:19:46
  • 1901
收藏助手
不良信息举报
您举报文章:从算法上解读自动驾驶是如何实现的?
举报原因:
原因补充:

(最多只允许输入30个字)