智能競賽技術(shù)報(bào)告 | 智能車視覺 - 南京郵電大學(xué) - 柵庫砸車跑路隊(duì)

      網(wǎng)友投稿 1074 2022-05-29

      學(xué) 校:南京郵電大學(xué)

      隊(duì)伍名稱:刪庫砸車跑路隊(duì)

      參賽隊(duì)員:劉樂

      孫銳

      甘翠

      帶隊(duì)教師:江兵

      劉燁

      章主要介紹智能汽車系統(tǒng)總體設(shè)計(jì)方案,在后面的章節(jié)中將整個(gè)系統(tǒng)分為機(jī)械結(jié)構(gòu)、電路設(shè)計(jì)、程序設(shè)計(jì)三部分對(duì)系統(tǒng)進(jìn)行深入的介紹和分析。

      1.1 系統(tǒng)方案的選擇

      按照競賽規(guī)則規(guī)定,我們選用C車車模,使用rt1064作為控制器,同時(shí)采用總鉆風(fēng)MT9V032攝像頭進(jìn)行主要道路識(shí)別,OpenART mini進(jìn)行特殊元素識(shí)別。

      1.2 系統(tǒng)方案的設(shè)計(jì)

      按照競賽規(guī)則規(guī)定,本智能汽車系統(tǒng)采用恩智浦的rt1064單片機(jī)作為核心控制單元, 總鉆風(fēng)MT9V032攝像頭采集賽道圖像信息,OpenART mini采集特殊元素,返回到單片機(jī)用作控制智能車速度與轉(zhuǎn)向。Ips200屏幕用于顯示參數(shù)和攝像頭采集到的圖像。主控輸出 PWM 波控制電機(jī)的轉(zhuǎn)速和舵機(jī)打角以驅(qū)動(dòng)智能車。由于是C車車模,所以需要使用程序差速控制,保證動(dòng)力輪內(nèi)側(cè)輪胎的磨損均勻。為了控制的更加精細(xì),我們使用編碼器作為速度傳感器,使用PID算法利用編碼器返回的信號(hào)閉環(huán)電機(jī)的轉(zhuǎn)速。

      根據(jù)以上系統(tǒng)方案設(shè)計(jì),智能車共包括七大模塊:rt1064主控模塊、攝像頭模塊、特殊元素識(shí)別模塊、電源模塊、電機(jī)驅(qū)動(dòng)模塊、速度檢測(cè)模塊和輔助調(diào)試模塊。Rt1064主控模塊作為整個(gè)智能汽車的大腦,將攝像頭,編碼器等傳感器的信號(hào)進(jìn)行處理,將處理后的信息通過算法控制智能車完成相應(yīng)的任務(wù)。

      1.3 小結(jié)

      本章重點(diǎn)分析了智能汽車系統(tǒng)總體方案的選擇,并介紹了系統(tǒng)的總體設(shè)計(jì),簡要地分析了系統(tǒng)中各模塊的作用。

      賽題使用的車模為C車車模,機(jī)械結(jié)構(gòu)對(duì)賽車在賽道上的表現(xiàn)有著較大的影響,因此對(duì)機(jī)械結(jié)構(gòu)的調(diào)節(jié)是智能車制作過程中不可忽視的一環(huán)。

      2.1 智能車結(jié)構(gòu)

      在正確組裝車模的基礎(chǔ)上,為獲得最好的車模性能,我們小組在改裝時(shí)力求重量輕、重心低、結(jié)構(gòu)標(biāo)準(zhǔn)且堅(jiān)固,大量采用了3D結(jié)構(gòu)打印、標(biāo)準(zhǔn)件固定、一體化電路板并采用更輕的高倍率2S鋰電池供電,各電路連接也采用更標(biāo)準(zhǔn)的一體化接口,基本摒棄了熱熔膠帶來的不穩(wěn)定因素。最終我們使整車(帶電池)重量控制在了1kg以內(nèi)并且獲得了超低的重心。

      2.2 小結(jié)

      機(jī)械結(jié)構(gòu)性能的好壞是關(guān)乎整個(gè)智能汽車速度最高極限的決定性因素之一。電池盡量安裝在靠近底盤處,由于模型車的自身特點(diǎn),模型車底盤可利用空間很小,硬件組成員改進(jìn)了電路板形狀,使電路板和模型車的底盤形成了較為完美的契合。在實(shí)際操作中發(fā)現(xiàn),往往程序沒有改動(dòng),而對(duì)機(jī)械結(jié)構(gòu)進(jìn)行改良之后速度又上了一個(gè)臺(tái)階,這就證明了機(jī)械結(jié)構(gòu)不可忽視的重要性。

      件電路是程序的載體,硬件電路的好壞也是智能汽車性能好壞的關(guān)鍵因素。下面從主板電路,驅(qū)動(dòng)板電路,運(yùn)放電路,鍵盤電路四方面對(duì)整車電路進(jìn)行分析。

      3.1 一體化電路板設(shè)計(jì)

      一體化電路板設(shè)計(jì)之初便力求輕量化與極致的性能,便將電源管理、電磁檢測(cè)電路、驅(qū)動(dòng)、人機(jī)交互部分全部集成在一塊雙面的PCB板上,考慮到RT1064的封裝便使用逐飛提供的核心板。各項(xiàng)元件均選擇在合適范圍內(nèi)的最小封裝以便集成。

      電源管理:一路驅(qū)動(dòng)分路、一路6V舵機(jī)電源降壓、一路5V降壓、兩路3.3V降壓;

      驅(qū)動(dòng)模塊:兩路全橋驅(qū)動(dòng)、四通道緩沖隔離芯片;

      電磁檢測(cè)電路:四通道AD運(yùn)放及可調(diào)電阻端子;

      人機(jī)交互部分:2寸IPS屏幕、RGB可控指示燈、蜂鳴器電路、按鍵、串口;

      其余部分包括各通信串口、攝像頭接口、編碼器接口、電機(jī)接口等。

      最終PCB板圖如下圖所示,主控板整體原理圖見附錄A。

      3.2 小結(jié)

      硬件電路是模型汽車系統(tǒng)的必備部分。只有穩(wěn)定的硬件電路才能保證程序的正確控制。為此,我們?cè)谠O(shè)計(jì)電路之時(shí),考慮了很多問題,采用了模擬部分與數(shù)字部分隔離等措施。我們的硬件電路的設(shè)計(jì)思想是在保證正確檢測(cè)信號(hào)的前提下,盡可能精簡電路。

      4.1 圖像二值化算法

      我們隊(duì)的圖像處理是在二值化化的圖像上進(jìn)行的,其好處就是運(yùn)算速度快。但在智能車的賽道上經(jīng)常遇到賽道光照不均勻的情況(光照實(shí)際上很難做到均勻),因此用固定閾值跑完全程是非常不穩(wěn)定的做法,于是我們想尋找一個(gè)方法,能夠自適應(yīng)的設(shè)定閾值,在這個(gè)過程中,我們發(fā)現(xiàn)了運(yùn)用比較廣泛的OTUS算法。經(jīng)過測(cè)試,OTUS算法能夠解決視野中小范圍反光的情況,給攝像頭加上偏振片搭配OTUS算法效果最佳。下面介紹大津算法的原理。

      大津算法實(shí)際就是分類。簡單用概率統(tǒng)計(jì)的方法來描述,對(duì)于一組數(shù)據(jù)T,數(shù)據(jù)個(gè)數(shù)為n,其均值為:

      D(X)=∑_(i=1)n?〖P_I?〖(x_i-μ)〗2 〗

      如果單個(gè)的數(shù)據(jù)其越偏離于中心,那么,其方差值也就越大。

      圖像的閾值化處理,就是將圖像分為兩個(gè)部分,高于閾值的部分,和小于閾值的部分。(暫不考慮多閾值的情況)。那么,如果將圖像的每一個(gè)像素點(diǎn)的強(qiáng)度作為一個(gè)數(shù)據(jù)集合中的單元,那么,閾值化就相當(dāng)于是一個(gè)二分類的問題。

      假設(shè)整個(gè)圖像的均值為m,只有兩個(gè)數(shù)據(jù),m1,m2,考慮著兩個(gè)數(shù)據(jù)的離散程度,同樣可以用上面的方差公式。方差越大,這兩個(gè)類也就越離散,分的越開。就像考試一樣,分差越大,說明學(xué)習(xí)努力程度差距越大。

      所以,我們求這個(gè)閾值時(shí),就希望在閾值分割后,兩個(gè)類中,每一個(gè)類都趨近于一個(gè)值,同時(shí)遠(yuǎn)離另一個(gè)值。

      大津算法的詳細(xì)步驟下如圖所示:

      4.2 循跡算法

      如下圖所示,從圖像最下側(cè)往上遍歷,從中間往左右找邊界,當(dāng)找到連續(xù)兩個(gè)像素點(diǎn)為黑時(shí),記錄邊界,左右邊界相加后左移一位計(jì)算中點(diǎn),進(jìn)入上一行,從計(jì)算的中點(diǎn)開始往左右找邊界。如到達(dá)最左側(cè)/最右側(cè)仍未找到邊界,若有一側(cè)有邊界,則通過單邊界+(-)賽道寬度來計(jì)算右(左)邊界,然后進(jìn)入上一行的遍歷。若兩側(cè)均無邊界,則記為兩側(cè)丟邊,進(jìn)入上一行的遍歷。

      圖像的所有行遍歷完成后,所有行左右邊界相加后左移一位計(jì)算中點(diǎn),然后判斷整條線的斜率或使用某些點(diǎn)加權(quán)減去賽道中心點(diǎn)計(jì)算偏差,來計(jì)算應(yīng)該賦給舵機(jī)的數(shù)值。

      4.3 入庫處理

      如圖4.3-1所示,固定某一行,從左向右遍歷,當(dāng)黑白跳變點(diǎn)到達(dá)一定數(shù)量時(shí),判斷到達(dá)一次車庫。

      到達(dá)兩次車庫后,如圖4.3-2所示,將圖像左(右)側(cè)最下側(cè)連接賽道和車庫的拐點(diǎn),作為左(右)邊界,右(左)邊界全部丟棄,然后補(bǔ)賽道寬作為右(左)邊界,計(jì)算賽道中線,然后能直接導(dǎo)航進(jìn)入車庫。

      4.4 十字處理

      如圖4.4-1所示,當(dāng)圖像中心列及相鄰幾列為白且圖像中心行及相鄰幾行為白,記為到達(dá)十字,這種判斷十字的方法十分穩(wěn)定,缺點(diǎn)是出環(huán)姿態(tài)不準(zhǔn)時(shí)識(shí)別不到,我在代碼中進(jìn)十字后開始計(jì)時(shí),定時(shí)一段時(shí)間后清除十字標(biāo)志,即視為出已經(jīng)出十字。

      4.5 環(huán)島處理

      如圖4.5-1所示,當(dāng)賽道中心列及相鄰幾列為白,且圖像中心到右下角(注意斜率)為白,且左上角一定大小三角形為黑,視為即將進(jìn)入右環(huán)島,若一定時(shí)間未獲取到進(jìn)入右環(huán)島標(biāo)志,清除即將進(jìn)入右環(huán)島的標(biāo)志。左環(huán)島相同處理。

      如圖4.5-2所示,當(dāng)賽道中心列及相鄰幾列為白,且圖像中心到右上角(注意斜率)為白時(shí),且左下角一定大小三角形為黑時(shí),視為進(jìn)入右環(huán)島,將圖像左(右)側(cè)最下側(cè)與賽道和環(huán)島的拐點(diǎn)連線作為左(右)邊界,左(右)邊界加(減)賽道寬度記為右(左)邊界,相加左移記為賽道中線,直接導(dǎo)航進(jìn)環(huán)島。

      4.6 三叉處理

      如圖4.5-2所示,若圖像左側(cè)靠上的小三角形、右側(cè)靠上的小三角形、上側(cè)中心的小三角形為黑色,且程序判斷賽道整體呈現(xiàn)Y形,可記為出現(xiàn)了三叉元素,隨后根據(jù)OpenART mini傳回的串口信息選擇走左側(cè)/右側(cè)。

      4.7 Apriltag與靶標(biāo)處理

      4.7.1 Apriltag碼識(shí)別處理

      利用OpenART自帶的標(biāo)準(zhǔn)庫,對(duì)路面上的Apriltag碼進(jìn)行識(shí)別,當(dāng)識(shí)別結(jié)果為奇數(shù)時(shí)利用串口通信向RT1064發(fā)送數(shù)據(jù)‘ST1P’,識(shí)別結(jié)果為奇數(shù)時(shí)利用串口通信向RT1064發(fā)送數(shù)據(jù)“ST0P”。

      4.7.2 靶標(biāo)識(shí)別處理

      先采集十類水果動(dòng)物的圖片制作數(shù)據(jù)集,數(shù)據(jù)集的質(zhì)量直接影響識(shí)別的結(jié)果。經(jīng)過實(shí)踐,采用OpenART直接拍照制作數(shù)據(jù)集的形式會(huì)因?yàn)榉直媛什蛔銓?dǎo)致丟失大量特征,最終誤識(shí)概率較高;擴(kuò)充官方數(shù)據(jù)集得到的數(shù)據(jù)質(zhì)量較好,誤識(shí)率低。

      將數(shù)據(jù)集放入下圖所示網(wǎng)絡(luò)結(jié)構(gòu)的模型中進(jìn)行訓(xùn)練,完成訓(xùn)練后將訓(xùn)練好的模型文件放入nncu中進(jìn)行量化,量化好的模型文件放入OpenART的SD卡中即可使用,最終識(shí)別率在78.6%左右。

      當(dāng)識(shí)別結(jié)果為水果時(shí)利用串口通信向RT1064發(fā)送數(shù)據(jù)‘SF1P’,并將pwm置50%讓激光打靶;識(shí)別結(jié)果為動(dòng)物時(shí)利用串口通信向RT1064發(fā)送數(shù)據(jù)‘SF0P’。

      先采集0~9號(hào)數(shù)字的圖片制作數(shù)據(jù)集,數(shù)字的特征不復(fù)雜,因此采用OpenART直接拍照制作數(shù)據(jù)集的形式就能夠有很好的效果。如果采用大量數(shù)字圖片進(jìn)行訓(xùn)練會(huì)存在過擬合的現(xiàn)象,加入不同光照不同角度的圖片可以提高泛化能力。

      將數(shù)據(jù)集放入下圖所示網(wǎng)絡(luò)結(jié)構(gòu)的模型中進(jìn)行訓(xùn)練,完成訓(xùn)練后將訓(xùn)練好的模型文件放入nncu中進(jìn)行量化,量化好的模型文件放入OpenART的SD卡中即可使用,最終識(shí)別率在99.2%左右。

      當(dāng)識(shí)別結(jié)果為奇數(shù)時(shí)利用串口通信向RT1064發(fā)送數(shù)據(jù)‘SN1P’,識(shí)別結(jié)果為奇數(shù)時(shí)利用串口通信向RT1064發(fā)送數(shù)據(jù)‘SN0P’。

      4.8 車速閉環(huán)

      使用增量式PID算法對(duì)車速進(jìn)行閉環(huán)。之所以不用經(jīng)典PID算法,是因?yàn)榻?jīng)典PID算法主要針對(duì)一些惰性系統(tǒng),即變化速度較慢的系統(tǒng),而智能車變化速度較快,因此采用相對(duì)來說比較適合的增量式PID,增量式PID具有以下優(yōu)點(diǎn):

      (1) 由于計(jì)算機(jī)輸出增量,所以誤動(dòng)作時(shí)影響小,必要時(shí)可用邏輯判斷的方法關(guān)掉。

      (2) 手動(dòng)/自動(dòng)切換時(shí)沖擊小,便于實(shí)現(xiàn)無擾動(dòng)切換。此外,當(dāng)計(jì)算機(jī)發(fā)生故障時(shí),由于輸出通道或執(zhí)行裝置具有信號(hào)的鎖存作用,故能保持原值。

      (3) 算式中不需要累加。控制增量 的確定僅與最近k次的采樣值有關(guān),所以較容易通過加權(quán)處理而獲得比較好的控制效果。

      但增量式PID也有其不足之處:積分截?cái)嘈?yīng)大,有靜態(tài)誤差;溢出的影響大。使用時(shí),常選擇帶死區(qū)、積分分離等改進(jìn)PID控制算法。

      在調(diào)試電機(jī)閉環(huán)時(shí),不能在空載的情況下進(jìn)行調(diào)試,賽車畢竟要在賽道上跑,如果空載時(shí)調(diào)好PID參數(shù),上賽道后很有可能會(huì)出現(xiàn)車速不穩(wěn)定的情況。因此建議先鋪設(shè)一段長直道,在直道上跑智能車,通過上位機(jī)觀察車模運(yùn)行過程中的車輪轉(zhuǎn)速變化來調(diào)節(jié)PID參數(shù)。

      們的軟件程序編寫任務(wù)主要在vs code平臺(tái)下進(jìn)行的,該平臺(tái)是一個(gè)非常有效的集成開發(fā)環(huán)境(IDE),它使用戶充分有效地開發(fā)并管理嵌入式應(yīng)用工程。作為一個(gè)開發(fā)平臺(tái),他具備較為完善的特性。與此同時(shí),vs code可以安裝各種軟件開發(fā)插件,對(duì)于程序開發(fā)的效率有比較大的提升。

      在智能車的調(diào)試過程中,光靠在線調(diào)試過程是遠(yuǎn)遠(yuǎn)不夠的,我們需要獲取車模在高速運(yùn)行中的各項(xiàng)參數(shù)信息,根據(jù)這些信息或信息組成的波形圖來調(diào)試參數(shù)。因此良好的上位機(jī)能讓調(diào)參變得事半功倍。我們隊(duì)在本次比賽中使用的上位機(jī)為VOFA+,一款插件驅(qū)動(dòng)的高自由度上位機(jī)。和其它上位機(jī)相比,他有以下三個(gè)優(yōu)點(diǎn):

      直觀:極致簡約的協(xié)議設(shè)計(jì),打印字符串或發(fā)送浮點(diǎn)數(shù)組,就可以輕松推送數(shù)據(jù)!數(shù)據(jù)、命令和參數(shù),貫穿始終,隨處綁定

      靈活:插件式設(shè)計(jì),無論協(xié)議還是控件,都可二次開發(fā)、動(dòng)態(tài)插入,讓你從最基礎(chǔ)的文本調(diào)試,拓展到無限豐富。

      強(qiáng)大:不僅僅是2維可視化,3D控件、圖形化參數(shù)發(fā)送也已支持。自主研發(fā)的波形控件,更將實(shí)時(shí)傅里葉變換和直方統(tǒng)計(jì)圖完美集成。

      我們隊(duì)通過本款上位機(jī)對(duì)智能車進(jìn)行串口控制、數(shù)據(jù)分析,取得了比較不錯(cuò)的效果。調(diào)試界面如下:

      車長(mm) 280

      車寬(mm) 180

      車高(mm) 315

      攝像頭高度(mm) 290

      舵機(jī)型號(hào)及個(gè)數(shù) S3010一個(gè)

      電機(jī)個(gè)數(shù) 兩個(gè)

      傳感器種類、數(shù)量 總鉆風(fēng)攝像頭一個(gè)

      Openart mini一個(gè)

      編碼器兩個(gè)

      電池種類、規(guī)格、數(shù)量 鋰電池 2S 2000mAh一個(gè)

      國大學(xué)生智能汽車競賽是以智能汽車為研究對(duì)象的創(chuàng)意性科技競賽,是面向全國大學(xué)生的一種具有探索性工程實(shí)踐活動(dòng),是教育部倡導(dǎo)的大學(xué)生科技競賽之一。該競賽涵蓋了自動(dòng)控制、模式識(shí)別、傳感技術(shù)、電子、電氣、計(jì)算機(jī)、機(jī)械與汽車等多個(gè)學(xué)科專業(yè),意在培養(yǎng)學(xué)生的知識(shí)融合和實(shí)踐動(dòng)手能力。

      我們作為自動(dòng)化學(xué)院、人工智能學(xué)院的學(xué)生,在制作智能車的過程中,來自不同專業(yè)的隊(duì)員們通力合作,學(xué)習(xí)了如何設(shè)計(jì)、制作電路,設(shè)計(jì)、打印3D模型,對(duì)電路和機(jī)械結(jié)構(gòu)的了解更加深入。在調(diào)車過程中,我們結(jié)合了硬件、軟件和機(jī)械,盡力將賽車調(diào)試到最佳狀態(tài)。我們遇到過問題,也因?yàn)榇中脑斐闪撕芏嗍д`,但經(jīng)過我們的不斷努力,我們最終制作出了能完成所有比賽任務(wù)的智能車。

      本屆競賽與去年相比,賽道元素更加復(fù)雜,賽道任務(wù)更加多樣,這就要求我們需要對(duì)車子的控制更加精細(xì),我們需要提升智能車的整體穩(wěn)定性,保證在賽場上能夠穩(wěn)定發(fā)揮。雖然我們的智能車已經(jīng)能完成比賽,但是我們本身能夠表現(xiàn)的更加出色,這表明我們需要進(jìn)一步的歷練。

      我們相信通過這段時(shí)間的辛勤努力和指導(dǎo)教師的悉心教導(dǎo),我們一定能在此次比賽中取得優(yōu)異的成績!

      卓晴、黃開勝、邵貝貝等.學(xué)做智能車——挑戰(zhàn)“飛思卡爾”杯.北京:北京航空航天出版社,2007年3月第1版

      第十六屆全國大學(xué)生智能汽車競賽秘書處,第十六屆全國大學(xué)生智能汽車競賽競速比賽規(guī)則,2020年12月

      隋金雪、楊莉、張巖等. “飛思卡爾”杯智能汽車設(shè)計(jì)與實(shí)例教程.北京:電子工業(yè)出版社,2015年3月第2版

      伊恩·古德費(fèi)洛、約書亞·本吉奧、亞倫·庫維爾等. 深度學(xué)習(xí).北京:人民郵電出版社,2017年8月第1版

      王盼寶、樊越驍、曹楠、單超群、朱葛峻、渠占廣、佟超、蕭英喆等. 智能車制作——從元器件、機(jī)電系統(tǒng)、控制算法到完整的智能車設(shè)計(jì).北京:清華大學(xué)出版社,2018年1月第1版

      附錄A 主控板整體原理圖

      附錄B 中斷服務(wù)函數(shù)代碼

      #include "headfile.h" #define image_show_flag 1 //控制是否顯示圖像 #define image_send_flag 0 //控制是否發(fā)送圖像 #define edge_show_flag 1 //控制是否顯示賽道邊界 #define image_show_value 1 //控制是否顯示圖像相關(guān)數(shù)據(jù) int main(void) { //關(guān)閉總中斷 DisableGlobalIRQ(); //務(wù)必保留,本函數(shù)用于初始化MPU 時(shí)鐘 調(diào)試串口 board_init(); //延時(shí)300ms,等待主板其他外設(shè)上電成功 systick_delay_ms(500); //外設(shè)初始化 Init(); //總中斷最后開啟 EnableGlobalIRQ(0); //開始計(jì)時(shí)任務(wù) systick_start(); while (1) { #if image_send_flag csi_seekfree_sendimg_03x(USART_8, mt9v03x_csi_image[0], MT9V03X_CSI_W, MT9V03X_CSI_H); #endif #if image_show_flag ips200_displayimage032(image[0], MT9V03X_CSI_W, MT9V03X_CSI_H); #endif #if edge_show_flag edgeline_show(); #endif #if image_show_value time_show(); #endif } } ? 附錄C 中斷服務(wù)程序代碼 #include "headfile.h" #include "isr.h" //串口接收數(shù)組 uint8 uart8_data[12]; uint8 uart4_data[12]; //程序運(yùn)行測(cè)時(shí) uint16 time; uint16 time_start; uint16 time_stop; //智能車運(yùn)行狀態(tài) uint16 key_flag = 0; uint16 run_flag = 1; uint16 motor_flag = 0; uint16 start_flag = 0; //特殊任務(wù)標(biāo)志位 uint8 tag_flag = 0; //Apriltag碼標(biāo)志位,0為未識(shí)別,1為奇數(shù),2為偶數(shù) uint8 tag_class = 0; //此tag碼對(duì)應(yīng)的種類,0為未識(shí)別,1為動(dòng)物,2為水果 uint8 num_class = 0; //數(shù)字碼的奇偶,1為奇數(shù),2為偶數(shù) uint16 position = 0; //圖像中心點(diǎn)坐標(biāo) void led_run(void); void key_delay(void); //特殊任務(wù) void special_task(void) { //接收到Apriltag碼對(duì)對(duì)應(yīng)數(shù)據(jù),執(zhí)行對(duì)應(yīng)操作 if (tag_flag == 1) //tag碼識(shí)別為奇數(shù),停車,x舵機(jī)向右轉(zhuǎn) rudderx(rudder_roll_rmax); else if (tag_flag == 2) //tag碼為偶數(shù),停車,x舵機(jī)向左轉(zhuǎn) rudderx(rudder_roll_lmax); //接收到Apriltag數(shù)據(jù),開始接收對(duì)應(yīng)的種類 if (tag_flag != 0) { if (tag_class == 1) //種類為水果,停車打靶 { } else if (tag_class == 2) //種類為動(dòng)物,停車3s保護(hù)動(dòng)物 { } } } void PIT_IRQHandler(void) { if (PIT_FLAG_GET(PIT_CH0)) { if (key_flag) //按鍵開機(jī) key_delay(); PIT_FLAG_CLEAR(PIT_CH0); //清中斷標(biāo)志 time_start = systick_getval_us(); //采集程序開始前時(shí)間 led_run(); //程序正常運(yùn)行標(biāo)志 if (run_flag) //程序正常運(yùn)行狀態(tài) { camera(); //圖像處理 rudder_control(); //舵機(jī)控制 motor_picontrol(); //電機(jī)控制 special_task(); //特殊任務(wù) } else //無指令待機(jī)狀態(tài) { motor(0, 0); } time_stop = systick_getval_us(); //采集程序結(jié)束時(shí)時(shí)間 time = time_stop - time_start; //程序用時(shí)計(jì)算 } if (PIT_FLAG_GET(PIT_CH1)) { PIT_FLAG_CLEAR(PIT_CH1); } if (PIT_FLAG_GET(PIT_CH2)) { PIT_FLAG_CLEAR(PIT_CH2); } if (PIT_FLAG_GET(PIT_CH3)) { PIT_FLAG_CLEAR(PIT_CH3); } __DSB(); } //openart傳數(shù)據(jù)串口 void uart4_interrupt(LPUART_Type *base, lpuart_handle_t *handle, status_t status, void *userData) { static uint8 UART4_i = 0; if (kStatus_LPUART_RxIdle == status) { uart4_data[UART4_i++] = uart4_rx_buffer; } if (uart4_data[0] == 'T') //檢測(cè)Apriltag碼 { if (uart4_data[UART4_i - 1] == '0') //檢測(cè)為偶數(shù) { gpio_set(green, 0); tag_flag = 2; UART4_i = 0; } else if (uart4_data[UART4_i - 1] == '1') //檢測(cè)為奇數(shù) { gpio_set(blue, 0); tag_flag = 1; UART4_i = 0; } } else if (uart4_data[0] == 'A') //動(dòng)物停3S { tag_class = 1; } else if (uart4_data[0] == 'F') //水果打靶 { for (int j = 1; j < UART4_i - 2; j++) { position = position * 10 + (uart4_data[j] - 48); } } else if (uart4_data[0] == 'N') //識(shí)別數(shù)字 { if (uart4_data[0] == '0') //數(shù)字識(shí)別為偶數(shù) { num_class = 2; } else if (uart4_data[0] == '1') //數(shù)字識(shí)別為奇數(shù) { num_class = 1; } } handle->rxDataSize = uart4_receive.dataSize; //還原緩沖區(qū)長度 handle->rxData = uart4_receive.data; //還原緩沖區(qū)地址 } //電腦控制串口 void uart8_interrupt(LPUART_Type *base, lpuart_handle_t *handle, status_t status, void *userData) { static int UART8_i = 0; if (kStatus_LPUART_RxIdle == status) { uart8_data[UART8_i++] = uart8_rx_buffer; //將數(shù)據(jù)取出 } if (uart8_data[0] == 'M') { run_flag = 1; if (uart8_data[UART8_i - 1] == 'A') //無電機(jī)啟動(dòng) { motor_flag = 0; start_flag = 0; UART8_i = 0; } else if (uart8_data[UART8_i - 1] == 'B') //無起跑線啟動(dòng) { motor_flag = 1; start_flag = 0; UART8_i = 0; } else if (uart8_data[UART8_i - 1] == 'C') //正常啟動(dòng) { motor_flag = 1; start_flag = 1; UART8_i = 0; } else if (uart8_data[UART8_i - 1] == 'Z') //停車 { motor_flag = 0; start_flag = 0; UART8_i = 0; } } handle->rxDataSize = uart8_receive.dataSize; //還原緩沖區(qū)長度 handle->rxData = uart8_receive.data; //還原緩沖區(qū)地址 } //按鍵中斷,發(fā)車 void GPIO3_Combined_0_15_IRQHandler(void) { if (GET_GPIO_FLAG(D4)) { CLEAR_GPIO_FLAG(D4); key_flag = 1; } } //按鍵中斷,改發(fā)車方向 void GPIO2_Combined_16_31_IRQHandler(void) { if (GET_GPIO_FLAG(C26)) { CLEAR_GPIO_FLAG(C26); if (motor_flag == 0) { if (start_position == 1) { start_position = 0; } else { start_position = 1; } } } } void CSI_IRQHandler(void) { CSI_DriverIRQHandler(); __DSB(); } //正常運(yùn)行標(biāo)志 void led_run(void) { static uint8 led_num = 0; if (led_num++ == 50) { led_num = 0; gpio_toggle(blue); } } void key_delay(void) { static int key_num = 0; key_num++; if (key_num == 50) { run_flag = 1; motor_flag = 1; } }

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      26

      27

      28

      29

      30

      31

      32

      33

      34

      35

      36

      37

      38

      39

      40

      41

      42

      43

      44

      45

      46

      47

      48

      49

      50

      51

      52

      53

      54

      55

      56

      57

      58

      59

      60

      61

      62

      63

      64

      65

      66

      67

      68

      69

      70

      71

      72

      73

      74

      75

      76

      77

      78

      79

      80

      81

      82

      83

      84

      85

      86

      87

      88

      89

      90

      91

      92

      93

      94

      95

      96

      97

      98

      99

      100

      101

      102

      103

      104

      105

      106

      107

      108

      109

      110

      111

      112

      113

      114

      115

      116

      117

      118

      119

      120

      121

      122

      123

      124

      125

      126

      127

      128

      129

      130

      131

      132

      133

      134

      135

      136

      137

      138

      139

      140

      141

      142

      143

      144

      145

      146

      147

      148

      149

      150

      151

      智能車競賽技術(shù)報(bào)告 | 智能車視覺 - 南京郵電大學(xué) - 柵庫砸車跑路隊(duì)

      152

      153

      154

      155

      156

      157

      158

      159

      160

      161

      162

      163

      164

      165

      166

      167

      168

      169

      170

      171

      172

      173

      174

      175

      176

      177

      178

      179

      180

      181

      182

      183

      184

      185

      186

      187

      188

      189

      190

      191

      192

      193

      194

      195

      196

      197

      198

      199

      200

      201

      202

      203

      204

      205

      206

      207

      208

      209

      210

      211

      212

      213

      214

      215

      216

      217

      218

      219

      220

      221

      222

      223

      224

      225

      226

      227

      228

      229

      230

      231

      232

      233

      234

      235

      236

      237

      238

      239

      240

      241

      242

      243

      244

      245

      246

      247

      248

      249

      250

      251

      252

      253

      254

      255

      256

      257

      258

      259

      260

      261

      262

      263

      264

      265

      266

      267

      268

      269

      270

      271

      272

      273

      274

      275

      276

      277

      278

      279

      280

      281

      282

      283

      284

      285

      286

      287

      ● 相關(guān)圖表鏈接:

      圖2.1.1 參賽智能車

      圖2.1-2 攝像頭底座 圖2.1-3 二維度舵機(jī)云臺(tái)

      圖3.1-1 最終PCB板圖

      圖4.1-1 大津算法詳細(xì)步驟

      圖4.2-1 示意圖1

      圖4.3-2 示意圖3

      圖4.4-1 示意圖4

      圖4.5-1 示意圖5

      圖4.5-2 示意圖6

      圖4.6-1 示意圖7

      圖4.7.2-1 神經(jīng)網(wǎng)絡(luò)模型1

      圖5-1 VOFA+界面

      硬件開發(fā)

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:免費(fèi)上云搭建網(wǎng)站應(yīng)用,速來速來!
      下一篇:游戲背包系統(tǒng),“Inventory Pro插件”,研究學(xué)習(xí)-----媽媽再也不用擔(dān)心我不會(huì)做背包了(Unity3D)
      相關(guān)文章
      亚洲色成人网站WWW永久四虎| 亚洲欧洲无卡二区视頻| 久久夜色精品国产嚕嚕亚洲av| 久久久久亚洲精品影视| 亚洲国产av玩弄放荡人妇| 伊人久久综在合线亚洲91| 亚洲av永久无码精品三区在线4| 国产亚洲AV手机在线观看| 亚洲AV永久无码区成人网站| 亚洲av无码成人影院一区| 国产亚洲人成无码网在线观看| 亚洲三级在线视频| 亚洲乱码国产乱码精华| 91亚洲一区二区在线观看不卡| 国产精品亚洲片夜色在线| 亚洲国产第一页www| 久久亚洲私人国产精品| 亚洲毛片一级带毛片基地| 亚洲伦另类中文字幕| 亚洲专区先锋影音| 亚洲欧洲日产专区| 亚洲最大中文字幕| 亚洲午夜在线播放| 亚洲AV无码之国产精品| 色偷偷尼玛图亚洲综合| 亚洲爆乳无码专区www| 亚洲av无码一区二区三区在线播放| 风间由美在线亚洲一区| 亚洲日韩中文字幕日韩在线| 亚洲真人无码永久在线| 久久亚洲AV无码精品色午夜麻| 亚洲国产精久久久久久久| 亚洲国产精品成人精品小说| 亚洲人成7777| 男人的天堂av亚洲一区2区| 亚洲精品在线视频| 亚洲AV中文无码乱人伦下载| 亚洲日韩在线视频| 亚洲精品美女久久久久久久| 亚洲精品WWW久久久久久| 亚洲乱码日产一区三区|