[我的电竞]那个无憾的4天3夜+自己的总结+开源代码
本帖最后由 caijie001 于 2018-5-3 07:47 编辑大家好,我是杰杰...
这是我第一次参加电赛,队友3个人,我们虽然是第一次合作,但是配合的很好,很感谢我的队友....
static/image/hrline/1.gif下面进入正题
刚出题的那个早上,我们都是挺兴奋的,在实验室睡觉,怕第二天起不来,然而,我们的生物钟好像比鸟儿还早,早早就兴奋的不行,我们第一次参加国赛,是会有这种感觉的.
出题了,我们之前就是准备做自控类的题目,所以第一眼就看B题,觉得好像有点难,然后再看了其他的所有题目,还是觉定做B题,刚好我们学校还有两组也是做B的,我们就在一起讨论了十几分钟,就去选择材料了,开着小电动,去市区买木板.我们都没买过木板,不知道哪里有木板,就兜兜转转,终于买到了,拿回去,就想着构思硬件,很快,迎检就搭好了.另一个队友就在调试舵机中值,分工很好,进度算是挺快的,然后就弄好了机械结构,开始调试,我们是用两块单片机的,一块stm32作为主控芯片,另一块k60作为数据处理芯片,鹰眼摄像头采集数据,通过串口传输给stm32,做出相应的处理,这些地方我们都做的挺好的,但是,还是有很多问题,下面我一一总结:
由于,我们之前一直在准备电赛,买了很多模块回来调试,比如带丝杆的步进电机..舵机..超声波模块..mpu6050..角度传感器....买了那么多东西回来,都调好了,但是..却一点都没有用上..最后还是拆了我们之前搞飞思卡尔的舵机跟摄像头..把基本的模块搭建起来,用stm32控制舵机的打角与显示屏的显示,,而k60作为摄像头的处理,扫描小球,得出小球所在的坐标,传输给stm32,让stm32通过pid算法,让舵机打角,从而完成操控....
下面是流程框图:
这里的主要难点是摄像头的扫描..因为木板是正方形,而摄像头采集的图像是320*240分辨率的,是长方形..这里不能像飞思卡尔一样用边沿扫描的方法,要用全场扫描,找出小球的黑点,从而得出他的圆心(球心)坐标..
然后再做摄像头采集的数据的滤波处理和圆心的滤波:
camera_get_img(); //摄像头获取图像//黑白摄像头
mg_extract(img,imgbuff, CAMERA_SIZE); //解压图像,为了调用
AllFilt(); //整场滤波
countcenter_ball(); //搜线
x_filte(); //x轴滤波
y_filte(); //y轴滤波
count_ball_center(); //计算小球中心点
这是主函数的内容,代码我在下面已经开源...
还有传输数据的滤波:假如小球x与y都为0,,说明数据采集错误,这种是不能传给stm32的,否则会很抖,毕竟那一瞬间通过pid的处理得出的值变化很大:
还有小球x或者y有一个为0也是,所以要对小球限制,...
if((ball_x_num!=0)&&(ball_y_num!=0)&&absi((ball_x_num-ball_y_num))<250)
{
send_ball_num(ball_x_num,ball_y_num);
}
就传一个坐标,,,stm32就能处理了....
由于这种通讯也是涉及到时间的问题
我们测出k60采集并处理得出坐标的时间为50ms左右,算是比较快的了,再传输数据...
而stm32用上串口中断,当他接收到数据的时候,舵机才打角,我们舵机是100hz的频率,最快可以每10ms打一次角..所以这种操作完全适合..还避免了乱打角的问题...
至于关于算法的问题,,下面的代码也已经开源了我的算法: 舵机打角,,,,可以自己去看看代码...........
*还有很重要的一点:硬件要搭的稳,摄像头不能动,不然坐标会动的,,,多多少少都有影响.*
https://bbs.21ic.com/static/image/hrline/1.gif 经验之谈
电赛遇到的问题简单描述:
1:选择材料,选用山外鹰眼摄像头,硬件二值化,毕竟前段时间做完飞卡,刚好会用这个摄像头,选择木板,小球滚动的木板是黄色的,还有树木黑色的年轮,对摄像头会照成一点的干扰,所以选择喷漆,但是组委会明确规定不能喷漆,但是还是冒险喷漆了,避开了数据的不稳定。
机械结构的问题:
我们选择木板搭建,真正搭建的时候,才发现自己想到的模型跟现实还是有很大差别的,机械结构不对称,舵机打角不好控制,稳定性这些都要考虑,还有选择固定木板的材料,我们选择502加铁钉,还算比较牢固,但是502用得比较多,还不容易拆卸,去到送作品现场才发现别的作品很小,可以拆卸的,但是我们的作品很大很大,90*70*100cm。
木板还容易变形,我们的第一块板子,小球目标的地方凸起,导致小球无法定在目标里面,遂换了一块板。
这些是硬件的问题。
软件上,其实就是算法的处理,还有小球坐标点的精确,对坐标的滤波做的不好,沿用了当时飞思卡尔的滤波,没有改进,本来飞思卡尔做完有挺多时间改进的,但是没有改.
其他的东西基本没什么问题.
现在的我对pid的算法有了更深的理解了.这是一种收获.
吃亏的地方在于,我都调出来了,但是由于作品太大,搬运时候导致摄像头不正,或者有可能是平横板歪了,总之,去到现场调试时候,没能做出在实验室的效果,这是很可惜的一个地方,
解决的办法其实有很多的,但是软件没做好,没完善,就解决不了.
请记住以下几点:
1>:人机交互界面要做好,程序要写好,通过按键查看参数,不断调整,这是很好的方法.
2>:对于类似摄像头这种采集精确数据的传感器,装箱拆箱后都要重新采集数据,保存在类似24c02的存储芯片上,可以使数据在程序中运行更加精确,不会因为搬动导致数据不精确,这也是我终于知道别的学校的飞思卡尔的队伍为什么不拿电脑在调试,只是通过按键就能调试了.
3>:我们实验室的光线不足,任何一个比赛的场地,光线都是充足的,小球反光?应该都有这个影响,还有就是摄像头支架不要用太大的木条,会遮挡光线,导致也会有偏差.可以适当添加LED来补光.
还有重中之重的经验就是,网上有猜测题,最好就做,起码要构思硬件并写好相关模块的代码.
这些是我电赛的经验.
https://bbs.21ic.com/static/image/hrline/1.gifhttps://bbs.21ic.com/static/image/hrline/1.gif
配上我的作品照片:搭好硬件的当天晚上:
static/image/hrline/1.gifhttps://bbs.21ic.com/static/image/hrline/1.gif
能动起来的那个时刻:
由于当时调试没怎么拍照,只能找到这些.这些也是比较激动的时候拍的.
https://bbs.21ic.com/static/image/hrline/1.gifhttps://bbs.21ic.com/static/image/hrline/1.gif
哎呀!我差点忘了给点原理图了:电源模块这个....不难,,,,差点就忘了它哈哈哈哈上点图吧:
整体的原理图:
tft_lcd接口原理图
分享一些我今天整理的算法资料,对于我们来说,资料并不是越多越好..而是对自己需要的有所帮助就是好资料...
这些资料里面,我没看完,毕竟也是有点多,电赛的时候找到自己需要的就不看了.....
自己需要的资料就要认真看,希望你们能够找到自己的算法资料,进一步提升自己....我也是要不断学习,,,再学习......
摄像头的资料:
MATLAB的PID控制:
PID算法:
模糊控制:
谢谢大家.
再开源我的代码吧,包括k60的小球扫描,滤波,与stm32间的通讯:
开源代码回帖可见啦~~~谢谢大家的支持和捧场
回帖可见附件内容包括:摄像头、模糊控制、基于Matlab的PID控制、pid学习资料和演示软件、pid算法,代码等~~欢迎回帖下载!!欢迎关注我的个人公众号——“创客飞梦空间”
干货从不间断在未来的日子里创客飞梦空间与你们同在,放飞我们的梦想
**** Hidden Message *****
感谢 顶起
[我的电竞]那个无憾的4天3夜+自己的总结+开源代码
本帖最后由 caijie001 于 2017-9-5 14:58 编辑1111 楼主66的,感谢分享。。。 修一明 发表于 2017-8-24 10:02
楼主66的,感谢分享。。。
{:tongue:}{:tongue:}{:tongue:}{:tongue:}{:tongue:} 顶起,6666 21ic小喇叭 发表于 2017-8-24 11:27
顶起,6666
666 今年的电子设计大赛没参加 恼火 5574293 发表于 2017-8-24 17:12
今年的电子设计大赛没参加 恼火
明年啊,后年也可以 看起来不错,楼主是不是成绩很好。 angus118 发表于 2017-8-25 11:19
看起来不错,楼主是不是成绩很好。
尚可,实验室全调的很稳,但是作品搬运,摄像头动了,就到现场没那么稳了 666 感谢 复测结果如何 山东电子小菜鸟 发表于 2017-8-26 19:15
复测结果如何
2 强悍 本帖最后由 山东电子小菜鸟 于 2017-8-28 20:23 编辑
祝贺帖子回归 哈哈 山东电子小菜鸟 发表于 2017-8-28 20:16
祝贺帖子回归 哈哈
哈哈哈,莫名其妙被屏蔽了一天,我还是想找到原因.我看到几篇帖子都被屏蔽了... 山东电子小菜鸟 发表于 2017-8-26 22:26
强悍
我又加入了一些详细的流程图的解说.....{:lol:}{:lol:}{:lol:}{:lol:}{:lol:} lzm2008 发表于 2017-8-31 12:51
{:loveliness:}{:loveliness:}{:loveliness:}{:loveliness:}