毕业设计(论文)-小车无人驾驶系统设计--软件设计_第1页
毕业设计(论文)-小车无人驾驶系统设计--软件设计_第2页
毕业设计(论文)-小车无人驾驶系统设计--软件设计_第3页
毕业设计(论文)-小车无人驾驶系统设计--软件设计_第4页
毕业设计(论文)-小车无人驾驶系统设计--软件设计_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 论文编号: 华南师范大学增城学院本科毕业论文(设计)全套设计加扣 3346389411或3012250582题 目: 小车无人驾驶系统设计 软件设计 姓 名:学 号:系 别:计算机系专业班级:电子信息科学与技术 12应电 指导教师:2016年3月30日学位论文原创性声明本人郑重声明:所呈交的学位论文,是本人在导师的指导下,独立进行研究工作所取得的成果。除文中已经注明引用的内容外,本论文不含任何其他个人或集体已经发表或撰写过的作品或成果。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。本声明的法律结果由本人承担。论文作者签名: 年 月 日学位论文版权使用授权书本学位论文作者完全

2、了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权华南师范大学增城学院可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。本学位论文属于1、保密,在_年解密后适用本授权书。2、不保密。(请在以上相应方框内打“”)作者签名: 年 月 日指导老师签名: 年 月 日小车无人驾驶研究与设计摘要 安全、节能、环保、智能化和信息化的汽车越来越受人们的喜爱。无人驾驶的智能汽车将是新世纪汽车技术飞跃发展的重要标志,无人驾驶车提高了车辆的控制与驾驶水平,保障车辆行驶的安全畅通

3、、高效。结构化道路上的车道线识别是智能辅助驾驶系统的重要组成部分,可以辅助智能汽车理解道路环境,最终实现路径规划和车体的控制。本文研究了摄像头无人驾驶小车的寻迹以及具体的实现。介绍可用于图像处理与机器视觉编程的强大类库OpenCV和跨平台图形界面应用工具Qt Creator以及它们的移植操作。系统硬件是使用三星公司S5PV210处理器为控制数据处理的核心,其他功能模块为辅,包括:摄像头驱动模块、小车控制模块、电源管理模块;重点分析了道路预处理过程的小波滤波算法和大律法二值化算法以及基于霍尔夫变换的直线检测算法。经多次实验证明,该系统能够在复杂的道路上实现车道线的识别。 关键词:S5PV210;

4、摄像头驱动;Opencv;霍夫变换;Canny轮廓检测;大律法;二值化;Abstract Safety, energy conservation, environmental protection, information technology and intelligent cars become increasingly popular. Driverless smart cars will be an important symbol of the new century, the rapid development of automotive technology, intellige

5、nt car control and improving the standard of driving the vehicle, the vehicle guarantee safe and smooth and efficient. Lane Recognition structured on the road is the intelligent driver assistance system is an important part of the Smart car may aid understanding of the road environment, and ultimate

6、ly the path planning and control of the vehicle body.This paper studies the driverless car camera tracking and the specific implementation. Ope nCV powerful class library, and cross-platform GUI application tool can be used to introduce image processing and machine vision programming Qt Creator and

7、transplant operations. Mainly using S5PV210 processor to control the data processing core, supplemented by other functional modules, comprising: a camera driver module, the car control module, power management module; focuses on the way the pretreatment process and binarization algorithms and linear

8、 detection algorithm. After several experiments show that the algorithm can achieve the identification of the lane lines on the road complex. Keywords:S5PV210;CameraDriver;Opencv;Hough;Canny;Otsu;Threshold;目录摘要IAbstractII1. 绪 论11.1 引言11.2 无人驾驶系统国内外的研究现状21.3 论文主要内容及各章安排21.3.1 主要研究内容21.3.2 各章安排32. 工具的

9、介绍与相关数据结构42.1 OpenCV42.1.1 OpenCV介绍42.1.2 OpenCV相关数据结构52.2 Qt Creator62.2.1 Qt Creator介绍62.2.2 Qt Creator 相关数据结构73. 车道线识别技术的研究83.1 无人驾驶小车整体设计概述83.2 小波滤波增强技术93.3 Otus自适应二值化技术113.4 Canny边缘检测133.5 hough变换车道线检测144. 小车控制技术的研究164.1 io驱动的实现164.2 小车控制设计185. 系统软件测试185.1 单元测试185.2 结合测试195.3 调试报告196. 总结与展望19参考

10、文献21致谢22附录23 III1. 绪 论1.1 引言随着城市化进程的不断推进和汽车的不断普及,交通拥挤日益加剧,人为造成的交通事故频繁发生,交通问题已成为人类社会亟待解决的重大问题。根据欧洲国家公布的交通事故发生导因中有1/3的交通事故是由于车辆变道或者车辆偏离其正常行驶车道区域所导致,美国联邦公路局的报告中有如下所述:如果可以获得车辆与车道之间的相对位置信息,可以防止53%左右的车道偏离事故的发生,而针对路面标线检测的研究是实现车道偏离警告系统的关键技术,对实现车辆的无人驾驶具有深远的意义。无人驾驶车辆,也被称为轮式移动机器人是一种能够感测环境,通过传感器获取信息,有在运动障碍的环境中实

11、现自目标导向,实现一定作业功能的智能系统。无人驾驶系统是集信息处理,图像处理、检测和转换,人工智能,智能控制等技术的智能系统,跨机械,自动化,计算机,电子等学科的整体研究的。无人驾驶汽车技术,广泛应用于军事,工业,农业,公共交通和高速公路等领域。尤其是在军事领域的潜力,吸引了各国军界的高度关注。无人驾驶车依靠自身和外部环境相结合能够实现自动驾驶,完成特定的任务,因此,无人驾驶系统配置,对外部环境的获取识别是系统的核心部分。如何能够使无人驾驶车能够快速稳定地对外部环境信息的感知、采集并处理是无人驾驶车成功与否的关键,也是无人驾驶车研究中的重点。基于视觉的无人驾驶技术相对于采用雷达、超声波、激光、

12、红外线等的数字图匹配和测距技术具有以下特点: (1) 图像的信息含量极为丰富; (2) 无需对现有道路进行大规模的改造或破坏路面; (3) 信息获取面积大,可进行多车道检测,能够同时实现道路检测和障碍物识别;(4) 系统成本低,能提供实时录像,供以后使用; (5) 缺点在于图像处理的数据量过大且受光照、天气等影响较大。 如果在图像算法上取得突破,将大大提高系统运行效率,同时可以提高道路信息检测的正确率。而计算机图像处理与信号处理的发展,使得这一方向成为了可能。因此,使用图像来获取道路信息是一个很有潜力的研究方向。对于应用于结构化道路环境的无人驾驶车来说,对道路信息的提取主要是对车道线的提取。通

13、过对车道线的检测,获得车道信息,无人驾驶车通过此信息进行控制车辆的运动。同时,对应用于无人驾驶车辆的视觉系统也提出了实时性、实用性、鲁棒性的要求。实时性是指驾驶系统的数据处理必须与车辆的高速行驶同步进行;实用性是指无人驾驶车在体积与成本等方面能够为普通汽车用户所接受;鲁棒性是指无人驾驶车对不同的道路环境(如普通公路、市区标准公路、高速公路等)、车道线状况(如路面及车道线的颜色、纹理、宽度、动态随机障碍与车流等),天气情况(如日照及景物阴影、阴天与雨雪黄昏与夜晚、等)均具有一定的处理能力。1.2 无人驾驶系统国内外的研究现状汽车诞生就是为了人们生活带来便利,随着技术发展汽车一直朝着安全、舒适和轻

14、松的方向发展,无人驾驶技术出现正好顺应了汽车发展的潮流。无人驾驶可以解放驾驶者的双手,让开车成为一件轻松的事情。无人驾驶汽车从根本上改变了传统的“人车路”闭环控制方式,将不可控的驾驶员从该闭环系统中请出去,从而大大提高了交通系统的效率和安全性。现代无人驾驶汽车以汽车工业为基础,以高科技为依托,遵循由少到多、由低到高、由单方面到多方面、螺旋上升的规律发展。其纵向发展的生命力在于持续不断的技术创新,而其横向发展离不开各种用途的实际需要。从二十世纪的50年代起,美英德等西方国家已经开始了无人驾驶汽车的研究工作,并且在无人车的控制和商用化方面取得了一定的进展。在汽车工业非常发达的德国,各大汽车公司都资

15、助或联合了高等院校以开发可在普通道路上行驶的无人车。目前,欧盟已经开启了一个名为CyberCars的无人车项目,以推动无人车的研究和各国间的信息共享。国内的无人驾驶技术始于上世纪八十年代,较晚于国外,但中国无人驾驶技术与其相比差距并不算大。现在国内设计的无人驾驶小车不但可通过激光雷达检测并避开障碍物,还可通过相机获取路面车道线的图像,通过计算机运算,找准路面的“中线”保持平衡。目前从事这方面研究工作的主要是国防科技大学、军事交通学院以及清华大学等科研院所。在物联网、智能化技术高速发展的今天,未来汽车产品的智能化趋势势不可挡,无人驾驶小车它可以带来意想不到的效益,同时也会为企业的飞速发展提供无限

16、潜力。国内车企研发纷纷提速,无人驾驶技术成为重要的研发目标。目前,无人驾驶技术引起了很多厂商的兴趣,经过多年研发,随着技术发展,也是小有成绩。起码现在的无人驾驶汽车已经能够应付简单的路况,达到一个较高的自动化的程度。但是要实现真正的无人驾驶,还需要解决很多的问题。相信随着技术上的不断突破,无人驾驶会离我们越来越近。本文所研究的摄像头无人驾驶小车是一个良好的试验模型,为无人驾驶车、自动导向车提供了很好的平台。1.3 论文主要内容及各章安排1.3.1 主要研究内容现在汽车辅助驾驶系统(ADAS)的发展趋势有两大趋势,分别是:趋势1:从预警系统到干预系统都发生了一些变化。ADAS目前主要职责是在危急

17、情况下提醒司机,比如盲点检测系统。系统未来将会向干预系统发展,即在限定的情况下对汽车进行控制。比如摄像系统将会从车道偏离预警系统向车道控制系统发展。趋势2:将主动安全与被动安全系统结合起来。目前,碰撞中的被动安全系统与主动安全ADAS是相互独立的,比如安全气囊和预缩式安全带。它们之间没有相互的联系,比如在机载激光雷达、雷达或视频传感器监测到不可避免的碰撞时就让安全气囊做好准备。目前机载激光雷达传感器用于主动式巡航控制系统,能够在正常驾驶状态下为司机提供支持。未来,这些传感器将会与短程雷达(24GHz)和摄像机相结合,以便为安全气囊和预缩式安全带提供相应的准备信息。本论文是基于趋势1而研究的,本

18、文以白色底为背景黑色条为跑道边界的跑道为研究对象,针对无人驾驶小车在跑道结构化道路上车道线识别与小车控制进行了研究与实验。本文主要完成了以下工作: (1)介绍了可用于图像处理与计算机视觉编程的强大类库OpenCV,对其应用于无人驾驶小车车道线识别问题的主要数据结构进行了说明,并充分考虑了在复杂道路的影响,给出了基于OpenCV的车道线识别算法,以及介绍了跨平台图形界面应用工具Qt Creator的简单介绍还对OpenCV与Qt Creator工具移植操作进行描述。经多次实验证明,该算法充分发挥了OpenCV 强大的函数库功能,提高了车道线识别的效率与准确度。 (2)本文提出了一种基于Otsu技

19、术的自适应阀值二值化处理算法。以及基于Canny算子算法的边缘检测算法结合Hough变换直线检测的车道线识别系统。通过这三个算法的结合,实现了实时、准确、充分的道路识别与环境信息的理解,经过无人驾驶车移动车长时间、长距离的视觉导航实验证明,本论文提出的道路识别算法完全能够满足智能汽车视觉导航的要求。 (3) 提出了在车道线检测调试中出现的主要问题,以及解决方法;最后是小车控制算法的设计,本论文使用了QT的定时器定时采样,定时控制;1.3.2 各章安排第1章 是绪论,主要分析了无人驾驶国内外的研究现状,和比较了图像处理相对其他传感器获取的数据的优越性和处理的难点,以及对无人驾驶系统提出的要求和相

20、关技术的分析;第2章 是在研究中使用到的开发环境与开发工具的简单介绍和相关数据结构与函数的介绍。第3章 是本论文的核心,主要介绍了系统软件编写流程和相关算法的介绍与实现,并且给出了其实现的图。第4章 是小车的控制实现阶段,在此章中主要介绍的是小车io驱动的实现过程和小车的控制方法。第5章 是系统的软件测试阶段,主要是各模块的测试,以及模块组合和整体的测试。第6章 是总结全文的讨论与研究内容并对后续研究内容做的展望。2. 工具的介绍与相关数据结构2.1 OpenCV2.1.1 OpenCV介绍OpenCV的全称是:Open Source Computer Vision Library,是Inte

21、l公司支持的开源跨平台计算机视觉库,可以运行在Linux、Windows和Mac OS操作系统上的计算机视觉库。它高效,运行速度快,由图形处理一系列C函数和少量C +类构成,而且还提供了MATLAB,Python,Ruby和其它语言的接口,实现了图像处理和计算机很多通用算法 视力。主要应用领域载人互动,图像分割,物体识别,手势识别,人脸识别,机器人,运动跟踪;在汽车领域应用广泛有车牌识别、车道偏离警告LDW、车辆检测VD、前车碰撞警告FCW、行人检测PED、泊车辅助PA等;OpenCV的致力于实时应用在现实世界中,通过写在其执行速度优化的C代码带来了相当大的改进,并且可以通过购买通过购买Int

22、el的IPP高性能多媒体函数库(Integrated Performance Primitives)获得更快的处理速度。下图2.1为OpenCV与当前其他主流视觉函数库的性能比较:图2.1 Opencv与其他主流视觉库比较OpenCV 为Intel Integrated Performance Primitives (IPP) 提供了透明接口。如果有特定处理器优化的IPP 库,OpenCV会在运行时自动加载这些库提高速率。OpenCV提供非常丰富的视觉处理算法,它是使用C语言编写的,是开源的,处理得当,不需要添加新的外部支持,也可以完整的编译链接生成程序,所以许多开发者使用它来做图像处理算法的

23、移植,经过适当改写OpenCV的代码可以正常运行在单片机系统和DSP系统中,目前这种移植在大学中经常作为相关专业本科生毕业设计或者研究生课题的选题。下图为OpenCV的Logo图2.2 Opencv Logo2.1.2 OpenCV相关数据结构(1) 创建窗口int cvNamedWindow( const char* name, int flags=CV_WINDOW_AUTOSIZE );(2)建立一张图像cvLoadImage(const char * filename,int flags=CV_LOAD_IMAGE_COLOR);(3)创建首地址并分配存储空间cvCreateImage

24、Header(CvSize size,int depth,int channels); (4)创建一个内存存储器CvMemStorage *storage=cvCreateMemStorage(block_size);(5)色彩空间转换,灰度图像void cvCvtColor( const CvArr* src, CvArr* dst, int code )(6)单通道数组应用固定阈值操作,二值化或去噪声void cvThreshold( const CvArr* src,CvArr* dst,double threshold, double max_value,int threshold_t

25、ype );(7)轮廓检测void cvCanny( const CvArr* image,CvArr* edges,double threshold1,double threshold2, int aperture_size=3 );(8)返回索引指定的元素指针(9)释放IplImage 指针void cvReleaseImage( IplImage* image ); (10)销毁指定窗口void cvDestroyWindow(char * name);(11)销毁已打开的全部窗口void cvDestroyAllWindows(void);(12)从摄像头的视频流分配和初始化CvCap

26、ture结构CvCapture* cvCreateCameraCapture( int index );(13)从摄像头或者文件中抓取并返回一帧数据IplImage* cvQueryFrame( CvCapture* capture );(14)保存一张图片int cvSaveImage( const char* filename, const CvArr* image );(15)设置视频获取属性int cvSetCaptureProperty( CvCapture* capture, int property_id, double value );(16)通过对角线上的两个顶点绘制简单、指

27、定粗细或者带填充的矩形void cvRectangle( CvArr* img, CvPoint pt1, CvPoint pt2, CvScalar color,int thickness=1, int line_type=8,int shift=0 ;CvSize min_size=cvSize(0,0);CvSize max=cvSize(0,0);(17) 复制图片void cvCopy( const CvArr* src, CvArr* dst, const CvArr* mask=NULL );(18)直接访问序列中的元素Char* cvGetSeqElem(seq,index);

28、(19) 绘制连接两个点的线段void cvLine( CvArr* img, CvPoint pt1, CvPoint pt2, CvScalar color, int thickness=1, int line_type=8, int shift=0 );(20) 直线检测*CvSeq* cvHonghLines2(CvArr* image,void* line_storage,int mehtod,double rho,double theta,int threshold,double param1 =0,double param2 =0);(21)CvPoint int x,y 图像中

29、的点CvSize int width,height 图像的尺寸CvRect int x,y,width,height 图像的部分区域CvScalar double val4 RGBA 值2.2 Qt Creator2.2.1 Qt Creator介绍QT是一个跨平台的C+ GUI应用程序构架,它提供了一套丰富的窗口部件集,具有易于扩展、面向对象、真正的组件编程等特点,更加引人注目的是目前Linux上最为流行的KDE桌面环境就是建立在QT库的基础之上。QT支持下列平台:UNIX/X11-Linux、Unix、MS/WINDOWS-95、98、SGI IRIX、NT和2000、Sun Solari

30、s、HP-UX、Digital IBM AIX、EMBEDDED-支持framebuffer的Linux平台。且伴随着KDE的快速发展和普及,QT很可能成为Linux窗口平台上进行软件开发时的GUI首选。Qt Creator 相对当前其他主流库的有以下的优势:(1) 可快速编写代码的强大C+代码编辑器;静态代码检查和语法识别并提示样式上下文相关帮助代码折叠括号匹配和括号选择模式高级编辑功能代码完成输入。(2)使用浏览工具管理源代码;集成了领先的版本控制软件,包括Perforce、Subversion和Git开放式文件,不知道确切的名称或位置搜索在不同的位置或文件类和文件中使用的符号在头文件和源

31、文件,或在声明和定义之间切换。(3)为 Qt跨平台开发人员的需求而量身定制;集成了特定于Qt的功能,如信号与槽(Signals & Slots)图示调试器,对Qt类结构可一目了然集成了Qt Designer可视化布局和格式构建器只需单击一下就可生成和运行Qt项目。2.2.2 Qt Creator 相关数据结构(1)信号与槽信号和槽机制是Qt的核心机制,可以让编程人员将互不相关的对象绑定在一起,实现对象之间的通信。对象1声明信号(signal),对象2实现与之参数相匹配的槽(slot),通过调用connect进行连接,合适的时机对象1使用emit把信号带上参数发射出去,对象2的槽会就接收到响应。

32、槽:用来接收信号,可以被看作是普通成员函数,可直接调用。支持public,protected,private修饰,用来定义可以调用连接到此槽的范围。信号:只需要声明信号名与参数列表,就像是一个只有声明没有实现的成员函数。连接:通过调用connect()函数建立连接,会把连接信息保存在sender对象中;调用desconnect()函数来取消。信号发射:emit testsignal(“test”); 图2.3为信号与槽的一个编写规范;图2.3 qt信号与槽(2)QT Creator 定时器Qtimer定时器类QTimer提供当定时器触发的时候发射一个信号的定时器和只触发一次的超时事件,通常的使

33、用方法如下:创建定时器:QTimer *testTimer = newQTimer(this);将定时器超时信号与槽(功能函数)联系起来:connect( testTimer,SIGNAL(timeout(), this, SLOT(testFunction() );开始运行定时器,定时时间间隔为100ms:testTimer-start(100);停止运行定时器:if (testTimer-isActive() )testTimer-stop();它在内部使用定时器事件来提供更通用的定时器。QTimer很容易使用:创建一个QTimer,start()开始定时,把它的timeout()信号连接

34、到适当的槽。当时间到时它将会发射timeout()信号。注意当父对象被销毁时QTimer也会被自动销毁。作为一个特殊的情况下,一旦所有事件的窗口系统事件队列已被处理,一个定时为0的QTimer就会到时间了。注意QTimer的精确度依赖于底层的硬件和操作系统上。大多数平台支持20毫秒的精确度。如果Qt不能传送定时器触发所要求的数量,它会丢弃一些。3. 车道线识别技术的研究3.1 无人驾驶小车整体设计概述本文研究的无人驾驶车系统要求能够在封闭的跑道上自主寻线运行,跑道表面为白色,以两条黑线作为跑到车道线,车载装有一条黑线用来定位。作为能够识别道路状况、自动决策运行的无人车可以看成一个自动控制系统。

35、该设计主要分为摄像头采集模块、跑道分析模块,小车控制模块,电源管理模块。图1.1系统模型框图。图3.1 系统模型框图首先,对摄像头进行选取,由于对车体的控制方法都是基于对赛道黑线的准确提取与判断上的,所以对外界信息采集的唯一入口的摄像头传感器选择就显得尤为重要。本次实验所选用的摄像头为CCD摄像头相比较而言,CMOS 数字摄像头硬件电路相对简单,工作电压低,电流小,功耗小,工作稳定。但是在动态图像的现实中不如 CCD 摄像头清晰,而且噪音比较大,灵敏度低。小车在高速运动情况下,不仅有小车沿赛道延伸方向的速度,还有位置校正带来的横向摆动,这样一来,黑线在曝光时间内不稳定,产生了图像不实。在这一点

36、 CCD 摄像头有更大的优势,它噪音小,灵敏度高,信噪比大,所以我们选择CCD摄像头,以适应小车高速运动的情况。摄像头获取的数据是在ARM处理器上进行处理,编写基于V4L的摄像头驱动。其次是如何通过摄像头获取的图片来分析跑道的情况了;因摄像头获取的图片是彩色的,需要对图片进行二值化数据处理以及对跑道轮廓进行检测与车道线的检测;该设计选取OpenCV库对图片数据进行处理;再次是小车驱动控制模块,小车需要稳定的电流,S5PV210处理器进行数据获取和处理会影响到电流的输出,该设计把小车电源和处理器电源分开处理。在linux系统对小车控制IO,进行GPIO驱动编程最后就是把设计连接起来,定制摄像头无

37、人驾驶小车uboot、kernel以及rootfs。这样一来,各种模块基本设想也初步完成了。我们需要从空间的角度进行多元化的分析与实践,才能更加准确地运用其中,在实验中尽量减少其中误差,增强其功率性。这几个点也是在进行设计之前我们应该考虑到的因素之一。下面给出的是无人驾驶系统软件编写的总体流程图;图3.2 无人驾驶小车应用程序编写流程图3.2 小波滤波增强技术图像信息以其信息量大、作用距离远、传输速度快等优点成为人类获取信息的重要来源和利用信息的重要手段,但是图像在获取和传输过程中由于所使用的传输通道和器件的局限性,被加入了大量的噪声,严重的影响了图像的质量,甚至妨碍了人们正常识别。因此,消除

38、图像噪声是图像处理的一项重要任务。本文研究的是图像小波域滤波技术能够很好的消除噪声和压缩图片检测数据量。小波分析是当前应用工程学科和数学中一个迅速发展的新领域,经过近30年的探索研究,重要的数学形式化体系已经建立,理论基础更加扎实且在工程中的应用十分广泛。小波分析是在傅立叶分析的基础中发展起来的,但是它在时频局部化上又比傅立叶变换有优势。它能够同时在时域和频域上做局部变换,因而能够有效地从信号中提取有用信息,是各种信号处理方法(如时频分析、多分辨率分析和子代编码)的统一处理框架,它解决了傅立叶变换不能解决地许多难题,所以小波变换也被称为“数学显微镜”。它在信号分析、数据压缩、计算机视觉、图像识

39、别、语音合成、大气与海洋波分析、地震勘探等方面的研究都取得了有科学意义和应用价值的成果。在图像处理方面主要应用于图像的压缩、分类、识别、去噪、增强。小波变换(wavelet transform,WT)是一种新的变换分析方法,它继承和发展了短时傅立叶变换局部化的思想,同时又克服了窗口大小不随频率变化等缺点,能提供一个随频率改变的“时间-频率”窗口,是进行信号时频分析和处理的理想工具。它的主要特点是通过变换能够充分突出问题某些方面的特征,能对时间(空间)频率的局部化分析,通过伸缩平移运算对信号逐步进行多分辨率的细化,最终达到低频处频率细分,高频处时间细分,能自动适应时频信号分析的要求,从而可聚焦到

40、信号的任意细节,解决了傅立叶变换的困难问题,成为了继傅立叶变换以来在科学方法上的重大突破。小波分析是将信号分解成一系列小波函数的叠加;小波函数由一个母小波函数经过平移伸缩得来的(幅度一样);用不规则的小波函数来逼近尖锐变化的信号显然比傅立叶变换光滑的正弦曲线要好,连续小波变换(CWT): :需要处理的信号:被缩放和平移的小波函数,会变化:小波系数,缩放因子越小,小波越窄;代表小波和这段数据的相关性,越大越相似小波变换的步骤:1、 取一个小波与信号的最前面部分比较;2、 计算小波系数,C小波和这段数据的相关性,越大越相似;3、 移动小波,重复步骤一和步骤二,一直遍历整个数据4、 对小波进行缩放,

41、重复一到三5、 在所有小波尺度下重复上诉步骤(只选择部分尺寸(缩放因子与平移因子进行计算;))离散小波变换(双尺寸小波变换):只选择部分尺寸(缩放因子与平移因子都选择的倍数)减少数据量;本文主要使用的基本小波是双交小波 使用小波变换去噪增强的效果如下图;图3.3 小波变换效果3.3 Otus自适应二值化技术 大津法,简称,由日本学者大津于1979年提出的一种自适应的阈值确定的方法。它基于图像的灰度特性把图像分为背景和目标。背景和目标之间的类间方差越大,说明形成图像的两部分的差别越大,当部分背景错分为目标或部分目标错分为背景都会导致两部分的差别变小。因此,要使目标与背景分割效果好就要使类间方差最

42、大。对于图像,设目标和背景的分割阈值为,目标像素点占图像的比例记为,平均灰度为;背景像素点占图像的比例为,平均灰度为。图像总平均灰度为,类间方差为。假设图像背景较暗,且图像的大小为,图像的灰度值小于阈值的像素个数为,灰度值大于阈值的像素个数为,则有: 采用遍历的方法得到使类间方差最大的阈值T,即为所求。Otsu算法步骤如下: 设图象包含L个灰度级(0,1,L-1),灰度值为i的的象素点数为Ni ,则图象总象素为N=N0+N1+.+N(L-1)。灰度值为i的概率为:阀值t将整幅图象划分为亮区c2和暗区c1,而类间方差是t的函数:上式中,为类的面积与图象总面积之比,为类的均值,该法选择了最佳阀限

43、使类间方差最大,即令:下图为采用otsu算法进行二值化的效果图与原图的对比图;图3.4 otsu二值化效果3.4 Canny边缘检测图像边缘是指图像局部区域的亮度变换最快的部分,该区域的灰度剖面一般可以看作是一个阶跃:既从一个灰度值相差较小的缓冲区域内快速变化到另一个灰度相差较大的灰度值。图象的边缘集中了图象的大部分信息,所以对图象边缘的检测与提取对图象目标的识别与理解是很重要的,同时也是图象分割所依赖的重要特征。边缘检测主要是指对图象灰度变化的度量、检测和定位,自从1959提出边缘检测以来,经过五十多年的发展,已有许多中不同的边缘检测方法。Canny 边缘检测算法 是 John F. Can

44、ny 于 1986年开发出来的一个多级边缘检测算法,也被很多人认为是边缘检测的最优算法。 HoJohn Canny提出了评价边缘检测性能优劣的三个指标:1、好的信噪比,即将边缘点判为非边缘点的概率要低且将非边缘点判定为边缘点的概率也要低;2、高的定位性能,即检测出的边缘点要尽可能在实际边缘的中心;3、对单一边缘有唯一响应,既对虚假响应边缘能够得到最大抑制且对单个边缘得到多个检测结果的概率要低。也就是在增强对景物边缘的敏感性的同时,也要抑制噪声的边缘检测才是好的边缘提取方法。Canny算子求边缘点具体算法步骤如下:1、消除噪声。使用高斯平滑滤波器卷积降噪。下面显示了一个size = 5 的高斯内

45、核示例:2、计算梯度幅值和方向。 此处,按照Sobel滤波器的步骤:a、 运用一对卷积阵列 (分别作用于 x 和 y 方向):b、使用下列公式计算梯度幅值和方向:梯度方向近似到四个可能角度之一(一般 0, 45, 90, 135)3、非极大值抑制。这一步排除非边缘像素,仅仅保留了一些细线条(候选边缘)。4、滞后阈值: 最后一步,Canny 使用了滞后阈值,滞后阈值需要两个阈值(高阈值和低阈值):a、如果某一像素位置的幅值超过高阈值,该像素被保留为边缘像素。b、如果某一像素位置的幅值小于低阈值, 该像素被排除。c、如果某一像素位置的幅值在两个阈值之间,该像素仅仅在连接到一个高于高阈值的像素时被保

46、留。下图为canny边缘检测的效果图图3.5 canny检测效果3.5 hough变换车道线检测Hough变换是从图像中识别几何形状的基本方法之一。Hough变换的实现原理是利用点与线的对偶性,将原始图像空间的给定的曲线通过曲线表达形式变为参数空间的一个点。这就实现了把原始图像中给定曲线的检测问题转化为寻找参数空间中的峰值问题。即把检测整体特征转化为检测局部特征。比如直线、椭圆、圆、弧线等。 设在一张图像上画了一条直线,要求出这条直线所在的位置。则直线方程表达式为:其中k是斜率b是截距。过点()的所有直线的参数都满足方程=k+b。则点()确定了一族直线。既方程=b+k在k-b平面上表示为一条直

47、线。这样,图像x-y平面上的一个像素点就对应k-b平面上的一条直线。设图像上有直线为, 取直线上的三个点。可得出,过A点的直线要满足b=0, 过B点的直线要满足方程b+k=1, 过C点的直线要满足方程b+2k=2, 这三个方程对应着k-b平面上的三条直线,而这三条直线会相交于一点(k=1,b=0)。同理,原图像上直线y=x上的其它点(如(5,5),(6,6)等)对应k-b平面上的直线也会过点(b=0,k=1)。hough变换就是利用这个性质把x-y平面上的点对应到k-b平面上的线,最后通过数学统计帅选正确的线段。如果图像平面x-y上有两条直线,那么在x-y平面上就会得到两个峰值点,依此类推。简

48、而言之,Hough变换思想为:k-b坐标系的一条直线对应了x-y坐标系下的一个点,同样原始图像坐标系x-y下的一个点对应了k-b坐标系中的一条直线。x-y坐标系下是直线上所有的点,它们的斜率和截距都相同的,所以它们在k-b坐标系下相交于同一个点。那么在将x-y坐标系下的各个点投影到k-b坐标系下之后,看k-b坐标系下有没有相交点,这样的相交点就对应了x-y坐标系下的直线。在实际应用中,y=b+k*x的直线不能表示x=c形式的直线,因为这时候直线的斜率为无穷大。所以实际应用中,是采用参数方程p=x*cos(theta)+y*sin(theta)。这样就可以实现图像平面上的一个点就对应到参数p-t

49、heta平面上的一条线上。下图为画蓝色直线就是hough变换直线检测的效果图图3.6 hough变换直线检测效果从图中我们可以看到有许多直线是错误检测的,利用车道角度的特点即是车道线斜率的特点情况,根据多次实验确定车道的斜率为0.3-0.9之间,排除不符合条件的的直线,最后效果图如下:图3.7 hough变换直线检测最终效果图效果问题的提出与解决方法:我们知道对图像的影响因素有很多,比如光照、阴影、其他障碍物等,可能在此模型下会出现以下的问题:问题一:一条车道线旁可能会标出几条线;解决措施:使用角度值法去最值问题二:检测不连续解决措施:如果某一帧没有检测出符合条件的线,则使用上一帧结果代替。4

50、. 小车控制技术的研究4.1 io驱动的实现本论文所研究的无人驾驶小车所使用的处理器是三星公司的S5PV210,使用的io口是是GEC210底板的智能家居预留GPIO的KP_ROW3、KP_COL0、KP_ROW1、KP_COL2接口;其主要编写流程如下图4.2; 图4.1 GPIO接口 图4.2 驱动编写流程1、 定义并初始化杂项设备,如图4.3图4.3 杂项设备初始化2、 定义并初始化文件操作集,如图4.4图4.4 定义并初始化文件操作集3、 将杂项设备注册到内核,如图4.5图4.5 注册杂项设备4、 申请GPIO,如图4.6图4.6 申请GPIO5、 设置GPIO方向,如图4.7图4.7

51、 设置GPIO方向6、 在操作集中添加GPIO功能,如图4.8图4.7 添加GPIO功能4.2 小车控制设计本论文主要研究的是无人驾驶小车中的车道线识别技术,对小车速度、加速度等不做特殊的研究 1、在有检测到三条符合条件的线中,以三帧图片为一个单位进行小车的控制,比较车载中线与车道线之间的比例进行平均来判断小车的运动情况。运动时间为比列*5ms;其中的5ms与车载上的黑线的长度、摄像头像素和摄像头的俯摄角以及初始车体相对车道线的位置、小车的速度等有关,5ms是进行多次实验得出的一个较合理的值。2、 如果没有检测到符合条件的车载线则小车使用上一帧的结果,第二帧还是没有检测到则小车左右移动进行检测

52、校正。3、 在实验中使用不同的线程把小车的控制分离开能够准确的确定小车的运动时间和情况。4、 使用qt的信号与槽机制来来校准小车的初始位置。5. 系统软件测试5.1 单元测试单元测试主要是对每一个函数的测试,单元测试主要是针对程序代码中判断某个特定的条件下的某个函数的行为。系统中单元测试主要分为三个部分,摄像头拍照测试,图片二值化轮廓检测测试,小车驱动测试;摄像头拍照测试主要是对摄像头快速运动时进行拍照,测试是否有延时,曝光问题,是否能够正常拍照。图片二值化轮廓检测测试,主要是对不同的道路情况,直线,弯道是否能够得到相应的轮廓,得到相应的控制信号。对摄像头获取的跑道图片进行灰度处理,二值化,轮

53、廓检测,可以得到如图5.1效果图;图5.1 效果图5.2 结合测试结合测试也可以称为黑盒测试,但我们的系统进入到结合测试时,我们就必须要站在客户的角度来看待系统。也就是说,结合测试就是对整个系统的功能测试,以客户的角度来对系统的每一项功能进行测试。5.3 调试报告在获取高速公路的视频进行软件调试中,能够很好的识别车道线,说明此车道线识别系统是可行的,进行装机调试,在小车长时运动中进行实验调试,实验验证了系统的可行性,并且有良好的鲁棒性。6. 总结与展望本毕设的整个过程,历时四个月,通过每天在校图书馆查阅大量的资料,再通过一次次的调试和实验,一次一次的失败,一次又一次的尝试,最终使得这个系统才有

54、了一个比较完美的结果,在该系统的这个调试期间,我得到了很多实验室同学的帮助,在这个调试中,我学会了OpenCV图像处理库的运用,对图片,视频分析更加的熟练,学会了对Linux内核v4l2架构,以及对GPIO驱动的开发。 虽然这次我在毕业设计中遇到了很多的问题,但是因为毕业设计是我们将所学知识运用用到现实生活中去一个比较好的机会,也是对我们这大学四年学习成果的检验,所以我对它有足够的重视。从中学到了很多实用的东西,特别是对软件设计的所需要的那些过程有了更深的的认识。 其实对于该智能小车,最重要的不是最后的结果,而是在这段时间里让我学会了如何去解决问题,如何才能更好的将所学的知识运用于实际中,如何

55、建立系统模型等。建立系统模型的过程需要我们了解各个方面相关的东西,从系统的稳定性的角度出发,根据用户的需要设计出合理的产品。并不是根据我们自身的思想角度,按自己的想法去做。 在设计程序的过程中,可以通过设计比较简洁的编程思路,设计过程中程序的编写风格比较好时,整个系统编程的工作效率的两个方法就是培养良好的编程风格与习惯,同时良好的编程风格与习惯也是使软件便于维护的基础。我认为良好的编程风格与习惯最主要就是程序的模块化以及加入一些注释。程序的模块化就是使程序的功能实现分成多个单独的功能模块,而不是在同一段代码中实现系统的多个功能。同时模块化设计也可以让人容易的读懂你的程序。一些必要的注释,即是对

56、编写程序说明,可以让别人能读懂你的程序,也可以过经过一段时间之后还能让自己读懂自己编写的程序。 我通过这次毕业设计对软件的开发有了比较深的体会: 1 首先应该要有正确的态度,有耐心毅力,遇到问题是能够静下心。 2 要经常和别人进行交流,同时也要充分利用现有的资源。3 多查找一下相关的资料,尽可能多的掌握设计用到的知识。 参考文献 1 高雷阜,柴岩. 概率论与数理统计M. 北京: 高等教育出版社, 2009.02. 2(美)布拉德斯基(Bradski,G.),(美)克勒(Kaehler,A.) 著,于仕 琪, 刘瑞祯 译 学习OpenCV(中文版) M. 北京:清华大学出版社,2009.3 杜春

57、雷.ARM体系结构与编程M. 北京:清华大学出版社,2003.2. 4 沈保锁. 现代通信原理M.北京:国防工业出版社,2012.7.5(美)桑卡著. 图像处理、分析与机器视觉(第3版)M.艾海舟等译.北京: 清华大学出版社,2011.1.6 曾星星. 基于摄像头的路径识别智能车控制系统设计J. 湖北汽车工业学 院学报, 2008(6): P76-80.7 刘彬彬,孙秀梅,李鑫. C语言编程之道M. 北京:人民邮电出版社出版2011.8 张延华,刘鹏宇. 信号与系统M. 北京:机械工业出版社,2015.5. 致谢感谢我的指导老师文哲雄老师,您耐心地指出了文章的错误和论点的不足之处,细心地指导我

58、修改全文,这篇论文的每个细节都离不开你的指导。正是因为有你的教导与思路,才能让我顺利完成这篇论文。同时我还要感谢杨远超同学在此设计中对我的热心帮助。从开始进入课题到论文的顺利完成,都是因为有计算机应电班同学、朋友陪伴在我身边,在我需要帮忙的时候给予我最真诚的帮助,在这里请接受我最真诚的谢意!最后,我还要感谢我的父母,正因为有他们在我背后默默地支持我,我才能够享受着美好的校园生活,并且正因为有他们的教导,才让我有迎接困难战胜困难的信心和力量,我相信他们会为我的成绩而感到骄傲。 2016 年 3月 30 日附录 摄像头驱动Makefile文件:/长延时 ifneq ($(KERNELRELEASE

59、),)obj-m += ov9650.oelse#KERNEL_DIR = /home/linux-KERNEL_DIR = /home/gec/kernel/linux-gec-v3.0modules:$(MAKE) -C $(KERNEL_DIR) M=$(shell pwd) modules#cp ov9650.ko /tftpbootendifclean:rm -f *.o *.ko *Module* *sys*rm -f gec_iic_ts.koarm:arm-linux-gcc -o iic_ts ts_test.c#cp iic_ts /tftpboot应用程序Makefile

60、文件:TARGET=queueCC=g+CC1=arm-linux-g+SRCS=video.cppOBJS=$(patsubst %.cpp, %.o, $(SRCS)#SRCS=$(wildcard *.cpp)#OBJS=$(patsubst %.cpp, %, $(SRCS)LIB=-L/usr/localback/lib/ -lopencv_core -lopencv_highgui -lopencv_imgproc -lpthread -lrtINCLUDE=-I/usr/localback/include/opencv/ADD=-Wno-psabi video:$(SRCS)$(CC)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论