当前位置: 首页 > news >正文

2024年电子设计竞赛H题总结(24.6s省一)

1. 项目总结


H题自动行驶小车,个人感觉难点就在,要跑的稳、跑的准、跑得快。

此篇文章使用的陀螺仪为维特的HWT101,因为我在调试的时候发现mpu6050实在是太慢,数据都不是连续的,我太菜的缘故,非常难给陀螺仪数据写PID,由于没多少时间,发现维特的这个速度快,但是费钱。瞧不上这种方案的佬可以忽略。

循迹模块就是普通的灰度循迹。主控为MSPM0G3507官方的那块板子。

比完赛放假->开学->一堆事情处理,到现在终于闲下来了。

2.算法简介


大致流程如下

第一题就直接锁定陀螺仪0度向前走,而后编码器的值(我已经换算成圈数)达到某一值时停止即可。速度和陀螺仪航向角均为闭环反馈控制。

第二题就是首先锁0度,和第一题一样走,走完之后切换为循迹。我的循迹采用的还是对速度进行了闭环控制,使得速度更稳定些。而后七路循迹什么都没有扫到的情况下,判断为走出半圆(这里可消抖处理,避免因为走的过程中的机械抖动导致判断出现误差)。走出半圆后切换为锁定陀螺仪数值180度向前走,固定脉冲值,而后再切换循迹,再判断无黑线扫到,停车。每个切换的过程中均加入声光提示即可。这里有个小优化,就是将声光提示放入中断,比如说100ms的中断。操作起来就是,先将某个标志位置1,然后中断判断1后,声光提示,然后进入这个100ms中断3次之后标志位置0,声光提示结束。这样非阻塞式,让主函数可以丝滑衔接下一个任务。

第三题就是,一开始锁定需要前进的角度,比如我之前测试的47度向前走固定的脉冲数即可,然后怎么让他丝滑一些呢,我的做法是(以第一步为例),沿直线走到一定的位置之后,将航向角的给定值调整为0度左右,再走固定的脉冲数,第一步和第二步速度一样,只有脉冲数和航向角的给定值不一样。走完前两步之后,让他正好落在C点,开始循迹,这样会显得特别丝滑没有停顿。进入循迹之后,同第二问,走出半圆之后,又同第一步,改变航向角的给定值走到D点即可。

第四问,我就是for循环执行了四遍第三题。

需要补充的是,陀螺仪的数据,维特的数据是0-359,而有时候,比如第一题0可以直接跳到359的话,误差突然变大会使系统崩溃,为此我给陀螺仪的数据进行了一定的处理。

总的来说难点还是再陀螺仪上,我是逃兵,处理不了MPU6050,如果MPU6050读取的速度能够快的话,其实方案是可以一样的。

非常大的不足之处在于,没有路径反馈,说白了就是不知道自己走到了哪,一旦跑偏了就完了,也就是类似我这种加了纯前馈给脉冲数的做法,不过禁用摄像头的情况下确实也难以做到知道自己走到哪儿的程度。

附上部分代码:

case 5: { Xans_speed = 5; for (i=0; i<=3; i++) { /*摆正,然后转头*/ /*陀螺仪修正*/ yawflag = 1; if(i == 0) Motor_Config(&work_flag, 18, 18, null, 8.8, 8.8, -48, yaw_speed); else if(i == 1) Motor_Config(&work_flag, 18, 18, null, 7.68, 7.68, -46, yaw_speed); else if(i == 2) Motor_Config(&work_flag, 18, 18, null, 7.72, 7.72, -45, yaw_speed); else if(i == 3) Motor_Config(&work_flag, 18, 18, null, 7.85, 7.85, -46, yaw_speed); /*找线*/ Motor_Config(&work_flag, 18, 18, null, 1.56, 1.56, 3, yaw_speed); //Motor_Config(&work_flag, 3, 3, null,null, null, 25, spd_position); //Motor_Config(&work_flag, -3, 3, null,null, null, null, speedpid); work_flag.Priority = null; while(1) { delay_ms(10); if(M||L1||L2||L3||R1||R2||R3) { bl_flag =1; break; }else if(!M&&!L1&&!L2&&!L3&&!R1&&!R2&&!R3) { Motor_Config(&work_flag, 3, 3, null,null, null, 15, spd_position); } } /*循迹*/ Motor_Config(&work_flag, 12, 12, SLeft, null, null, null, speedpid); /*等待循迹结束(识别不到),到达B点声光提示,然后左转一下*/ globel_position = 0; while(1) { delay_ms(10); if(!M&&!R1&&!L1&&!R2&&!L2&&!R3&&!L3&&globel_position>1056) { bl_flag =1; break; } } /*摆头*/ yawflag = 0; /*直走*/ if(i == 0) Motor_Config(&work_flag, 18, 18, null, 7.18, 7.18, 226, yaw_speed); else if(i == 1) Motor_Config(&work_flag, 18, 18, null, 7.23, 7.23, 226, yaw_speed); else if(i == 2) Motor_Config(&work_flag, 18, 18, null, 7.18, 7.18, 226, yaw_speed); else if(i == 3) Motor_Config(&work_flag, 18, 18, null, 7.23, 7.23, 226, yaw_speed); /*找线*/ Motor_Config(&work_flag, 18, 18, null, 2, 2, 176, yaw_speed); //Motor_Config(&work_flag, 3, -3, null,null, null, null, speedpid); work_flag.Priority = null; while(1) { delay_ms(10); if(R2||M||R1||R3||L1||L2||L3) { bl_flag =1; break; }else if(!M&&!L1&&!L2&&!L3&&!R1&&!R2&&!R3){ Motor_Config(&work_flag, 3, 3, null,null, null, -15, spd_position); } } /*循迹*/ Motor_Config(&work_flag, 12, 12, Smiddle, null, null, null, speedpid); /*等待循迹结束(识别不到),到达B点声光提示,然后右转一下,这里右转是方便第四题继续走*/ globel_position = 0; while(1) { delay_ms(10); if(!M&&!R1&&!L1&&!R2&&!L2&&!L3&&!R3&&globel_position>1056) { bl_flag =1; break; } } } Motor_Config(&work_flag, 0, 0, null, null, null, null, Frees); Pwm1_Set(0);Pwm2_Set(0); break; }

最终视频:

24年H题成品版,翻相册翻到的,要清内存了。

代码工程:2024年电子设计竞赛H题代码资源-CSDN下载

也可以私信我你的邮箱。

http://www.jsqmd.com/news/755947/

相关文章:

  • EventCalendar事件管理完全指南:从创建、编辑到删除的全流程解决方案
  • 希尔伯特变换不只是数学玩具:手把手教你用它实现DSB信号的解调
  • 15万亿tokens训练的奇迹:mirrors/unsloth/llama-3-8b-bnb-4bit预训练技术揭秘
  • 打卡信奥刷题(3212)用C++实现信奥题 P8210 [THUPC 2022 初赛] 造计算机
  • 语言模型自改进算法:双环学习与增量优化实践
  • 2026年劳动法律师性价比排名 - mypinpai
  • 如何快速集成Sentry错误跟踪:vue-element-admin前端监控系统搭建指南
  • 终极指南:如何彻底解决micro编辑器插件冲突问题
  • TAPFormer:基于Transformer的帧-事件异步融合点追踪技术
  • 如何快速优化Captura大文件处理性能:从内存映射到高效I/O实战指南
  • CodeGeeX2-6B与ChatGLM2架构深度解析:代码预训练的核心奥秘
  • 3分钟掌握NCM转换:网易云音乐加密文件免费解密终极指南
  • 终极指南:简单三步永久重置JetBrains IDE试用期,免费使用IntelliJ IDEA、PyCharm等开发工具
  • 2026年许昌装修公司口碑排名哪家好 - mypinpai
  • Vanara高级特性解析:自定义marshaler和类型转换技巧
  • Controlnet QR Code Monster v2提示词工程指南:如何用文字引导创意二维码生成
  • 从专利到仿真:拆解Novel三路Doherty功放如何用ADS实现更大回退
  • 技术革命R3nzSkin:如何实现英雄联盟国服全皮肤本地化体验
  • Path-Creator编辑器扩展详解:打造专业的Unity路径编辑工具
  • 用Python模拟三国杀王荣‘吉占’技能,看看平均能摸几张牌?
  • 2026年usb插座哪个品牌质量好?实测推荐与选购参考 - 品牌排行榜
  • SparseVideoNav:稀疏采样与轻量化特征提取的视觉导航技术
  • 如何通过3步实现手机号精准定位?这个高效智能的一站式解决方案让你轻松掌握陌生来电归属地
  • 3DGS存储爆炸?手把手教你优化Gaussian Splatting模型,从GB瘦身到百MB
  • 如何利用GPT-Engineer教育版打造高效编程课堂:教师必备的AI助手终极指南
  • 基于Docker的轻量级Web应用部署:从原理到实践
  • Aloha框架:基于人类演示的GUI自动化革命
  • 微软Kernel Memory:构建AI智能记忆服务的完整指南与实践
  • 2026年有经验的精密涂布胶辊加工厂排名,如何选择? - mypinpai
  • mirrors/monster-labs/control_v1p_sd15_qrcode_monster学术引用指南:正确引用本模型