论文解读--Visual Lane Tracking and Prediction for Autonomous Vehicles-程序员宅基地

技术标签: 算法  自动驾驶  论文解读  目标检测  人工智能  目标跟踪  

自动驾驶汽车视觉车道线跟踪和预测

摘要

        我们提出了一种用于自动驾驶汽车跟踪水平道路车道标记位置的可视化方法。我们的方法是基于预测滤波的。预测步骤估计在每个新的图像帧中期望的车道标记位置。它也是基于汽车的运动学模型和嵌入式测程传感器产生的信息。使用适当准备的测试车辆获得的实验结果表明,在某些条件下,如振荡和变道,预测步骤可以显著地减少跟踪误差。因此,我们相信我们的方法应用于基于图像的控制自动驾驶汽车可以提高系统性能。

1.介绍

        汽车本身无疑是现代自动化的最大挑战之一。一方面,飞机和船舶的汽车驾驶员是众所周知的和广泛使用的。另一方面,由于更加复杂,对于汽车和卡车,这项技术仍在开发中。其目标是使汽车自动从地址A驾驶到地址B,与有经验的人类司机一样安全(或更安全)。在这种情况下,用户就只是一名乘客。

        对于汽车来说,自动驾驶系统的一个基本要求是能够将车辆保持在道路内,并行驶在车道的中心。这需要了解周围环境的知识,这是通过安装在汽车上的传感器获得的,例如,照相机、激光扫描、GPS和惯性单元。

       (NASHMAN,1992年)、(SCHNEIDERMAN,1994年)、(POMERLEAU,1996年)、(BROGGI,1999年)和(LU,2002年)等项目只依赖于摄像机生成的灰度图像,用于检测道路的位置和估计曲率。在(CHRISMAN,1998)和(SALES,2010)中,彩色图像被用来对属于道路的区域进行分类。这一想法也被应用于(DAHLKAMP,2006),以扩大系统的范围,超出在其自主车辆上使用的激光测距仪(LRF)传感器的范围。

        立体视觉系统允许计算场景上物体的距离。在(BROGGI,2010)和(LIMA,2010)中使用了双目视觉系统(立体视觉)用于障碍检测。但是,这种系统具有计算成本高的缺点。

        像(GUIZZO,2011)和(自动驾驶实验室,2012)等项目将LRF传感器与相机、GPS、IMU和地图信息相结合,使自动驾驶研究达到前所未有的水平。这两个项目都成功地完成了在真实城市环境中的自主导航任务。

        在巴西,这一领域的研究正在开始发展,我们强调一些:为你驾驶,UNIFEI(VEERMAS,2010),CADU,UFMG(LIMA,2010),VERO,CTI /Campinas(VERO,2012),EESC / USP(SENA,2012),CARINACARINA,2010),由ICMC / USP开发。我们大学的另一个小组(UFES)也在开发一个自动驾驶汽车项目。他们买了一辆已经安装了主要硬件组件的车,他们主要关注的是软件方面。他们的主要目标是了解人类大脑是如何利用图像来解释世界的(LCAD,2013)。另一方面,我们项目的主要目标是建立一辆具有简单和低计算成本的解决方案的自动驾驶汽车。为了实现这一目标,我们正在通过安装执行器和传感器来调整普通汽车。我们的汽车已经能够在可控的条件下,在真实的道路上自动驾驶(VIVACQUA等人,2012年)。

        我们的系统由一台连接到一个USB摄像头的笔记本电脑和一个接口板组成。USB摄像头安装在前挡风玻璃上,指向道路。接口板将计算机连接到汽车编码器,并连接到负责驱动轮定位的步进电机。

        计算视觉系统产生的视觉信息受到由遮挡、反射、阴影等引起的噪声或误差的影响。为了使这些问题的影响最小化,对原始图像进行过滤过程,以产生更可靠的信息。这些信息是所谓的模型状态的基础,并被反馈到视觉算法中,以定义感兴趣的图像区域(ROI)(见图1)。在(VIVACQUA 等人,2012)中,这些信息也被控制器用来使自动驾驶汽车保持在道路的中心。

图1:用来生成模型状态的可视化信息流

        一些视觉车道跟踪的方法(SCHNEIDERMAN,1994)、(AUFRERE,2000)、(LU,2002)和(CHOI,2012)。它们都使用某种过滤过程来更新其模型状态(描述车道标记的参数),但没有一种方法使用预测为了实现预测,车辆的位移信息必须是可访问的和可靠的。我们已经对我们的自动驾驶汽车进行了必要的调整,在本文中,我们提出了一种基于预测过滤的可视化方法来跟踪水平道路车道标记的位置的可视化方法。预测步骤估计在每一个新的图像帧中的期望车道标记位置,以最小化跟踪误差。下面的几部分将对我们的系统进行解释,并讨论一些实验结果。

2.参照系

        在进行预测步骤之前,需要将系统参照系从相机的参照系更改为汽车的参照系,考虑到摄像机在原点(自我参照系-OR)。在自动驾驶汽车中使用的视觉系统检测到的水平车道标记(VIVACQUA,2012)通过反向透视投影(图2)进行映射,就像图像是从天空看到的一样,假设道路是完美的平面(鸟瞰图)。

图2:参照系。(A)相机参照系;(B)汽车参照系

        在自我参照系中,原点是地平面中相机正下方的点,Z轴对应于汽车的位移方向(当向前移动时),X轴是横向方向。图2 (B)显示了与图2 (A)图像中检测到的信息对应的两条导线(左和右)。预测步骤的基本思想是,可以根据运动学模型预测汽车在下一个图像帧中的位置,在实际帧上的位置。        

3.汽车运动学模型

        汽车运动学模型可以用图3所示的自行车模型来近似。图中:Pr为描述车辆轨迹的圆周的中心,Pc为车辆中的摄像机位置(或原点),R为Pc描述的轨迹曲率半径,Lt为车辆前后轴的距离,Lr为或原点与后轴的距离,α为前轮转角。

图3:汽车运动学模型

        使用汽车运动学模型(1),根据其参数和前轮转角(α),我们可以计算出世界参照系(WR)中的车辆轨迹。

 (1)

        其中,x、z、θ为车辆在WR中的位置和方向,v为车辆的线速度。值得注意的是,世界参照系WR的起源是固定在地面上的,而不是固定在汽车上的。因此,当汽车移动时,点Pc描述了点线轨迹,固定物体在世界中的位置保持不变。

4.位置预测

        在OR参考系中,点Pc与原点重合,世界上的固定物体旋转Pr,但方向相反。图4显示了在或参考系统中所看到的世界上一个固定物体的初始位置。根据初始位置的信息和由运动学模型所定义的轨迹,可以估计未来的位置。

图4:对象位置预测:(a)右转;(b)左转;(c)直行。

        旋转中心(Pr)、摄像机轨迹的曲率半径(R)和角位移(Δθ)采用(2)、(3)和(4)进行计算。

        以米为单位的距离(通过位于前轴的编码器获得)和前轮转角(α)(通过安装在驱动轮轴上的另一个编码器获得):

 (2)

 (3)

 (4)

        其中,ΔL为位移距离。

5.抛物线旋转

        要估计任何物体的新位置,人们只需知道旋转中心(Pr)、旋转角度(Δθ),并应用一个二维旋转操作。在(VIVACQUA,2012)中描述的自动驾驶车辆的具体案例中,系统被测试,跟踪对象是构成道路模型的两个道路车道标记。每一个标记都用一个二次多项式表示。

 (5)

        给定旋转抛物线的一个点(X,Z),我们可以通过反向旋转操作,在原始抛物线中找到相应的点(X,Z),由下式给出

 (6)

 (7)

        其中Px和Pz为旋转中心的坐标。在(5)中替换(6)和(7),我们得到了旋转抛物线的一般形式:

 (8)

        这种形式与软件中使用的原始数据结构不兼容,不允许对X给定Z的显式计算,这在计算上是不可取的。为了解决这个问题,我们提出了一种方法来找到一个良好的旋转抛物线的近似值,以保持在(5)中给出的默认形式。

        考虑旋转的抛物线方程

 (9)

        我们需要解决的问题是找到系数a2r,a1r和a0r。解决这个问题的一般思想是:找到区间内原始抛物线x (z)的中心点M[z0..z1];应用Δθ绕Pr点旋转(从而使M变成Mr);考虑Mr属于新的抛物线xr (z);并考虑这个点的切线方向被旋转角度Δθ减去。

        切线在M点上的倾角由给出。利用切线差的性质,我们有:

。由于旋转的抛物线曲率没有改变,我们有a2r=a2。系数a1r可以用计算,系数a0r用计算。通过这样做,我们得到在OR参考系的旋转抛物线参数。

图5:旋转抛物线的近似值

6.滤波

        我们考虑到车道标记位置在连续帧中不会有太大的变化,大量的噪声会导致图像快速变化(如反射或遮挡)。为此,我们选择使用一阶低通滤波器,考虑到其对系统行为的影响,我们在实验中定义了该时间常数:如果该值过低,滤波对零星误差测量的衰减作用很小。另一方面,如果它太高,这将延迟响应,并且会给模型带来困难,例如在弯道前后发生的道路形状的缓慢变化。在用车载摄像机在80km/h速度下拍摄的视频进行测试后,我们发现τ = 3的值在鲁棒性和响应速度之间产生了很好的折衷。

        式(10)表示表示状态模型的向量Wi。式(11)是低通滤波器的表达式,它从视觉系统(Ui)生成的度量中更新模型状态。

 (10)

 (11)

7.实验结果

        为了测量预测系统的性能,我们使用一个适当适应的测试车辆进行了一些实验,以获取与里程长测量同步的道路图像。该车辆在三种曲率条件下驾驶,如图6: (A)在左转;(B)在一条直线上;和(C)在右转。在每个曲率条件下,车辆就轨迹的振荡水平以三种不同模式进行(图6 (D)至6 (F)):无振荡(L0),车辆沿与导线平行的道路行驶;低振荡水平(L1),车辆周期性穿过中心线;高振荡(L2),车辆也穿过中心线,但有更明显的偏差。

图6:实验条件:(A)左转、(B)直行、(C)右转、(D、E、F)对应路线

        在轨迹中引入振荡,迫使车辆移动不平行于道路线,以便预测能够证明其保持模型状态接近瞬时测量的能力。

        测试在100米长的路径上以大约40 km/h的速度进行,每40 ms采集一次数据(图像和里程计)。图7显示了图6中每个轨迹的注册驱动轮位置。

图7:在试验中获得的驱动轮位置数据

        收集到的数据在实验室进行分析,用来评估系统性能(有和不使用预测)。所使用的性能指数是绝对水平平均误差(AHAE),由模型定义的曲线与瞬时测量定义的曲线的差值计算出来。

 (12)

8.讨论

        图8显示了从测试中获得的视频中获得的帧序列,它与图6(D)中所示的L2轨迹的情况相对应。这个序列对应于车辆远离中心线的延伸,可以从黄色标记的连续位移到左边。

图8:帧序列,显示了有和没有预测的跟踪过程。

        图8清楚地显示,与只使用滤波和预测的模型(黑色虚线)相比,使用滤波和预测的模型(白色虚线)更接近度量值(红色连续线)。这说明了我们的方法的好处。

        感知模型状态和视觉测量之间更接近的另一种方法是通过图9中的图,图中显示了过滤模型和带有预测的过滤模型的多项式的参数a0(车道偏移)和a1(车道方向)。曲率参数(a2)没有给出,因为它在考虑的拉伸中实际上是恒定的。

图9:仅滤波和滤波-预测的模型参数表现

图10:振荡等级2中的累积误差

        在图9中,我们可以注意到低通滤波去除高频噪声的能力,这导致了延迟平滑曲线(没有预测情况)。通过使用预测,可以减少不期望的延迟(预测)。这种减少是因为预测补偿了汽车运动对捕获图像的影响。图10为具有较高振荡(L2)的测试条件下,指数AHAE的归一化累积误差(NAE),其中认为无预测的累积误差为1。用(13)计算,其中n为实验中使用的总帧数。

 (13)

        在所有测试用例中,有预测的累积误差上升速率小于未有预测的累积误差(低于0,51)。

        图11总结为在所有测试条件下得到的最终NAE值,详见图11。我们可以注意到,当汽车以较高振荡水平的轨迹行驶时,NAE的值会降低。这是因为当存在振荡时,车道标记在摄像机视野内横向发生位移,预测的使用补偿了这种效应,使模型更接近真实测量,同时保持滤波过程给出的鲁棒性。我们相信,预测步骤将提高自动驾驶车辆在类似条件下驾驶时的性能。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_41691854/article/details/134761426

智能推荐

while循环&CPU占用率高问题深入分析与解决方案_main函数使用while(1)循环cpu占用99-程序员宅基地

文章浏览阅读3.8k次,点赞9次,收藏28次。直接上一个工作中碰到的问题,另外一个系统开启多线程调用我这边的接口,然后我这边会开启多线程批量查询第三方接口并且返回给调用方。使用的是两三年前别人遗留下来的方法,放到线上后发现确实是可以正常取到结果,但是一旦调用,CPU占用就直接100%(部署环境是win server服务器)。因此查看了下相关的老代码并使用JProfiler查看发现是在某个while循环的时候有问题。具体项目代码就不贴了,类似于下面这段代码。​​​​​​while(flag) {//your code;}这里的flag._main函数使用while(1)循环cpu占用99

【无标题】jetbrains idea shift f6不生效_idea shift +f6快捷键不生效-程序员宅基地

文章浏览阅读347次。idea shift f6 快捷键无效_idea shift +f6快捷键不生效

node.js学习笔记之Node中的核心模块_node模块中有很多核心模块,以下不属于核心模块,使用时需下载的是-程序员宅基地

文章浏览阅读135次。Ecmacript 中没有DOM 和 BOM核心模块Node为JavaScript提供了很多服务器级别,这些API绝大多数都被包装到了一个具名和核心模块中了,例如文件操作的 fs 核心模块 ,http服务构建的http 模块 path 路径操作模块 os 操作系统信息模块// 用来获取机器信息的var os = require('os')// 用来操作路径的var path = require('path')// 获取当前机器的 CPU 信息console.log(os.cpus._node模块中有很多核心模块,以下不属于核心模块,使用时需下载的是

数学建模【SPSS 下载-安装、方差分析与回归分析的SPSS实现(软件概述、方差分析、回归分析)】_化工数学模型数据回归软件-程序员宅基地

文章浏览阅读10w+次,点赞435次,收藏3.4k次。SPSS 22 下载安装过程7.6 方差分析与回归分析的SPSS实现7.6.1 SPSS软件概述1 SPSS版本与安装2 SPSS界面3 SPSS特点4 SPSS数据7.6.2 SPSS与方差分析1 单因素方差分析2 双因素方差分析7.6.3 SPSS与回归分析SPSS回归分析过程牙膏价格问题的回归分析_化工数学模型数据回归软件

利用hutool实现邮件发送功能_hutool发送邮件-程序员宅基地

文章浏览阅读7.5k次。如何利用hutool工具包实现邮件发送功能呢?1、首先引入hutool依赖<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.7.19</version></dependency>2、编写邮件发送工具类package com.pc.c..._hutool发送邮件

docker安装elasticsearch,elasticsearch-head,kibana,ik分词器_docker安装kibana连接elasticsearch并且elasticsearch有密码-程序员宅基地

文章浏览阅读867次,点赞2次,收藏2次。docker安装elasticsearch,elasticsearch-head,kibana,ik分词器安装方式基本有两种,一种是pull的方式,一种是Dockerfile的方式,由于pull的方式pull下来后还需配置许多东西且不便于复用,个人比较喜欢使用Dockerfile的方式所有docker支持的镜像基本都在https://hub.docker.com/docker的官网上能找到合..._docker安装kibana连接elasticsearch并且elasticsearch有密码

随便推点

Python 攻克移动开发失败!_beeware-程序员宅基地

文章浏览阅读1.3w次,点赞57次,收藏92次。整理 | 郑丽媛出品 | CSDN(ID:CSDNnews)近年来,随着机器学习的兴起,有一门编程语言逐渐变得火热——Python。得益于其针对机器学习提供了大量开源框架和第三方模块,内置..._beeware

Swift4.0_Timer 的基本使用_swift timer 暂停-程序员宅基地

文章浏览阅读7.9k次。//// ViewController.swift// Day_10_Timer//// Created by dongqiangfei on 2018/10/15.// Copyright 2018年 飞飞. All rights reserved.//import UIKitclass ViewController: UIViewController { ..._swift timer 暂停

元素三大等待-程序员宅基地

文章浏览阅读986次,点赞2次,收藏2次。1.硬性等待让当前线程暂停执行,应用场景:代码执行速度太快了,但是UI元素没有立马加载出来,造成两者不同步,这时候就可以让代码等待一下,再去执行找元素的动作线程休眠,强制等待 Thread.sleep(long mills)package com.example.demo;import org.junit.jupiter.api.Test;import org.openqa.selenium.By;import org.openqa.selenium.firefox.Firefox.._元素三大等待

Java软件工程师职位分析_java岗位分析-程序员宅基地

文章浏览阅读3k次,点赞4次,收藏14次。Java软件工程师职位分析_java岗位分析

Java:Unreachable code的解决方法_java unreachable code-程序员宅基地

文章浏览阅读2k次。Java:Unreachable code的解决方法_java unreachable code

标签data-*自定义属性值和根据data属性值查找对应标签_如何根据data-*属性获取对应的标签对象-程序员宅基地

文章浏览阅读1w次。1、html中设置标签data-*的值 标题 11111 222222、点击获取当前标签的data-url的值$('dd').on('click', function() { var urlVal = $(this).data('ur_如何根据data-*属性获取对应的标签对象

推荐文章

热门文章

相关标签