zoukankan      html  css  js  c++  java
  • 【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。具体原因我不多说,大家可以买来试试。

    (待续。。。)
    这里写图片描述
    这里写图片描述
    这里写图片描述
    这里写图片描述
    这里写图片描述

  • 相关阅读:
    windows 按时自动化任务
    Linux libusb 安装及简单使用
    Linux 交换eth0和eth1
    I.MX6 GPS JNI HAL register init hacking
    I.MX6 Android mmm convenient to use
    I.MX6 GPS Android HAL Framework 调试
    Android GPS GPSBasics project hacking
    Python windows serial
    【JAVA】别特注意,POI中getLastRowNum() 和getLastCellNum()的区别
    freemarker跳出循环
  • 原文地址:https://www.cnblogs.com/wolfray/p/7828904.html
Copyright © 2011-2022 走看看