2022年电赛C题——小车跟随行驶系统——做题记录以及经验分享
前言
自己打算将做过的电赛真题,主要包含控制组的,近几年出现的小车控制题目,自己做过的真题以及在准备电赛期间刷真题出现的问题以及经验分享给大家
这次带来的是22年电赛C题——小车跟随行驶系统,这道题目指定使用的是TI的单片机,完成以下功能
采⽤ TI 的 MCU设计⼀套⼩⻋跟随⾏驶系统,由⼀辆领头⼩⻋和⼀辆跟随⼩⻋组成,要求⼩⻋具有循 迹功能,且速度在0.3 ~ 1m/s 可调,能在指定路径上完成⾏驶操作。
好了,废话不多说,开始
赛题分析
以下是赛题的任务部分,要求采用TI的MCU,双车跟随,且具有循迹功能,速度在0.3 ~ 1m/s内可调,能在指定路径上完成行驶操作
好,根据题目我们来分析,几个重要的点
1. 采用TI的MCU 2. 领头小车和跟随小车 3. 具有循迹功能 4. 速度在0.3m/s-1m/s内可调 5. 到达终点时要发出声光提示 6. 可沿内外圈行驶,且内外圈可控 7. 当专家在E端放下等停标志时,小车停车,等待5s后停止 8. 双车之间的通信 9. 具有跟随功能
1、领头小车和跟随小车车型选择
这道题目要求的是双车,要搭建两个小车
这道题目建议使用
三轮小车,前轮为万向轮或牛眼轮,后两轮为驱动轮
当然,四轮小车也是可以的,我在做这道题目的时候,采用过前轮为舵机转向,后两轮为驱动轮的方案,效果也相当不错
在B站中观摩到的很多UP,还采用的是四轮小车,这种效果看起来也还不错
但是三轮小车的控制程度比后两种的车型难度较低,很适合入门级别摸索
对三轮小车的控制差不多了,就可以往后进阶了,四轮小车也是一样的原理,只不过多加了一些些东西
2、TI的MCU
做这道题目的时候,没有采用TI的MCU,使用的是Stm32F103RCT6
TI单片机是后面才学的,后面学会了TI的MCU后,使用起来和32是一样的
这道题目在练习时不必纠结是何种MCU,我们要理解的是这道题目需要我们的什么知识点,使用不同的MCU只是换了一个方式去调用外设,其内部核心原理都是一样的
一般来说,定时器,串口,中断都是要频繁使用的资源
3、具有循迹功能
这道题目的一个基础功能就是循迹,一切都是在循迹的基础上进行的,根据题目可以看到是黑线,黑线循迹和之前21年送药小车循红线的思路其实是一样的
黑线还比红线多了几种选择
黑线可以采用红外对管
来循迹,可以采用几路红外对管并排排列
,分别放在小车的前部,小车在运动行驶的过程中,根据红外对管传回来的状态来实时修正小车的位置
放五个红外对管,根据不同的状态给不同的偏差值,然后根据偏差使用PID算法,始终使小车保持在正中位置,即可达到循迹功能
类似的还有OpenMv巡线,灰度巡线
相关可以参考这个链接,我的21年送药小车教程里讲过的,都是一个思路,大家熟悉后,循迹基本就搞定了
分享21年电赛F题-智能送药小车-做题记录以及经验分享
还有哦,调节转向PID提一个醒
转向PID只需要调节P和D就行了
因为这道题目的要求是,速度在0.3m/s-1m/s内可调,你初始调节的PID参数,当速度快起来之后,后面速度的转向,可能就转不过来,可能会偏离赛道,这个时候,建议将速度拉到最大,然后调节PID参数,将这个PID参数作为最终加载值,这样PID参数适用于最大速度以下的转向
多调试,一般先给个P,放车进赛道,走一段,到达最大弯道,即那四个最大拐角的时候,看现象,转不过去,就加P,加到能够快速转过最大拐角时,即是合理P
可以适当给D,增加快速响应
4、速度在0.3m/s-1m/s内可调
这个简单,只需要设置几个按键,按键1速度为0.3m/s,按键2速度为0.5m/s…依次类推
不同的速度如何设置呢?
我们使用的是速度环,PID调节的期望速度,我们只需要给期望速度,这就是我们的小车行驶的速度
按下按键,速度在0.3m/s,期望速度为0.3m/s
5、到达终点发出声光提示
这个如何实现呢,摄像头识别到停止线后,小车停止
蜂鸣器响,灯光亮
6、可沿内外圈行驶,且内外圈可控
内外圈可控,是这道题的难点之一,题目要求小车要实现内圈超车的功能
,这就要求小车能准确拐到内圈中,并实施超车
如何实现内外圈切换呢?
- 在做题时,起初是MV端实现,当小车在跑第二圈的时候,识别到停止线两次后,对外圈的线进行屏蔽,摄像头上就只对左边内圈线感兴趣,此时,巡线偏差修改,小车根据PID算法,拐到内圈轨道行驶
后面,发现这种方法不太稳定,可能会出现,识别停止线错误,从而造成拐入内圈时机不正确,于是舍弃了这种方案
- 于是在32端实现,当摄像头识别到停止线两次后,左右轮给一个差速,左轮速度比右轮速度小,小车进而有一个向左偏移,然后根据传回来的巡线偏差,迅速调节小车姿态,从而拐入内圈行驶
这种方案经测试,效果较好,成功率也挺高的,从而实现内外圈可控
7、当专家在E端放下等停标志时,小车停车,等待5s后停止
这个就是MV端的任务嘞,当识别到等停标志后,根据MV传回来的标志位进行判断,等待5s后再继续进行行驶
这一小问要求的是速度为1m/s,1m/s在这个小赛道上速度是超快的了,我们在调试的时候,发现,速度一快之后,摄像头识别准确性大大降低,当时好像采取的是模板匹配还是神经网络,效果还是不理想
后面就没咋调了,主要是摄像头方面,需要多调节一下
8、双车之间的通信
根据说明,全程所有的操作,只有在领头小车上完成,有启动按键和设置按键,跟随小车只有一个上电开关
这也就是说,领头小车是通信主机,跟随小车是通信从机,主机始终发数据,从机始终接收主机发过来的数据
这里我们采用的是蓝牙模块HC-05,蓝牙还是很好用的,配置好后,每次用的时候直接用就行嘞,区分好主机和从机就行
说一下具体思路,主车设置按键,按下按键设置速度和题目模式,此时按下按键后,通过蓝牙主机发送数据给从机,告诉从机此时的行驶速度和题目模式,按下确认键后,两小车开始行进
9、具有跟随功能
这也是一个小难点,跟随小车要和领头小车保持20cm的间距,全程都不能发生小车碰撞
这里呢,我们采用HC-SR04超声波模块
,根据超声波探测前方小车的距离,实时改变小车的速度,从而达到控制间距的目的
这里呢,我们一开始使用的是,当小于某个距离阈值时,小车速度–,大于某个阈值时,小车速度++,始终保持20cm
这样嘞,经过调试,发现效果不咋好,勉勉强强可以跟随哈哈哈,也能加速和减速,总的来说就是程序的鲁棒性不行
理想情况是,离前方小车比较远,加速,离得非常近,减速,然后保持一段距离,离得非常近,马上往后
后面经过改进,知道了,其实可以根据超声波模块的距离变化,使用PID算法,输入为期望的跟随距离/小车当前得跟随距离
,输出的是小车的速度
这种,跟随效果就非常好嘞,但是在源代码中并未添加,大家可以尝试一下,我所了解到得一种跟随得较好方案
调试经验分享
这道题目看起来,不就是寻黑线吗,简简单单
但是在做得时候还是发现了很多问题的
下面分享一下调试经验
1、速度的计算
我所计算的速度,都是以RPM为单位的
,根据小车转一圈的脉冲数和小车当前读取的脉冲数进行计算,大家可以参考我之前写过的这篇文章的评论区查找如何将小车的脉冲数转换为RPM
Stm32-使用TB6612驱动电机及编码器测速
这里推荐轮趣的MG310电机,这个电机,最高转速为500转,小小一个电机,经过测试还是可以勉强跑到1m/s的
至少前几问绝对够用了,大家还可以选择其他电机
2、主要程序逻辑
这道题目的主要程序逻辑还是挺简单的,按下按键设置速度和模式,按下确认键下小车开始行驶
后面就是一些模式的函数的书写,根据按键按下的模式选择,选择响应的模式函数,遇到停止线停止
3、内外圈的切换
这个估计一下子调不好,内外圈当时卡了我们好久
你们看,当识别到停止线两次后,还要往前走一段,才是内外圈交点,这个时候才开始内外圈交换,所以这个距离可以采取记脉冲的方式,也可以采用延时的方式
来进行解决,当脉冲数达到后,或者是延时时间到后,立马给个差速,小车就拐到内圈去了
这个距离或者是延时时间需要好好把握一下
4、通信
这个也不多说了,初次建议首先使用串口,连接两个蓝牙,分别插到电脑,打开上位机,互相发送数据,成功后,就说明蓝牙配置完成
如果后面出问题的话,就是程序的问题,从程序内部寻找原因,硬件原因排除
下方是蓝牙的配对步骤
5、跟随功能
这个呢,上述说过的超声波PID跟随,是后面了解到的,还未调试,但是我觉得是一个非常好的方案,跟随效果应该会非常好
具体大家还可以参考其他大佬的教程,讲的挺好的
总结
这道题目看起来简单,但是有好几个难点,不只是简简单单循个迹,有很多小细节
大家可以根据我上方的经验分享以及赛题分析进行参考,做出自己的第一辆小车
经过这道题目后,多磨磨,将会对以下几种知识点熟练运用并掌握嘞
- 常见循迹方案
- 超声波的基本使用
- 无线通信模块的使用
- 电赛经验get, 经验值+1
希望我的分享对你有帮助,同样,我也开源了自己做这道题的代码,大家可以参考学习
开源链接
大家可以参考学习
大家可以自行访问,进行下载
下方为gitee开源链接,请大家点一个star,谢谢
oufen / 2022年电赛C题-小车跟随系统
相关文章:

2022年电赛C题——小车跟随行驶系统——做题记录以及经验分享
前言 自己打算将做过的电赛真题,主要包含控制组的,近几年出现的小车控制题目,自己做过的真题以及在准备电赛期间刷真题出现的问题以及经验分享给大家 这次带来的是22年电赛C题——小车跟随行驶系统,这道题目指定使用的是TI的单片…...

vscode + python
序 参考链接: 【教程】VScode中配置Python运行环境_哔哩哔哩_bilibili Python部分 Python Releases for Windows | Python.org vscode部分 Visual Studio Code - Code Editing. Redefined 一路next,全部勾上: 就可以了: 安装插…...

badgerdb里面的事务
事务的ACID A 原子性(Atomicity) 多步骤操作,只能是两种状态,要么所有的步骤都成功执行,要么所有的步骤都不执行,举例说明就是小明向小红转账30元的场景,拆分成两个步骤,步骤1&#…...
C# this.Invoke(new Action(() => { /* some code */ }))用法说明
在 C# 中,this.Invoke(new Action(() > { /* some code */ })) 是一种用于在 UI 线程上执行代码的方法,通常用于在后台线程中更新 UI 控件的值或执行其他需要在 UI 线程上执行的操作。 在 Windows Forms 或 WPF 等图形界面应用程序中,UI …...
MongoDB:MySQL,Redis,ES,MongoDB的应用场景
简单明了说明MySQL,ES,MongoDB的各自特点,应用场景,以及MongoDB如何使用的第一章节. 一. SQL与NoSQL SQL被称为结构化查询语言.是传统意义上的数据库,数据之间存在很明确的关联关系,例如主外键关联,这种结构可以确保数据的完整性(数据没有缺失并且正确).但是正因为这种严密的结…...
leetcode每日一题_2682.找出转圈游戏输家
2682.找出转圈游戏输家 题目: n 个朋友在玩游戏。这些朋友坐成一个圈,按 顺时针方向 从 1 到 n 编号。从第 i 个朋友的位置开始顺时针移动 1 步会到达第 (i 1) 个朋友的位置(1 < i < n),而从第 n 个朋友的位置开始顺时针移…...
OpenCV之薄板样条插值(ThinPlateSpline)
官方文档:OpenCV: cv::ThinPlateSplineShapeTransformer Class Reference 使用方法: 头文件:#include <opencv2/shape/shape_transformer.hpp> (1)点匹配 一般根据有多少个样本(或者点)…...

034_小驰私房菜_[问题复盘] Qcom平台,某些三方相机拍照旋转90度
全网最具价值的Android Camera开发学习系列资料~ 作者:8年Android Camera开发,从Camera app一直做到Hal和驱动~ 欢迎订阅,相信能扩展你的知识面,提升个人能力~ 【一、问题】 某些三方相机,预览正常,拍照旋转90度 【二、问题排查】 1 ) HAL这边Jpeg编码数据在哪个地方…...

【TI-CCS笔记】工程编译配置 bin文件的编译和生成 各种架构的Post-build配置汇总
【TI-CCS笔记】工程编译配置 bin文件的编译和生成 各种架构的Post-build配置汇总 TI编译器分类 在CCS按照目录下 有个名为${CG_TOOL_ROOT}的目录 其下就是当前工程的编译器 存放目录为: C:\ti\ccs1240\ccs\tools\compiler按类型分为五种: ti-cgt-arm…...

深入探索Java中的File类与IO操作:从路径到文件的一切
文章目录 1. File类的作用与构造方法2. File类常用方法:获取、判断和创建2.1 获取功能方法2.2 判断功能方法2.3 创建和删除功能方法2.4 目录的遍历方法 3. 递归:探索更深的层次代码示例:递归遍历文件夹 结论 🎉欢迎来到Java学习路…...

Python 处理 Excel 表格的 14 个常用操作
目录 1. 安装依赖库 2. 导入库 3. 读取Excel文件 4. 写入Excel文件 5. 创建工作表 6. 访问工作表 7. 读取单元格数据 8. 写入单元格数据 9. 获取行数和列数 10. 过滤数据 11. 排序数据 12. 添加新行 13. 删除行或列 14. 计算汇总统计 总结 无论是数据分析师、财…...
PyQt有哪些主要组件?
这是一个非常强大的跨平台GUI库,可以让你用Python语言创建美观且功能强大的桌面应用程序。让我们先来了解一下它的主要组件。 首先,我们要介绍的是窗口。窗口是PyQt应用程序的基本元素,所有的GUI元素都放置在窗口中。你可以创建主窗口、模态…...

力推C语言必会题目终章(完结篇)
W...Y的主页 😊 代码仓库分享 💕 今天是分享C语言必会题目最终章,全部都是硬货,大家都坐好准备开始喽!!! 编写一个函数,计算字符串中含有的不同字符的个数。字符在 ASCII 码范围内…...

CS5263替代停产IT6561连接DP转HDMI音视频转换器ASL 集睿致远CS5263设计电路原理图
ASL集睿致远CS5263是一款DP1.4到HDMI2.0b转换器芯片,设计用于将DP1.4源连接到HDMI2.0b接收器。 CS5263功能特性: DP接口包括4条主通道、辅助通道和HPD信号。接收器支持每通道5.4Gbps(HBR2)数据速率。DP接收机结合了HDCP1.4和HDCP…...

数据分析 | 随机森林如何确定参数空间的搜索范围
1. 随机森林超参数 极其重要的三个超参数是必须要调整的,一般再加上两到三个其他超参数进行优化即可。 2. 学习曲线确定n_estimators搜索范围 首先导入必要的库,使用sklearn自带的房价预测数据集: import numpy as np import pandas as pd f…...

5G+AI数字化智能工厂建设解决方案PPT
导读:原文《5GAI数字化智能工厂建设解决方案》(获取来源见文尾),本文精选其中精华及架构部分,逻辑清晰、内容完整,为快速形成售前方案提供参考。数字化智能工厂定义 智能基础架构协同框架 - 端、边、云、网…...
Windows配置编译ffmpeg +音视频地址
Windows配置MinGW及MinGW-make使用实例 https://blog.csdn.net/Henoiiy/article/details/122550618 ffmpeg安装遇错:nasm/yasm not found or too old. Use --disable-x86asm for a crippled build. https://blog.csdn.net/sayyy/article/details/124337834https://…...
C语言 常用工具型API --------system()
函数名: system() 用 法: int system(char *command); 原理: 加载一个子进程去执行指定的程序,而想Linux命令基本都是一个单独的进程实现的,所以你所掌握的Linux命令越多,该函数功…...

车规级半导体分类(汽车芯片介绍)
车规级半导体,也被称为“汽车芯片”,主要应用于车辆控制装置、车载监控系统和车载电子控制装置等领域。这些半导体器件主要分布在车体控制模块上,以及车载信息娱乐系统方面,包括动力传动综合控制系统、主动安全系统和高级辅助驾驶…...

opencv图像轮廓检测
效果展示: 代码部分: import cv2 import numpy as np img cv2.imread(C:/Users/ibe/Desktop/picture.PNG,cv2.IMREAD_UNCHANGED) # 类型转换 img cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 结构元 kernel cv2.getStructuringElement(cv2.MORPH_REC…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...

23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...

python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...

Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...
在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?
uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件,用于在原生应用中加载 HTML 页面: 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...
C++.OpenGL (20/64)混合(Blending)
混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...
人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent
安全大模型训练计划:基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标:为安全大模型创建高质量、去偏、符合伦理的训练数据集,涵盖安全相关任务(如有害内容检测、隐私保护、道德推理等)。 1.1 数据收集 描…...

破解路内监管盲区:免布线低位视频桩重塑停车管理新标准
城市路内停车管理常因行道树遮挡、高位设备盲区等问题,导致车牌识别率低、逃费率高,传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法,正成为破局关键。该设备安装于车位侧方0.5-0.7米高度,直接规避树枝遮…...