【Arduino】2017年电子设计大赛B题 滚球控制系统|板球系统
今年电赛我们队伍选择的是B题,滚球控制系统。最后我们得到了省特和国一,也算是了结了我大一时的心愿吧。下面对这次比赛进行一下总结,以后回忆起来的时候也有个念想。
滚球控制系统是一个多变量、非线性控制对象,是球杆系统的二维扩展。本系统以Arduino Due为核心控制板,通过摄像头采集到球的位置信息,经过PID的控制算法来控制舵机的运行,从而控制小球的运动。其目的是让一个自由滚动的小球能够平衡在平板上特定的位置,或者沿一定的轨迹滚动。经测试,系统能够实现题目要求的各项功能,实测指标均达到或超过题设要求。
关键词:滚球控制系统;Arduino Due;位置检测;PID控制
当时网传已经有板球系统这道题了,虽然说心里没当一回事,但是还是默默地查起了一些资料。
板球系统、板球系统,最关键的就是需要检测到球的位置,然后通过板的机械运动将球保持在指定的位置上。
怎么检查球的位置呢?有两种不错的方法:一种方法是利用电阻屏,还有一种是利用摄像头。这两种方法比赛之前我都试过,电阻屏的话市场上有卖的一般就是7寸-17寸的四线、五线电阻屏,它获取小球位置比较灵敏,而且精度高、延迟低,对小球的材质、颜色没有要求,但是要求小球具备一定的重量,要不然检测不到球呀。至于摄像头检测小球的位置的话,一种方法是检测圆形,另一种方法是颜色检测,一般颜色检测的速度会快一些。如果使用摄像头检测小球位置的话,那么对处理器的运算速度要求较高,而且对光线的要求也较大,但是也可以使用开源摄像头(如OpenMV,pixy等),直接把小球位置信息等通过I2C、USART传输回单片机上。我们最后使用的就是Pixy。
最后赛题出来的时候,我们就傻眼了,居然和网传的消息那么像,但是尺寸却那么巨大。本来写好的电阻屏的程序是用不到了,只能用摄像头检测小球位置这种方法了。
当然我们想,小的我们都做好了,大的岂不是直接把原来的结构放大一些就是啦。但是后来发现我们想多了,尺寸变大许多导致的结果就是,机械结构需要重新设计。之前小板球系统的稳定性超级好,根本不会出现板子的抖动问题。但是等系统变大许多,板子变得很大很重,摄像头需要架设的很高,就带来了许多问题了。
摄像头是距离板子1m多的位置,这带来的后果就是,可能摄像头找不到那么小的球的位置了。
在比赛的那几天中,我们的机械结构换了4套。感觉一直都是在做木工活。第一套结构是纯木质的,各个部位全部用胶粘死。第二套是板子用的泡沫板,其他部分还是木质的。第三套是板子用的黑色喷漆铁板,支架是铁的,底板是木的,整套结构超级重、而且也不能拆卸。第四套结构的话,我们板子选择的是60*60*1cm的雪弗板,这个比较轻、而且也比较平,底板是PVC版,画原理图然后切割,支持部分是铝架,所有部分均可拆卸。
等机械结构做好之后,还剩一天的时间来写程序,简直奔溃,感觉比赛的大部分时间全部都在设计机械结构。但是这是非常必要的,因为机械结构如果不好,你的程序优化的再好,也是不会稳定的,尤其是这么巨大的一个装置。
前面说了一堆废话,下面说一点有用的:
①我们选用的控制器是Arduino Due。因为使用它开发简单方便快速,而且时钟频率大84Mhz,相比于普通的stm32f1一点也不逊色。本来想直接用树莓派了,但是想到用树莓派可能有违规的可能,所以还是算了。
②摄像头选择的是pixy。利用Pixy图像识别传感器检测小球位置坐标。Pixy支持多物体、多色彩的颜色识别,同时也支持多种通信方式,它搭载的图像传感器配合强大的硬件,可以将小球的位置坐标信息快速地发送给微控制器。注意!!!这可是直接把小球的坐标发到单片机里唉,所以你用性能差一点的单片机也没有关系了,这大大的简化了程序的复杂性,省去了自己写图像处理部分的事,节省了许多时间。
③舵机的话我们试了好多舵机,贵的、便宜的,最后还是选择了MG996R。具体原因我不多说,大家可以买来试试。
(待续。。。)
【Arduino】2017年电子设计大赛B题 滚球控制系统|板球系统的更多相关文章
- 2020年电子设计大赛F题
挺简单前一百分得了九十多 当然主要是队友很给力 1 温度判别 MLX90614DCC,然后测温拟合吧...从五十度到三十度平均一次要测一个半小时...这是真的痛苦...然后虽然文件里面说自带测温工具, ...
- 2020 年TI 杯大学生电子设计竞赛E题总结(放大器非线性失真研究装置)
2020年TI杯大学生电子设计竞赛E题总结(放大器非线性失真研究装置) 摘要:E题的竞赛内容主要是参赛者自己搭建一个晶体管放大器,能够产生不失真.顶部失真.底部失真.双向失真和交越失真五种波形,并分别 ...
- 2014年湖北省TI杯大学生电子设计竞赛论文格式
2014年湖北省TI杯大学生电子设计竞赛 B题:金属物体探測定位器(本科) 2014年8月15日 文件夹 1 系统方案 1.1 XXX的论证与选择........................... ...
- MCM/ICM2018美国大学生数学建模大赛D题翻译
MCM/ICM2018美国大学生数学建模大赛D题翻译 2018年ICM问题D: 非使用汽油并在使用电力行驶的汽车(电量非空的) 由于环境和经济的原因,全球都在减少使用化石燃料,包括汽车汽油. 无论是受 ...
- 2014年TI杯大学生电子设计竞赛地区赛使用仪器及器件、设备
2014年TI杯大学生电子设计竞赛地区赛使用仪器及器件.设备 a) 3A/30V双路稳压电源(可并联): b) 60MHz示波器: c) 三位半数字万用 ...
- 摹客 · Veer 第二届设计大赛邀你来战!
2018年12月,摹客设计大赛一年一度一归来. 继2017年摹客全国首届原型设计大赛成功举办后,本次大赛是摹客第二届设计大赛.大赛由摹客主办,Veer独家冠名赞助,iSlide和创客贴协办,国内多家知 ...
- 郑捷2017年电子工业出版社出版的图书《NLP汉语自然语言处理原理与实践》
郑捷2017年电子工业出版社出版的图书<NLP汉语自然语言处理原理与实践> 第1章 中文语言的机器处理 1 1.1 历史回顾 2 1.1.1 从科幻到现实 2 1.1.2 早期的探索 3 ...
- Mockplus设计大赛获奖选手专访 | High音:轻松生活,随心嗨音
"看似低调,实则高调的设计,UI设计是用了功力,主页功能和内容一览无余,方便用户选择,金字黑底,给予用户极好的奢华体验.原来听歌也是一种视觉享受.创新性源于对听歌氛围的把握,大幅的图片,刺激 ...
- 3I工作室的成员在2013年(第6届)中国大学生计算机设计大赛总决赛中荣获全国二等奖
在暑假举行的2013年(第6届)中国大学生计算机设计大赛中,我院的参赛作品<毕业生论文选导系统>(作者:祝丽艳/许明涛:指导老师:元昌安/彭昱忠)入围总决赛,并荣获全国二等奖. 2013年 ...
随机推荐
- 关于加载离线SHP文件、geodatabase文件所遇到的路径问题
正文开始之前还是先吐槽一下,一行代码DEBUG了一天不知道怎么改,终于误打误撞弄出来了(以下以shp文件为例) 对于虚拟机测试 public String getPath(){ File sdDir ...
- 简单Elixir游戏服设计-玩法simple_poker
上回介绍了玩法,现在编写了玩法的简单建模. 做到现在感觉目前还没有使用umbrella的必要(也许以后会发现必要吧),model 应用完全可以合并到game_server. 代码还在https://g ...
- javascript-OOP基础详解
前 言 S N 今天给大家详解一下面向对象编程(简称OOP)基础,OOP 语言使我们有能力定义自己的对象和变量类型 .对象拥有属性和方法 . 所以今天就给大家详解对象和类 . 1-1简介 ...
- Intel Core Microarchitecture Pipeline
Intel微处理器近20年从Pentium发展到Skylake,得益于制作工艺上的巨大发展,处理器的性能得到了非常大的增强,功能模块增多,不过其指令处理pipeline的主干部分算不上有特别大的变化, ...
- Codeforces Round #441 (Div. 2, by Moscow Team Olympiad) D. Sorting the Coins
http://codeforces.com/contest/876/problem/D 题意: 最开始有一串全部由"O"组成的字符串,现在给出n个数字,指的是每次把位置n上的&qu ...
- Java集合框架,未完
一.集合类 集合的由来: 面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象的操作,就需要将对象进行存储,集合就是存储对象最常用的一种方式. 集合特点:1,用于存储对象的容器.(容器本身就是 ...
- C# 根据路径删除文件或文件夹
如何根据路径删除文件或文件夹? 1.首先我们要判断路径是文件或者是文件夹 那么我们可以通过 FileAttributes attr = File.GetAttributes(path); 来得到路径的 ...
- Vuex state 状态浅解
对于Vuex中的state里面的理解总是有些欠缺,机制似乎理解了.但是还有很多的不足,在这就先浅谈下自己的理解. vuex 机制中,定义了全局Store,在各个vue组件面的this.$store指向 ...
- Jvm加载jar包的顺序
使用-XX:+TraceClassPaths或者在服务器上执行jinfo时,都能得到classpath包含的jar包,例如: java.class.path = local/aaa/lib/sprin ...
- Linux入门(15)——Ubuntu16.04安装codeblocks搭建C/C++的IDE环境
安装codeblocks: sudo add-apt-repository ppa:damien-moore/codeblocks-stable sudo apt-get update sudo ap ...