22年电赛B题——具有自动泊车功能的电动车——做题记录以及经验分享

前言

这道题目也是小车类电赛题目,十月份的电赛题,由于之前积累了一些经验,这道题目在做下来的感觉还行,但是我们看题目没有仔细审题,和题目要求有一些些偏差,但是基础大功能还是做出来辽,大家还是可以参考的

这道题目,就是我们日常生活中的科目二,倒车入库和侧方停车,要求使用前轮转向的四轮电动车,限制了车型,这是一点

但是没有限制MCU,即大家可以使用自己觉得容易上手和熟悉的MCU进行做题

这道题目我们采用的是TI的MCU,型号为TIM4C123G6HPM,就是下面这块小板子,除了引脚稍微少点,熟悉使用后和32差不多,能够很快上手

在这里插入图片描述

当时我们考虑到,如果今年电赛题目限制TI的MCU,所以这道题目采用的TI的MCU进行做题


赛题分析

我们首先来看这道题目的要求,基础要求就是,分别独立完成倒车入库和出库的,分别独立完成侧方入库和出库

一切都是在这个基础上进行的
在这里插入图片描述
在这里插入图片描述

根据题目,我们可知,就是倒车入库和侧方停车,不同题目要求就是邻库是否有车,是单步倒车入库或侧方停车还是连续进行

好,我们根据题目来分析

1. 车型选择
2. 沿库线边线循迹
3. 倒库停止准备倒车标志
4. 倒库操作or侧方入库操作
5. 邻库有车,小车进库和出库

这道题目主要最关键的还是车型的选择准备倒库倒车停止标志


1、车型的选择

这道题目,限制了车型,要求必须使用前轮转向的四轮小车

由于在跟随小车系统中使用过前轮舵机转向的四轮小车,所以这道题目我们采用的是前轮舵机转向,后轮为驱动轮的四轮小车

但是我们由于是练习,并未在小车的大小上仔细深究,还是把之前做跟随小车系统中的小车修改了一下结构,直接使用

而且注意,题目在小车的大小也做了限制,要求如下
在这里插入图片描述

所以这道题目不同于之前限长小于25,车型变大了,对于倒车入库和侧方停车还是有些难度的

建议大家根据题目要求来合理选择自己的车型

在赛前多准备几种车型,多留一手


2、沿库边循迹

题目要求小车右侧投影离库边线约为5cm

这道题目这里的要求我们忽略了,所以在做题时并不是距离库边线5cm,一丢丢小瑕疵

在这里插入图片描述
在这里插入图片描述

这个如何实现呢,基础的红外、灰度当然不能实现,因为库边线在小车右方,所以只能采用摄像头进行循迹

这里使用的是摄像头模拟灰度传感器的方式,根据小车的运动姿态,给出不同的偏差值,小车再根据传回来的偏差值err,对自身的姿态进行纠正,让小车始终处于巡线期望值前进

和前两期分享的知识点相同,这点就不做过多重复介绍了

大家可以去看前两期分享的博客,里面有详细的介绍,关于小车循迹的几种方法以及32端如何接收OpenMv传回来的偏差值进行PID计算


3、倒库停止准备倒车标志

小车的主要目的还是倒车入库or侧方停车,当小车循迹前进时,什么时候停车准备倒库呢

我们是将摄像头的右上部分,划分感兴趣区域,然后进行模板匹配的方式,进行匹配

因为大家可以看到无论是倒车入库还是侧方停车,第三个库的库角都和前两个的特征不同,根据这个特征就可以进行模板匹配

在这里插入图片描述
在这里插入图片描述

当摄像头匹配到库角标志时,发送标志位给小车,小车根据标志位进行停车,准备倒库


4、倒库操作or侧方入库操作

当小车识别到准备倒库标志后,后面的操作我基本上是写死的

  • 先往前走一段,打方向向后倒车,倒车到与车库平齐,方向回正,向后倒库

这里的切换时机是根据小车行进的距离进行判断,还有向后打方向倒车时,可以给后轮一个小小的差速,更加方便小车向后倒车

  • 进库后停止2s,准备出库,出库后继续巡线,直至侧方停车停止线的识别

侧方停车的步骤基本上和倒车入库相同

大家要找到合适的时机以及合适的舵机方向(即PWM),然后衔接起来

就完成了倒库或者侧方停车

当然,我在B站上,也看到很多大佬的入库非常丝滑,很值得学习
无名小哥的教程就起初给了我很大的启发
大家 可以多逛逛B站,发掘一下自己的灵感


5、邻库有车,小车进库和出库

这一点我们发现,如果采用上述说过的方法,有很大可能识别不到准备倒库停止标志,因为可能邻库的车把库角挡住了,然后摄像头识别不到或者是识别的概率大大降低

这一点我们还未解决,这也是瑕疵之一,有概率识别不到,小车就直接跑了,倒库失败

由于时间紧迫,我们这道题目就做了个大概,基础倒库和侧方均可实现,但是有瑕疵,但是程序逻辑和基础思路大家还是可以参考学习的


调试经验分享

其实这道题目如果只做倒库或者侧方的话,基本的调试可能更多的在摄像头那边,因为要保证停车标志的准确性

剩下的就都是小车这边的逻辑书写了,还有调试最多的估计就是各种状态的切换,比如打角打多少角度,后退前进多少距离,巡线的调试

再就没啥了

邻库有车还是有概率识别不到倒库停止标志,待改进


还有一点,就是要注意仔细阅读题目,使用笔来画出题目的各种要求,仔细审题,不然正式比赛的话,可能因为一时的疏忽,造成颗粒无收


总结

这是关于自己刷真题时,做题的记录和经验分享,都是自己经过实际测试和调试后得出的方案,将这些给大家分享,希望能够帮助到大家

在做这道题目后
我总结出了,适合自己的一套程序流程代码,非常好用,如各种状态切换等

同样,我也开源出了这道题目的代码,大家可以参考学习


开源链接

大家可以参考学习

大家可以自行访问,进行下载

下方为gitee开源链接,请大家点一个star,谢谢

oufen / 2022年电赛B题-自动泊车系统

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode283.移动零

这道题还是很简单的,我用的是双指针,左指针i从头开始遍历数组,右指针j是从i后面第一个数开始遍历,当左指针i等于0的时候,右指针j去寻找i右边第一个为0的数和i交换位置,交换完了就break内层循环,…

Linux网络编程:网络基础

文章目录: 一:协议 二:网络应用设计模式_BS模式和CS模式 三:网络分层模型(OSI七层 TCP/IP四层) 四:通信过程 五:协议格式 1.数据包封装 2.以太网帧格式和ARP数据报格式 …

【SA8295P 源码分析】06 - SA8295P XBL Loader 阶段 sbl1_main_ctl 函数代码分析

【SA8295P 源码分析】06 - SA8295P XBL Loader 阶段 sbl1_main_ctl 函数代码分析 一、XBL Loader 汇编源码分析1.1 解析 boot\QcomPkg\XBLLoader\XBLLoader.inf1.2 boot\QcomPkg\XBLDevPrg\ModuleEntryPoint.S:跳转 sbl1_entry 函数1.3 XBLLoaderLib\sbl1_Aarch64.s…

Communication Channels

沟通渠道 n * (n - 1) / 2 你1 相关方3 4 4 * 3 / 2 6 你1 相关方3 相关方1 5 5 * 4 / 2 10 人越多,沟通渠道越多,沟通成本理论越高

Roxy-Wi 命令执行漏洞复现

漏洞描述 Roxy-WI是开源的一款用于管理 Haproxy、Nginx 和 Keepalived 服务器的 Web 界面 Roxy-WI 6.1.1.0 之前的版本存在安全漏洞,该漏洞源于系统命令可以通过 subprocess_execute 函数远程运行,远程攻击者利用该漏洞可以执行远程代码。 免责声明 技术文章仅供参考,任…

jstack(Stack Trace for Java)Java堆栈跟踪工具

jstack(Stack Trace for Java)Java堆栈跟踪工具 jstack(Stack Trace for Java)命令用于生成虚拟机当前时刻的线程快照(一般称为threaddump或者javacore文件)。 线程快照就是当前虚拟机内每一条线程正在执…

使用预制体画刷在游戏场景中快速布置预制体、粒子特效等

有时候在使用tilemap的时候,会希望在场景中添加更复杂的对象。 在2d-extras中,加入了预制件笔刷(Prefab Brush),可以将游戏物体预制体作为瓦片,来方便的在游戏场景中快速的绘制。可以自动适应游戏物体的位置…

GitHub 开启 2FA 双重身份验证的方法

最近收到GitHub官方发来的邮件,全是英文的,如图: 使用邮箱翻译插件,进行翻译,哦,原来是要我进行2FA注册,如果不注册,GitHub的访问将收到限制,所以还是得注册一下 然后怎…

【Redis基础篇】浅谈分布式系统(一)

一、浅谈分布式系统 1. 单机架构:只有一台服务器,这个服务器负责所有的工作。 如果遇到了服务器不够的场景怎么处理? 开源:增加更多的硬件资源节流:软件上的优化,优化代码等…一台服务器资源使用有限,就…

无涯教程-PHP - 常量声明

常量值不能更改。默认情况下,常量区分大小写。按照约定,常量标识符始终为大写。与变量不同,您不需要具有"$"的常量。 constant 函数 如名称所示,此函数将返回常量的值。 当您要检索常量的值但不知道其名称时&#xf…

WebGL的剪裁空间

推荐:使用NSDT场景编辑器助你快速搭建可二次编辑的3D应用场景 什么是WebGL的剪裁空间 WebGL的剪裁空间(Clipping Space)是在图形渲染过程中处理视图体积裁剪的一种特定空间。它是指定义在3D世界坐标系和屏幕窗口之间的虚拟空间,用…

宝塔部署Java+Vue前后端分离项目经验总结

前言 之前部署服务器都是在Linux环境下自己一点一点安装软件,听说用宝塔傻瓜式部署更快,这次浅浅尝试了一把。 确实简单! 1、 买服务器 咋买服务器略,记得服务器装系统就装 Cent OS 7系列即可,我装的7.6。 2、创建…

css 实现svg动态图标效果

效果演示&#xff1a; 实现思路&#xff1a;主要是通过css的stroke相关属性来设置实现的。 html代码: <svgt"1692441666814"class"icon"viewBox"0 0 1024 1024"version"1.1"xmlns"http://www.w3.org/2000/svg"p-id"…

游戏msvcr120.dll丢失怎样修复?msvcr120.dll丢失常见原因

在尝试运行某些游戏时&#xff0c;我遇到了“msvcr120.dll丢失”的错误提示。经过一番调查和尝试&#xff0c;我成功地解决了这个问题。msvcr120.dll是Visual C Redistributable Package的一部分&#xff0c;它包含了许多运行Windows应用程序所需的库和函数。当游戏或其他应用程…

The internal rate of return (IRR)

内部收益率 NPV(Net Present Value)_spencer_tseng的博客-CSDN博客

电商项目part04 微服务拆分

微服务架构拆分 微服务介绍 英文:https://martinfowler.com/articles/microservices.html 中文:http://blog.cuicc.com/blog/2015/07/22/microservices 微服务拆分时机 如下场景是否需要进行微服务拆分&#xff1f; 代码维护困难&#xff0c;几百人同时开发一个模块&…

Java之接口

作者简介&#xff1a; zoro-1&#xff0c;目前大一&#xff0c;正在学习Java&#xff0c;数据结构等 作者主页&#xff1a; zoro-1的主页 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01;&#x1f496;&#x1f496; Java之接口 接口的概念语法规则接口特性接口使用案…

16----公式

本节我们来学习如何在markdown中打印公式 Markdown是一种轻量级标记语言&#xff0c;常用于撰写文档、博客和论坛帖子。虽然Markdown本身并不支持数学公式&#xff0c;但可以使用一些扩展来实现公式的显示。在支持公式扩展的 Markdown 解析器中&#xff0c;我们可以使用 Katex …

openstack搭建

1 设置root密码&#xff1a;sudo passwd root 2 网络配置&#xff1a;虚拟机安装是选择nat映射&#xff0c;系统安装成功后直接配置vmnet8的地址段即可&#xff08;操作系统正常安装即可&#xff0c;虚拟机内存大于4G即可&#xff09;&#xff1b; 3 安装ssh 在命令行输入 “su…

【微信小程序】下拉刷新功能实现

微信小程序开发系列 文章目录 前言一、onPullDownRefresh函数二、实现1.开启下拉刷新2.监听下拉事件 前言 在开发微信小程序中经常会需要下拉页面进行更新要页面数据的功能&#xff0c;微信小程序提供了onPullDownRefresh函数。该函数作用是监听用户下拉动作。 一、onPullDown…