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、可沿內外圈行駛,且內外圈可控

內外圈可控,是這道題的難點之一,題目要求小車要實現內圈超車的功能
,這就要求小車能準確拐到內圈中,并實施超車

如何實現內外圈切換呢?

  1. 在做題時,起初是MV端實現,當小車在跑第二圈的時候,識別到停止線兩次后,對外圈的線進行屏蔽,攝像頭上就只對左邊內圈線感興趣,此時,巡線偏差修改,小車根據PID算法,拐到內圈軌道行駛

后面,發現這種方法不太穩定,可能會出現,識別停止線錯誤,從而造成拐入內圈時機不正確,于是舍棄了這種方案

  1. 于是在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題-小車跟隨系統

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/40030.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/40030.shtml
英文地址,請注明出處:http://en.pswp.cn/news/40030.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

spring ico容器 spring注入方式 spring與tomcat整合

一、簡介 1、什么是spring? Spring是一個開源的輕量級Java應用開發框架,它提供了一種簡單、高效、靈活的方式來構建企業級應用程序。Spring框架的核心特點是依賴注入(Dependency Injection)和面向切面編程(Aspect-Ori…

SpringBoot整合Redis完整篇

SpringBoot整合Redis完整篇 1、在springboot項目的pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schem…

分布式鎖有哪些應用場景和實現?

電商網站都會遇到秒殺、特價之類的活動&#xff0c;大促活動有一個共同特點就是訪問量激增&#xff0c;在高并發下會出現成千上萬人搶購一個商品的場景。雖然在系統設計時會通過限流、異步、排隊等方式優化&#xff0c;但整體的并發還是平時的數倍以上&#xff0c;參加活動的商…

WebRTC音視頻通話-實現GPUImage視頻美顏濾鏡效果iOS

WebRTC音視頻通話-實現GPUImage視頻美顏濾鏡效果 在WebRTC音視頻通話的GPUImage美顏效果圖如下 可以看下 之前搭建ossrs服務&#xff0c;可以查看&#xff1a;https://blog.csdn.net/gloryFlow/article/details/132257196 之前實現iOS端調用ossrs音視頻通話&#xff0c;可以查…

2023秋招筆試

檸檬微趣 將java的鏈表升序排序&#xff0c;鏈表用Class Node{int val,Node next}實現 import java.util.Comparator; import java.util.PriorityQueue; import java.util.Scanner;/*** 輸入一串數字&#xff0c;放入list中&#xff0c;實現sortList&#xff0c;返回升序的li…

將單個訓練數據集文件拆分為:image文件和label文件(pytorch學習+螞蟻蜜蜂數據集)

螞蟻蜜蜂分類數據集下載鏈接&#xff1a;https://download.pytorch.org/tutorial/hymenoptera_data.zip 要實現如圖操作&#xff1a; 將ants分為ants_image和ants_label 將bees分成bees_image和bees_label 創建ants_label和bees_label&#xff0c;并且以圖片名作為txt文件的…

Apche Kafka + Spring的消息監聽容器

目錄 一、消息的接收1.1、消息監聽器 二、消息監聽容器2.1、 實現方法2.1.1、KafkaMessageListenerContainer2.1.1.1、 基本概念2.1.1.2、如何使用 KafkaMessageListenerContainer 2.1.2、ConcurrentMessageListenerContainer 三、偏移 四、監聽器容器自動啟動 一、消息的接收 …

【機器學習】sklearn數據集的使用,數據集的獲取和劃分

「作者主頁」&#xff1a;士別三日wyx 「作者簡介」&#xff1a;CSDN top100、阿里云博客專家、華為云享專家、網絡安全領域優質創作者 「推薦專欄」&#xff1a;對網絡安全感興趣的小伙伴可以關注專欄《網絡安全入門到精通》 sklearn數據集 二、安裝sklearn二、獲取數據集三、…

mac錄屏工具,錄屏沒有聲音的解決辦法

mac錄屏工具&#xff0c;錄屏沒有聲音的解決辦法 在使用macbook錄制屏幕時&#xff0c;發現自帶的錄屏工具QuickTime Player沒有聲音&#xff0c;于是嘗試了多款錄屏工具&#xff0c;對其做一些經驗總結&#xff08;省流&#xff1a;APP Store直接可以免費下載使用Omi錄屏專家…

第三課-界面介紹SD-Stable Diffusion 教程

前言 我們已經安裝好了SD&#xff0c;這篇文章不介紹難以理解的原理&#xff0c;說使用。以后再介紹原理。 我的想法是&#xff0c;先學會畫&#xff0c;然后明白原理&#xff0c;再去提高技術。 我失敗過&#xff0c;知道三天打魚兩天曬網的痛苦&#xff0c;和很多人一樣試了…

TiDB數據庫從入門到精通系列之六:使用 TiCDC 將 TiDB 的數據同步到 Apache Kafka

TiDB數據庫從入門到精通系列之六&#xff1a;使用 TiCDC 將 TiDB 的數據同步到 Apache Kafka 一、技術流程二、搭建環境三、創建Kafka changefeed四、寫入數據以產生變更日志五、配置 Flink 消費 Kafka 數據 一、技術流程 快速搭建 TiCDC 集群、Kafka 集群和 Flink 集群創建 c…

【網絡編程系列】網絡編程實戰

&#x1f49d;&#x1f49d;&#x1f49d;歡迎來到我的博客&#xff0c;很高興能夠在這里和您見面&#xff01;希望您在這里可以感受到一份輕松愉快的氛圍&#xff0c;不僅可以獲得有趣的內容和知識&#xff0c;也可以暢所欲言、分享您的想法和見解。 推薦:kuan 的首頁,持續學…

使用Vue.js框架的指令和事件綁定實現一個購物車的頁面布局

使用了v-model指令來實現全選/全不選的功能&#xff0c;當全選框被點擊時&#xff0c;isAllChecked的值會被改變。使用了v-if指令來判斷購物車中是否有商品&#xff0c;如果有商品則渲染商品列表&#xff0c;否則顯示購物車為空的提示。使用了v-for指令來遍歷datalist數組&…

jvm內存溢出排查(使用idea自帶的內存泄漏分析工具)

文章目錄 1.確保生成內存溢出文件2.使用idea自帶的內存泄漏分析工具3.具體實驗一下 1.確保生成內存溢出文件 想分析堆內存溢出&#xff0c;一定在運行jar包時就寫上參數-XX:HeapDumpOnOutOfMemoryError&#xff0c;可以看我之前關于如何運行jar包的文章。若你沒有寫。可以寫上…

Keepalived入門指南:實現故障轉移和負載均衡

文章目錄 一、簡介1. Keepalived概述2. 高可用性和負載均衡的重要性 二、故障轉移1. 什么是故障轉移2. Keepalived的故障轉移原理a) VRRP協議b) 虛擬路由器ID和優先級 3. 配置Keepalived實現故障轉移a) 主備服務器的設置b) 監控網絡接口c) 虛擬IP的配置d) 備份服務器接管流程 三…

Python學習筆記_基礎篇(九)_面向對象編程

本篇內容: 1、反射2、面向對象編程3、面向對象三大特性4、類成員5、類成員修飾符6、類的特殊成員7、單例模式 反射 python中的反射功能是由以下四個內置函數提供&#xff1a;hasattr、getattr、setattr、delattr&#xff0c;改四個函數分別用于對對象內部執行&#xff1a;檢…

el-form自定義校驗規則

Vue 的 el-form 組件可以使用自定義校驗規則進行表單驗證。自定義校驗規則可以通過傳遞一個函數來實現&#xff0c;該函數接受要校驗的字段的值作為參數&#xff0c;并返回一個布爾值或一個 Promise 對象。 下面是一個示例&#xff0c;演示如何在 el-form 中使用自定義校驗規則…

若依前端npm run dev啟動時報錯

本文主要解決問題:若依前端npm run dev啟動時報錯,解決辦法。 目錄 1、第1種解決方案(親測有效) 2、第2種解決方案(親測有效) Error: error:0308010C:digital envelope routines::unsupportedat new Hash (node:internal/crypto/hash:67:19)at Object.createHash (node…

解決 adb install 錯誤INSTALL_FAILED_UPDATE_INCOMPATIBLE

最近給游戲出包&#xff0c;平臺要求 v1 簽名吧&#xff0c;AS 打包后&#xff0c;adb 執行安裝到手機&#xff0c;我用的設備是google pixel6 , android 系統 13&#xff0c; 提示如下&#xff1a; adb install -r v5_android_202308161046.apk Performing Streamed Install a…

centos 安裝.net 6 sdk

按照以下步驟在 CentOS 上安裝 .NET 6 SDK&#xff1a; 更新系統&#xff1a; sudo yum update安裝依賴項&#xff1a; sudo yum install -y curl libunwind libicu下載并添加 Microsoft 的軟件包存儲庫密鑰&#xff1a; sudo rpm -Uvh https://packages.microsoft.com/config/…