2019电赛总结(一)

2023-05-16


2019电赛总结(一)

文章目录

  • 2019电赛总结(一)
          • 4 那之前
          • 5 电赛初期
          • 6 电赛中期
          • 7 电赛强化练习
          • 8 电赛预热阶段8月初
          • 9 那以后

4 那之前

2019电赛总结(序)

5 电赛初期

6月初,我基本上把PID和STM32调通,配合队友搭建的小车,加上一个超声波的传感器,开始学着调PID。后续也跟进了一些其他的视频,以及文档,把PID理解深化了一些。
其实电机输出无非两种,一种是像风力摆一样,0->工作,另一种是小车一样,常速->变速以实现差速转向,舵机其实也是,90°->其他角度。

但是,问题开始渐渐露出,队友的事情远不止我想的那么少。每个人都有自己的安排,我们无法安排好别人的时间。我一直以为队友在学STM32,事实上,别人在为了保研而努力复习,在为了90还是91而刻苦。对于我而言,80分足以,多余的部分,竞赛加分他不香吗?(其实我并没有保研的希望,只是想在大学里拿下一些奖项,也算无悔的青春)获奖就可以加0.1-0.3的GPA。可他又想竞赛还想拿到很高的成绩加GPA,怎么可能兼得呢!?有那么一刻我的心还是拔凉拔凉的。搞比赛都不能一心一意,何况我们只有三个月不到的时间,不破釜沉舟,我们怎么可能拿到奖励?

我们之间开始有了争执,因为能力实在是太菜,如果提前一年准备电赛,再菜也能慢慢修炼成大佬。可是三个月不到,怎么可能。作为我自己,已然全力以赴,为了这一次想拼一把,但是队友的所作所为让我心里冒起了凉气。

我并非有意冒犯追求成绩的同学。竞赛当然是给成绩锦上添花,可以没有。**但是在找队友的时候,一定要想清楚为何参加比赛,否则,几个人的志向不同,比赛很难做下去。**对于我们三个月零基础上电赛,真的是少见了吧。不得不投入更多的时间去训练。

一开始我打算6月下旬做风力摆,当时已经从网上找到了很多的资料,也认真研读了代码,各种准备,但是,很可惜,直到期末结束,7月中旬,才真真正正做出了风力摆。6月下旬斗志不佳,整个团队都很涣散,所以低迷直到期末考试结束。这期间我基本完成了32和pid的学习,看了一些四元数(欧拉角,MPU6050用到),玩了下陀螺仪(匿名四轴的上位机软件一绝),还看了一些openmv(很遗憾只学了最开始的几节,大致是色块阈值之类,后面串口都不会用)。虽然没有直接上系统,基本上模拟的效果是有的了。建议学习PID练手用霍尔编码电机,有反馈值和pwm输出,刚刚好。

6 电赛中期

由于实验室历年来都有同学参加电赛,我们自然地继承了他们的获奖作品。看着4年前的国一作品。我们心中不胜感慨,那么好的东西,今年落到我们手上了!!!拆!队友开始了中国式学习道路,开始拆国一的硬件。除了轴流风机的线太难分辨,其他都还好。轴流风机的驱动是MOS管放大电流来的,单片机的引脚接到了mos管的栅极(G),mos管大致是12V电压吧,(一般的H桥驱动等对轴流风机驱动能力不是很强,转速略慢)。整个系统的电压来自于监控电源(第一次听说)220->12V直流电。而我成功让电源短路了。一度怀疑人生。几个月内,短路了一个航模电池,短路了监控电源,还让旁边实验室的空开也干掉了。我这辈子怕是不合适学电吧。哎。

实验室的大佬特别抠,自己买了平衡车还不给我们玩。(怕被打,不多说)

7.15-7.19的校赛,由于宣传力度不够,所以参赛人数不多。(很多同学都直接回去了。不过我想说一句,想通过校赛就能参加国赛的同学真的是在做梦。什么都不练习,就算出了校赛,推荐去参加国赛,也是丢脸。要想拿奖,只有踏踏实实地练习,很一丝丝灵感,加上运气)

我们参赛题目就是风力摆。准备了那么久,还是有些小兴奋。我一直建议队友自己焊一块电路驱动,他焊接了,虽然效果不是很好(买的转接口大小不合适,而且仿照国一大佬的电路,焊出来居然不能用)最后不得已还是用了前人的硬件。但是线路老化,于是重新给换了线。(不得不说,焊接也要多练才行,看焊接水平就知道硬件菜如狗)(当然也不是怪队友菜,队友之前也继承了学长的衣钵,有一堆电子器件,自己也花了很多钱在硬件上。但是吧,我就觉得他练习少了,这是真的,硬件就是要多动手)

他研究好了电路,我这边也给出了单片机的程序,我记得是四路PWM输出(对于风机来说,单个风机即时制动是不可能的,要靠对向风机的反转制动),加上mpu6050的I2C输出(PB10,11,源码如是没有改过)。

我在别人的代码上修改以适应我们自己的电路系统(国一硬件+国二代码+菜鸡修改=风力摆),后来我感觉别人的代码不够好(代码变量值得学习,但是分类就很鸡肋了,而且还带着上位机回传的串口通信??有些忘掉了,总之对于500000的波特率很方,于是我删掉了上位机回传,把波特率改成115200,舒服多了。)

但是删这个过程中很麻烦,简单的删掉后,欧拉角的数据该从哪里获取呢(原来是在主函数里获取)?我最后把采样数据包装成函数,然后被定时器调用。这个修改的过程还是很难受的,出了很多bug,导致代码一度不能用。MPU6050有一个dmp模式,需要初始化。还有就是,extern 变量这个问题。一个变量aaaa在一个c文件里被声明并且extern之后,其他地方使用aaaa时就不必再定义了(全局、局部定义这个变量aaaa都是不合法的)

雄关漫道,渐渐也有了自己的风格,喜欢把东西分类,有了面向对象的感觉。

7 电赛强化练习

一个风力摆怎么能满足比赛呢。我又物色了17年的控制类题目,滚球控制系统,拿来练手。这时候已经没有什么可以直接用的物资了。去淘宝上定制了一块40x40cm的黑色亚克力板(如果想练手,建议不要用亚克力,边上容易形变,另外不要用黑色的,容易反光,摄像头把光当成小球误读数据)。别说,蛮贵的,这就花了40块。(预算电赛花个1000多,三个人平摊一下,还能接受,后面真香)

俩天才队友在亚克力板上用AB胶粘万向节的时候,把万向节方向搞反了(苦笑不得),于是浪费了俩天重新做这个部分。底座部分直接取实验室的木板,在边上粘上俩舵机(控制xy方向),连接好亚克力板、万向节和细杆、舵机。另外一边就是支架,上面放一个摄像头(openmv,采集小球位置,串口传输返回给STM32)。电源是220V降24V(因为便宜,而且有现成的),再降压稳压到5V给单片机供电。注意:舵机和单片机的电源要分开给,最好单片机先上电初始化,再打开舵机(就是在舵机的回路上加开关)。

板球结构基本上是这样了,过程中遇到的最大的问题就是舵机电压不稳,这一点一直影响到了省赛。(如上加粗,一定要分开给电源)另外就是摄像头采集的图像不是平面的而是有弧度的(鱼眼镜头??)这个需要纠正。摄像头采集的对象尽量减少干扰,(我们用白球,和白色的反光就很配,而且不建议用白色作为目标,一旦天气变化,可能颜色的阈值就变化了,采集不到目标)另外需要注意一下,安装舵机的时候,尽量让它在中值(偏转90°)的部分,差一点没关系,可以单片机软件调参到平衡。

其实对于控制小球来说,不过就是球的位移需要一个速度和时间,等效成加速度和时间,继续推导就是亚克力板对小球受到的合力(重力,支撑力)的影响,所以就是亚克力板的角度问题咯,最后就是舵机来决定角度。

再多的理论分析不如调一下,让小球稳定在亚克力板上。(当然前期很难受,球很滑一下子就掉下去了)对于PID算法,还是很容易控制小球的,只要舵机响应时间和范围匹配PID计算的结果。(提前预算好舵机每20ms能移动多大角度,PID调的值范围和这PWM是否匹配,PWM影响占空比进而控制舵机角度)其实一般来说舵机完全能控制到位的,建议不要把舵机移动的角度设置太大,其实亚克力板能在X\Y方向偏移10度完全就足够了。(需要换算成舵机角度,我有些忘了)

只要能定到板子上,后面基本很好做了,就是不停的设置新的目标点,让小球很稳的到达这个点。

板球练习基本上就结束了,时间也来到8月,没有时间再练习倒立摆了,很遗憾。但是我认为,个人完成了板球的思考,还是很不错的。

8 电赛预热阶段8月初

这段时间完成了简单的滤波器(平滑滤波,中位值滤波等),以及把PID从简单的变成了指针式,可以方便调用。同时完成了最后的一版,电赛模板,把电赛的OLED显示等都作了优化,写了自己的UI设计,虽然,这个设计,最后没能用上(因为比赛最后那晚,电脑炸了。被电感感人的炸了。代码全没了。PCIE去哪儿读取。。哎)

9 那以后

2019电赛总结(二)

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

2019电赛总结(一) 的相关文章

  • ROS只使用思岚A1激光雷达进行slam建图

    使用思岚A1激光雷达 A1的ros功能包下载地址 xff1a https github com slamtec rplidar ros 因为只有激光雷达 xff0c 需要其做SLAM的话 xff0c 就需要有一个laser scan mat
  • STM32 四轴无人机的设计——基于HCSR04超声波模块的距离检测与警报设计

    1 系列总述 从现在开始将会进入四轴无人机的制作 xff0c 我是第一次制作四旋翼 xff0c 从前没有接触过这个方面 xff0c 手边的参考资料只有一本四轴的设计书和正点原子F405飞控的源码 xff0c 所以代码逻辑设计方面肯定有所欠缺
  • 【C++基础】inline与内联函数

    目录 引入 inline 关键字inline使用限制类中的成员函数与inline 引入 inline 关键字 为了解决一些频繁调用的小函数大量消耗栈空间 xff08 栈内存 xff09 的问题 xff0c 特别的引入了 inline 修饰符
  • 串口通信的基本原理详解

    目录 串口通信 串口通信的两种基本方式 异步数据的数据发送过程 异步通信的数据接收过程 9针串口 xff08 DB9 xff09 TTL与RS232区别 TTL RS232 xff1a 串口通信的数据格式 通讯方式 偶校验与奇校验 停止位
  • jeston nano安装Ubuntu镜像时启动遇到问题

    A start job is running for End user configuration after initial OEM installation 开始我跑了一下午 43 一晚上 xff0c 都没成功 xff0c 第二天 xf
  • cmake 常用变量、常用环境变量、常用语法总结

    一 cmake 变量引用的方式 前面我们已经提到了 使用 进行变量的引用 在 IF 等语句中 是直接使用变量名而不通过 取值 二 cmake 自定义变量的方式 主要有隐式定义和显式定义两种 隐式定义的例子 xff1a PROJECT 指令
  • Java基础篇:Iterator迭代器

    一 什么是Iterator xff1a 迭代器 Iterator 是一个对象 xff0c 它的工作是遍历并目标序列中的对象 xff0c 它提供了一种访问一个容器 container 对象中的各个元素的方法 xff0c 把访问逻辑从不同类型的
  • 2022-2-19 ros环境变量

    学习时间及标题 xff1a 2022 2 19 ros环境变量 学习内容 xff1a 1 添加环境变量 xff1a source span class token operator span span class token operato
  • EGO-Planner: An ESDF-free Gradient-based Local Planner for Quadrotors(论文学习)

    EGO规划器 xff1a 一种基于ESDF自由梯度的四转子局部规划器 摘要 ESDF地图被广泛运用在局部地图的梯度方向和大小估计之中 xff0c 但是由于我们在进行轨迹优化的过程中 xff0c 只用到了ESDF地图中很小的一部分 xff0c
  • cmake "undefined reference to"

    main函数在调用其他 c或 cpp文件的函数时 xff0c 有以下几种情况 函数名写错 没有将其他 c或 cpp文件链接到main o xff0c 导致main函数在执行时找不到需要调用的函数 的解决方法 修改CMakeLists txt
  • STM32串口详解

    实验一 xff1a 简单的利用串口接收中断回调函数实现数据的返回 关于串口调试助手 xff0c 还应知道 xff1a 发送英文字符需要用一个字符即8位 xff0c 发送汉字需要两个字符即16位 xff0c 如上图 xff0c 发送汉字 姜
  • RLException: [xx.launch] is neither a launch file in package [x] nor is [x] a launch file name的解决方法

    ROS学习过程中 xff0c 遇到问题 xff1a RLException xx launch is neither a launch file in package x nor is x a launch file name 出现的问题
  • numpy 中 shape 与 size 属性

    因为需要生成一个和现有矩阵大小相等的矩阵 xff0c 故查找了相关资料 span class token operator gt gt span span class token operator gt span span class to
  • Ubtuntu+C语言实现网络通信附源代码

    下面这个案例是我用C在ubtuntu上面写的网络编程案例 2 网络编程 xff08 1 xff09 OSI七层模型理想化 应用层 xff1a app xff0c 应用程序 表示层 xff1a 对数据进行加工 会话层 xff1a 建立会话 x
  • Jetson Nano的GPIO口学习

    1 配置GPIO库 https github com NVIDIA jetson gpio 1 安装pip工具 sudo apt get update sudo apt get install python3 pip sudo apt ge
  • 22.11.22 TCP与UDP 客户端与服务器 协议搭建

    ubuntu 64 ubuntu yuyu yu 11 cat Tcp Cli c 客户端 include lt stdio h gt include lt sys types h gt include lt sys socket h gt
  • cmake交叉编译配置

    cmake交叉编译配置 很多时候 xff0c 我们在开发的时候是面对嵌入式平台 xff0c 因此由于资源的限制需要用到相关的交叉编译 即在你host宿主机上要生成target目标机的程序 里面牵扯到相关头文件的切换和编译器的选择以及环境变量
  • OS——gcc、g++、gdb、vim、vs code的基本使用

    文章目录 g 43 43 的使用gdb的使用vim的使用vscode的使用vs code的安装vs code中C 43 43 的编译运行配置 如果想要学习如何在CentOS 7中安装配置gcc g 43 43 gdb zhs和oh my z
  • make和cmake

    编程人员已经使用CMake和Make很长一段时间了 当你加入一家大公司或者开始在一个具有大量代码的工程上开展工作时 xff0c 你需要注意所有的构建 你需要看到处跳转的 CMakeLists txt 文件 你应该会在终端使用 cmake 和
  • ubuntu自带python与anaconda python环境的切换

    ubuntu的python可分为三大类 xff1a 1 ubuntu自带的python环境 一般安装在 usr bin 中python2和python3可以共存 2 anaconda自带的base环境 3 在anaconda中创建的虚拟py

随机推荐

  • 详细介绍如何在ubuntu20.04中安装ROS系统,以及安装过程中出现的常见错误的解决方法,填坑!!!

    本篇文章写于2020 10 xff0c 经过很多小伙伴的验证 xff0c 文章所介绍的步骤是可以正常完成安装的 xff0c 现在是2021 10 xff0c 经过近期的探索 xff0c 我将安装步骤进行了进一步的优化 xff0c 使安装变得
  • VScode进行python开发出现 No module named “XXX“的解决方法

    VScode进行python开发出现 No module named 34 XXX 34 的解决方法 最近从pycharm转向vscode的时候 xff0c 遇到了如下问题 span class token keyword import s
  • CM3寄存器简介

    Cortex M3基础 寄存器组 通用目的寄存器组R0 R7 也被称为低组寄存器 xff0c 所有指令都能访问字长32位 通用目的寄存器组R8 R12 高组寄存器 32位寄存器 复位后的初始值不可预料 堆栈指针R13 CM3中共有两个堆栈指
  • 基于亚博K210开发板的学习之旅(一)

    本文参考亚博智能官方K210开源课程 五月份购买了亚博的K210开发板 xff0c 但由于课程压力就搁置了 xff0c 最近暑假得空又恰逢电赛清单里有这个 芯片 xff0c 就抽空学习一下 xff0c 特写下这些 xff0c 以作记录 按照
  • STM32标准库通用软件模拟IIC

    STM32标准库通用软件模拟IIC 继上次通用可移植的矩阵键盘之后 xff0c 便继续寻找着下一个能够拿来只需改改引脚就可以使用的通用方案 恰好最近在研究PCA9685 xff0c 这是一片能够产生最多十六路PWM信号的芯片 xff0c 通
  • STM32F103控制PCA9685产生16路PWM波控制SG90舵机

    STM32控制PCA9685产生16路PWM波控制SG90舵机 如果你能点开这篇文章 xff0c 说明你已经知道PCA9685是多么强大 xff0c NXP公司原本做这片芯片是为了提供给LED使用 xff0c 在其官方文档里也能看到所有PW
  • 从源代码来看HAL库函数(一) HAL基础函数

    从源代码来看HAL库函数 xff08 一 xff09 HAL基础函数 全局变量 IO uint32 t uwtick 这个变量充当了一个运行时长计数的作用 xff0c 每发生一次SysTick中断就会加一 xff0c 直至溢出 xff0c
  • 使用TCP+串口与板子进行网络通信

    最近做了一个嵌入式的project xff0c 大概要求就是做一个client端 xff0c 一个sensor端 xff0c 两者通过TCP UDP进行通信 xff0c 然后在client端输入不同的命令sensor需做出不同的处理 xff
  • 毕业论文格式(图片题注引用,表格,公式格式)

    本科毕业论文差不多写完了 xff0c 记录一下一些格式 xff0c 以后写作可能会用到 xff0c 就可以翻起来看看 首先 xff0c 如果可以找到一篇格式符合要求的word文档的话 xff0c 最简单的方法就是在这个文档的基础上进行内容的
  • 图像处理——相位恢复(GS,TIE,改进型角谱迭代法)(已更新代码)

    利用GS xff0c TIE xff0c 改进型角谱迭代算法进行相位恢复 角谱传播理论 角谱传播理论可以翻阅傅里叶光学的书 xff0c 就能找到定量分析的计算公式 xff0c 可以分析某个平面的角谱垂直传播到另外一个平面的角谱 xff0c
  • 串口应用:遵循uart协议,发送多个字节的数据(状态机)

    上一节中 xff0c 我们遵循uart协议 xff0c 它发送一次只能发送6 7 8位数据 xff0c 我们不能随意更改位数 xff08 虽然在代码上可行 xff09 xff0c 不然就不遵循uart协议了 xff0c 会造成接收端无法接收
  • 数码管动态显示Verilog实现(参考小梅哥教程)(视觉暂留)

    一个数码管有八个引脚 xff0c 控制八段二极管的亮灭 xff0c 用以显示需要的数字 当有N个数码管时 xff0c 一个一个控制的话需要N x 8 个引脚 xff0c 消耗资源较多 因此可以利用动态显示的方案通过人眼的视觉暂留特性达到静态
  • 彻底理解DDS(信号发生器)的fpga实现(verilog设计代码)

    DDS xff08 Direct Digital Synthesis xff09 是一种把一系列数字信号通过D A转换器转换成模拟信号的数字合成技术 它有查表法和计算法两种基本合成方法 在这里主要记录DDS查表法的fpga实现 查表法 xf
  • HDMI/DVI

    一 基础知识 1 历史 早期在FPGA芯片上实现HDMI控制显示是使用HDMI发送芯片 xff0c eg xff1a ADV7513 sil9022 xff0c CH7301等 用之前VGA控制中输出的RGB信号 行场同步信号和使能信号输入
  • HDMI/DVI____TMDS编码

    一 编码步骤 xff1a 基本方法 xff1a 取第一位数据为初值 xff0c 接下来输入的每一位与前一导出的位 xff08 根据判断条件 xff09 进行异或XOR或者同或XNOR xff08 最小化传输 xff0c 减少0 1翻转 xf
  • HDMI/DVI____串行发送器

    一 功能 xff1a 把10bit数据转化为串行数据在一个时钟周期全部输出 xff08 先输出高位 xff0c 再输出低位 xff09 二 框图 二 思路 对于TMDS编码器 xff0c 在每一个输入时钟周期 xff0c 输入一次数据到TM
  • keil添加新文件.c.h

    文章目录 添加文件到组中1 双击组名称2 点击快捷键 添加头文件路径 h1 点击魔术棒快捷键2 头文件加 添加文件到组中 1 双击组名称 双击组名称 xff0c 打开弹窗 xff0c 然后选择相应的组中的新文件 xff0c 在点击ADD 2
  • QT常用控件(二)——自定义控件封装

    引言 Qt已经提供了很多的基础控件供开发使用 xff0c 而Qt原生的控件有时候并不能满足我们的需求 xff0c 特别是在工业的运用上 xff0c 比如我们需要一个日期时间的选择器 xff0c Qt虽然已经提供了原生的QDateTime控件
  • STM32之串口通信USART模块学习(1)

    一 通信接口 通信的目的 xff1a 将一个设备的数据传送到另一个设备 xff0c 扩展硬件系统通信协议 xff1a 制定通信的规则 xff0c 通信双方按照协议规则进行数据收发 单端信号通信的双方必须要共地 xff0c 因为都是对GND的
  • 2019电赛总结(一)

    2019电赛总结 xff08 一 xff09 文章目录 2019电赛总结 xff08 一 xff09 4 那之前5 电赛初期6 电赛中期7 电赛强化练习8 电赛预热阶段8月初9 那以后 4 那之前 2019电赛总结 序 xff09 5 电赛