6.1.1速度传感器模块
为了使得赛车能够平稳地沿着赛道运行,需要控制车速,使赛车在急转弯时速度不至过快而冲出赛道。通过控制驱动电机上的平均电压可以控制车速,但是如果开环控制电机转速,会受很多因素影响,例如电池电压、电机传动摩擦力、道路摩擦力和前轮转向角度等。这些因素会造成赛车运行不稳定。通过速度检测,对车模速度进行闭环反馈控制,即可消除上述各种因素的影响,使得车模运行得更稳定。此外,在记忆算法中为了记录道路信息,需要得到赛车运行距离,这也可以通过车速检测来实现。
车速检测的方式有很多种,例如用测速发电机、转角编码盘、反射式光电检测、透射式光电检测和霍尔传感器检测。经过对去年测速方案和其它学校方案的比较,本次设计中速度传感器采用的是OMRON公司生产的E6A2-CS100型光电编码器。它由 5-12V的直流供电,安装方式如图6-1所示。速度传感器用螺钉固定在塑料片上,塑料片固定在后轮支架上,这样固定好之后,就有了较高的稳定性。速度传感器通过后轮轴上的齿轮与电机相连,车轮每转一圈,速度传感器转过2.75圈。

图 6-1 速度传感器安装位置
速度传感器有三根引线,其中棕色线接 VCC(即图 6-2中的引脚 1),蓝色线接地(引脚 3),黑色线为输出信号,需要上拉后接入单片机(引脚 2)。车轮每前进一段距离时,速度传感器便产生一定数目的脉冲,单片机利用 ECT对脉冲进行计数,从而得到速度值。

图 6-2 速度传感器接线
6.1.2速度传感器初始化
通过对每个控制周期内速度传感器产生的脉冲数进行累加,可以测出这一周期内的平均速度。由于目前速度传感器的精度较高,所以用了 16位的脉冲累加器 PB进行脉冲计数。其初始化过程为:
TIOS=0x00; //所有通道设置为输入捕捉
TSCR1_TEN=1; //主计时器使能
TCTL4=0x03;
PBCTL_PBEN=1; //16位脉冲累加器 B使能
6.1.3速度获取
在每一控制周期开始,S12读取脉冲累加器中的数值,然后与第 m个控制周期前的脉冲累加器值作差,这样就求得了之前m个控制周期时间里共有多少个脉冲数累积,从而由可求得赛车速度值。程序流程如图 6-3.

图 6-3 速度获取
6.1.4速度传感器准确性测试
让赛车在赛道上行驶,每 20ms就将赛车当前速度值通过串口发送到电脑上一次。对赛车行驶的正好一圈中的速度值进行累加求和,再乘以 20ms,得到的总共行驶距离为 27m,而赛道总长为 26m。两者的相对误差不到 4%。这说明,速度传感器测量基本准确。
6.2舵机控制
按照比赛规则,赛车应沿赛道行驶,不得触及两侧的标志杆,所以必须根据导引线和赛车的相对位置,及时对舵机进行调整。通常赛车行驶时间最短的路径(最佳行驶路线)与导引线位置接近,因此较为简单的行驶策略是使赛车基本沿着导引线走。但是,赛道上存在一种特殊情况,如图 6-4所示,导引线相对于一条中心线左右摆动呈“ S形”。对于这种道路,赛车最佳的行驶路线应该是其中心线方向。以下分别介绍简单沿线行驶策略和最佳行驶路线的舵机控制策略。

图 6-4 S道
6.2.1 简单沿线行驶策略
简单沿线行驶策略的目标是控制舵机使得赛车尽可能沿着导引线前进。如果采用光电管寻线方案,由于探测距离有限,即使赛车检测到导引线进入弯道时,立即开始按照距离偏差的正比执行转向,开始时角度偏转也将很小。若采用 PID控制的 D分量,由于微分量反映了路径曲率的变化,增加了这一项,可以提前对舵机进行转向控制。
在 2005年韩国比赛赛道上用光电管方案、PID对舵机转角进行控制,发现添加 I参数后系统变得非常不稳定,所以这里只用了 PD控制。改变 P、D值,记录赛车运行时间和实际行驶路线与导引线偏差的程度,得到下表结果:
表 6-1不同 PD参数下赛车运行情况

从表中可以发现,当路径偏差小的时候赛车跑完全程的时间就短,当方差等于 50.2时,赛车的速度最快。因为路径偏差是赛车调整次数和调整程度的反映,当赛车调整次数少并且调整量小的时候,赛车就减少了走无效路程的时间,总的时间当然就小了。
为了说明 PID各个参数对系统的影响,可以分析赛车在第一个急弯上冲出赛道的时间,这个时间可以认为是黑线丢失的持续时间。该时间表示的是赛车的动态响应特性。但仅凭这一时间无法知道赛车的超调程度,因为冲出赛道后检测到的黑线位置都是在最边上。因此,只能近似分析出赛车的动态响应特性。根据 PID理论,P系数能影响小车的动态响应特性。随着 P值的增大,赛车的动态响应越来越快。从表 6-2中可以看到,随着P从60变到100,赛车在赛道外的时间逐渐变小,这说明赛车的动态响应变快了,因为赛车一检测到冲出赛道马上做出了调整。
表6-2 不同参数下赛车冲出第一个弯道的时间

从理论上分析,当加入 D分量后,赛车的动态特性基本不变,而超调变小。验证时可以假定赛车的动态响应基本不变,那么参照上表当 D分量变大时小车冲出赛道的持续时间变小,就可以看到是 D分量使得超调变小的结果。因为在动态响应不变的情况下,只有超调变小,才能使得冲出赛道的持续时间变小。从这个意义上讲,当时使用光电管方案时用 PD方法对赛车进行控制是可行的。
然而如果采用摄像头对导引线进行识别,就可以在较早的时候检测到弯道,这样只要 P参数足够大,便可保证赛车有足够的转向,本设计中也就只用了 P控制。但是由于赛车在不同路段上的速度不同,为了保证系统稳定性,赛车的预瞄距离和对每行黑线偏差进行校正的 P系数是动态选取的。
6.2.2 最佳行驶路线策略
前面已经提到,对于 S道最佳的行驶路线是沿着中心线行驶,这样可以大大提高赛车速度,缩短行驶时间。如何能做到这一点呢?这要建立在两个基础之上:其一,需将 S弯和普通弯道、直道区分开来;其二,要有合适的控制策略使舵机在 S道上以较小幅度摆动,甚至直接冲过去。
识别 S道的方法基本上可以分为两种:一种直接通过摄像头采集到的信号进行判别;一种通过赛道记忆信息进行判别。这里先讨论第一种方法,赛道记忆在后面将述及。S道和直道一样,它们的黑线位置都在视野中间的某一区域内,而普通弯道会从视野的一侧拐出去,从这一基本事实出发就可以识别出 S道。当然,也可以采用其它算法进行识别,例如对导引线的趋势进行分析,如果是单独超一个方向延伸则认为是普通弯道或者是直道,反之则视为 S道。
区分出 S道后,下面就要对舵机施以适当的控制策略,使其尽可能地冲过 S道。由于舵机目前采用的是 P控制,如果在 S道上将 P系数取得很小,同时预瞄的距离也取得远一些,那么舵机就能降低对 S道上导引线的敏感程度,以较小的摆动幅度冲过 S道。如图 6-5 所示,逐渐减小 P参数后,可以看出赛车在S道上的行驶效果。图中黑色曲线为 S形导引线,路线 1、路线 2和最佳路线的P参数依次递减。

图 6-5 不同 P参数下 S道行驶效果
6.3加速度控制
这次加速度传感器使用的是 freescale公司出品的 MMA2260。
6.3.1工作方式 :
. MMA2260的端口 4负责输出会随加速度变化的电压值。
..端口 8为自检测(Self-Test)端口。
..端口 5为状态位(Status)。
..端口 4连接至 S12的 PAD3,用 A/D转换端口 3来转换电压信号。
6.3.2干扰因素
这块芯片可以测试一个方向上的加速度变化。所以采用了不同的安装方式,其间要考虑到比较多的干扰因素。
..车体行进过程中的机械振动
..速度控制不平滑对车体运动状态的影响
..常规情况下的误差和正常时,加速度传感器产生的输出区别大小
6.3.3安装方式分析
若安装于安装摄像头的立杆上,杆子在小车加减速的时候有比较明显的左右晃动,通过 Labview观察发现干扰过大。
若安装于小车后部,由于电机自身的振动,对 MEMS产生的影响会较之前更为明显。
经测试,如果测量水平 X方向的加速度,宜将装有 MMA2260的电路板装载在车前部。
若想要测量竖直 Z方向上的加速度,板子只有采用立式安装的方式。
6.3.4坡道检测

工作方式:Z方向加速度,安装于立杆上。

工作方式:X方向加速度,安装于车头。
6.3.5分析结论
由 Labview发回的曲线图可以见得,加速度变化主要在坡顶和坡底两个部分。而其变化量在(-20,20)的范围内,从直道的加速度情况对比看来在(-10,10)范围内波动,相比而言不够明显。而且小车走完坡道,由于坡度的突变,由急变到缓,小车重新调整速度,会随之产生一个巨大的波动。如果需要利用 MEMS加速度传感器,还需要进一步试验。
6.4赛道记忆
智能车邀请赛规则中明确指出,赛车在赛道上连续跑两圈,并记其中单圈最好成绩为比赛成绩。这个规则提示参赛队员,可以在第一圈时将赛道信息记录下来并进行分析,然后在第二圈时对控制算法进行优化,以提高比赛成绩。去年已经有某些队伍使用了这类赛道记忆算法,并收到了很好的效果。前面提到,为了提高直道速度必须使预判距离尽可能远才行,记忆算法就能满足这一要求。
6.4.1 路径记录方式
第一圈的信息蕴含在赛车所走过的路径中,因此选择何种方式将路径记录下来是记忆算法的关键之一。其中较为直接的一种方式是记录赛车的里程和对应的舵机转角。图 6-6是通过独立开发的仿真平台得到的里程-转角关系曲线,其中舵机转角的单位为弧度,里程单位为米。从图中可以看出,赛车先从直道(舵机转角在 0附近)驶入一个左弯(舵机转角大于 0),然后经过一段 S弯,接着又是一小段直道加左弯……,最后是 S弯右弯左弯到直道。如图 6-7所示,由于赛车的舵机转角控制策略采用的是简单沿线方式,通过这一曲线得到的赛车行驶路径和真实地图是非常吻合的。

图 6-6 仿真平台中导出的转角-里程关系

图 6-7 仿真地图
由此可见,通过记录里程 -转角的方式来对路径进行记忆是可行的。事实上,在自主移动机器人领域经常使用里程计进行定位。但是实际应用时,必须充分考虑到里程计的误差。
里程计的误差可以分为两类:系统误差和非系统误差。系统误差是由于轮子直径、轴距等安装的精度所造成的,而非系统误差是由死锁、打滑等不连续滑动所造成的。通常里程计的误差会随着路程长度累积,如果赛道长度较长,则势必造成较大的误差。实际测试下来,控制赛车在 21.5米长的赛道上沿线行驶,最后的里程误差在 0.1-0.2米左右。这一距离和赛车长度在一个数量级上,应该对第二圈的控制不会产生太大影响。
6.4.2 数据存储
要成功实现赛道记忆算法,必须有以下几大前提:
1、赛车在第一圈必须安全走完全程以记录数据。
2、赛车必须能明确分辨出第二圈。
3、赛车必须能够有足够记录一圈赛道数据的存储空间。
4、赛车记忆和处理信息的时间必须不影响赛车的控制时间。
第一个条件通常都能满足,另外前面已经对起始线进行了识别,因此第二个条件也已满足。这里主要讨论存储空间和处理时间的问题。
由于单片机芯片的RAM容量有限,而记忆算法需要大量的存储空间记录赛道的信息,第一圈记录的数据越详细,第二圈可用于控制的信息就越丰富,因此如何记录和存储足够的数据也是运用记忆算法的基础。当然,算法研究者可以对算法进行优化处理,改变保存的格式以节省内存空间。例如采用一定的压缩算法,把直道,弯道分成若干级别,分别记录他们的距离和顺序。优化压缩虽然可以节省存储空间,但对于赛道信息多少都会有丢失,不利于记忆算法的准确使用,因此如果可以获得更大的存储空间,就可以完整记录赛道的特征信息。
S12单片机提供了2K Byte的EEPROM,EEPROM是一种电可擦除可编程只读存储器,其内容在掉电的时候也不会丢失。目前赛车的平均速度一般都在2米左右,对于一个50米长的赛道,25秒内就可以跑完。由于摄像头更新频率50Hz的限制,赛车的控制周期一般都是20ms,由此可以得出跑完一圈才运行1000多个周期,就算每2个周期记录一个16位的信息,EEPROM的容量也已足够。
在对EEPROM进行编程和擦除时,要严格地遵守下列步骤[11]:
首先,访问ECLKDIV寄存器,进行时钟分频,EEPROM需要编程时钟在150-200KHz之间。如果没有设定时钟分频,对EEPROM的一切操作无效。
检查CBEIF标志位,确定地址、数据和命令缓冲区是否为空。然后,进行如下的三步操作(注意,操作顺序不能改变,中间也不可插入其他操作):
向需要编程的地址写入一个字(2Byte)。如果是全擦除操作,可向EEPROM中任意一个地址写入数据;如果是向量擦除,则二进制地址的最后两位将被忽略。
向 ECMD寄存器写入命令字。
向 CBEIF位写入 1开始命令。CCIF位置 1表示命令被执行完毕。用户可以通过中断机制确定命令的完成。
如果出现无效的命令字或是企图修改保护区内容的操作,ACCERR和PVIOL位会置位。
EEPROM的写和读函数 ee_write()和 ee_read()。其中 ee_write()向一个给定的地址里写入一个整型数,而 ee_read()从给定的地址读出数据。测试表明,对EEPROM每次进行写操作所需的时间大约为0.9ms,而每次读的时间仅需 2us。写操作的时间较长,这应引起足够的重视,因为对于摄像头控制方案,保证控制周期在 20ms以内是非常必要的,否则赛车在高速行驶时将来不及反应。除此以外,对于记忆信息的处理时间也应尽量压缩。由于第一圈控制算法通常较为简单,这给信息处理提供了一定的时间裕量,所以只要算法得当,赛道记忆算法的几个条件都能满足。
6.4.3 第二圈控制优化
记录第一圈信息的关键是为了第二圈能跑得更好,所以对于使用赛道记忆算法的智能车来说,第二圈才是最关键和最吸引人的部分。在第二圈,如何充分利用第一圈收集的赛道信息,跑出最优的成绩,是需要仔细研究和考虑的。
根据转角大小可以判断赛道某处的曲率,如果利用第一圈得到的弯的曲率半径,在过各弯道时将车速调至它相应的极限速度,那么理论上这就是它所能跑出的最优成绩了。对于直道,特别是长直道,更能发挥赛道记忆算法的优势。例如,在第一圈记忆后得到某段直道为 2800个脉冲点长,那么在决策中就可在前 2500个脉冲时启动电机用最大占空比加速,超过 2500脉冲时直接减速,将速度调在下一个弯道的极限速度进行过弯。由于事先已经知道直道的长度,因此调速策略更能有的放矢。

图6-8 记忆算法速度控制示意图
如图6-8所示,第一圈中摄像头的预判距离有限,假设由直道入弯时在B点开始减速,那么为了保证经过BD后车速减到过弯的安全速度Vsafe,直道最高速度限制在V1以内。第二圈有了记忆信息以后,相当于知道了整个赛道,那么可以提高直道速度V1,但减速距离会有所增加(此时可能从 B’处开始减速)。一般地,只要AD远大于B’D,第二圈的平均速度就会更快一些。
6.4.4 问题和局限
目前大学生智能车比赛的赛道有着越来越复杂、越来越长的趋势,十字交叉线也将不只出现一个,这对于第一圈的记忆和数据处理都产生了很大的挑战。同时由于决赛之前赛道是不公布的,因此赛道记忆算法存在很大的风险,较保守和安全的算法在决赛中可能更有利。除此以外,记忆算法还有一个很大的局限,那就是第二圈和第一圈通常要保证行驶路线的重合,这在一定程度上限制了记忆算法的性能。
尽管如此,记忆算法独特的思路还是值得继续发展下去的,有着很大的发展潜力。预计在将来的比赛中,这种处理方式将得到广泛地应用,第一圈和第二圈将被区分开来,第二圈将在第一圈的基础上有所提高,而不是简单的重复。


