24年电赛——自动行驶小车(H题)完赛感受

前言:

        笔者大二,也算是第一次正式的打电赛省赛(大一电赛的时候还没接触32,校赛的时候就被刷下去了。。。)。经过一年的学习,三天两夜的校赛、两天一夜的七校联赛终于是挺到了省赛。比赛过程中真的是有太多感悟了。于是完赛第二天就赶出了这篇博客。

一、题目描述

        设计一个采用 TI MSPM0 系列 MCU 控制的自动行驶小车,能在指定路径 上自动行驶,行驶场地示意如图所示。场地面积不小于 220cm×120cm。图中 两个对称半圆弧线的半径为 40cm,弧线为黑色,线宽 1.8cm 左右,弧线的四个 顶点分别定义为 A、B、C 和 D 点。建议场地采用白色哑光喷绘布制作。场地除 两个半圆弧外,不得添加任何标记。

        要求 :

        (1)将小车放在位置 A 点,小车能自动行驶到 B 点停车,停车时有声光提 示。用时不大于 15 秒。

        (2)将小车放在位置 A 点,小车能自动行驶到 B 点后,沿半弧线行驶到 C 点,再由 C 点自动行驶到 D 点,最后沿半弧线行驶到 A 点停车,每经过一个点, 声光提示一次。完成一圈用时不大于 30 秒。

        (3)将小车放在位置 A 点,小车能自动行驶到 C 点后,沿半弧线行驶到 B 点,再由 B 点自动行驶到 D 点,最后沿半弧线行驶到 A 点停车。每经过一个点, 声光提示一次。完成一圈用时不大于 40 秒。

        (4)按要求 3 的路径自动行驶 4 圈停车,用时越少越好。

二、重点

        我们的基本思路是,使用 MSPM0G3507 控制小车,红外寻迹(没有灰度),陀螺仪控制方向。难点一个是跑直线,一个是转弯。

        (1)跑直线

        我们开始准备采用编码电机测速,配合 pid 算法调速,使两个轮子的速度维持在一个定值,或者计算两个轮子的差速,用 pid 算法去调节。最终发现,两个轮子的性能不一样,达到恒定速度的时间也不一样。所以我们改用陀螺仪的 yaw 值检测小车的偏航角,然后配合 pid 算法控制小车直行。

        (2)转弯

        转弯肯定是采用陀螺仪,使小车能转固定的角度。

        这两个难点的最终落脚点都停在了陀螺仪身上。

三、陀螺仪的选择

        我们首先想到的肯定是 mpu6050,一款便宜好用的陀螺仪,主要是我们备赛的时候就有移植好的 mpu6050 的代码。但便宜肯定有它便宜的道理,yaw 值的零飘问题十分严重。一秒偏 2°,我还以为有太阳磁暴了。

        幸亏我们实验室有往年学长留下来的财产。我们找到了实验室唯一一个 imu901。正好网上有一篇 imu901 的移植代码,正好它移植的芯片就是 MSPM0G3507 !!!因为它是十轴传感器,可以通过磁力计进行校准,就算是六轴的,它也自带了校准的算法,基本没有零飘问题,于是我们当天就把所有题跑了出来。可是,到了交作品那天早上一点,我们想着优化一下小车结构,最后不小心把 imu901 烧了。。。可以说是没了它我们所有的题都跑不出来了。这个比较冷门的陀螺仪基本别的实验室也没有,我买的要等完赛第二天才能回来。

        然后我们又试了问同学借来的磁力计模块,效果也不是很理想,而且我们没时间去学这个东西。于是我就试着移植我们七校联赛用的 jy60 模块。最终在早上6点多移植成功了,(最后发现是中断服务函数写错了)。虽然效果没 imu901 效果好,但是起码能跑。

四、思路

1、如何判断到达A、B、C、D点:

        开始巡线的点比较容易判断,我们可以以检测到黑线来判断结束直行,转为巡线;但出巡线的点就不能以检测不到黑线来判断了,因为我们用的是两个四路红外,间距比较大,在巡线中也会有很多次检测不到黑线。但我们备赛的时候发现我们跑定距离效果还不错,所以我们检测出巡线的点的方法就是跑过一定的距离并且检测不到黑线,就判断出巡线了。

2、如何跑斜线:

        因为靠陀螺仪很难跑到确定的点上,而且斜着跑不一定能寻到线,所以我们跑一个比较大的角度,跑固定的距离,然后跑直线。

五、 总结

        此次电赛可谓一波三折,先是烧了块 M0 的板子,又是烧了陀螺仪。好在最终是顺利完赛。要我觉得最大的感悟,就是所有东西都要有备份,最后阶段千万不要大改结构!!!

        最最最后,我还要感谢两位队友让我们整个比赛都很轻松快乐,以及我们的指导老师都在背后默默鼓励着我们。

        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/389615.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Git、Gitlab以及分支管理

分布式版本控制系统 一、Git概述 Git是一种分布式版本控制系统,用于跟踪和管理代码的变更。它由Linus torvalds创建的,最初被设计用于Linux内核的开发。Git 允许开发人员跟踪和管理代码的版本,并且可以在不同的开发人员之间进行协作。 Githu…

浏览器用户文件夹详解 - WebData(八)

1.WebData简介 1.1 什么是WebData文件? WebData文件是Chromium浏览器中用于存储用户表单数据、自动填充信息和支付信息的一个重要文件。每当用户在浏览器中填写表单或保存支付信息时,这些数据都会被记录在WebData文件中。通过这些记录,浏览…

【C语言】C语言期末突击/考研--指针(一篇就够)

目录 一、指针的本质(间接访问原理) 1.1.指针的定义 1.2.取地址操作符与取值操作符,指针本质 二、指针的传递使用场景 2.1.什么是指针的传递 2.2.指针的传递使用场景 三、指针的偏移使用场景 3.1.指针的偏移 3.2.指针与一维数组 四…

【多线程】阻塞队列

🏀🏀🏀来都来了,不妨点个关注! 🎧🎧🎧博客主页:欢迎各位大佬! 文章目录 1. 阻塞队列是什么2. 简单使用阻塞队列3. 阻塞队列的应用场景——生产者消费者模型3.1 生产者消…

bootStrap中操作行详情,删除,修改等操作

点击列表某一行的操作按钮,结合swtich case 出发不同操作

spring boot 实现 Stream 钉钉事件订阅

1: 参考链接 https://open.dingtalk.com/document/orgapp/develop-stream-mode-push-server 2:钉钉开放平台订阅配置 配置之后运行一下上面提供的链接 里面的main方法,验证通道 3:订阅启动方式 EventListenerThread eventListenerThrea…

nvm管理node版本问题处理集合

windows上通过nvm管理node版本,通过nvm安装node,报错了,信息: > Could not retrieve https://nodejs.org/dist/latest/SHASUMS256.txt. Get > https://nodejs.org/dist/latest/SHASUMS256.txt: dial tcp 104.20.23.46:443: …

如何通过阿里云服务器部署hexo博客(超详细)

👏大家好!我是和风coding,希望我的文章能给你带来帮助! 🔥如果感觉博主的文章还不错的话,请👍三连支持👍一下博主哦 📝点击 我的主页 还可以看到和风的其他内容噢&#x…

软件测试20个基础面试题及答案

什么是软件测试? 答案:软件测试是指在预定的环境中运行程序,为了发现软件存在的错误、缺陷以及其他不符合要求的行为的过程。 软件测试的目的是什么? 答案:软件测试的主要目的是保证软件的质量,并尽可能…

【C++】类和对象两个必看题

这两个题只有一句代码的差别。 看题目之前我先说一下怎么看汇编指令。 第一题&#xff1a;下面程序运行结果是&#xff1f; A.编译报错 B.运行崩溃 C.正常运行 #include <iostream> using namespace std; class A { public:void Print(){cout << "A::Pri…

【数据结构初阶】二叉树与堆(一)

文章目录 一、树的基础概念1、节点与度数2、树的度与高度3、引入&#xff1a;数组下标为何从0开始4、祖先节点5、树是递归定义的6、树与非树的区别7、代码表示 二、二叉树2.1、满二叉树2.2、完全二叉树2.3、完全二叉树的存储 三、堆 一、树的基础概念 1、节点与度数 节点分为…

多语言海外AEON抢单可连单加额外单源码,java版多语言抢单系统

多语言海外AEON抢单可连单加额外单源码&#xff0c;java版多语言抢单系统。此套是全新开发的java版多语言抢单系统。 后端java&#xff0c;用的若依框架&#xff0c;这套代码前后端是编译后的&#xff0c;测试可以正常使用&#xff0c;语言繁体&#xff0c;英文&#xff0c;日…

Charles怎么修改参数

Charles怎么修改参数 1、再【Structure】下&#xff0c;找到需要抓取的包&#xff0c;鼠标右键&#xff0c;点中断点。 2、在【Proxy】-点击【Breakpoint Settings…】 3、双击设置断点的接口 4、勾选后&#xff0c;点击【OK】。 5、再次刷新&#xff0c;重新发请求&#…

Nginx解析漏洞

一、nginx_parsing 这个解析漏洞其实是PHP CGI的漏洞&#xff0c;在PHP的配置文件中有一个关键的选项cgi.fix_pathinfo默认是开启的&#xff0c;当URL中有不存在的文件&#xff0c;PHP就会向前递归解析。在一个文件/xx.jpg后面加上/php会将/xx.jpg/xx.php解析为php文件。 1、…

第三方库认识- Mysql 数据库 API 认识

文章目录 一、msyql数据库API接口1.初始化mysql_init()——mysql_init2.链接数据库mysql_real_connect——mysql_real_connect3.设置当前客户端的字符集——mysql_set_character_set4.选择操作的数据库——mysql_select_db5.执行sql语句——mysql_query6.保存查询结果到本地——…

修改mac的音量能像windows系统那样给出音量反馈吗?

一、背景 windows有一些非常好的设计&#xff0c;比如拖动音量条的时候会有对应的音量大小的反馈。有时还能用来确定是视频没声音还是电脑坏了 在mac里怎么设置&#xff1f; 二、方法 首先点击菜单栏音量按钮->声音偏好设置…->勾选 “当更改音量时播放反馈”。 mac…

运放失调电流,偏置电流产生原因 ,对运放电路有什么影响,减小偏置电流带来的影响,TINA仿真。

偏置电流&#xff0c;失调电流定义 运放除了输入失调电压外&#xff0c;正常工作的时候&#xff0c;始终存在不为零的静态流进电流&#xff0c;如图所示&#xff1a; 对于BJT组成输入级的运放&#xff0c;这个电流就是差动输入级晶体管的基极电流IBQ&#xff0c;没有它&#xf…

Spring Boot+MyBatis+MySQL如何实现读写分离

​ 博客主页: 南来_北往 系列专栏&#xff1a;Spring Boot实战 背景 读写分离是数据库架构中的一种优化策略&#xff0c;它将读操作&#xff08;查询&#xff09;和写操作&#xff08;更新、插入、删除&#xff09;分开处理&#xff0c;通常通过将读请求和写请求分别发送…

正点原子imx6ull-mini-Linux驱动之异步通知实验(13)

在前面使用阻塞或者非阻塞的方式来读取驱动中按键值都是应用程序主动读取的&#xff0c;对于非 阻塞方式来说还需要应用程序通过 poll 函数不断的轮询。最好的方式就是驱动程序能主动向应 用程序发出通知&#xff0c;报告自己可以访问&#xff0c;然后应用程序在从驱动程序中读…