原创 【博客大赛】我是如何连续两年获得吉林省机器人大赛一等奖的(下) ... ... ...

2018-5-26 22:19 3502 34 7 分类: 机器人/ AI 文集: 比赛心得


      全地形车比赛(下)


     

Wo先唠点:

这篇文章前半部分记录Wilsin2017年吉林省机器人大赛中,如何使用履带车翻越不同障碍,后半部分记录Wilsin2018年吉林省机器人大赛前如何制作三个大轮子车,以及相关比赛过程。

前半部分:

在《我是如何连续两年获得吉林省机器人大赛一等奖的(中)》,我记录了有关小车进行循迹的方法,接下来,我将按照比赛地图上的障碍顺序,记录我是如何控制履带车进行障碍翻越的。

由于履带车速度较慢,所以减速电机没有采用PWM调速控制,一直保持履带车全速运行跑下来全程的。需要控制的就是履带车的前双臂了,通过对履带车前面的两个舵机发生不同占空比的PWM信号,实现舵机带动双臂实现上中下的摆动。

 

       

 

需要做到的是双臂同时同角度调节,这样才能保证在翻越障碍时,小车不容易跑偏,这个需要在调节舵机时记录两个舵机的偏差,我当时是一点点测试出来的,因为每个舵机的特性不能完全相同,得到相同角度时,其对应的脉冲宽度也不完全相同。

 

             

    

  

          


    

后来,我确定了舵机需要用的三个固定角度,以水平为零度,向上45度我定义为up,向下45度我定义为down,中间0度我定义为flat,这样在需要舵机运行到对应的角度时,直接调用对用的函数即可。

 

              


        


需要注意的是,可以看到在A,C以及E任务时,由于障碍物是完全黑色的,小车没有办法正常循迹(栅格地面是蓝色的,但由于其有一定高度,也不能正常循迹)。所以,在执行这些任务时,我把各个任务分成了一个时间流程,也就是在这段时间内,履带车就这样按顺序执行该任务,只有等该任务结束时,而且延时时间结束,才会回到正常的循迹。也就是在执行各个任务的时间段内,小车不能正常循迹,很有可能小车会跑偏,这就需要小车有很好的稳定性。但履带车行走时候比较稳,所以我并没有对这一点进行考虑。在现场比赛时,见到北华大学的一个学生,安装了陀螺仪进行车身的稳定,车再过障碍时确实很稳定,但是该器件的一个缺点车每次初始启动,陀螺仪都需要一定的校准归零时间,这就会耽误一定的比赛时间,比赛结果,他成绩确实不怎么理想。对于竞争性比赛,像这种占用时间的硬件还是不用为妙。

 

A任务: 窄桥

 

              

    

        

我把窄桥任务分成了5段,在A1段,先up舵机,直行一段时间到A2后,flat舵机,这样使得小车与斜面接触面积最大,更易上坡。延时直行一段到A3,舵机保持flat,到A4后由于小车要下坡,为了车身稳定,将舵机down,延时直行,到A5up舵机,稍微延时直行一段后,释放任务,开始正常循迹。其中每段的延时时间间隔都需要现场调试到最佳,各个场地的接触面粗超度不同,造成车上坡时间也不同,没什么好方法,只有一点点调试。

 

BD任务:管道

 

            


在过管道时,不需要建立任务,只是靠正常循迹进行拐弯行驶。由于过弯道时,车身太长的话会拐不出来弯儿,卡到管道里面,所以过弯道的时,舵机应该保持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态,然后延时通过C3C4段,由于栅格地只有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接单片机的pwm1GND,控制输出A的电压,以驱动左边前电机。由于一侧电机状态要保证一致,所以IN3,IN4也接单片机的pwm1GND,控制输出B的电压,驱动左边后电机。这个直接将单片机输出引脚用杜邦线分成两路,接在IN1IN3上就可以驱动,不需要进行放大。右边类似,只不过是接的单片机的pwm2

可以看到电机驱动板上有逻辑AB的使能引脚,是用短路帽进行连接,在现场调试的时候,用镊子去下短路帽,供电情况下,让轮子不转动,调试寻迹模块灵敏度时使用。

 

大轮子循迹模块安装很重要:

 

    


 

安装循迹模块时,我碰到了一个问题,由于买来的循迹模块还是用的去年的那种类型,具有一定的体积,本来想像履带车那样安装到小车的前面,却发现电机也在前方,没有办法直接安装。所以就考虑安装到车的中间底部,安装好后,调节循迹才发现循迹模块安装在中间有一个很大的弊端,就是车身已经偏的很大了,车都有一定倾斜角度了,才会使得模块感应到信号,这个是由于角度变化相同时,线位移变化不同造成的。所以。循迹模块必须想办法安装到车身最前方,这样稍微有一点角度变化,对于整个车身来说,线位移变化最大的就是车最前方。但电机安装位置受影响怎么办?而且电机不能往后移动,因为电机靠后以为着轮子靠后,这样过障碍时轮子不能最先接触障碍物。循迹模块又不能安装到车上方,这样距离太远,红外强度会太弱,到玻璃隧道时,循迹灵敏度会降低。后来我就想到了把循迹模块拆开,控制板安装到车顶部,把红外寻迹发射和接收头,用塑料的六角柱粘住,因为电机距离最前边有大约1cm的距离,这样就可以把六角柱用螺丝安装到车的前部了。还要注意的是,连接控制板和红外寻迹发射头以及接收头之间的导线不能太长,否则会失灵。还要注意在拆模块时,要注意对正负极做标记,因为红外发射是分正负极的。由于小车被留在实验室,我就没有办法分享我改好的循迹模块的图片了。

还要注意发射头的高度,也就是六角柱的长度要控制好,太低的话,车再过障碍物时,下楼梯和过栅格地是会碰到,太高的话过玻璃的时候循迹效果不好,这个要经过调试自行把握高度。

另外就是循迹模块的左右安装距离。我调试的时候发现大轮子车速太快,车在左右拐时,角度太大,这就不能把模块安装的像履带车那样太近,否则车稍微一偏就开始左右拐,由于拐的角度太大,就后使得另一侧的传感器碰到黑线,这样小车就在无休止的左右拐了,而不往前走了。所以,我在固定循迹模块时,调整左右间隔安装距离为循迹黑线宽度的二倍,而第一年的循迹宽度是黑线的1.5倍。

      

程序设计变化:

程序控制思想依旧没变,依然是像履带车那样,20ms进一次中断。就是在执行各个过障碍物的任务时,不是控制舵机了,而是控制小车的速度,不能全场高速跑下去,这样在过障碍物时候容易翻车。

由于大轮车的车速太快,在正常直行的速度也不能给全满,否则车速太快,循迹根本反应不过来,需要用中速度来控制。循迹左右拐的时候就是改变pwm1pwm2,如果直行,就让pwm1pwm2都有效,如果左拐或者右拐就让一个有效,千万不能让一侧轮子正转一侧反转来拐弯,这样拐的角度会太大,所以,履带车和大轮子车拐弯的方式还是不一样的。

过任务时,还是学第一年那样,把各个任务分段执行。上坡的时候,要全速走,下坡的时候减速为慢速,然后延时一段时间,释放任务。过台阶时候,不能用满速,否则会使得小车跑偏,就用中速度靠车轮摩擦力上去,下楼梯的时候要减速延时,释放任务。过栅格地时,就全速开跑了,车不会太偏,过终点线就行了。需要注意的是,在写代码时候,要把各个任务的高中低分开,因为车速对于不同障碍的标准不同,分开各个任务的高中低速控制pwm时,这样方便现场的调试。

就这样,做了三个一样的车,去参加了比赛,一个人调试车确实有点忙不过来,时间也太紧,出现循迹失灵问题也挺多,最终还是循迹模块的选择吃了亏,最后一个车获得了一等奖,另外的两个车现场出现了故障,都是二等奖,有点遗憾。

 

写在后面:

 

           

       大学,一个人在实验室待了两年。实验室有条PCB生产线,就在网上找Altium Designer软件教程,慢慢学会了画双层电路板。然后,就一个人看机器的说明书,在实验室学着做PCB板,学贴片机的编程。老师也带着我报了很多比赛,一个人慢慢做,都还就做出来了。快要出实验室的时候,老师正好要出本PCB生产的书,我就参与了编辑,用了三个月的时间,把自己关在一个黑屋子里,把自己在PCB生产时学习的方法一点点写了出来,A4的纸,写了200多页才写完,最后,老师说给我个副主编的名号,我很高兴,不过现在书还没出版。对,这就是我的大学生活。

就这样,很快就快大四了,我选择了继续学习这条路。年级不小了,学习的路还很漫长,要学习的东西实在太多。但没有办法,放弃就意味着失去未来,你不在这个领域付出、努力,总有人在这个领域付出努力。生活就是这样,没有什么道理,我们唯一可以做的就是顽强的走下去。

 

       最后,感谢父母给我学习的机会,感谢许师和杨师的栽培,感谢朋友的鼓励,感谢网友的支持,感谢面包板论坛,感谢这个伟大的时代!


       


       


       默默陪我的实验室,这是我写给你的一封离别信。


作者: wilsin, 来源:面包板社区

链接: https://mbb.eet-china.com/blog/uid-me-3880669.html

版权声明:本文为博主原创,未经本人允许,禁止转载!

PARTNER CONTENT

文章评论6条评论)

登录后参与讨论

wilsin 2018-7-1 08:27

二不过三: 有前途
感谢 欢迎指点交流

二不过三 2018-6-26 11:51

有前途

wilsin 2018-5-28 12:22

qwqr3231: 厉害了年轻人,记得书出了发出来分享一下哦
好的 我会记得的 谢谢你的支持与鼓励 欢迎指点

qwqr3231 2018-5-28 11:02

厉害了年轻人,记得书出了发出来分享一下哦

wilsin 2018-5-27 12:04

eeNick: 佩服,就冲这三篇这么长的分享文章,就知道你做事是一丝不苟的人。省赛一等奖实至名归。
谢谢你的支持与肯定,欢迎指点,我会努力学下去。

eeNick 2018-5-27 11:29

佩服,就冲这三篇这么长的分享文章,就知道你做事是一丝不苟的人。省赛一等奖实至名归。
相关推荐阅读
wilsin 2024-03-30 12:50
[读书笔记]《模拟电子技术基础第五版》第0章 绪论
第0章              绪论可能涉及简答题:(以下来源“本...
wilsin 2022-09-27 22:17
【技术笔记】物联网日常工作笔记
1.C语言中,一个函数只能有一个返回值,若需要通过函数对函数外多个变量进行修改时,就要引入输入量为指针。如,带进位的加法运算,输入量为被加数与加数,返回值为是否进位。输入量为数值时,只能向函数输入值,...
wilsin 2020-09-30 22:33
不断电如何测设备功耗
领导:“测测它的功耗,看看正常不?”我:“中。”领导:“千万别断电啊,断了电再重新上电,单片机就复位了,怕复位了这故障就不见了。”我:“中。”回答完领导的话,我往我自己座位上走,边走边在心里琢磨,“我...
wilsin 2020-06-20 22:09
低功耗设备如何测试与分析功耗
我先唠点: 本文用于记录低功耗设备开发时,如何利用示波器测试出单片机进入低功耗模式,被中断唤醒后,执行完任务便继续进入低功耗模式。根据测试出的波形,对单片机睡眠时长及唤醒时长进行分析,进而判断低功耗设...
wilsin 2020-06-04 21:35
IIC压力传感器控制与使用(上)
------TE篇公司以往水表上都是用的模拟输出的压力传感器,压力传感器输出的电压经单片机上的AD转换后,按照对应公式确定压力值。最近客户招标要求使用IIC输出的压力传感器,按照领导要求,国产的国外的...
wilsin 2020-02-14 10:59
IAR如何设置为VS code黑色主题
最近,用IAR开发项目较频繁。IAR默认的白色主题,很是费眼睛,写一天代码下来常常会眼干眼花。以前用MDK软件时,默认也是白色主题,但是在网上找到了网友修改过的黑色主题包,直接替换主题包即可。于是变尝...
EE直播间
更多
我要评论
6
34
关闭 站长推荐上一条 /1 下一条