飞思卡尔智能车摄像头组黑线提取
- 格式:docx
- 大小:16.12 KB
- 文档页数:6
图像处理算法总结一、简介根据第九届全国大学生“飞思卡尔”杯智能车竞赛要求,针对摄像头平衡组的车模要求,我们小组需要自主设计一辆两轮平衡直立的由摄像头自主识别路径并以较快速度行进的智能小车。
其中图像数据的处理是摄像头组能否取得好成绩的关键。
我们这次使用的是野火鹰眼ov7725硬件二值化摄像头(如图1所示),基于飞思卡尔K60单片机控制,并通过IAR6.3编译,编译界面如图2所示。
图1.鹰眼摄像头图2.iar编译界面二、设计要求对鹰眼摄像头采集回来的一副二值化的图像数据进行解压,图像处理,求出赛道中线和车体中心线的偏差,通过PID调节,将转向控制量返回,从而实现转向控制。
其中图像处理包括:黑线提取,赛道类型判断,计算转向偏差。
三、算法设计3.1 黑线提取我们采用的是跟踪边缘检测算法。
由于黑色的目标引导线是连续曲线,所以相邻两行的左右边缘点比较靠近。
跟踪边缘检测正是利用了这一特性,对直接边缘检测进行了简化。
其思路是:若已寻找到某行的左边缘,则下一次就在上一个左边缘附近进行搜寻。
这种方法的特点是始终跟踪每行左边缘的附近,去寻找下一列的左边缘,所以称为“跟踪”边缘检测算法。
该算法的优点:在首行边缘检测正确的前提下,该算法具有较强的抗干扰性,能更有效地消除垂直交叉黑色引导线的干扰,以及引导线外黑色图像的影响,始终跟踪目标引导线。
另外,与直接边缘检测法比较,跟踪边缘检测算法的时间复杂度更低,因此效率更高。
且通过多次试验,中心线提取基本没有出现大的问题。
如图3,为一次拍摄的赛道图像,经图像处理后将计算的中线显示在上位机上,图33.2赛道类型判断影响赛车速度成绩的一个重要因素就是对弯道和直道的提前识别判断,从而实现安全过弯,快速过直道、S弯道,以提高比赛成绩。
我们通过小液晶模块,或者摄像头上位机将拍回来的赛道图像反复仔细地对比查看,提取出相关的特征作为判断条件,从而完成赛道类型的判断。
另外,由于智能车上安装的摄像头相对于赛道存在一定的倾斜角度,因此会造成采集到的赛道图像具有一定的梯形失真,即图像中的赛道远端窄、近端宽,因而也会对路径的正确识别产生影响。
飞思卡尔智能车摄像头组新⼿指南(5)--让车跑起来篇舵机、电机控制策略让车跑起来彭岸辉控制器设置了快速的控制周期,在每个运算周期内,控制器即时地得到智能车车速以及传感器采样来的道路信号,经过控制算法的计算后,控制单元输出相应的前轮控制转⾓以及电机占空⽐的值,其输出值再经过函数映射关系转换为 PWM 脉宽信号传⾄前轮舵机以及驱动电机,从⽽实现⼀个周期的控制。
由于摄像头的信号是具有周期性的,可以直接采⽤摄像头采集⼀幅图像的周期作为控制周期。
舵机控制采⽤ PD 控制,控制跟随性较好,P可以及时对赛道的变化作出反应,当然舵机的 P 项值也是跟随赛道情况变化的,直道和较⼩的弯道时控制较弱,90 度弯道或 270 度⼤弯道控制量较强,D有预测道路类型的作⽤,也就是能使舵机提前打⾓。
电机控制采⽤ PID 控制,可以减⼩动态误差并且跟随性能较好。
当然也可以使⽤其他控制,很多⼈舵机采⽤P控制,电机采⽤PD或PI控制。
对⽐他们的优缺点⾃⼰选择适合⾃⼰⼩车的PID。
这⾥不进⾏深⼊讲解。
前⾯的⼯作完成后懂得基本的图像处理算法就差不多可以使⼩车跑起来了!要使⼩车跑起来其实不难的,很多初学者最希望的就是看⾃⼰的车跑起来,因为当初我也是这样的,很理解师弟师妹们此刻的想法!最基本的图像处理算法就是:图像中间往两边搜索⿊线注意:初学者在初学时不知道偏差是怎样计算的。
这⾥就提⼀下:偏差就是计算出的中线即图中赛道中的⿊线与摄像头所看到的中线即图中赛道中的竖直红线(例如采集到的图像是100列的,那么摄像头看到的中线就是50)做差得到的值就是偏差。
它表⽰车当前位置与期望位置的偏离程度。
再看个图吧:⽤两⾏来说明,其他的⼀样。
第⼀⾏左边坐标(0,1)右边坐标(0,99),得出的中线就是(0,50),那么50所在的那⼀列就是摄像头所看到的中线(就是图中竖直的红线)。
这⾥再提⼀下,很多⼈提出中线后发现上位机上或LCD上没显⽰出中线,其实显⽰出中线很简单的:根据RGB,⼀个像素点的像素值为255时显⽰出来的是⽩⾊,像素值为0时显⽰出来的是⿊⾊。
飞思卡尔智能车摄像头边线、黑线提取方法分析
下面看一下CCD的信号提取
这是摄像头提取到的信号,如此看来是可以用阈值取线的方法的
然而实际的情况是很糟糕的比如这样
等等,这样的请款都是阈值所不能解决的,但上面的图线的一个显著特点就是有一个很夸张的边缘,这是一个明显的不能再明显的信息
如图所示
蓝色是图线,红色是微分,如此看来特征是很夸张的,我们可以很好的加以利用了
如果我们在微分一下特征会不会更明显呢?
蓝色是原图想,红色是微分,黄色是微分后再微分,如此看来,再微分已经没有什么明显的效果了,还是一次微分比较的好,
现在理一下思路,
第一步取图像
第二步微分
第三步求绝对值
第四步把一些小的值去掉
对于这样的东西我们就很很很容易处理了
但是我们还要注意这样的情况
即便是去掉了一些很小的信号但是还有一些稍大一点的信号这是值得关注的事情
注意:如果是线性ccd的话灰度值的平均水平有时会很低,为了好看可以采用软件放大的做法,个人认为加运放的效果不好,软件放大还可以加入一些智能的判断和操作,12位的AD转换进度完全够用,图像处理其实八位就完全够用啦。
基于黑白摄像头的智能小车路径识别系统设计The Design of Intelligent V eh icle Path Recognition Based on M onochro m e Camera吴吟箫* 张 虹 王新生W U Y i n -x i ao Z H AN G H ong WANG X in -sheng do:i 10.3969/.j issn .1672-9528.2009.02.015摘 要路径识别是汽车智能化发展的必然趋势。
在基于飞思卡尔单片机的智能车路径识别系统的设计中,首先采用基于黑白摄像头的图像采样模块获取路径图像信息;然后分别说明图像采集,图像预处理,黑线提取,路径判断部分的软件设计。
其中,在图像预处理中使用了二值化和中值滤波算法,并且在黑线提取中提出了改进插值算法。
实验表明,整个系统硬件设计简单,软件算法快速有效。
关键词路径识别 中值滤波 寻线算法Abstract Inte lli gentize of vehic l e is a trend o f cars develop m ent in the future .P ath recogn ition i s one o fthe appli cation d i rections .Th is pa t h recogn iti on syste m of i ntelli g ent car uses i m age -sensor m odu l e based on ca m era to obta i n lane i m age i n f o r m ati on .The who le syste m i s d i v i ded into f our parts :i m age acqu i s ition ,i m age pre-pro cessi ng ,abstracting t he black li ne ,and road detec tion .The i m age pre-pro cessi ng part uses the b i nary zation and t he m ed ian filter i ng to i m prove the i m age i n f o r m ati on .Then by us i ng the i m proved a l go rith m,the resu lt of abstracting t he black li ne becomes m ore prec i se .The ulti m ate a i m of the w ho le syste m i s to accurate l y abstract the b l ack gu i de li nes fro m the wh ite race w ay ,f o ll ow i ng the road pa ra m e ters and conditi ons i n front ,m aki ng the car m ove prope rly .K ey word s R oad detecti on M ed i an filteri ng L i ne-tracking*哈尔滨工业大学(威海)信息科学与工程学院 264209基金项目:山东省自然科学基金(Y 2007G 20)1 引言智能化技术与汽车相结合产生的智能汽车将在未来工业生产和日常生活中扮演重要的角色,而路径识别则正是体现智能车智能水平的一个重要标志。
基于摄像头的智能车黑色虚线识别算法研究程鸿芳;钱峰;李敏【摘要】针对“飞思卡尔”智能车竞赛的赛道由虚线组成的特点,提出一种提取智能车黑色虚线识别算法.该算法将是在改进的边缘检测算法和左边跟踪检测法的基础上,利用直线斜率和直线方程,把虚线跑道补实,来完成智能车赛道的信息采集.实际测试表明该方法能够实现路径识别的正确性和快速性,可在黑白(或色差较大)赛道上获得良好的自主寻迹效果.【期刊名称】《重庆科技学院学报(自然科学版)》【年(卷),期】2014(016)001【总页数】3页(P147-149)【关键词】摄像头;边缘检测;图像采集【作者】程鸿芳;钱峰;李敏【作者单位】芜湖职业技术学院,安徽芜湖241000;芜湖职业技术学院,安徽芜湖241000;芜湖职业技术学院,安徽芜湖241000【正文语种】中文【中图分类】TP393.08“飞思卡尔”杯全国大学生智能车大赛是由摩托罗拉旗下飞思卡尔公司赞助、由高等学校自动化专业教学指导委员会负责主办的全国性的赛事。
按照首届全国大学生“飞思卡尔”智能车大赛规则要求,根据赛道特点,主要有3种寻线设计方案:光电传感器方案、摄像头方案和电磁方案。
2011年第六届比赛中要求赛道是由白色底板和黑色的指引虚线组成,综合考虑3种方案的特点,本文采用的是摄像头方案。
在摄像头方案的前提下,在实时的图像数据获取的基础上对图像信息进行数据处理,从而提取赛道中心的黑色指引虚线,以此来作为舵机和驱动电机的控制依据。
以往的赛道中的黑色指引线是实线,而第六届比赛赛道是黑色的指引虚线,中间存在断点。
针对这种赛道,本文采用的方法是在改进的边缘检测算法和左边跟踪检测法的基础上,将虚线跑道补实,从而完成智能车的赛道信息采集。
由边缘检测算法和左边跟踪检测法得出的各行黑线的中心值center(i),纵坐标记为i;当检测遇到虚线时,将上一行实线的中心值center(j)弥补本次的中心值,横坐标记为center(j),这样虚线两边与实线交界点的坐标记为 (center(j1),j1)和 (center(j2),j2),求出这两点构成直线的斜率k和直线方程,即可算出虚线行的横坐标,来补足虚线。
飞思卡尔智能车电磁组分区算法介绍写在之前的话:1、⽬前我是⼀名在校学⽣,这也是我第⼀次写博客,不周之处,请多谅解;2、此算法并⾮原创,借鉴⾃⼭东德州学院第⼋届⽩杨队(PS:个⼈看法,对于⼀些⼈把别⼈的开源东西改头换⾯⼀下就说是⾃⼰的原创⾏为⼗分鄙视);3、对于此算法的理解和说明并⾮纸上谈兵,算法已经被我运⽤到了⼩车⽐赛中并取得好的成绩(具体就不多说了,⽐赛时车莫名其妙坏了,⽐赛前调试的速度绝对能进国赛,⽐较遗憾),总之这算法是我尝试过的最好的算法;4、这⼀次所介绍的只是路径算法和⼀些知识普及,后⾯有时间会介绍其余部分算法及许多好的思路(舵机电机控制思路(不只是简单的PID),双车策略);5、希望对于这⽅⾯有涉及的⼈能与我联系并交流或指出不⾜之处。
---------------------------------------------------------------分割线-----------------------------------------------------------------------------⼀、没有这⽅⾯了解的可以看看 飞思卡尔智能车分为三组:摄像头、光电、电磁,我做的是电磁车,三种车队区别在于传感器的不同,所以获得路径信息的⽅法也不⼀样,摄像头和光电识别的是赛道上的⿊线(⽩底赛道),⽽电磁车则是检测埋在赛道下的通⼊100mh电流的漆包线,摄像头和光电采⽤的是摄像头和ccd作为传感器,电磁则是⽤电感放在漆包线周围,则电感上就会产⽣感应电动势,且感应电动势的⼤⼩于通过线圈回路的磁通量成正⽐,⼜因为漆包线周围的磁感应强度不同,因此不同位置的电感的感应电动势就不同,因此就可以去确定电感位置;因此在车⼦前⾯设置了50cm的前瞻,电感布局如下(怎么发不了图⽚):分为两排,前排3个,编号0,1,2(前期还加了两个竖直电感⽤来帮助过直⾓弯,后来改为了⼋字电感);后排2个,编号3,4;现在车⼦获得了不同位置的感应电动势的⼤⼩了,但这些值是不能处理的:1、感应电动势太微弱;2、是模拟信号,信号太微弱就放⼤它;这就涉及到模拟电路的知识了,就不多说了(因为要把这讲完到PCB绘制的篇幅就⾜够写另开⼀号专门写这些⽅⾯来(PS:题外话(我的题外话⽐较多)):放⼤部分外围你设计的再好也抵不过⼀个更好的芯⽚,有两个例⼦,⼀个是我⾃⼰的:之前⽤的是NE5532,但是效果不理想,加了好多什么滤波,补偿,都⽤上,没⽤,软件⾥处理后⾯再说,后来⼀狠⼼换了AD620,感觉像是春天来了,因为它是仪⽤放⼤器,还有就是贵。
基于光电传感阵列和摄像头的寻线控制算法关军(上海交通大学机器人研究所上海200240)文摘本文,研究分析了分别基于光电传感器阵列和摄像头的寻线控制方案,通过评估比较两种方案各自具有的优势与不足,设计了一种基于两种传感器融合使用的寻线控制算法。
摄像头和光电传感阵列的混和使用,充分发挥了摄像头探测距离远,光电管信号可靠的特点,有效解决了摄像头在弯道行驶中丢失黑线的问题。
实践表明,该控制算法改善了赛车弯道行驶性能,提高了赛车寻线的可靠性。
关键词:摄像头;光电传感器;寻线控制;弯道识别A line-tracking control algorithm based on photoelectric sensor array and cameraGuan Jun(Research Institute of Robotics, Shanghai Jiao Tong University,Shanghai 200240, China)Abstract: In paper, we make a study on line-tracking control schemes based respectively on photoelectric sensor array and camera. Realizing that both schemes have their own advantages and disadvantages, we have designed a line-tracking control method which combines these two kinds of sensors. The use of camera and photoelectric sensor array together is able to make full advantage of the feature that camera could detect comparatively more distant and that photoelectric signal is more reliable, thus effectively solve the problem that the camera will miss the black line when turning. Experiments show that such method can improve the1performance of the vehicle when turning as well as the reliability of tracking.Key Word: Camera; Photoelectric sensor; Line-tracking control; Curve detecting寻线传感器的选择,是此次智能车竞赛需要首先考虑的问题。
第七届“飞思卡尔”杯全国大学生智能汽车竞赛技术报告(校徽)学校:*********队伍名称:******参赛队员:******************带队老师:******关于技术报告和研究论文使用授权的说明本人完全了解第七届“飞思卡尔”杯全国大学生智能汽车邀请赛关保留、使用技术报告和研究论文的规定,即:参赛作品著作权归参赛者本人,比赛组委会和飞思卡尔半导体公司可以在相关主页上收录并公开参赛作品的设计方案、技术报告以及参赛模型车的视频、图像资料,并将相关内容编纂收录在组委会出版论文集中。
参赛队员签名:带队教师签名:日期:摘要本文以第七届全国大学生智能车竞赛为背景,介绍了智能赛车控制系统的软硬件结构和开发流程。
该比赛采用组委会规定的标准车模,以 Freescale 半导体公司生产的 16 位单片机MC9S12X128为核心控制器,在 CodeWarrior IDE开发环境中进行软件开发,要求赛车在未知道路上完成快速寻线。
整个系统涉及车模机械结构调整、传感器电路设计及信号处理、控制算法和策略优化等多个方面。
为了提高智能赛车的行驶速度和可靠性,对比了不同方案(如摄像头与光电管检测方案)的优缺点,并结合 Labview 仿真平台进行了大量底层和上层测试,最终确定了现有的系统结构和各项控制参数。
它采用摄像头对赛道进行检测,通过边缘提取获得黑线位置,用 PID 方式对舵机进行反馈控制。
通过速度传感器获取当前速度,采用增量式数字PID控制实现速度闭环,根据预判信息和记忆信息对速度进行合理分配。
同时采用拨码开关和LCD显示屏实现人机交互系统。
测试结果表明,在该控制系统下,自寻迹机器人小车具有良好的位置跟踪和快速切换速度性能。
关键词:智能车,跟踪寻迹,摄像头,传感器,PID,最优曲率ABSTRACTIn the background of the 7nd National Intelligent Car Contest for College Students, this article introduces the soft hardware structures and the development flow of the vehicle control system. This contest adopting the standard model car prescribed by the contest organization committee, using the 16-bit MCU MC9S12X128 produced by Freescale Semiconductor Company as the core controller, developing under the CodeWarrior IDE, requires the car track the line fast on the road. The whole system includes the aspects of the mechanism structure adjustment, the sensor circuit design and signal process, controlalgorithm and strategy optimization etc.In order to increase the speed and the reliability of the car, the advantage and disadvantage of the different schemes (such as the camera and photoelectric cell scheme) are compared, and a great number of the bottom layer and the upper layer tests are carried on combined with the Labview simulation platform. At last, the current system structure and each control parameters are determined. It captures the road information through a camera, then abstracts the black line position by edge-detection method. After that, PD feedback control is used on the steering. The system obtains the current speed using a speed sensor, so that it can realize the feedback control of the speed by the increased digital PID algorithm control method. At the same time, the use of an LCD displays trails information and keyboard is used to achieve the man-machine interaction. According to the pre-judge inform and the memorized inform, it allocates the speed properly. The test results showed that the self-tracing robot car had good position tracking and fast speed switching performance .Key words:intelligent vehicle,line track, camera,sensor, PID, optimal curvature目录第一章:引言 (1)1.1背景介绍 (1)1.2发展现状 (1)1.3章节安排 (2)第二章:系统整体框架 (3)2.1系统框架 (3)2.1.1硬件系统 (3)2.2.2软件系统 (4)2.2方案简介 (4)第三章:机械设计 (6)3.1汽车行驶的数学模型 (6)3.2整体布局与调整 (7)3.2.1车模分析 (7)3.2.2 车模布局思想 (8)3.3机械结构调整 (9)3.3.1前后轮定位 (9)3.3.2其他机械模块调整 (9)3.3摄像头的安装 (9)3.4舵机的安装 (10)3.5编码器的安装 (10)第四章:硬件电路设计 (12)4.1硬件设计方案 (12)4.2传感器的选择 (12)4.2.1摄像头 (12)4.2.2编码器 (12)4.3电路设计方案 (13)4.3.1单片机最小系统板 (13)4.3.2稳压模块电路 (14)4.3.3驱动模块电路 (14)第五章:软件系统设计 (16)5.1 软件各功能模块设计 (16)5.1.1 时钟模块 (16)5.1.2 PWM输出模块 (16)5.1.3 ECT模块 (17)5.1.4外部中断 (17)5.2视频采集与图像处理 (17)5.2.1摄像头工作原理 (17)5.2.2图像处理 (18)5.3路径识别思想 (21)5.4舵机转向和速度调节 (23)5.4.1PID控制算法介绍 (23)5.4.2舵机转向控制 (24)5.4.3速度控制 (25)5.4.4细节控制 (25)第六章:开发环境、调试工具 (28)6.1软件开发平台Codewarrior IDE (28)6.2辅助调试方法 (28)6.2.1 Labview调试 (28)6.2.2人机交互界面 (29)6.2.3无线模块 (29)第七章:结论 (31)参考文献 (32)鸣谢 (32)第一章:引言1.1背景介绍智能汽车就是一种无人驾驶汽车,也可以称之为轮式移动机器人,主要依靠车内以计算机系统为主的智能驾驶仪来实现无人驾驶。
基于CCD摄像头的黑线提取算法
基于AD 采样的算法
基于AD 的黑线提取算法能够反映基于AD 的黑道提取有以下几种方法:
1) 找出每一行的黑线的左右边界点,把中间点作为道路;
2) 利用若干行相加,取最黑点;
3) 找出每行的最黑点,把它作为道路。
第一种做法: 找出每一行的黑线的左右边界点,把中间点作为道路。
它是最容易想到的方法,在无交叉道以及摄像头的黑白AD 值分明的情况下,它可以达到非常理想的效果.但是若出现了斜看交叉道或者黑白AD 不是很
分明的情况下,该方法的滤波显得十分复杂.在实际中由于摄像头对于远处的黑
线不是很敏感,这使得黑点的阈值很难以确定,选大了会使远方道路提取出错,选小了会丢失远方的道路信息.也许采用动态阈值是一个好方法,但是它也不是十
分管用.在实验中我们发现黑点的阈值不是随着距离的变化成线性变化的,它的
变化多少带有点突变的味道,因此很难确定黑点阈值的变化规律,自然动态阈值
也很难设定.斜看十字道会带来更大的麻烦,由于在实际的控制中很难做到每次
都严格地贴线走,因此小车在从弯道出来的时候若弯道前方有个十字道,很容易
造成斜看的情况发生.这时从AD 采集的首先,在前方道路与十字叉的交界点,黑点的个数会突然增加很多.在一般情况下,随着距离的增加黑点的个数会慢慢减少,不会出现突然增多的情况.因此我
们可以用上一行的黑点数,估计出下一行的黑点数,如果超出了我们的估
计值,我们就认为它是不合理的。
其次可以根据赛道不突变的原则,来滤除杂点.我们可以根据前面两行的。
第十届"飞思卡尔"杯全国大学生智能汽车竞赛技术报告第十届“飞思卡尔”杯全国大学生智能汽车竞赛技术报告学校:电子科技大学摘要本文设计的智能车系统以MK60DN512ZVLQ10微控制器为核心控制单元,通过CMOS摄像头检测赛道信息,使用模拟比较器对图像进行硬件二值化,提取黑色引导线,用于赛道识别;通过编码器检测模型车的实时速度,使用PID控制算法调节驱动电机的转速和转向舵机的角度,实现了对模型车运动速度和运动方向的闭环控制。
关键字:MK60DN512ZVLQ10,CMOS,PIDAbstractIn this paper we will design a smart car system based on MK60DN512ZVLQ10as the micro-controller unit. We use a CMOS image sensor to obtain lane image information. Then convert the original image into the binary image by the analog comparator circuit in order to extract black guide line for track identification. An inferred sensor is used to measure the car`s moving speed. We use PID control method to adjust the rotate speed of driving electromotor and direction of steering electromotor, to achieve the closed-loop control for the speed and direction.Keywords: MK60DN512ZVLQ10,CMOS,PID目录摘要 (II)Abstract (III)目录............................................................................................................................ I V 引言.. (1)第一章系统总体设计 (2)1.1系统概述 (2)1.2整车布局 (3)第二章机械系统设计及实现 (4)2.1智能车机械参数调节 (4)2.1.1 前轮调整 (4)2.1.2其他部分调整 (6)2.2底盘高度的调整 (7)2.3编码器的安装 (7)2.4舵机转向结构的调整 (8)2.5摄像头的安装 (9)第三章硬件系统设计及实现 (11)3.1 MK60DN512ZVLL10主控模块 (12)3.2电源管理模块 (12)3.3 摄像头模块 (14)3.4电机驱动模块 (15)3.5测速模块 (16)3.6陀螺仪模块 (16)3.7灯塔检测模块 (16)3.8辅助调试模块 (17)第四章软件系统设计及实现 (19)4.1赛道中心线提取及优化处理 (19)4.1.1原始图像的特点 (19)4.1.2赛道边沿提取 (20)4.1.3推算中心 (21)4.1.4路径选择 (23)4.2 PID 控制算法介绍 (23)4.2.1位置式PID (24)4.2.2增量式PID (25)4.2.3 PID参数整定 (25)4.3转向舵机的PID控制算法 (25)4.4驱动电机的PID控制算法 (26)第五章系统开发及调试工具 (27)5.1开发工具 (27)5.2上位机图像调试 (27)5.3SD卡模块 (27)5.3.1SD卡介绍 (27)5.3.2 SPI总线介绍 (28)5.3.3软件实现 (28)第六章模型车的主要技术参数 (30)结论 (31)参考文献 (I)附录A:电原理图 (II)附录B:程序源代码................................................................................................... I V引言随着科学技术的不断发展进步,智能控制的应用越来越广泛,几乎渗透到所有领域。
基于摄像头的道路识别及赛车控制算法杨运海周祺吕梁摘要:本文探讨了摄像头在智能车道路识别中的应用,并提出了一种通用的控制算法。
在准确采集图像的基础上,利用临近搜索法对有效道路信息进行快速提取,通过分析赛道信息,计算出赛道黑线的走向趋势及赛车当前位置。
在充分考虑当前和过去的赛道信息的基础上,对赛道类型进行判断及分类。
在综合考虑赛道类型,黑线走向及车当前位置,对舵机的转向和电机的速度进行精确控制。
关键词:图像采集;临近搜索;转向控制,速度控制1.概述在飞思卡尔智能车汽车比赛中,路径识别方法主要有两大类,一类是基于红外光电传感器,令一类是基于摄像头。
通常,红外光电传感器安装灵活,原理简单,可靠性好,不易受环境光干扰,因而得到了广泛应用,但其对前方道路的预判距离非常有限,不适宜赛车高速行驶。
另一类是基于摄像头,与光电传感器相比,其优点非常明显,能提前获取大量前方道路信息,有利于实现赛车的最优控制。
但其缺点是图像采集要求有高的AD转换频率,图像处理算法复杂度高,且容易受环境光的干扰。
考虑到摄像头的优点远大于其缺点,因此选择了摄像头。
以下是摄像头的工作流程图:图B-1 摄像头工作流程摄像头控制赛车行驶方案有三大模块:图像采集、赛道信息提取、转向和速度控制。
2.图像采集考虑到S12的运算能力,我们采用了黑白制式、320*240的CMOS单板摄像头。
摄像头出来的是模拟信号,每秒有50场图像,场之间有场消隐信号,行之间有行消隐信号,经过lm1881分离后,可得到场同步信号和行同步信号,作为行中断信号。
由于行中断中要采集该行的信号,对时间要求很严格,其中断优先级应比普通中断的优先级高,因此我们选择IRQ作为行同步信号输入口,PT0作为场信号输入口。
此外,为保证图像不丢失,我们仅对场信号的下降沿进行捕捉。
图B-2 摄像头视频信号按照目前车的刹车时的加速度,我们选定图像拍摄最远处为前方1米就足以对速度做出了控制。
考虑到前轮到前方20cm为摄像头的盲区,故有效拍摄范围为0.8m,为了保证不丢失起跑线,每2.5cm至少拍摄一行,故一幅图像至少采集32行。
万方数据万方数据瞄董j磁&圜匡豆可.堡星篁查墨堡皇鱼可以消除影响。
因而从去噪效果和计算量两方面来考虑,lx3模板中值滤波更具有优势。
4黑线中心提取提取黑线中心部分是小车路径识别系统中最为重要的一个环节,关系到智能小车运行质量的好坏。
这里黑线中心提取方法为:先判断每行的第一个点是否为自点,如是白点则依次对白点进行计数(设计数为a,当遇到连续黑点时则计数黑点个数(设计数为b,再次遇到白点时则退出该行计数,此时黑线中心所在列为a+b/2;如果第一个为黑点,且不是噪声点(即为连续的黑点,则直接对黑点计数(设计数为b,当遇到连续白点后则退出计数,这种情况下得到的黑线中心位于第b/2列。
最后将从一幅图像上得到的所有中心位置按行存人一个一维数组中。
但是不得不考虑两种比较特殊的情况,起始线和十字交叉线。
通过观察发现这两种情况下每行出现黑点的数量远远大于黑线的黑点数(黑线一般能采集到2—3个黑点,所以当采集到的黑点数超过正常值时,便判定这一行为特殊行,并赋予特殊标志位(这里将特殊行中心点标志为50,因为经过图像处理后图像变成38}20数组,标志为50能将特殊点和正常点很明显的区分开,也方便了下面的改进差值算法。
由于规则要求小车能识别起始线,因而还需对特殊行进行分析。
图7为采到起始线的情况,可以看出起始线所在行具有多个跳变,考虑到车体偏离等情况,可以用白点跳变为黑点的次数(方案中选2或3来判定是否为起始线,如果符合情况则标志出这一行。
则其他的特殊行均为十字交叉情况。
虽然在前面已经有去噪处理,但是偶尔还是会有干扰,这样提取出来的某些行黑线中心位置就发生了跳变。
同时,为了后续的控制模块得到准确的道路信息,需要对特殊行及跳变点进行插值处理,即赋予其前后两行的平均值作为黑线中心值。
但是考虑到会出现这样的复杂情况:连续两行出现跳变点或者特殊行的前后出现跳变点,这时如果简单的按上面的方法进行插值,会插入一个误差很大的中心点,使道路产生弯点。
飞思卡尔智能车黑线提取算法与行驶控制(摄像头组)引言按照第一届全国大学生“飞思卡尔”智能车大赛比赛规则要求:使用大赛组委会统一提供的竞赛车模,采用飞思卡尔16位微控制器MC9S12DG128作为核心控制单元,自主构思控制方案及系统设计,包括传感器信号采集处理、控制算法及执行、动力电机驱动、转向舵机控制等,以比赛完成时间短者为优胜者。
其中赛道为在白色底板上铺设黑色引导线。
根据赛道特点,主要有两种寻线设计方案:。
本文是在摄像头方案的实时图像数据已经获得的基础上,对图像进行数据处理,提取赛道中的引导黑线位置,从而以此作为舵机和驱动电机的控制依据。
图像数据信息特点摄像头的主要工作原理是:按一定的分辨率,以隔行扫描的方式采集图像上的点,当扫描到某点时,就通过图像传感芯片将该点处图像的灰度转换成与灰度成一一对应关系的电压值,然后将此电压值通过视频信号端输出。
具体而言(参见图1),摄像头连续地扫描图像上的一行,则输出就是一段连续的电压视频信号,该电压信号的高低起伏正反映了该行图像的灰度变化情况。
当扫描完一行,视频信号端就输出低于最低视频信号电压的电平(如0.3V),并保持一段时间。
这样相当于,紧接着每行图像对应的电压信号之后会有一个电压“凹槽”,此“凹槽”叫做行同步脉冲,它是扫描换行的标志。
然后,跳过一行后(因为摄像头是隔行扫描的方式),开始扫描新的一行,如此下去,直到扫描完该场的视频信号,接着就会出现一段场消隐区。
此区中有若干个复合消隐脉冲(简称消隐脉冲),在这些消隐脉冲中,有个脉冲,它远宽于(即持续时间长于)其他的消隐脉冲,该消隐脉冲又称为场同步脉冲,它是扫描换场的标志。
场同步脉冲标志着新的一场的到来,不过,场消隐区恰好跨在上一场的结尾部分和下一场的开始部分,得等场消隐区过去,下一场的视频信号才真正到来。
摄像头每秒扫描25幅图像,每幅又分奇、偶两场,先奇场后偶场,故每秒扫描50场图像。
奇场时只扫描图像中的奇数行,偶场时则只扫描偶数行。
基于摄像头的智能车循迹方法【摘要】本文基于摄像头传感器设计并实现智能车自主循迹行驶。
采用摄像头传感器的信号采样模块获取赛道黑线信息,高效稳定的循迹算法使小车能够自主识别黑色引导线并根据黑色引导线实现快速稳定的寻线行驶。
【关键词】智能;传感器;PID一、前言智能车辆(Intellignt Vehicle-Iv),又叫轮式移动机器人,是一个集环境感知、规划决策、多等级辅助驾驶等功能于一体的综合系统[1],它体现了自动控制、人工智能、传感技术、机械技术、计算机技术等多个学科领域理论技术的交叉和综合。
自主导航技术是智能车辆最为核心的技术;而基于视觉的自主导航技术是针对城市环境的智能车辆研究中极具前景的方向,是典型的高新技术综合体。
智能车辆致力于提高汽车的安全性、舒适性和提供优良的人车交互界面,是世界车辆工程领域研究的热点和汽车工业增长的新动力。
美国交通部已开始一项五年计划,与美国通用汽车公司合作研发一种智能防撞系统。
1995年6月,NabLab5进行了穿越美国陆地的实验NHA,从美国宾州的匹兹堡到美国加州的圣地亚哥城市,其路程4587公里,其中自主驾驶部分占百分之九十七。
2003年,中国清华大学计算机系智能技术与系统国家重点实验室在中国科学院院士张钹带领下研究制作的智能移动车辆清华THMR-V [2]型智能车,具备面向全国高速公路与一般道路的功能。
车辆采用的是道奇7座车改装而成,装有激光测距仪器和彩色摄影机组成的路径与障碍物检测系统;由GPS、光码盘和磁罗盘组成的组合GPS导航系统等。
计算机系统进行视觉处理,完成路径规划、信息融合、决策与行为控制等诸多功能。
二、“飞思卡尔”智能车的发展(1)国外发展现状“飞思卡尔”杯智能车竞赛于2000年在韩国首次举办,韩国大学生智能模型车竞赛是韩国汉阳大学汽车控制实验室在飞思卡尔半导体公司赞助下成立举办的以飞思卡尔单片机为核心的学生科技竞赛。
由主办方提供标准的智能小车模型、直流驱动电机、舵机、可充电锂离子电池,参赛的队伍要制作一辆可以自主识别道路的智能车辆,在固定设计的道路上自动识别道路和自主行驶,跑完赛程用的时间最短,并结合技术论文评分名次较高的参赛队伍就是胜利队伍。
黑线提取流程
黑线的提取我们参考了去年上海大学的黑线提取方法,在前十行采用边缘提取方法,十行以后的利用跟踪边缘提取方法。
实验测得这种方法只要细节掌握好能够很好的提取出黑线。
下面是具体的黑线提取方法。
如图5.4
图5.4黑线提取流程图
1)首先准备提取黑线
2)用检测跳变的方法提取出前十行中每行的两个跳变点,然后求平均值就可以得到前十行的黑线位置。
当搜索到多个跳变的时候,我们根据上一行跳变的位置确定出最优的那个跳变的位置作为本行的黑线跳变位置。
当前十行都没有找到黑线的时候,我们就认为这幅图像的黑线丢失了,然后依据前一幅图像黑线的位置,给这幅图像的整体赋极值。
当只有十行中的几行丢失时,我们就继续搜索黑线直道找完前十行位置。
3)当前十行黑线存在时,我们利用前十行黑线的位置确定第十一行黑线的位置,然后在这个区间搜索黑线,依次类推用前一行黑线的位置确定后一行黑线的位置,当本行黑线没有找到时,此行黑线位置保持上行的值,下行搜索的位置相应的扩大。
有连续3行黑线搜索不到十我们就认为黑线丢失,退出搜索。
这样既可以去除干扰,还可以大大的提高算法的效率。
值得注意的是:第十行和前一行第九行这个接口位置边缘确定非常重要,要考虑的非常全面,不然有可能就只能搜索到前十行的黑线,后面的黑线因为边缘的问题所有不到。
4)搜索完成后推出搜索。
对搜索到的黑线进行中值滤波和限幅滤波。
只要搜索范围合理,这种算法有很强的抗干扰能力,并且可以滤除十字交叉和三角黑区的干扰。
基于摄像头的智能小车路径识别中黑线提取算法
张银建;杨欢欢;王竞
【期刊名称】《中国电子商务》
【年(卷),期】2012(000)004
【摘要】路径识别是智能车应用中的关键技术,直接决定了智能车行驶的质量。
本文利用摄像头进行黑白道路图像采样以获取道路图像信息,通过灰度值提取道路黑线和边缘信息。
实际运行表明能较好地实现智能小车的路径识别功能。
【总页数】1页(P106-106)
【作者】张银建;杨欢欢;王竞
【作者单位】重庆工商大学计算机科学与信息工程学院,重庆400067;重庆工商大学计算机科学与信息工程学院,重庆400067;重庆工商大学计算机科学与信息工程学院,重庆400067
【正文语种】中文
【中图分类】TP39
【相关文献】
1.基于线阵CCD的智能小车路径识别系统 [J], 温阳东;王祥好
2.基于CCD摄像头黑线提取算法 [J], 华文;俞斌;翁华
3.基于STM32F407的路径识别智能小车设计 [J], 苏元楷;季磊;聂嘉欣;蔚国将;关玉琴
4.基于光电摄像头路径识别智能小车的研究 [J], 夏雨磊
5.基于黑白摄像头的智能小车路径识别系统设计 [J], 吴吟箫;张虹;王新生
因版权原因,仅展示原文概要,查看原文内容请购买。
飞思卡尔智能车(摄像头)核心程序1舵机PD法过弯策略/***************************舵机PID函数*********************************/void Angle_PID(int CENTER){//2.8float angle_kp=7.38,angle_kd=17.2;//系数PD控制if(lost_time==0 ||left_lost_time==0 ||right_lost_time==0 ) //判断如果黑线都丢失了,则不更新数据{angle_error=CENTER-CENTER_INIT;// if(left_lost_time>20 && right_lost_time==0)// angle_error=CENTER_INIT-CENTER+abs(angle_error)/8.5;// else if(left_lost_time==0 && right_lost_time>20)//angle_error=CENTER_INIT-CENTER-abs(angle_error)/8.5;angle=(int)(angle_init+angle_kp*angle_error+angle_kd*(angle_error-angle_last _error));if(angle<=angle_init-250) //防止系数过大导致舵机打死{angle=angle_init-250; //6%-9% ,,2000}if(angle>=angle_init+250){angle=angle_init+250;}angle_last_error=angle_error;PWMDTY23=angle;}}2大津法动态阈值调节/***************************大律法动态阈值*********************************/ void otsu_yuzhi( ){int wh = 128;int inIm[128];int i, t;int L = 128;double p[128];double w1=0;double u0=0;double u1 = 0;double max = 0.0;double w0 = 0;int m =0;double sigma[128];for (i = 0; i < 128; i++)inIm[i] = ADV[i]&0xff;for (i = 0; i < L; i++)p[i] = 0;//计算各灰度出现次数for (i = 0; i < 128; i++)p[inIm[i]]++;//计算各灰度级出现概率for (m = 0; m < L; m++)p[m] = p[m] / wh;for (t = 0; t < L; t++){w0 = 0;for (m = 0; m < t+1; m++)w0 += p[m];w1 = 1 - w0;u0 = 0;for (m = 0; m < t + 1; m++)u0 += m * p[m] / w0;u1 = 0;for (m = t; m < L; m++)u1 += m * p[m] / w1;sigma[t] = w0*w1*(u0-u1)*(u0-u1); }max = 0.0;for (i = 0; i < L-1; i++){if (max < sigma[i]){max = sigma[i];THRESHOLD = i;}}//二值化for (i=0; i<128; i++){ADV[i]=ADV[i]>THRESHOLD?225:0;}}3图像滤波算法/***************************3点滤波*********************************/ void lvbo3() //冒泡法排序后,改点值为中点值{uchar a[3];//定义一个数组既它的元素为7uchar i,j,k,temp;//定义3个变量for(k=3;k<125;k++){a[0]=ADV[k-1];a[1]=ADV[k];a[2]=ADV[k+1];for(i=0;i<2;i++)//进行6轮排序{for(j=0;j<2-i;j++) //每轮进行6-i次交换if(a[j]>a[j+1]){temp=a[j];a[j]=a[j+1];//大的沉底,小的上浮a[j+1]=temp;}}ADV[k]=a[1];}}/***************************5点滤波*********************************/void lvbo5() //冒泡法排序后,改点值为中点值{uchar a[5];//定义一个数组既它的元素为7uchar i,j,k,temp;//定义3个变量for(k=3;k<125;k++){a[0]=ADV[k-2];a[1]=ADV[k-1];a[2]=ADV[k];a[3]=ADV[k+1];a[4]=ADV[k+2];for(i=0;i<4;i++)//进行6轮排序{for(j=0;j<4-i;j++) //每轮进行6-i次交换if(a[j]>a[j+1]){temp=a[j];a[j]=a[j+1];//大的沉底,小的上浮a[j+1]=temp;}}ADV[k]=a[2];}}4边线提取for( i=Center[0]; i>6; i--) //提取左边线{if( ADV[i]>(ADV[i-5]+45) && ADV[i-1]>(ADV[i-6]+45)){left=i-5;break;}}for( i=Center[0]; i<121; i++){if( ADV[i]>(ADV[i+5]+45)&& ADV[i+1]>(ADV[i+6]+45)){right=i+5;break;}}5曲率计算void chuli(){int x1,x2,x3,y1,y2,y3;unsigned int length1,length2,length3;int S;y1=5;y2=10;y3=15;x1=Center[2];x2=Center[1];x3=Center[0];S=abs((y2-y1)*(x3-x1)-(y3-y1)*(x2-x1));length1=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));length2=sqrt((x3-x1)*(x3-x1)+(y3-y1)*(y3-y1));length3=sqrt((x2-x3)*(x2-x3)+(y2-y3)*(y2-y3));if(S<1)S=1;K=abs((length1*length2*length3)/S);//曲率的倒数,即曲率半径Center_Average=mid(Center[0],Center[1],Center[2]);ADV[Left[0]]=0;ADV[Right[0]]=0;Angle_PID(Center_Average);}。