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

科技新闻 小鹏汽车 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

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

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

    科技新闻小鹏汽车2016-03-28 10:42 [摘要]车辆路径规划问题中路网模型.路径规划算法和交通信息的智能预测为关键点. 由于驾驶员的驾驶工作繁重,同时随着汽车拥有量的增加,非职业驾驶员的数量 ...

  2. 算法分析的目的_仿真环境跟车2分钟,这个攻击算法就让自动驾驶系统撞上马路牙子...

    鱼羊 萧萧 发自 凹非寺 量子位 报道 | 公众号 QbitAI 自动驾驶领域目前最强的MSF(多传感器融合)定位算法,再次被攻破了. 攻击之下,平均30秒内,正常行驶中的自动驾驶汽车就撞上了马路牙子 ...

  3. 从浪潮登顶NuScenes榜首解读自动驾驶AI感知技术的发展

    导读: "自动驾驶是集感知.决策.交互于一体的技术 环境感知能力作为自动驾驶的第一个环节,是车辆与环境交互的纽带 通过"摄像头.毫米波雷达.超声波雷达.激光雷达"等各类传 ...

  4. 解读自动驾驶的2020:从硬件角度看,无人车商业化落地难在哪?

    来源 :AI前线 作者 :滴滴自动驾驶技术团队 策划 :陈思 「重点问题」 什么是合适的无人驾驶车辆平台? 复杂场景下的"无人驾驶",传感器硬件系统还有哪些挑战? 告别 demo ...

  5. 如何将一个向量投影到一个平面上_自动驾驶视觉融合相机校准与激光点云投影...

    点云PCL免费知识星球,点云论文速读. 标题:自动驾驶视觉融合-相机校准与激光点云投影 作者:williamhyin 来源:https://zhuanlan.zhihu.com/p/136263753 ...

  6. 【科普】千字解读自动驾驶的十个实用冷知识

    自动驾驶如今究竟发展到什么阶段了?下一个风口在哪?万亿市场的背后存在着多少不为人知的博弈? 在驭势科技首期自动驾驶线上知识分享课堂,驭势科技联合创始人.董事长吴甘沙先生,通过讲述十个实用的冷知识,拉近 ...

  7. 揭秘自动驾驶纯视觉算法,探索自动驾驶的未来

    感知环节作为智能驾驶的先决条件,其探测精度.广度与速度将直接影响决策层的判断与执行层的操作,在智能驾驶中的地位至关重要. 自动驾驶感知分为纯视觉感知和激光雷达,而视觉方案中的摄像头能以高帧率.高分辨率 ...

  8. 自动驾驶感知算法实战3——自动驾驶2D和3D视觉感知算法概述

    自动驾驶感知算法实战专栏:https://blog.csdn.net/charmve/category_12097938.html 目录 导读 一.2D视觉感知 1. 目标检测 1.1 两阶段检测 1 ...

  9. 万字长文解读深度学习算法在自动驾驶规控中的应用

    交流群 | 进"传感器群/滑板底盘群"请加微信号:xsh041388 交流群 | 进"汽车基础软件群"请加微信号:ckc1087 备注信息:群名称 + 真实姓名 ...

最新文章

  1. Git 错误提交后该如何回滚操作
  2. 乐观锁和悲观锁,可重入锁和不可重入锁(1)
  3. double转整数问题
  4. F#学习之路(3) 如何组织程序(下)
  5. px4官网调参指南 多旋翼无人机PID调参指南
  6. 并发容器之CopyOnWriteArrayList
  7. C++中this指针的使用方法.
  8. Go GC 20 问
  9. C++_类和对象_对象特性_友元_友元类_在一个类中声明另一类作为自己的友元类_可以访问自己类中的private变量---C++语言工作笔记053
  10. kotlin面试_Kotlin面试问题
  11. 再读《Java编程思想 》
  12. Dev C++下载简介和安装
  13. 泛微OA的SQL语句大全
  14. 尔雅 科学通史(吴国盛) 个人笔记及课后习题 2018 第七章 实验传统的兴起
  15. H5调起手机端的摄像头
  16. 2022 3.17网易互娱研发岗笔试题锯齿数独题解
  17. 电脑上的文件经常丢失,怎么办?
  18. HTML5 实现扫描识别二维码 生成二维码
  19. 在C和C ++中创建循环缓冲区
  20. STM32 HAL库详细介绍

热门文章

  1. 利用ffmpeg压缩屏幕图像为avi(录屏、压制)
  2. idea中git打tag详解
  3. 软件需求说明书 编写实例
  4. npm安装的yarn遇到【yarn : 无法将“yarn”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次】
  5. 八 Civil3d常用显示样式的编辑与创建 ----纵断面标签
  6. Powershell 挖矿病毒处理与防范,该病毒特性:病毒每天自动运行,生成的病毒程序杀毒软件能查到,但无法阻止powershell病毒的自动运行,每天都会生成新的病毒文件
  7. Ubuntu下视频播放加速软件SMPlyer
  8. Excel-移动平均分析(趋势分析)
  9. 新一代PHP MYSQL DREAMWEAVER网站建设典型案例pdf
  10. 钱币兑换 C/C++