在非匀速的条件下,采用了新的数据存储格式。首先对当前的状态进行弯直的判断,根据迷糊控制得到的舵机的转角值c_ang,判断得到当前车的弯直情况。同时由于车是非匀速行驶的,而第二圈所行驶的时间间隔和路程间隔也并不一定和第一圈完全相同,因此只判断弯直情况,在弯道时,记忆每一个测试点的转角值,而直道时,既没必要存储转角,又可节省大量存储空间,因此对于直道时只记忆直道的起点和终点路程,而该路程是小车相对于起始点的绝对路程,也即霍尔传感器检测到的磁钢的个数ect_cnt。
系统按照前一状态和当前状态的不同情况分别进行数据存储,其算法如下:当前一状态是弯道,现状态是直道时,即弯直态,则写入0x7f,ect_cnt,其中ect_cnt是当前的路径计数;当直直态时,不存储;当直弯时,写入当前的ect_cnt,0x7f,当前的c_ang;当弯弯时,写入c_ang。系统初始化时为弯道,则开始行驶后,进入起跑线,此时检测到是直道,进入弯直状态,写入0x47和当前的ect_cnt,这就是道路的起始存储数据。
数据的分析及处理
第二圈过起跑线时,系统配置成进入弯直状态,此时应该根据第一圈记录的数据算出直道的长度,这样车在直线上就可以以很高的速度行使,并且能够提前减速,安全进弯,达到很好的控制效果。
在由直线进弯时,如果在弯道中出现直道,并且计算出其长度小于某一值的时候,认为是过弯过程中出现的小范围的直线,仍按照弯道处理。本算法的核心也在于如何过滤弯道中出现的直道,以及从分析不同的弯道形式。把弯道分成以下几类:
(a) 急弯:这里所说的急弯也就是竞赛规定的曲率最小的弯。在急弯时,转角的个数相对较少,转角值相对较大,并且在正常情况下所有的都是同向的。
(b)圆形弯道:相比于其他几种赛道元素,圆形赛道的识别比较简单,当同一个方向的转角大于某一个数值时,并且中间过程中没有换向发生,便可以认为小车进入了圆形赛道。因为在角度的控制上,本系统采用了模糊控制,车在进弯时能够迅速调整角度,并以一个恒定的角度过弯,以上的数据是验证了这一结果。
(c)小S弯:小S弯的特点是:在过弯的整个过程中既有左转又有右转的,并且左转角度的个数和右转角度的个数都应该大于某一个值。此外,单次左转或者右转的角度的个数小于某一个值。考虑到小S的前后可能会接着其他弯道,本系统在第一个换向点之前,按照其弯道行走,在换向点之后采取小S的行走策略,在最后一个换向点之前结束。
(d)大S弯:大S相比小S而言,其赛道特征是相似的,只是判断的标准稍有不同。首先,大S之间有较长距离的直道,必须加大直道的判断范围才能将其过滤掉。其次,单次左转或者右转的角度的个数应该大于小S的个数。
针对以上赛道分析,系统首先分辨下一步的赛道元素,然后按照行驶策略,将第二圈的行驶速度及方向进行控制。其主要思想为:
(a)直道行驶:将直道分为短直道和长直道,短直道就做一般加速处理;长直道在起始处全力加速,末端进行线型减速,也即将速度分成高速,中速,低速,从高到中再到低。经实验发现直接从高速转为低速时,小车在过弯时不稳,容易测滑,不仅影响速度,启动也慢。采用线型减速后过弯流畅,能达到很好的效果。这样就避免了由于车本身的某些局限性,如舵机响应时间、赛道摩擦系数、轮胎抓地力、传感器布局等因素的影响所造成的直线速度不能加到最高的缺点。
(b)对于小S,理想的情况下是实现同CCD同样的效果,采取高速直线过弯的策略。为了安全起见也可以采用滞后过弯的策略,让智能车采取较小的转角高速过弯。
(c)对于大S赛道,不同的曲率弯道,小车有它最佳极限速度存在。利用初圈得到弯道的曲率半径以及S道之间直线的长度,在过各弯道时将车速调至它相应的极限速度,从理论上就是它所能跑出的最优成绩了。
(d)对于圆形弯道,需要在弯道的曲率和过弯的速度之间做一个权衡。当行驶的曲率较大时,那么车可以以较高的速度行驶,当走内圈时,由于半径的减少,离心力的增大,就不能以较高的速度行驶,但是可以找到两者之间的平衡点。