基于MSP430的智能小车自动纠偏与避撞的实现
智能车辆是一种机器人,它可以按照预先设定的模式在一个环境里自动行驶,也可以根据现场情况自主执行特定操作。其设计内容涉及自动控制、计算机技术、传感与检测技术等多个学科。智能小车在自动控制领域具有广阔的应用前景。其中,如何保证车辆直线行驶,而不是“之”字形行驶、转弯过程如何保证平行行驶,和超车是其中3个需要解决的基本问题。文中根据3个问题分别提出了解决方法,实际实验效果良好。
1 现实应用模拟原理
本文模拟现实应用,借助图1所示跑道(2块细木工板拼接而成,离地面高度8 cm,板上边界线由约2 cm宽的黑胶带构成:虚线由2 cm宽、长度为10 cm、间隔为10 cm的黑胶带构成)实现如下功能:甲车车头紧靠起点标志线,乙车车尾紧靠边界,甲、乙两辆小车同时起动,先后通过起点标志线,在行车道同向而行,在超车区超车,并实现两车交替超车领跑功能。
2 系统结构
系统组成结构如图2所示。小车主要由控制中心(MSP430F149单片机)、避撞检测模块、转弯线检测模块(兼作弯道纠偏)、直道纠偏检测模块、电机驱动模块、简易按键、nRF905通信接口、电源等组成。
2.1 避撞检测模块
为保证两车不相撞,需要使两车之间距离保持在一个合适的范围,即避撞。系统使用HY-SRF05超声测距传感器,将其安装在小车车头,可实时测得两车纵向距离,从而控制两车加速减速来使距离保持适中。HY-SRF05有优秀的性能,感应角度:不大于15度;探测距离:2~450 cm;精度可达0.2 cm。设l为测量距离,t为往返时间差,超声波的传播速度为c,则有t=2l/c,而声波在空气中传输速率为(m/s)。式中T为环境温度;Co为绝对温度时的速度,是常数。从上述两式可以推出
。
2.2 转弯线检测模块
采用红外反射收发对管来检测黑色标志线,放置在小车车头,用于检测图1中的转弯标志线和超车标志线,红外发射管发出的红外线照射到平板上,若红外接收管不能接收到反射回的光线则表示光线全被吸收,则检测出黑色标志线,从而输出高电压,若能接收到反射回的光线则表示检测到非黑色标志线,输出低电压。
2.3 直道纠偏检测模块
行车道40 cm,边界由2 cm黑胶带围成,如果不加防护措施小车容易滑落。正常如果不加防护措施,小车容易脱离跑道。由小车侧面两个E18-D80NK红外传感器进行直道中的纠偏,将两个红外避障传感器分别向外倾斜一定角度,安装在小车两侧,如图4所示,调节红外避障传感器的感应距离,使避障距离介于传感器到跑道与传感器到地面之间,当传感器探测到跑道时,输出低电平,表示小车在跑道上,当探测到地面时,输出高电平,说明小车即将脱离跑道,这时及时纠偏,确保小车正常行驶。
2.4 通信接口
超车时,为了确定两车的位置、及时调节两车的速度、减少超车时间,需要使用nRF905在两车间进行无线通信。nRF905是挪威Nordic VLSI公司推出的单片射频收发器,使用SPI接口与微控制器通信。
2.5 电机驱动模块
采用L298N驱动直流电机,利用它内部的桥式电路来驱动电机,这种方法的优点是利用PWM波来控制电机速度,其余端口可以控制电机的正反转。
3 软件设计
小车行驶模式分为:自主模式、跟随模式。自主模式即前面的车依照事先设定的速度行驶,并自动纠偏。跟随模式即后车紧跟在前车后面,保持一定距离,并自动纠偏。自主模式和跟随模式能自动切换。
3.1 直道纠偏算法
小车行驶过程中,直道纠偏采用两次纠偏的方式。如果仅采用一次纠偏,如图5左所示,虽然可以把小车的前进方向纠正,但小车整体处在跑道边缘,偏离跑道中心,在下次出现偏离时很容易出现来不及纠正而小车已经掉落跑道的情况。根据否定之否定规律,采用两次纠偏,在纠正行车方向同时,调整小车位置趋向跑道中心。该算法如下:
直道纠偏的同时开启TimerA计时;小车离开跑道边缘时关闭TimerA,保存计时值:nTurnHold。
继续转弯,时长为2*nTurnHold(继续保持2*nTurnHold转弯是为了将小车调整向跑道中间);反向转弯,时长为nTurnHold(反向转弯是为了纠正小车方向);恢复原来的行驶模式。具体流程图如图6所示,先判断接近的是左或右边线,做好左右转标记,然后以直道两次纠偏算法进行计算,最后根据左右转标记进行反方向纠偏。
3.2 弯道纠偏算法
采用小车两边转速不同、辅以延时的方法来实现转弯,因此延时时间是关键。然而,通常在过转弯标志线时,车身与线不垂直且角度也不固定,如图7所示。这将造成无法确定一个固定的延时值。为此,采用弯道纠偏的方法,确保小车过弯后姿态可控,该方法流程图如图8所示。其中,每辆车配有两块对称分布于车头两边的转弯线检测模块,当其中有一块检测到转弯线时,先判断是左还是右,如果是左边先检测到线则符号为“+”,否则为“-”,然后立刻打开MSP430的计时器TimerA,计算两块传感器检测到转弯线的时间差。根据符号是“+”或“-”,将上面得到的时间差以一定比例加/减到固定延时时间上,这个比例无准确计算方法,实际数值主要根据跑道的摩擦力,小车速度等客观条件确定,进而得到最终的时间参数(即转弯时长nVeerTime),转弯函数调用此参数。这样一种“负反馈式修正”的方法,能使小车在转弯后基本平行于跑道,且去向跑道中间。
评论