前言
自己打算將做過的電賽真題,主要包含控制組的,近幾年出現的小車控制題目,自己做過的真題以及在準備電賽期間刷真題出現的問題以及經驗分享給大家
這次帶來的是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題-小車跟隨系統