第三种直道情况 (图4)
此时采取直线稳定控制。由于前两种情况已经明确识别为直道,此种情况只是增加直道识别的成功率。
第四种直道情况(图5)
与第二种情况类似,对第五种情况的再确认,右转转大弯并经过第五种情况后,再经历此种情况,可确认无误前方为直道,继续提升小车的加速能力。控制程序由弯道程序切换到直线稳定程序。
第五种直道情况(图6)
在右转大弯后,出弯时最可能出现的前后排传感器检测到黑线时的组合情况。适用于右转转 90o弯、180o弯。提前得到出弯信息,舵机向右转动较小角度,并在此时采取加速动作,起到弥补前瞻不足的作用。在赛道的s弯出现时,不满足直道的第二种识别方式,故不会加速。
(2)直道识别,程序辅助确认
进入弯道后,随着小车的行进,会发生振荡,致使出弯时不一定满足上述5种情况。为了提高直道的识别成功率,增加第二种直道判别方法。两者同时起作用,满足第一种后经过最多15ms确认是直道。
程序是循环执行,我们的程序执行频率是2KHz。采用定时中断(15ms)的方式,对前排中间3个传感器(编号为3、4、5)使用3个计数器分别计数,每次执行程序若是其中一个检测到黑线,相对应的计数器加1。经过计算,15ms内所能计数的最大值为31。我们设定计数的最大值,若在15ms内达到所要求的计数值,就认为是直道,切换直道程序并将计数器清零;若15ms内没有达到所要求的计数值,计数器清零,重新计数。例如小车为2m/s的速度,小车行进3cm。我们只要判断2~2.5cm内为直道即可。所以设最大计数值为20~25即认为是直道,跳出弯道程序。
当然也可以采用更严格的方法来判断,只需调整定时中断的时间和计数值即可。此条件在进入直道后总能满足,所以作为第一种直道判别方式的补充,保证直道的稳定可靠识别。
直线稳定控制策略
小车出弯后,由于舵机的反应不灵敏,智能车会发生振荡,随后才能达到稳定,为了尽早减小振荡,采用如下方式控制小车出弯后的动作:
在弯道策略中设置标志位,进入直线程序后,识别标志位,对控制舵机转向的公式采取修正设置。公式为:q=K1q1+K2q2;其中q为最终送给舵机的控制量,q1为前排光电传感器的返回转角值,q2为后排红外返回转角值。K1、K2分别为前后排传感器的加权比例值。通常情况下K1、K2为1,需要时则改变赋值。
当小车从弯道进入直道并成功识别出直道后,减小K1的值,由于后排传感器距离小车的前轮(转向轮)很近,小车中心偏离黑线时,不会在后排传感器横向位置产生很大位移(相对于前排传感器),故小车在直线上舵机调整的次数就会明显减少,直线的稳定性会好。同时,根据前后排不同传感器的组合,给出不同的转角策略(在程序中以列表的方式体现),近一步提高直线的稳定控制能力。