【经验贴】3m小车比赛失误散尽经验回家考研

/*********************废话***************************/
校内选拔结束了,刷l两夜调出来3m,比赛时电池充电器无奈被别人拿了,最后妥妥差零点几秒无缘华北
出来倒是很开心,进了华北必然改啊加啊,最后又是一通重整参数。从一个小白走到3m,比赛对我来说已经随意了。也说一句,自己的车只能自己做,别人说的只能听个思路,多看看报告真心有用。
发帖一周后不再回复,所以都写出来了,大神求清喷,视频没录但是我胡扯也没什么乐趣···另外 自己的车只能自己做,别人说的只能听个思路
如果有没有说到的请大家提醒,我会修改帖子让大家都看到
/*********************end 废话***********************/

/*********************说明***************************/
xs128-光电 前瞻60cm 控制周期20ms ccd 舵机50hzd

/*********************电机调试***********************/
轨迹调好拼的就是电机了!我们电机没太调,感谢开始的时候调到一组还行的PID值
首先电机一定是增量式PID的,电机是相当于带负载的,而且有较大摩擦,不能像舵机可以给定打角(即位置式)一样给什么速度就什么速度。电机一定要给i值的,因为电机要消除静差。电机我写没什么算法,就是偏离的小给高速大了给低速,有很多组都是给一个速度跑,照样3m的飞起,轨迹好嘛···说一下这个给的速度,不能最高最低差很多,除非你写了连续的或者很吊的算法,过弯快速减速那就是漂移才那么干,飘着跑绝对没有沿线跑快,直道加速弯道减速基本跑不过弯道不减直道不加,看着加速快,呵呵···调好轨迹了就是火车和汽车比,就是加速跑,又不会飘出去怕毛啊!

/**************************舵机调试*******************************/
恩,重点来了····
比赛前一天晚上12:00还2m的我们就是靠这个狂拽炫酷掉炸天的
首先,搞清楚PID的输入量再调PID,我们的输入是算出的车中心和赛道的偏移量
然后我就调了···调啊调,调啊调,调啊调···TMD别人都上2m了我还在调!我感觉直接调是不行的,别人告诉你,用PID啊,于是你就用,但是你知道要什么样的PID吗?你知道输入是你想的那个吗?你知道算出来的方向是车子应该去的地方吗?我小白的时候调累了就在论坛上搜“PID怎么调”"PID三个量的意义",但并没有注意到这些问题。看了几次快车的视频是北科去年的报告突然就明白了,要么是我输入量有问题,要么他们用的不是一套PID,要么我就是个逗逼还调毛啊···输入量我觉得没问题,然后开始调动态PID,照着北科的二次函数来,发现比之前好多了,原话是这样的

        (1)在KI置零的情况下,我们通过合理调节Kp,发现车能够在直线高速行驶时仍能保持车身非常稳定,没有震荡,基本没有必要使用KI参数;
        (2) 微分项系数KD使用定值,原因是舵机在一般赛道中都需要较好的动态响应能力;

        (3) Kp,我们使用了二次函数曲线,Kp随中心位置与中心值的偏差呈二次函数关系增大
前两句照搬加上自己调个二次P,就那么愉快的上了2m!?,当时距离比赛还有四天,啊呀好开心继续调,后来发现在弯道上反应还是慢,开始无脑刷论坛,路上看妹子,无比焦虑。比赛前一天晚上发现,啊呀要比赛了,赶紧刷一夜,调了半夜开始爆粗口:"这二次根本不能满足我!!!"就是那么一句话灵感来了···
前三行忽略···
其实是这样,在车速很快的情况下,考验的是舵机在该打角的时候打正确的角,我在90度弯推车的时候一推快了就发现车打角过于连续导致系统反应慢,典型的情况就是猛一推车子舵机打死滑出去,那么我应该在偏差小的时候给更小的P,偏差大时给更大的P,二次显然满足不了,那么三次?呵呵xs处理器果断嘲笑我。于是就在二次上做手脚吧,做之前拿50cm的圆弯试了一下(在那个弯调出来其他弯就不在话下),估计一下在什么偏差时该给角,在这个偏差之前直接给特别小的P然后再接上二次函数变成连续,微微那么一调,我靠就那么3m了?!
可能有人注意到我没说D值的事,其实前面说了D给定值保证动态响应就行了,给个略抖的值足以笑傲各种弯加障碍物光电小S:调完动态P加D比较大的情况下完美直线冲过去。
十字过不了?十字全白,补个线就行,速度快了补线都不用。如果再过不了就调P吧,80%的原因都是在不该给大转角时给大了,轨迹好关键体现在一个过弯灵活,2m一下不要拿赛道有灰当借口。2m以上,至少把轮子擦了,不然轨迹再好也是飘。
在这把B车轮子说了,今年B车轮子*&%%$##**···我是用湿抹布擦的,后来用过宽透明胶带反绑赛道跑上一段,效果绝佳,但是要勤换,听说正式比赛不允许这样。


/*********************CCD 提取赛道*******************/
ccd:曝光20ms 龙邱的,不知道为什么第一点会跳,其他的都挺好,余弦效应貌似比蓝宙小点,调一下焦距甚至看的出中间贴了白胶带的电磁线···不过对比度大了带来问题大家都懂得。
着重说一下CCD二值化(或者说边沿检测),二值化和边沿检测其实是一样的,我调的时候因为没有仔细研究龙邱CCD采样,所以我就是在这扯淡,大神可以略过···一下这里对比一下:
二值化:如果波形不好真是难写算法,但是二值化出来的结果对提线来说更容易,但是会多几遍循环,还有就是二值化比较稳,我写出来的边沿检测能用但是特别不稳。二值化用静态很容易受光线影响,动态在后面会提供几个可用的办法。
边沿检测:我觉得大神都用边沿呢···本人比较菜,写出来一个可以用的不知为何特别调,静止放地舵机偶尔会抖,写边沿是因为CCD看到的起跑线图都这样

 
···我就不能忍了
不知道其他CCD有没有这样,不过,有这样的同学,赶紧加偏振片吧···我感觉调CCD的黑暗时期顿时被偏振片照明了!图像电压会变暗,需要软件放大,出来的波形让任何算法都相形见绌···当然,如果你们没被CCD坑的话就更好了···
二值化出来赛道外也是黑的(蓝色)
最后上算法:
//算法1(加偏振片最终使用)
white = ADVwhite - 25;  //ADVwhite,ADVblack是开始采集的赛道白色AD值和开始的ADVmin
black = ADVblack + 10; 

if(ADVmin > white){                   
              for(i=0;i<128;i++) {
                    way=128;
              }
        }
        else if(ADVmax < black){
               for(i=0;i<128;i++) {
                    way=0;
              }
        }
        else{              
            Delta = (ADVwhite - ADVblack)*0.7+ADVmin;
            for(i=0;i<128;i++) {
                    if(ADV1<Delta) 
                        way=0;
                    else  
                        way=128;
            }     
        }

//算法2
for(i=0;i<128;i++) {    //Delta是给定的
            Sum += ADV1;
        }
        Average = Sum/128;
        for(i=0;i<128;i++) {
                if((Average-ADV1)>Delta) 
                    way=0;
                else  
                    way=128;
        }

边沿我就不贴出来嘲讽了···
其实在图像上不用太纠结,看报告也没发现用特别的算法处理的,我感觉我花在这个上的时候太多太多了···还写了几个能用的算法,如果有同学需要留邮箱艾特我

/****************************光电赛道提取*********************/
应该这么叫吗?就是根据二值化算出来车身位置
我们在车放在起跑线那两秒开机等待时间采视野中赛道宽度,根据求黑线的偏差和赛道宽的一半计算车偏离中心的位置
每次从上次的车身位置向左右找黑线,这样就避免了右边线到左边线的问题

/**********************人字,起跑线,坡道,机械,pcb****************/
我们是这样,识别-舵机打死同时减特大的速度-定时(因为没有时间就先这样了)-正常程序
这样的效果很好,在人字最多耽误一秒加上加减速就2s吧,生生甩过来
我们一个ccd识别,其实完全可以做到,二值化好的话人字是个很特殊的图像。有组用竖着的CCD检测,识别的还行但是存在很多毛病和不可控性。如果到了国赛那种一个贴一个弯的话,真心蛋疼···不过我不用想那么多了啊哈哈。
起跑线:8路红外或者可见光对管,目测可见光的更好
坡道因为前瞻元=远,加上下来一个急弯能在上坡时看到,摔的有够惨,后来根据上坡时赛道变窄写个个特殊处理,但是会和人字有冲突,想着比赛后加个陀螺仪(比赛里没人字),看来也不用浪费钱了(做车有点烧···)
机械?一定要稳!我们几次重大突破都是什么杆会转啊,CCD老是不结实会歪啊,舵机跑着跑着掉了啊,左右轮子轮距不一样啊,舵机中值跑的是转弯怎么坑的事,唉···都是泪
pcb 自己画的,哥们还有用BTS的别用了,那温度我跑完一圈都不敢摸,MOS吧

/*********************感想***************************/
睡了吧···
感谢@Jyoun 最后是看了你的大量神级回复才幡然醒悟调舵机的办法,印象深的是“我认为最省轮子的跑法最快”"恰到好处的打角",祝愿你冲到国赛拿第一。还有@zhou1994我在本论坛的第一贴你回复了真是太感动了···
还有我们学校陪我刷夜的组,你们好像都晋级了,加油!你们是最吊的!借我对管和好多建议的pole组,你们其实很努力,还有那些建议真心让我觉得无憾了;同样给我建议和看好我们的pikuchu组,你们太吊了···按你们的口号就是干吧!还有和我们组二进一的那一组,我自信你们再调一个月也跑不过我们,不过你们最适合进,因为你们很认真和努力,而且有激情,我们其实调的不多···大多数时间都在寝室lol····
看贴的组,你们都是最棒的,智能车挺爽的,加油!

电机
1、 如大神评论所说,我们的电机其实调的不好,其实是没调可以说,这个硬件电路吧又考虑电池电压又考虑芯片过热的,看车子各个模块的脸色···就是调也是花时间,而且根据以往大神的经验,电机是最难和最后要拼的,我们没走到最后,所以就这样吧
2、  3m一下的速度弯道确实不需要减很大速度,会甩,我分析3m以上也不能减太多吧,就算是减也必须是连续的突然在打角的时候减速那时过人字漂移的节奏,特别是在高速的时候任何细节都会被放大,没有好的算法像我那么减是不行的,大神们都是写了nb的算法的,我懂得···
3、  求大神不要黑了,我们的电机控制没有任何价值,大家可以用作调试参考,减速不大过得快是我实际调车的经验,经验不代表是真理···
4.有人求MOS的电路图···淘宝吧,为什么我建议大家用MOS,因为我就是没有用被BTS坑的,比赛跑一圈就拿到空调那去吹啊!都是泪···


舵机
1.PID,这个东西每个人都有每个人的控制算法,其实智能车好就好在你不可能把代码移植在一辆新车上不加调试,就像我模仿北科的动态P控制,实际还是不能满足需要。但是北科一直那么吊是因为别人有经验传承下来,这个经验是调试的经验,我说的也是调试的经验,看着评论里有人着手就要试表示压力山大,我感觉基本是不能一下成功的···不是我坑,这个算是做车的一个坎,过了就NB就体会到乐趣,不过就死循环了,耐心等着···先说输入,有人看贴不看我是个小白发的就想多了···我的输入量是算出的车中心和实际赛道中心的偏差,其实就等于左线或者右线与最开始车身在直道放正时左线或右线的差,再不懂我上图····
再说一下我的经验,首先清楚提前转弯是为了弥补采集的软件的舵机等等中间过程的时间,不是说提前就给个小打角,在这一点上我觉得我看法也许有点独特(也没大神带我···没有交流不知道大神怎么看),原因也有光电不好识别赛道类型这个梗(如果看得见提前给可以切内弯),然后就是调直角弯,
调到一个动态P让以往速度快了你会像上面那样,调好了就是下面的


然后就是这个弯的调试,先不开舵机边看着偏离量边自己让车走一个完美轨迹,在这个“人工智能”的完美轨迹里很容易明白在什么时候该让P变大并且变化更快乐,在这个点的偏移量就是我“自用狂拽炫酷掉炸天二次组合函数”的转折点,

ps:这么调一定是车不打滑的情况下,不然环境干扰大了白调
最后给个大点的D值,这个给的可以让刚出弯略抖的就行了,顺便说一句,我们D给好了障碍就那么过了···
最后描述一下我在直道左右移动时的舵机,0-20度打角非常小,20 - 40 明显感觉舵机转动幅度很大,40度打死,这个打死的角度是 Jyoun 总结出来被我从一个回复里挖出来的···再次感谢。


轮子
我处理B车轮子的办法就是湿抹布擦轮子,赛道先湿再干,新轮子擦完那粘性跟有轨电车似的,但是B车轮子质量真是烂,磨多了表皮一掉里面各种填充物···无良商家啊···
偷偷在这加个我QQ吧···625175721非诚勿扰,做好备注···
那个用胶带是我刷夜的时候实在擦不动了想出的偷懒办法,之前在论坛上也见有人用过···


十字
十字轨迹好了就冲过去了,真的,你好是想写算法无非就是全白直冲和全白按之前的打角冲,关键是你入十字的轨迹有没有让车身摆正,再说白了:你调完轨迹再来问我!(老师范有没有),另外大的D值也许可以救一命···


CCD
求问CCD的同学,god bless you···,这时候还调说明你们不比我调的少而且坑的更多···对此我默哀一会然后建议你加偏振片试试吧···主流的都是蓝宙我偏偏没用过,看来也是坑···我之前那个贴的第二个算法是可以适应没有偏振片的坑爹模式CCD,但是那个算法缺陷很明显···能跑是真的,我是写了很多算法,但是我觉得我传上去你们看了肯定觉得自己也想个或者试过,这个根据自己CCD的情况吧,如果真的真的那么信任我,我必然奉上


CCD窜道和人字
放在一起是因为窜道也许会认成人字,先说人字图像,大致是下图这样,那么我写得条件严格一点就行,


我们不窜道是因为我除了人字其他从上次车中心一找到两边的黑线就不再左右找了,另外我们一直没遇到过不知道能不能解答你的疑惑···

PS:
我觉得我两个帖子舵机这里都可以让一个月前还2m以下的我超神了···我不明白之前那么多届大神没有谈过,可能是想学校强一点吧···但是今年看到我们最开始的60-70个光电的到这会就二进一,加上我之前的小白经历(加上自己傻不知道勾搭学长学姐和其他组,一丁点指导都没有···看着学长给别人亲手调车就心酸)表示小白需要关怀!不然智能车就成了某些学校的专利,这样不好···想交流的同学我也是那么过来的,被各种甩脸和不搭理,我个人能力有限,能帮就帮,不能帮那因为我不会或者在忙···QQ自己本帖里找···

恩~我乃大北邮一学渣,只有我大北邮做完实验就要写一摞超长实验报告,还好这次不是手写···
我大北邮的加油,这里爆学校给压力了啊···何总不要骂我···

再来点资料吧···我看的不多,我觉得大家应该都有

弯道策略.docx 

北京科技大学摄像头组一队技术报告.doc 

PID精讲.pdf

补充内容 :
有人问静电的问题,我不知道为什么光电也开始静电了,可能是赛道跑太多跑老了···锡纸贴底然后焊到模拟地上,一般是电机静电所以锡纸连着点

补充内容 :
这个动态P可以在不识别赛道的情况下直冲小S

补充内容 :
图像还有个特点就是二值化上面的一块白色会慢慢闭合成黑色,大家自己放赛道上看吧,很有特色的图像···

永不止步步 发表于09-18 10:56 浏览3690次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

永不止步步
金币:67409个|学分:269185个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号