「第二篇」全国一等奖,经验帖。

2023-11-02

点击上方“大鱼机器人”,选择“置顶/星标公众号”

利干货,第一时间送达!

640?wx_fmt=gif

阅读文本大概需要 6 分钟。

  0  

  前言

本文作者:谢斌

曾经获得2017年控制题【板球控制系统】全国一等奖。

他之前有写过几篇关于比赛的文章,大家可以点击阅读。

全国一等奖,他的学习之路。

从0开始,三个月,获全国一等奖。

这次他继续分享经验。

正文

暑假接踵而至,还剩一个多月就是2019年全国大学生电子设计竞赛了,不知道准备参赛的朋友们是否已经开始准备练习了。

这次趁着暑假开始,国赛临近,写一篇提升篇的文章。因为我之前做的是控制方向,所以这篇文章大部分内容都是以控制为主,如果是电源或者其他方向的,可以关注公众号。后面会写。

首先,我还是要再提醒大家一次,基础非常非常非常重要。

建议把部分STM32的基础例程学透,如果是入门不久的朋友可以参考一下我之前写的基础篇的文章。

为什么一直强调基础?

在我看来,国赛就好像一门考试,是有时间限制的,就像刚过去的高考一样,可能你平时觉得你学的还可以,但是在比赛的时候,因为压力太大可能会出现很多未知情况。

比赛只看结果,即使你在平时可以做出来,比赛的时候万一出现了什么情况,没做出来,评委不会听你的任何解释,只会根据你现场做出的作品进行打分。

四天三夜的比赛时间,看似很长,但是在此期间,三个人需要根据题目商量方案,然后开始验证方案,如果一个方案不行,马上就得开始下一个方案的验证。

一般来说,是不允许我们在找bug上面浪费时间的,所以,基础就显得尤为重要,尽量减少因为自己在程序配置上出错的情况。

废话不多讲了,根据我自己之前的参赛情况,进行了一次总结。个人觉得,平时在练习的时候,要有意识的培养自己大局观,层次观。

  1  

  大局观

何谓大局观,在我看来就是随便给你一个题目,你的脑海中立马就要想到如何来实现题目中的功能,用什么器件来实现题目中的功能,自己脑海中要形成多个清晰的设计方案和设计流程。

对于写软件的同学来说,在写程序之前自己心中要形成一个完整的代码体系;对于做硬件的同学来说,在pcb设计之前自己心中要有一个大概的整体布局。

就拿17年的滚球系统来说:

我们拿到题目就要想到:要控制小球运动肯定是要有传感器检测小球在平板上面的位置,想好是用摄像头还是用其他传感器;

要控制平板运动以此来间接控制小球在平板上进行各种运动,是用舵机还是步进电机还是其他控制器材;

既然做的是一个板球控制系统,用PID控制算法还是其他算法来实现控制系统的稳定度,入口参数用的是哪一个,如何与控制器件联系起来等等等等。

这个其实在很多公司的老员工都有这种大局思维,项目做的多的同学也会养成这种思维,只是可能他们自己都没有意识到。

我自己也是在国赛完总结的时候才意识到的。

  2  

 层次观

方案商量好后,自己要有一个清晰地设计流程。

对于写软件的同学来说,自己要很清楚自己应该先写哪个程序,后写哪个程序,可以在纸上简单的画一下整个设计的流程图;

对于设计硬件的同学来说,也要很清楚的知道先设计哪一部分,后设计哪一部分,一般还要预留几个端口,引出来以防万一。

一般来说,即使有好几个方案,设计流程一般都差不多,差异只在器材的选择上面。也拿17年的题目为例:

第一步就要检测小球在平板上的坐标位置,写摄像头的图像处理程序,要实现能无误检测到小球在平板上面的坐标位置,如果小球没动,位置数据总有误差,可以加一个滤波程序;

第二步写舵机或者步进电机的控制程序,要实现用舵机或者步进电机控制平板带动小球在平板上任意运动,这里只需要能控制小球做上,下,左,右,左上,左下等等方向的简单运动即可;

第三步写定时中断程序,设计好控制间隔,整合前两步写的程序,把控制程序放定时器中断里面。比如我控制的是50ms的中断间隔,每50ms检测一次小球位置与目标位置的坐标偏差,再控制小球进行相应的运动。要实现小球能够到达任意给的一个目标点,允许有误差。

第四步写PID算法程序,因为只用if来控制小球运动的话,一般都会发生超调和失调等等情况,小球会在到达目标位置后再往前运动一段距离,或者根本到不了不标位置。所以使用PID控制算法来完成对小球的精准控制。这里要求能控制小球精准到达平板上的任一目标点。

第五步就可以按照题目来完成要求了,既然能实现小球的精准控制了,基本上已经可以完成题目基本部分的要求了。前四项要求基本上就是跟换小球的目标点来控制小球在平板上的各种运动。

第六步是完成题目的发挥部分。一般国赛题目的发挥部分是在前四项的基础上增加难度,比如要增加一个对时间的控制,必须要控制小球在某个区域内停留固定时间再控制小球到下一个目标点去。

第七步时间充足的话可以利用屏幕和按键做一个实时菜单,用少量按键在屏幕上进行选择,完成各个功能要求。

  3  

  总结

关于2017年控制题,具体的设计流程,网上有很多很多方案,所以具体的设计方案我不再阐述。我只给大家提一些方法和建议。除了上面讲的,我觉得还需要养成几个良好的习惯。我之前也是讲过,拿软件部分来讲:

第一每次完成一个功能,就要复制一次工程,在复制的工程上面添加其他功能。防止自己在添加功能修改代码的时候出错,到时候改哪里都不知道,程序又写乱了,又忘记怎么恢复,那就真的是会很麻烦。

第二要养成写注释的好习惯,自己定义的变量或者自己写的一些功能语句一定要多写注释,有时候代码量大了,写程序写的久了,自己写的东西都会看不懂。特别是国赛那几天,有时候你稍微休息一下,可能自己的程序都有些看不懂了。有注释的话就不用那么费劲的去回忆了。

最后再给大家整点鸡汤吧。在准备比赛的过程中,注定会很累,很孤独。但是强者的道路注定都是孤独的。要努力,不放弃。

在你努力后,你会发现,等到比赛完的某一天,你可以笑着向别人讲述那些曾经让你哭的瞬间。

  4   

 最后

若觉得文章对你有帮助,随手点“在看转发分享,也是我继续更新的动力。

640?wx_fmt=jpeg

长按识别图中二维码关注

推荐阅读:

全国一等奖,他的学习之路。

从0开始,三个月,获全国一等奖。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

「第二篇」全国一等奖,经验帖。 的相关文章

  • idea配置git拉取github上仓库代码

    STEP1 本地下载一个git https git scm com downloads STEP2 打开Settings 配置GitHub账号 决定你是否有权限操作Repository STEP3 配置本地git命令执行地址 也可以配置环境
  • Redis-数据结构及常用命令

    字符串 String 数据结构常用命令 SET key value 设置指定 key 的值 GET key 获取指定 key 的值 DEL key 删除指定 key INCR key 将指定 key 的值增加 1 DECR key 将指定
  • INVALID_USER_SCODE BUG 解决方案

    INVALID USER SCODE 不能定位 这个错误是说你的key有问题 你可以重新更换一下key 就可以了 1 首先先拿到你的SHA1 的值 获取命令 keytool list v keystore E jks gaodenav jk
  • 语义分割——灰度图像转伪彩色图像

    目录 检验灰度图 检验代码 灰度图转伪彩色图代码 转换代码使用细则 示例转换结果 总结 检验灰度图 制作语义分割数据集或用训练好模型测试图像时 得到的结果是灰度图像 如下 检验代码 上面图像灰度值不是全是全为0 灰度范围在 0 1 之间 使
  • android遇到的难题,Android开发遇到的三个问题

    您的位置 首页 教程 IT技术 正文 Android开发遇到的三个问题 总结我在安卓开发过程中遇到的问题 开发工具为Android Studio 编译工具为gradle 一 Execution failed for task mergeDe
  • buck dcm占空比计算_如何计算BOOST转换器的占空比

    计算BOOST变换器的占空比的关键因素 核心是什么 没错 是流过电感的电流 电感属于一个感性元器件 给我的感觉在它身上有很多神秘的色彩 需要一步一步探究 请恕我慢慢道来 其实 如果你上网问一问度娘 BOOST占空比公式 我相信你就直接知道结
  • python中的优先队列PriorityQueue

    普通的队列是一种先进先出的数据结构 元素在队列尾追加 而从队列头删除 在优先队列中 元素被赋予优先级 当访问元素时 具有最高优先级的元素最先删除 优先队列具有最高级先出的行为特征 通常采用堆数据结构来实现 我们可以利用优先队列中元素被赋予优
  • Blinker控制esp8266 01s实现远程控制继电器开关代码

    该代码只实现Blinker通过按钮on和off两种状态来实现继电器的通断 从而控制连接的电路 define BLINKER WIFI 以WIFI方式接入 BLINKER BLE以蓝牙方式接入 include
  • 将摄像头输出的原始数据文件转换成bmp图像

    引言 从摄像头和传感器获得的视频数据是没有办法直接被电脑识别的 所以需要进行转化 我昨天在做项目的时候遇到了这个问题 根据查阅相关资料 实现了将摄像头输出的原始数据文件转换成bmp图像的程序 语言 C C 测试平台 VC6 0 先把bmp
  • scikit-learn官方文档中文版

    scikit learn sklearn 官方文档中文版简介
  • 液态大脑与固态大脑——圣塔菲最新群体智能文集

    来源 The Royal society 撰文 Ricard Sol Melanie Moses and Stephanie Forrest 大脑 神经元构成的器官根植于许多生物体内 这是一种固态的大脑 且组成它们的元素在空间中相对固定 但
  • QML VideoOutput 显示 YUV420P 数据流

    查看VideoOutPut说明文档 对source属性有以下说明 you can provide a QObject based class with a writable videoSurface property that can ac
  • Electron 收集崩溃日志

    概述 对于任何的客户端应用 开发者都希望能够在用户上的手上记录下相关信息以便了解真实的使用情况 一般情况下 分为以下两种信息 正常日志 在不涉及隐私的情况下 让开发者了解用户使用客户端的详细情况 从这些情况中提炼的信息能够让开发者根据用户的
  • QT类学习系列(8)- QPushButton,QToolButton的区别

    QPushButton与QToolButton的区别 weixin 42073232的博客 CSDN博客https blog csdn net weixin 42073232 article details 84848142 QToolBu
  • MyBatis框架(四)自定义映射

    resultMap处理字段和属性的映射关系 若字段名和实体类中的属性名不一致 则可以通过resultMap设置自定义映射 我们创建员工表如下所示 我们创建的部门表如下所示 多个员工对应一个部门 是一个多对一的关系 我们要把关系设置在多的地方
  • 七夕节教你怎么选男朋友/女朋友~基于PaddleHub的身材打分系统

    文章目录 一 项目背景 PaddleHub 介绍 二 效果展示 三 实现思路 四 具体步骤 1 安装 PaddleHub 到最新版本 2 新建目录 3 完成关键点检测 4 比例测算及打分 5 结果展示 五 总结与展望 一 项目背景 各位小哥
  • 计算机操作系统手册,轻松的开发一个操作系统(指导手册)

    轻松的开发一个操作系统 指导手册 标签 翻译家 编程 操作系统 chapter 1 前言 我们都使用过操作系统 又或者写过某个系统上运行着的程序 但操作系统到底是来做什么的 我所看到的工作多少是硬件完成的又有多少是软件完成的 电脑实际上是如
  • adb no permissions问题

    Google一番 得知可以通过用root权限启动adb server来解决问题 但是每次用adb不会很麻烦嘛 后来发现在SDK的帮助文档里有关于这个问题的说明 If you re developing on Ubuntu Linux you
  • 理解 $nextTick 的作用

    有同学在看 Vue 官方文档时 对 API 文档中的 Vue nextTick 和 vm nextTick 的作用不太理解 其实如果看一下深入响应式原理 vue js中的有关内容 可能会有所理解 不过有些同学可能看到这个标题之后就选择跳过了
  • rsync同步脚本

    bin bash export LANG C date date Y m d H M red echo e 033 0 31m blue echo e 033 0 36m white echo e 033 37m rsync usr bin

随机推荐

  • 解决克隆虚拟机无法上网问题

    通过VMware克隆出来一台linux的虚拟机 但是发现没有办法上网 然后上网查 原来是在linux中有唯一标识网卡的UUID 我们是通过克隆过来的 那么他们的UUID MAC地址和IP地址都相同了 所以导致克隆出来的机子没有办法上网 下面
  • access对比数据_数据分析师有理由爱Sqlserver之四-七大数据库测评Sqlserver胜出

    虽说各家数据库产品大同小易 学会一家 其他家都可以很快上手 但和编程语言的选择一样 人的精力有限下 只能深入研究一家的产品 故在学习之前 认真去评估应该选择哪一家数据库学习 这样的时间也很值得 总比学到一半不断地更换不同产品所浪费的时间好得
  • 一类学习(OCSVM)

    20201102 0 引言 我记得我第一次接触一类学习的时候 是在一本讲解异常流量的书上 大概18年的时候 当时有一个需求 就是所处的场景下 只能拥有一类数据 而其他类的数据 要不获取不到 要不获取了也不具备什么代表性 总体上就是这么一个场
  • VTK和Cmake的安装并运行一个vtk的案例

    VTK的安装并运行一个项目 1 CMAKE安装 要安装VTK的话首先需要安装CMAKE CMAKE的官网 https cmake org download 进入Cmake下载网页 可以看到很多版本 我们选择最新的 在文件列表中 我们选择最便
  • Java之类与对象

    作者简介 zoro 1 目前大一 正在学习Java 数据结构等 作者主页 zoro 1的主页 欢迎大家点赞 收藏 加关注哦 目录 初始面向对象 什么是面向对象 面向对象和面向过程区别 类的定义和使用 什么是类 类的定义 类的实例化 什么是类
  • 关于绘图的卡顿解决方案

    在Android应用中 cocos的渲染和js的逻辑是在gl线程中进行的 而android本身的UI更新是在app的UI线程进行的 所以如果我们在js中调用的Java方法有任何刷新UI的操作 都需要在UI线程进行 如果画板的控件继承于Vie
  • Redis6+PHP:实现根据经纬度计算出附近门店距离

    一 开始介绍 Redis GEO 1 Redis GEO 主要用于存储地理位置信息 并对存储的信息进行操作 该功能在 Redis 3 2 版本新增 Redis GEO 操作方法 geoadd 添加地理位置的坐标 geopos 获取地理位置的
  • CloudCompare——泊松重建

    目录 1 简介 2 利用输出密度 3 相关代码 博客长期更新 本文最近更新时间为 2023年8月10日 1 简介 算法原理见 泊松重建算法原理介绍 qPoissonRecon是 Poisson Surface Reconstruction
  • 单片机原理概念

    参考 单片机原理概念 作者 爱学习的小王呀 发布时间 2020 11 27 08 58 08 网址 https blog csdn net hongliwong article details 110219821 spm 1001 2014
  • SCL教程之如何使用SCL创建简单控制程序

    最近有不少朋友都对SCL编程感兴趣 网上的相关资料又较少今天我就为大家简单介绍一下如何使用SCL创建简单程序 1 首先我要先说明一下使用STEP7 或 PCS7都可以进行SCL编程 其编程方式与TIA的编程方式类似 但是语法稍有不同 今天我
  • vue+a-form 动态表格,动态增加动态删除

    思路借鉴了一位大佬的文章 原文地址如下 版权声明 本文为qq 42203909原创文章 遵循 CC 4 0 BY SA 版权协议 转载请附上原文出处链接和本声明 本文链接 antd实现动态增减表单项 支持赋初始值 首先是封装子组件 自己起个
  • ios 启动执行初始化

    UIViewController 分为下面三种情形创建 依次调用的方法 顺序如下 1 StoryBoard 1 initWithCoder 2 awakeFromNib 3 loadView 4 viewDidLoad 2 Xib 1 in
  • 模型保存的两种类型torch.save

    torch save model model face pt 一个常见的PyTorch函数是使用 pt文件扩展名来保存张量 model是我训练后的模型 后面的参数 model face pt 就是我模型保存的类名 存放同一文件夹下 当然可以
  • 数据库系统教程(第二版何玉洁)课后数据库上机实验答案

    附录C 上机实验 C 1 第4章上机实验 陈宇超 仅供参考 下列实验均使用SQL Server 的SSMS工具实现 1 用图形化方法创建符合如下条件的数据库 创建数据库的方法可参见本书附录A l 数据库名为 学生数据库 l 主要数据文件的逻
  • 常用的java虚拟机参数_Java虚拟机参数分析 - PerfMa

    参数查询 支持查询一到多个 JVM 参数 向用户展示每个 JVM 参数的详细信息 包括含义 用法等 并可查看社区对此参数的相关讨论 支持两种输入格式 直接输入一个或多个参数名 示例 Xms Xmx Xmn Xss MaxPermSize M
  • 超详细的OpenCV入门教程,12小时带你吃透OpenCV。

    OpenCV简介 OpenCV是一个基于Apache2 0许可 开源 发行的跨平台计算机视觉和机器学习软件库 可以运行在linux Windows Android和MAC OS操作系统上 1 它轻量级而且高效 由一系列 C 函数和少量 C
  • vue中scoped与/deep/深度选择器原理总结

    最近在写一个vue element ui项目 使用element ui某些组件修改样式时 老是需要加上 deep 深度选择器 以前只是知道这样用 但是还不清楚他的原理 这次就来好好的梳理一下 1 首先我们需要知道css中的属性选择器 w3c
  • Introduction to Causal Inference:Chapter 1因果推断概论

    本文是学习brady neal于2020年开设的因果推断课程Introduction to Causal Inference的记录 概述 本chapter主要分四个部分 辛普森悖论 为什么相关性不是因果关系 什么展示了因果关系 在观测性研究
  • 七、PyQt5实现Python界面设计_滑块控件(QSlider)与计数器控件(QSpinBox)

    目录 一 QSlider滑块控件 1 简介 2 常用函数 3 代码演示 二 QSpinBox计数器控件 1 简介 2 常用函数 3 代码演示 一 QSlider滑块控件 1 简介 1 水平或者垂直的滑动控件 一般用来设置数字 快速滑动来调整
  • 「第二篇」全国一等奖,经验帖。

    点击上方 大鱼机器人 选择 置顶 星标公众号 福利干货 第一时间送达 阅读文本大概需要 6 分钟 0 前言 本文作者 谢斌 曾经获得2017年控制题 板球控制系统 全国一等奖 他之前有写过几篇关于比赛的文章 大家可以点击阅读 全国一等奖 他