从去年年底计划参加Freescale智能车大赛,今年二月组队正式开始,到现在循赛道基本功能实现,不可谓不艰辛。这一过程中大多的酸甜苦辣在此先不多做赘述,单就SD-5舵机使用过程中遇到的问题进行一下总结与分析。本人也是第一次参赛,如有不妥请多指教。
S-D5舵机是Freescale官方指定的B车模专用舵机,主要用于车模前轮的左右转向控制。
舵机本身是一种由多齿轮轴承,加上控制电路组成的模块,结构大致如下图:
我们通过给控制线输入不同占空比的PWM波信号,来调节与控制舵机输出轴承的转角大小。对于一般的舵机,比如工作频率在50Hz,也就是周期20ms,它的0~180度大致在周期0.5~2.5ms的时候,我们输入的pwm波的占空比就应是在0.5/20到2.5/20之间。
由于PWM波中某一个周期内高电平持续时间决定舵机转角,那么我们通过pwm脉宽调制控制好舵机输出的转角,加上简单的机械连接,就
能自如控制车轮的摆动。
对于Freescale,我们选择的是光电(线性CCD)组,那么在通过线性CCD采集线性的图像信息,通过AD电压转换将模拟信号转化为数字信号便于代码处理,再经过二值化与均值滤波,提取赛道边缘的黑线后(关于CCD自适应曝光、信号处理以及赛道分析会在后续篇章中详述),就是对于赛道中线的计算与PID控制舵机打角了。
最一开始,需要对舵机中值进行测定,让舵机转轴打到中间位置,再测定舵机需要打角的左右极限,相信参与过Freescale的前辈与朋友们都清楚。我们一开始仅仅是分频50Hz、20ms周期给舵机,然后随意找了下中值与左右极限,在前三周的调试过程中没有出现太大的问题,基本可以按照我们所想的要求跑,但总觉舵机反应不灵敏,摆动稍显滞后,怎么调PID都不大行,勉强可跑。
在开始后第四周,为了提高舵机响应速度,我们将B车模舵机由原先的靠近车模中间的位置调整到车前端,相当于把舵机原先控制左右轮的位置反了过来,此改装方法网上十分常见大家可自行搜索。提高响应速度的原理我并不懂,这是机械方面的问题,本人只是电子通信专业的大二学生。
这一改装倒是改出了一大堆问题。
首先我们意识到,S-D5舵机的工作频率可以达到300多Hz,而我们前期准备不足导致先前的参数设定不妥。这一点有重大意义:
1.对于舵机,很多人都以为提高响应速度应该改pwm占空比,亦或是提高工作频率。但是这是完全不着调的看法。实际上,舵机的工作频率,在合理范围内,越高则精度越高,但会出现不稳定与都懂的现象;越小则精度越低。
2.对于多级的响应速度,一般来说可由机械连接改造(向我先前提到的改装)来提高,再者就是有电压大小决定。只要不超过舵机的最大工作电压(S-D5最大是7.2V),适当提高可提高响应速度,网上很多人提高到了6V输入,保险起见我们暂且只用了5V,比赛期间将正值7月酷暑,如果电压设置太过激进,不排除烧掉的可能。
3.我们暂且将舵机的工作频率定在了300Hz,我们的许多兄弟队伍用的是200Hz。正如我前文所述,频率过高可能会增加不稳定性,我们在试车时确实也发现车模转急弯时舵机似乎略有抖动,很细微,由于转弯快且平滑也不太看出问题,但是后期速度提升我估计问题会更加明显,我决定暂且不作改动,算法优化提速后若需要可以适当降低频率。
其次,改装舵机后,用的还是我们原先买的舵机,但我们不论怎么调节中值与左右极限,都发现其左边的转角速度大大低于右边。在跑道上试发现右边拐的很轻松,而左边拐不过去。一开始我们以为通过左右转向打上不同PD参数值可以解决问题,但依然不行。由于此问题出现仅在我写此博文的27个小时前,所以我们还没有准确判断出具体原因,初步怀疑舵机的齿轮有损坏。因为我们换了一个去年学长比赛剩余的舵机后立马没有了刚才的问题,所以不会是算法问题(吐槽一下:蓝宙的东西不光贵质量
还真的
不咋的,我们队还有同校的其他队伍都买了它家的东西,但是各种问题各种损坏,而且这绝对是其制板与电路设计的不过关)。
在换舵机后发现300Hz工作频率下,舵机的转角稳定而且快速,在昨晚的反复测试后我们依然觉得舵机右转的灵敏度略大于左,所以依然在左右转向使用两组不同的PD参数,这应该算是模糊PID控制了吧。之后小车跑的很稳定,转向灵敏且平滑,之前转大弯丢线过度导致检测出错冲出跑道的问题基本上没有了。可以说,虽然我们并未在赛道弯道检测与处理中从根本上解决丢线跳变的算法问题(我们赛道的背景是白色,在快速过弯时对于检测算法上有很大的处理困难,一般来说背景色是深色,二值化处理可以将白色赛道以外包括黑线部分全部处理成低电平,过完容易),但是当舵机PID调整好之后,车模过弯始终在中线附近,CCD像素中点几乎不会落在到赛道外,因而不出现跳变,车模平滑过弯。
在这里还要就舵机的中值测定多做论述:
我们测定的方法是比较随意的,大致在7.5/300~37.5/300的范围内找中值,切记取值时是有范围限制的,不要超出舵机的转向占空比的范围,我们发现当我们随意给占空比时,给过大或过小舵机是不会响应的,因为超出范围。所以占空比控制在0.025~0.125以内。
和我们天天在一个场地调车兄弟队伍跟我们提出,舵机中值的确定是很有讲究的。他们的说法是,每个舵机出厂时都有它的锁死频率。即在此频率下找到的中值位置上,给上VCC与GND,加上信号线,即使输入信号时不输入占空比,仅输入此锁死工作频率,舵机会打死,无论怎么扳动舵机输出转轴,都不会转,若不在此频率下,仅给工作频率,舵机可以被搬动。所以他们为了试出这一频率,可以说是一个一个频率的试。他们用的时K60主控,库函数调用,频率分配只是改一个参数而已,这样他们都试了一上午才找到“锁死频率”,我们用的是S12XS128,配置锁相环与PWM输出频率,要按照算式改一大堆参数,还是16进制,所以我们果断放弃了此法。大家可以自行参考。
关于S-D5舵机,我们遇到的问题总结暂且就这么多,截止3月29日下午我们的小车速度大概在1.4m/s,网上论坛上的光电组高手一般都在2m/s多快3m/s了,还需多多努力啊!希望大家踊跃评论,不吝赐教。
2014.04.06