全地形车比赛(下)
Wo先唠点:
这篇文章前半部分记录Wilsin在2017年吉林省机器人大赛中,如何使用履带车翻越不同障碍,后半部分记录Wilsin在2018年吉林省机器人大赛前如何制作三个大轮子车,以及相关比赛过程。
前半部分:
在《我是如何连续两年获得吉林省机器人大赛一等奖的(中)》,我记录了有关小车进行循迹的方法,接下来,我将按照比赛地图上的障碍顺序,记录我是如何控制履带车进行障碍翻越的。
由于履带车速度较慢,所以减速电机没有采用PWM调速控制,一直保持履带车全速运行跑下来全程的。需要控制的就是履带车的前双臂了,通过对履带车前面的两个舵机发生不同占空比的PWM信号,实现舵机带动双臂实现上中下的摆动。
需要做到的是双臂同时同角度调节,这样才能保证在翻越障碍时,小车不容易跑偏,这个需要在调节舵机时记录两个舵机的偏差,我当时是一点点测试出来的,因为每个舵机的特性不能完全相同,得到相同角度时,其对应的脉冲宽度也不完全相同。
后来,我确定了舵机需要用的三个固定角度,以水平为零度,向上45度我定义为up,向下45度我定义为down,中间0度我定义为flat,这样在需要舵机运行到对应的角度时,直接调用对用的函数即可。
需要注意的是,可以看到在A,C以及E任务时,由于障碍物是完全黑色的,小车没有办法正常循迹(栅格地面是蓝色的,但由于其有一定高度,也不能正常循迹)。所以,在执行这些任务时,我把各个任务分成了一个时间流程,也就是在这段时间内,履带车就这样按顺序执行该任务,只有等该任务结束时,而且延时时间结束,才会回到正常的循迹。也就是在执行各个任务的时间段内,小车不能正常循迹,很有可能小车会跑偏,这就需要小车有很好的稳定性。但履带车行走时候比较稳,所以我并没有对这一点进行考虑。在现场比赛时,见到北华大学的一个学生,安装了陀螺仪进行车身的稳定,车再过障碍时确实很稳定,但是该器件的一个缺点车每次初始启动,陀螺仪都需要一定的校准归零时间,这就会耽误一定的比赛时间,比赛结果,他成绩确实不怎么理想。对于竞争性比赛,像这种占用时间的硬件还是不用为妙。
A任务: 窄桥
我把窄桥任务分成了5段,在A1段,先up舵机,直行一段时间到A2后,flat舵机,这样使得小车与斜面接触面积最大,更易上坡。延时直行一段到A3,舵机保持flat,到A4后由于小车要下坡,为了车身稳定,将舵机down,延时直行,到A5后up舵机,稍微延时直行一段后,释放任务,开始正常循迹。其中每段的延时时间间隔都需要现场调试到最佳,各个场地的接触面粗超度不同,造成车上坡时间也不同,没什么好方法,只有一点点调试。
B和D任务:管道
在过管道时,不需要建立任务,只是靠正常循迹进行拐弯行驶。由于过弯道时,车身太长的话会拐不出来弯儿,卡到管道里面,所以过弯道的时,舵机应该保持up状态,这样车身最短。这就需要小车在正常循迹时舵机的状态一直是up,因为在过弯道的时候没有任务双黑线,没办法仅仅到管道的时候调整舵机up,而平时flat,所以需要设置正常循迹时舵机为up。
C任务:台阶
小车在过台阶时,我也是划分了五段顺序执行。在B1段,舵机up,准备上第一阶楼梯,延时直行,小车进入B2区域,也就是快挨着第一个台阶时,调节舵机为down,这样再延时直行,小车就上去第一个台阶了。然后到B3区域舵机同样先up状态,再down状态,延时直行,第二个台阶就上去了。我当时设置的各段直行延时时间为1s,这个也就是大概设置了一个时间间隔,发现正好可以上去台阶。到B4后,保持舵机先是flat状态再调节为down状态,这样小车在下楼梯是有个向下的支撑,不容易翻车。这样延时直行,直到小车到B5平地上,调节舵机为up态,释放任务,开始正常循迹。
E任务:栅格地面
过栅格地面时需要特别注意的是栅格地是往下凹陷的,也就是小车在栅格地上行驶时,不能让双臂向下,这样虽然车身提高,但是双臂会卡到栅格里,所以应该保持flat状态去过栅格地。依然分段执行,当在C1段时,保持舵机UP态,延时直行,到c2段后,由于栅格有一定高度,需要先将舵机由up态调到down态,这样延时直行等车完全上去栅格后,要赶快调节舵机为flat态,然后延时通过C3和C4段,由于栅格地只有3cm,所以下栅格地时不需要再控制舵机,直接下去车身不会太偏。这样,可以保持长延时,直到小车冲过终点线,因为余下的路程全是直线了,就不需要再释放任务恢复到正常循迹了。
另外需要注意的是,在安装循迹模块时,要注意调节离地面的高度,避免过栅格地时,被栅格边框碰到,造成传感器失灵。
电池安装位置:
我买的是由干电池串联做成的12v干电池,有一定的重量,这个重量会影响车的重心。在上坡和上楼梯时,重心越靠前,车越容易翻过障碍。所以,我把电池用魔术贴安装到了车身最前部,其他元件重量不大都安装到车的中后部,这样就很好的利用了重心。
2017年的比赛就是这样,努力加上运气一次性跑完全程,用了大概12s左右,获得了省一等奖。
第二年怎么想的?(用大轮子车)
第二年就是大三下半学期了,带队老师比较看好我,就一下子报了三组名。但实验室一直只有我一个人,为了不辜负老师的期盼,只好苦逼的干了。由于上一年比赛,见北华大学用的大轮子,拿的是吉林省冠军。所以今年我就想拼一把大轮子,想弄个冠亚军什么的。然后在淘宝上找大轮子车。
用大轮子车需要注意的就是轮子大小,不能太大,太大车身会过高,过玻璃隧道的时候过不去。不能太小,太小的话过台阶的时候上不去。这个我挺没经验的,后来在比赛群里有个网友说他也做的这个比赛,买的直径85mm的大轮子,可以上去台阶。我想了下,每层台阶100mm,加上车的惯性和轮子的摩擦力,应该真可以。就在网上买了85mm的大轮子,配的电压12v速度330转/分的减速电机。商家给配了一些轴连器,电机支架,螺丝螺母等配件。还配了一个车底盘,但是左右距离太宽,过隧道会卡进去,前后长度还太短,这样小车在上台阶的时候就容易后倾翻车。我用台锯把实验室的PCB电路板进行了切割,做了一个底盘,这个底盘的要素是车长要保证在20cm左右,这样才能保证小车上台阶不翻车。
另一个要素是车不能太宽,我设计时,将左右两个电机中间距离为0.5cm,这样保证车宽足够小,过隧道的时候比较灵活,不容易卡车。四个轮子安装时候,尽量顶前后边缘安装,这样上坡或者楼梯时,车轮最先接触障碍物,避免车身与障碍物碰撞。电池依然用魔力贴固定在车身最前部,这样是为了是重心靠前,容易上坡和台阶。驱动芯片等电路板重量轻,安装在中间和后边。
小车组成:
第二年相对来说积累以一些经验,有点信心,在网上直接买的现成的电机驱动芯片和可调稳压芯片。控制单片机用的是STM8s105,用到了pwm输出控制电机。
可调稳压芯片:LM2596S可调稳压电源板
这个电路板是可调降压板,输入端直接接+12V电池和GND,调节输出电压为+5V,供单片机和循迹模块用电。由于该芯片最大输出电流为3A,用一块就足够供给单片机和循迹模块用电了。
步进电机驱动: L298N电机驱动板模块
这个模块和第一年用的由L293D芯片做的驱动电路类似,一个小车用两个模块。由于小车的同一侧的前后轮子运动状态要保持一致,所以一个模块控制一侧前后两个电机。
该模块我直接把12V供电接的电池输出,这样可以正常工作,但是比赛的时候,才发现自己犯了以个大错误。由于电池实际电压受到使用时间的影响,这就造成在刚充满电的时候是大约13v左右,可跑一段时间就变成12v或者更低,这样就造成即使pwm驱动一样大的时候,由于电源电压不同,车速不同,在过障碍时的速度就不同,需要进行延时的时间长度也就会发生变化。以至于每次上跑道的时候,我都拿电压表测电压,保证电压正常稳定值,才能开始跑。如果将电池输出接一个12v稳压模块后再接到电机驱动模块上,就不会出现这么尴尬的局面了。
模块上的5v供电不用接,逻辑输入IN1,IN2接单片机的pwm1和GND,控制输出A的电压,以驱动左边前电机。由于一侧电机状态要保证一致,所以IN3,IN4也接单片机的pwm1和GND,控制输出B的电压,驱动左边后电机。这个直接将单片机输出引脚用杜邦线分成两路,接在IN1和IN3上就可以驱动,不需要进行放大。右边类似,只不过是接的单片机的pwm2。
可以看到电机驱动板上有逻辑A和B的使能引脚,是用短路帽进行连接,在现场调试的时候,用镊子去下短路帽,供电情况下,让轮子不转动,调试寻迹模块灵敏度时使用。
大轮子循迹模块安装很重要:
安装循迹模块时,我碰到了一个问题,由于买来的循迹模块还是用的去年的那种类型,具有一定的体积,本来想像履带车那样安装到小车的前面,却发现电机也在前方,没有办法直接安装。所以就考虑安装到车的中间底部,安装好后,调节循迹才发现循迹模块安装在中间有一个很大的弊端,就是车身已经偏的很大了,车都有一定倾斜角度了,才会使得模块感应到信号,这个是由于角度变化相同时,线位移变化不同造成的。所以。循迹模块必须想办法安装到车身最前方,这样稍微有一点角度变化,对于整个车身来说,线位移变化最大的就是车最前方。但电机安装位置受影响怎么办?而且电机不能往后移动,因为电机靠后以为着轮子靠后,这样过障碍时轮子不能最先接触障碍物。循迹模块又不能安装到车上方,这样距离太远,红外强度会太弱,到玻璃隧道时,循迹灵敏度会降低。后来我就想到了把循迹模块拆开,控制板安装到车顶部,把红外寻迹发射和接收头,用塑料的六角柱粘住,因为电机距离最前边有大约1cm的距离,这样就可以把六角柱用螺丝安装到车的前部了。还要注意的是,连接控制板和红外寻迹发射头以及接收头之间的导线不能太长,否则会失灵。还要注意在拆模块时,要注意对正负极做标记,因为红外发射是分正负极的。由于小车被留在实验室,我就没有办法分享我改好的循迹模块的图片了。
还要注意发射头的高度,也就是六角柱的长度要控制好,太低的话,车再过障碍物时,下楼梯和过栅格地是会碰到,太高的话过玻璃的时候循迹效果不好,这个要经过调试自行把握高度。
另外就是循迹模块的左右安装距离。我调试的时候发现大轮子车速太快,车在左右拐时,角度太大,这就不能把模块安装的像履带车那样太近,否则车稍微一偏就开始左右拐,由于拐的角度太大,就后使得另一侧的传感器碰到黑线,这样小车就在无休止的左右拐了,而不往前走了。所以,我在固定循迹模块时,调整左右间隔安装距离为循迹黑线宽度的二倍,而第一年的循迹宽度是黑线的1.5倍。
程序设计变化:
程序控制思想依旧没变,依然是像履带车那样,20ms进一次中断。就是在执行各个过障碍物的任务时,不是控制舵机了,而是控制小车的速度,不能全场高速跑下去,这样在过障碍物时候容易翻车。
由于大轮车的车速太快,在正常直行的速度也不能给全满,否则车速太快,循迹根本反应不过来,需要用中速度来控制。循迹左右拐的时候就是改变pwm1和pwm2,如果直行,就让pwm1和pwm2都有效,如果左拐或者右拐就让一个有效,千万不能让一侧轮子正转一侧反转来拐弯,这样拐的角度会太大,所以,履带车和大轮子车拐弯的方式还是不一样的。
过任务时,还是学第一年那样,把各个任务分段执行。上坡的时候,要全速走,下坡的时候减速为慢速,然后延时一段时间,释放任务。过台阶时候,不能用满速,否则会使得小车跑偏,就用中速度靠车轮摩擦力上去,下楼梯的时候要减速延时,释放任务。过栅格地时,就全速开跑了,车不会太偏,过终点线就行了。需要注意的是,在写代码时候,要把各个任务的高中低分开,因为车速对于不同障碍的标准不同,分开各个任务的高中低速控制pwm时,这样方便现场的调试。
就这样,做了三个一样的车,去参加了比赛,一个人调试车确实有点忙不过来,时间也太紧,出现循迹失灵问题也挺多,最终还是循迹模块的选择吃了亏,最后一个车获得了一等奖,另外的两个车现场出现了故障,都是二等奖,有点遗憾。
写在后面:
大学,一个人在实验室待了两年。实验室有条PCB生产线,就在网上找Altium Designer软件教程,慢慢学会了画双层电路板。然后,就一个人看机器的说明书,在实验室学着做PCB板,学贴片机的编程。老师也带着我报了很多比赛,一个人慢慢做,都还就做出来了。快要出实验室的时候,老师正好要出本PCB生产的书,我就参与了编辑,用了三个月的时间,把自己关在一个黑屋子里,把自己在PCB生产时学习的方法一点点写了出来,A4的纸,写了200多页才写完,最后,老师说给我个副主编的名号,我很高兴,不过现在书还没出版。对,这就是我的大学生活。
就这样,很快就快大四了,我选择了继续学习这条路。年级不小了,学习的路还很漫长,要学习的东西实在太多。但没有办法,放弃就意味着失去未来,你不在这个领域付出、努力,总有人在这个领域付出努力。生活就是这样,没有什么道理,我们唯一可以做的就是顽强的走下去。
最后,感谢父母给我学习的机会,感谢许师和杨师的栽培,感谢朋友的鼓励,感谢网友的支持,感谢面包板论坛,感谢这个伟大的时代!
默默陪我的实验室,这是我写给你的一封离别信。
作者: wilsin, 来源:面包板社区
链接: https://mbb.eet-china.com/blog/uid-me-3880669.html
版权声明:本文为博主原创,未经本人允许,禁止转载!
wilsin 2018-7-1 08:27
二不过三 2018-6-26 11:51
wilsin 2018-5-28 12:22
qwqr3231 2018-5-28 11:02
wilsin 2018-5-27 12:04
eeNick 2018-5-27 11:29