智能车电磁组元素处理(圆环、三岔、路障)

http://t.csdn.cn/LIYEb书接上回,根据上回所说,我们的小车已经能够在赛道上完成正常循迹,接下来我们就要处理赛道上的元素了,我第一年参赛时赛道的元素是三岔和圆环,第二年三岔没有了,加了路障,因此我们先从两年都有的硬骨头圆环说起,先来看一张环岛图片:智能车电磁组元素处理(圆环、三岔、路障)_第1张图片

如图所示,提前判断环岛那里画的五个圆圈代表五个电感(当然纯电磁竞速组的大佬们一般都是架着双排电感,前面一排后面一排,循迹可以用双排电感加权,识别元素可以用前排电感提前识别方便处理,这样车速的上限更高,在此我仅以一排电感为例子,帮助大家快速入门处理元素),上篇提到过最左和最右的横电感用于正常循迹,中间三个电感(两个竖电感一个横电感)用来判断元素,因为赛道上铺设的电磁线在经过圆环这里时会绕以后圆圈再出去,所以这里环岛进出口附近的AD采集的电感值会比正常路段有明显区别,我们就是需要找到这个特殊的点且保证再其它地方不会误判环岛,下面给出我粗略的识别环岛方法,可供参考

if(((Detection==0)&&(leftV>68)&&(rightV>68)&&(diangan[4]>2100)&&(diangan[1]+diangan[2])>3200)&&Round==0&&Fork==0) //满足条件提前识别到环岛
       {
           Detection=1;				  
		   LED_Ctrl(LED2,ON);
       }
       else if((bmq_juli>4700)&&Detection==1) //到达打脚入环的点    
       {
           Round = 1;//打脚入环
       }

 为了验证你写的识别环岛会不会误判,可以写一个识别到环岛蜂鸣器就响,让车子在赛道上跑一圈,看它会不会在除了环岛的其它地方也响,这个方法不仅可以用来验证环岛的误判,你识别环岛能不能识别到也可以用来验证,举一反三,所有元素的识别处理都可以用蜂鸣器来验证,满足第一步提前识别到环岛我们又该如何找到打脚入环的点呢,这个时间我们可以用来编码器积分,上篇说到编码器是用来测电机实时转速的,那如果对速度进行积分得到的不就是位移吗,我们用编码器积分算出小车从识别点到打角点的距离(这个距离可以把它显示到屏幕上用手推一下得出一个粗略的值再微调即可),然后找出打角点,这样环岛的识别就完成了。

		if(Detection==1)
			{
		    bmq_juli+=(ECPULSE1-ECPULSE2);//编码器积分
			}

识别完成以后就是处理部分,当小车到达打脚的点以后我们进入处理环岛的函数,这个时候取消小车的正常循迹,转而给他一个固定的中线差值,让他根据这个固定的差值转弯一段时间,也就是让它强制打脚一段时间,等小车打脚进入环岛后再切换回正常循迹,这样在小车车速不快的情况下小车即可自己出环岛 。

    if(Round==1&&(tly_jifen>>10)>-200)         
    {
		 TempAngle=30;//如左环岛给正值,则右环岛给负值
    }
    if((tly_jifen>>10)<-200)
    {
	  TempAngle=(leftV-rightV);//切换回正常循迹
    }

大家注意我这里的打脚一段时间用的是陀螺仪,我还没说到它的用处,不会用的小伙伴可以先定义一个time,让time++来替代一下陀螺仪,还有一点,在圆环中编码器积分可以一直开着,出了圆环以后把圆环标志位和编码器积分都清零,以便下一次识别环岛,不清零可能就只能进一次环岛。环岛解决以后,通过举一反三,其它的元素就会很好处理了先说岔路,下图:

智能车电磁组元素处理(圆环、三岔、路障)_第2张图片

岔路这里的电磁先分布如图所示呈现以个Y字形(因此此处电感值相比其它的地方也会有明显区别,找到这个特殊点即可识别岔路),当小车的电感提前识别到岔路以后,再像圆环处理那样给一个固定差值打脚一段时间,进入岔路后切换回正常循迹,同样的速度不快时,出岔路也不用处理,与出环岛不同的是出岔路以后不仅要把各个岔路标志位清零,还要把一个次数标志位置1(即第一次识别到岔路时,该次数标志位为0向左打脚入左岔路,第二次识别到岔路时,该次数标志位为1向右打脚入右岔路),这样即可区分开左右岔路,下面给出我的识别岔路的参考代码。

if(diangan[4]<1000&&(diangan[1]+diangan[2])<500&&(diangan[1]+diangan[2])>200&&Round==0&&Fork==0&&Forkchu==0)//识别岔路
            {
				Fork = 1;//进入岔路处理函数
				LED_Ctrl(LED2,ON);				
            }
if(Fork==1&&count==0&&(tly_jifen>>10)>-150)	//count==0右岔路 
if(Fork==1&&count==1&&(tly_jifen>>10)<150)//count==1左岔路  

接下来是路障,路障直接摆放在赛道上,就无法直接用电感来识别了,这时候我们就要借助TOF或者超声波来测距了,TOF的原理这里就不多赘述了,用逐飞家的库,把TOF初始化一下,把距离显示到屏幕上看一下你要处理路障的距离大概在多少,满足小于那个距离了即可开始处理路障,下面给出路障的处理思路:先往右打脚编码器积分一段距离,再往左打脚编码器积分一段距离(先往左再往右也可),然后小车回到赛道上电感检测到电磁信号即可回归正常循迹,当然同上,处理完路障以后依然不要忘记清空路障标志位,以便下一次识别。

智能车电磁组元素处理(圆环、三岔、路障)_第3张图片

综上所述,想要处理好元素,首先得先能够识别到这个元素,然后再对它进行处理,最后处理完记得清空标志位(这很重要!!!),基本上可以发现每个元素的处理都有用到编码器积分,可见编码器积分的重要性,当然今天介绍的都是最简单的元素处理方法,帮助大家先对各个元素的处理有个了解,后续还会有陀螺仪积分和曲率算法等帮助处理元素。当然元素也不止这三个,还有坡道,十字路口,断路和车库,对于电磁车来说,十字路口和断路都不需要进行处理,坡道慢速情况下也可以不进行处理,对于电磁组来说,车库前的斑马线地下会粘贴三个磁铁,电磁组需要自制干簧管或者霍尔检测来检测地上的磁铁(推荐使用霍尔检测),然后进行入库处理,倒车入库等处理方式大同小异,这里相信大家前面三个元素都能处理,车库也不在话下,如需其它元素处理可底下评论区留言。第一次发表文章,希望大家多多支持,如有没有讲清楚的地方可底下评论区留言,感谢观看!

 

 

你可能感兴趣的:(智能车竞赛,电磁循迹,pid,chrome,前端)