第三章 控制软件设计与实现
推荐给好友
打印
加入收藏
更新于2008-05-27 11:55:57


3.1概述

        智能车竞赛的目标很明确,即:采用合理的算法,精确的提取黑线的位置,以此为依据,控制模型车快速准确的巡黑线行走。 

        因此,软件的设计,分为两大部分:

  • 一,黑线提取模块;
  • 二,舵机,电机控制模块。

3.1.1黑线提取 

        赛道信息提取的正确与否,直接影响着智能车的行走路线。一旦信息有误,就会导致赛车冲出赛道。为了保证信息的正确,除了确保采样精度外,还应该在算法中加入错误校验,将错误信息剔除掉。
 
        因此,我们将黑线提取模块细分为黑线位置采集和错误校验两部分。 

        对于CCD来说,S12采集到的视频信号由于受到环境或者路况复杂度的影响,可能同一行出现两处甚至多处低电压,并且很可能本行实际上不应该采集到黑线信息,那么就需要对这些情况分别进行校验,从中找出最可能的。

3.1.2舵机、电机控制 

        智能车的优劣,直观的反映在这两个方面的控制上。一个有效的算法,应该能够全面考虑小车速度、舵机当前偏角、舵机响应时间、前方路况之间的关系,应用规则判断后,使电机和舵机做出适当的动作,这样才能最大限度的提高车速。

3.2程序架构 

        由于CCD的场、行信号是有严格的时间间隔的,为了在实现预期功能的同时还要与CCD的时序相配合,我们在程序的主体架构上采用了三大中断,分别是场信号中断,行信号中断,延时中断。

3.2.1 场信号中断子程序 

        这一中断表示新一场信息到来。 

        等待行信号中断的时间间隔用来对上一场的路况信息进行处理,判断当前路况以及进行速度检测、电机控制、舵机控制。

3.2.2行信号中断子程序 

        这一中断表示新一行信息到来。 

        首先利用A/D转换模块将该行视频信号采集并保存下来。 

        等待下一行信号中断的时间间隔用来对之前采集的视频信号进行处理,通过黑线提取和错误校验判断该行黑线位置。

3.2.3延时中断子程序 

        通过延时时间的长短,可以采集到我们想要的每一场的若干行视频信息。

3.3具体分析 

        下面对如何用程序实现做具体阐述。

3.3.1黑线检测
 
        CCD送给单片机的视频信号实际为电压信号,黑线所在的部分电压低,白色所在的地方电压高,那么通过查找视频信号的低电压部分就可以相应的知道黑线所在的位置。具体的采集是由S12的A/D模块实现的,由于CCD的工作频率比S12要快,正常情况下只能采到15个到20个点,这对于确定黑线的具体位置远远不够。于是通过软件超频到32MHz,这样每行可以采到95个点左右,有效点数80多个,而且经过长时间测试发现S12工作很正常。 

        接下来就可以计算黑线位置了。 

        理论上,如果环境十分完美,只有黑白两色,那么通过简单的电压比较就可以实现。但实际中往往有很多干扰因素,比如阴影,画面中同时出现两条赛道,赛道不干净出现暗的地方等等都会影响采集到的信号的好坏。这时候简单的方法已经无法胜任了,车子就会乱跑,而不是顺着黑线的方向。 

        为了克服外界干扰,我们将采集到的所有低电压信息按组存放,比如这组低电压的位置,个数(下面将用z来表示连续低电压的个数)。然后对每一组数据应用规则,从中找出最可能的一组,当然还包括采空,即看不到黑线这种情况。 

        经过测试发现,标准的黑线宽度z<=6(当然,这与CCD的安装高度是有关系的),但是可能黑线跟阴影比较接近,实际z<10即可,并且一行里面不应该多于两组低值,同样基于阴影的考虑,所以不应该多于四组。 

        基于这两点,我们先对低电压信息进行筛选,从中选出满足条件的几组。 

        计算出每组表示的黑线位置后,进一步应用错误校验。 

        由于黑线是连续的,因此相邻两行之间计算出来的黑线位置不会差的很远,基于这一点,我们把采集到的新的信息与之前的一行做比较,看它是否满足条件。遗憾的是,CCD是从上到下扫描的,先采集到的是最远的一行,而最远的一行往往也是最不可靠的一行,把它作为比较的基准肯定是不行的。为了首先采到最近的那行,CCD在实际安装上是翻转180度的。最近的这行则与上一场的相同行做比较,车在起跑时黑线肯定是在中心的,所以我们总能保证第一场第一行的正确性。 

        这样,基本上就可以把黑线位置正确的提取出来了。如果都不满足条件,就按采空处理,继续沿用上一行的数据,或者通过之前的数据进行预测推断该行的位置。

3.3.2路况识别 

        为了能够有效的识别路况,我们每场采了不连续的15行(具体实现见3.3.3)。 

        如果我们只用一行信号,虽然也可以进行智能车的控制,但这无疑于一个看的更远的光电管,只注意到CCD的前瞻性而忽略了它的全局性。 

        采集的行数越多,就越能反映真实路况,但是计算量也就越大。在平衡两者的试验中发现,采用15行是比较合适的,既能反映路况,又不至于占用单片机的大部分资源。 

        通过观察不同路况的信息我们发现,行与行之间的差值与路况是有关系的。偏差小,说明曲率小或者为直线;偏差越大,黑线弯曲的就越厉害。按照偏差的大小和正负号可以将差值表示的信息分成三种,即直线,左弯和右弯,然后看每种信息所占的比例,就可以推断出前方路况了。
这样,我们就可以针对不同的路况采用不同的策略。

 




 
关于我们 | 诚邀加盟 | 客户服务 | 相关法律 | 网站地图 | 友情链接 | 服务信箱:service@eefocus.com
© 2006 与非门科技信息咨询(北京)有限公司 All Rights Reserved.