三天让车跑起来!stm32寻迹车 | 您所在的位置:网站首页 › 弯道减速直道加速跑 › 三天让车跑起来!stm32寻迹车 |
声明在前:本系列以程序设计为主,适用于刚学会32,想完成一个基本项目却不知道怎么上手的小伙伴。想学习硬件方面如:电路、画板等内容的朋友请不要在本系列耽误您的时间,关闭即可。 经过 第一天.与第二天.的基础内容讲解,本系列终于迎来了最后一期:避障、磁铁、停车元素的方案设计,以及——如何让车跑得更好? 方案设计 避障元素:原理方案一:if else方案二:外部中断避障程序拐出不及时回归角太大: 磁铁检测:独立电路干簧管模块 停车线:如何让车跑得更好?调车弯道直线加速出赛道怎么办?保持上一个状态!再加一对或两对电感调车!依然是调车 避障元素: 原理首选红外模块/光电对管。简单朴实不枯燥,又不像超声波花里胡哨。 左图为在第一期中,说到过一个平价版的红外模块;右图为光电对管(圆柱体,长得像个小号手电筒): 最直接的方法就是用if else语句: 初始化balabala while(1){ if(有障碍){ 避障();} else { Run();} } 方案二:外部中断外部中断,就是当特定引脚发生改变的时候,触发中断。 我们可以把连避障的引脚设置为外部中断,上升沿或下降沿触发,这里就不细讲了,感兴趣的可以自己回去研究 避障程序其实无论是用if else 还是外部中断,我们都希望把“避障”作为一个突发事件来优先处理的。避障程序该怎么写呢? 推荐一种最简单直接的方法:固定路线,最多分一下往左还是往右拐出两种情况: 即:(右转为例) void Avoid(){ 右转2S——怎么转在昨天文末写了,就不在这里浪费空间了 左转2s }这就是最基本的固定程序避障方案,但是在实际上,这种写法可能会产生以下几种结果: 正常拐出,正常回归拐出不及时回归时车前进方向与赛道夹角过大拐出不及时,回归角度又过大第一种自然是我们最希望发生的,但是理想往往都只能是理想; ** 都包含一个问题:拐弯异常。** 拐出不及时我们可以适当增加拐出的角度与速度:(向右拐出,TIM4通道一连左电机,通道二连右电机) TIM4->CCR1 = 56000 TIM4->CCR2 = 36000 High_Set = 右转大角度 delay_s(1.5) 回归角太大:
通过以上方法,若是能让车的避障曲线达到这种效果是比较稳妥的: (不排除有厉害的小伙伴能做到闪现的可能性) 除非速度快到每秒三四米,不要把检测距离提得太高,否则就是纯粹给别人找机会超越自己了。 磁铁检测:磁铁检测同样提供两种方案: 独立电路电路如图:纽扣电池提供电源,干簧管为开关,唯一的用电器是蜂鸣器 因为干簧管本身比较娇贵,又特别小,如果一不小心没拿住掉地上了就不用找了:一是找不到,二是就算找到了十有八九也摔坏了。。。所以建议多准备一些留着备用。毕竟单独的干簧管非常便宜。 干簧管模块第一次感受到了鼠绘的艰辛,画出来这玩意我能吹一年 (给你们看下掠夺者,自行体会) ———————————— 注:蜂鸣器是分有源跟无源的,这一点各位就根据需要自行决定选择哪一种好了。 停车线:我们再来回顾一下赛道: 接下来,终于到了最重要的一点: 如何让车跑得更好? 调车实践出真知,斗争长才干。只有多调车,才能找到最适合于这辆车的PWM、舵机角度。有用到编码器的还有一组或多组pid,或者有实力的使用比pid更高级的模型控制方法等等,除非它能自己学习,当然学习也不是万能的,而且会学习的前提是有大量的数据积累。所以,还是要调车,调车,再调车。 弯道高手过招,弯道超车。真正厉害的赛车手都是在弯道超过了对手——真正厉害的车不是直线快,而是过弯不减速。最能直接反映一辆车调得好不好的,就是弯道。 首先舵机的角度是最重要的,找到合适的档位时,转弯就不再是问题其次就是电机,当转弯时,若车模本身没有机械差速,我们可以用程序来控制它,让他在转弯的时候有个主动的差速以辅助转弯。虽然这个系列用的赛道非常简单,可能用不上,但是实际情况可能会是下面这种友好的画面:)
质量上乘的赛车不光要足够灵活,兼顾速度才是最重要的。放着好好的直线不加速,难道等着被超越吗? 直线加速的方案很简单,最基本的就是11011的时候加速。虽然有可能发生出赛道的情况,但这不就来了? 出赛道怎么办?保持上一个状态!出赛道是很正常的事情,谁还没出个道了/doge。不过就算真出道了也不要怕,我们还有机会,先看图: 这就是最简单的保持上一个状态的方案,如此便能在发生意外的情况下力挽狂澜。 再加一对或两对电感同为寻迹车,只有两个电感的和五个的肯定不一样。单论排列组合的话,双电感的组合多少,五电感的组合又是多少?每多考虑到一种情况,跑得稳-跑得快的几率就越大。 虽然我一直在用的都是一整块五电感的模块,完整的模块带来的好处也很多,但是,它也是限制我们的因素。因为它的左右宽度是限定的,只能检测到一小块范围,如果我们再在其两边各加一个,或者在车身、车尾等,检测到的情况就更多了,车对赛道的判断力就更强了。 调车!依然是调车在第一期中写的Run函数只有5个条件,但很明显它是远远不够的,在实际开始跑车的时候,经常会发生除了这五个情况以外的事情,就比如刚刚说的出赛道,还有停车,总不能全都放到else 里面做相同处理吧,所以剩下的判断条件就需要各位在调车的时候自己完善了。 —————————————————————— 到此为止,这个短篇系列就算是完结了。本系列只是为各位刚刚入门32的同学提供一个思考的方向,至于32,甚至嵌入式本身仍需要各位亲自深耕,而且32也不是三天就能精通的。而通过这三天的文章,如果大概知晓了一个工程从0到逐渐完善是怎样一个过程,就足够了:)若是您能从中吸取到了什么经验,并以此让您的车跑得更快更稳,那真是我的荣幸。 —————— 我是康.,希望做一名能够帮助到各位的博主!除了这个短篇系列,我也在持续更新学Python的系列,欢迎感兴趣的小伙伴关注我的频道!在Python更新完后,根据时间安排,我会再开机器学习或者算法系列,随时欢迎各位与我共同学习,一起进步! |
CopyRight 2018-2019 实验室设备网 版权所有 |