簡 介: 本文設計的智能車系統(tǒng)以 為核心控制單元,通過CMOS攝像頭檢測賽道信息,使用數(shù)字攝像頭采集賽道的灰度圖,通過動態(tài)閾值算法生成二值化圖像數(shù)組,提取黑色引導線,用于賽道識別;通過光電編碼器檢測模型車的實時速度,使用PID控制算法調節(jié)驅動左右電機的轉速,實現(xiàn)了對車運動速度和運動方向的閉環(huán)控制。為了提高模型車的速度和穩(wěn)定性,使用C#、MFC上位機等調試工具,進行了大量硬件與軟件測試。實驗結果表明,該系統(tǒng)設計方案確實可行。
學 校:北京科技大學
隊伍名稱:北京科技大學智能視覺組
參賽隊員:范一鳴
潘依涵
陳云青
指導教師:馬飛
引 言
隨著信息技術的發(fā)展,汽車的電子化模塊越來越多,智能汽車領域受到了大量的關注。受教育部高等教育司委托(教高司函[2005]201號文),高等學校自動化專業(yè)教學指導分委員會主辦全國大學生智能汽車競賽,以迅猛發(fā)展的汽車電子為背景,涵蓋了控制、模式識別、傳感技術、電子、電氣、計算機、機械等多個學科交叉的科技創(chuàng)意性比賽。
參賽選手須使用競賽秘書處統(tǒng)一指定并負責采購競賽車模,自行采用 32 位微控制器作為核心控制單元,自主構思控制方案及系統(tǒng)設計,包括傳感器信號采集處理、控制算法及執(zhí)行、動力電機驅動、轉向舵機控制等,完成智能汽車工程制作及調試,于指定日期與地點參加場地比賽。參賽隊伍之名次(成績)由賽車現(xiàn)場成功完成賽道比賽時間為主,技術方案及制作工程質量評分為輔來決定。
本屆全國大學生智能汽車競賽分競速賽和創(chuàng)意賽,競速比賽分為基礎四輪組、節(jié)能信標組、智能視覺組、電磁越野組、雙車接力組、全向行進組、單車拉力組、??苹A組八個組別,分別進行比賽,我隊參與智能視覺組比賽。此次比賽按照官方規(guī)定需使用C型車模,使用指定NXP系列單片機,完成本次比賽設計。
本篇技術報告主要包括機械系統(tǒng)、硬件系統(tǒng)、軟件系統(tǒng)等,詳盡地闡述了我們的設計方案,具體表現(xiàn)在硬件電路的設計以及控制算法的部分想法,希望能和其他學校的同學交流溝通,更進一步。
第一章 方案設計
1.1系統(tǒng)概述
攝像頭車的系統(tǒng)整體結構如圖所示。微處理器通過采集模擬CMOS攝像頭的硬件二值化信號,得到賽道邊沿信息;通過采集陀螺儀數(shù)據(jù)分析計算過橋信息;通過采集光電編碼器對車輪轉速的脈沖計數(shù),得到車行進的速度數(shù)據(jù)。通過微處理器對圖像處理,對角度、速度進行PID控制,最后PWM波輸出驅動電機、舵機。
第二章 智能車機械
根據(jù)今年組委會的相關規(guī)定以及智能視覺組比賽規(guī)則使用新C車模完成任務,因此需要合理的方案完成任務。在比賽備戰(zhàn)之初,我們就對該車模進行了詳細的系統(tǒng)分析。但由于新C型車模精度不是很高,因此在規(guī)則允許范圍內盡量改造車模,提高車模整體精度,以提高車輛行駛的穩(wěn)定性。本章將主要介紹智能汽車車模的機械結構及調整方案。
2.1車體機械方案
根據(jù)十六屆智能車競賽細則對智能視覺組的要求,我們選擇新C車模完成任務。
2.2四輪車模機械建模
此次競賽的四輪賽車車模選用由東莞市博思電子數(shù)碼科技有限公司提供的新C型車模。車模外形如圖2.1所示:
▲ 圖圖2 1 四輪車模俯視圖
2.2.1四輪車模前輪傾角的調整
四輪車模后橋固定,對于后橋并無大的改動。在調試過程中,我們發(fā)現(xiàn)前輪對于車模的運行影響較大,并且由于前輪軸和車輪之間的間隙較大,對車高速時轉向中心的影響較大,會引起高速轉向下模型車的轉向不足。然而這里是規(guī)則中嚴禁改動的部分,所以為了盡可能降低轉向舵機負載,我們對前輪的安裝角度,即前輪定位進行了調整。
前輪定位的作用是保障汽車直線行駛的穩(wěn)定性,轉向輕便和減少輪胎的磨損。前輪是轉向輪,它的安裝位置由主銷內傾、主銷后傾、前輪外傾和前輪前束等4種可調參數(shù)決定,實現(xiàn)轉向輪、主銷和前軸等三者在車架上的位置關系。
在實際調試中,我們發(fā)現(xiàn)適當增大內傾角可以增大轉彎時車輪和地面的接觸面積,從而增大車了地面的摩擦程度,使車轉向更靈活,減小因摩擦不夠而引起的轉向不足的情況。并且我們智能視覺組設計的車模相對于往屆車模來說重心更高,更靠前,所以我們對于主銷后傾做了一些調整。
2.2.2底盤高度的調整
在保證順利通過坡道的前提下,底盤盡量降低,從整體上降低模型車的重心,可使模型車轉彎時更加穩(wěn)定、高速。但是過低的底盤會造成上橋剮蹭底盤等的現(xiàn)象,對車模正常行駛造成影響。
2.2.3齒輪嚙合以及編碼器的安裝
考慮到智能視覺組需要停車這一問題,我們對于車子齒輪嚙合需要較高的要求,如果嚙合不好,對于車子正常行駛和停車正不正都有較大影響。為了更為精確的獲得電機轉速的返回值,本次車模上安裝的是與上屆相同的編碼器。最終綜合考慮了讀數(shù)精準和重心分布兩大因素,用齒輪進行了安裝配合,盡量使得傳動齒輪軸保持平行,傳動部分輕松、流暢,不存在過大噪音,卡齒,丟數(shù)情況。如圖2.2所示。
▲ 圖圖2 2 編碼器安裝
2.2.4 舵機安裝結構的安裝
考慮到主板的安裝方便以及車模轉向性能,我們對舵機安裝結構進行了較大的調整。比賽車模的轉向是通過舵機帶動左右橫拉桿實現(xiàn)。舵機的轉動速度和功率是一定,要想加快轉向機構的響應速度,唯一的辦法就是優(yōu)化舵機的安裝位置及其力矩延長桿的長度。由于功率是速度與力矩乘積的函數(shù),過分追求速度,必然要損失力矩,力矩太小也會造成轉向遲鈍,因此設計時就要綜合考慮轉向機構響應速度與舵機力矩之間的關系,通過優(yōu)化得到一個最佳的轉向效果。利用實際參數(shù)經(jīng)計算,我們得出了一套可以穩(wěn)定高效工作的參數(shù)及結構。
最終,我們設計了一套舵機連片(轉向拉桿),綜合考慮了速度與力矩的關系,并根據(jù)模型車底盤的具體結構,簡化了安裝方式,實現(xiàn)了預期目標。
關于舵機的安裝方式,我們實驗室較為主流的有直立式安裝和倒置式安裝,我們的舵機安裝如圖2.3所示。
▲ 圖圖2 3 舵機安裝
2.2.5 舵機轉角分析
車模的轉向運動主要是靠舵機和前輪來實現(xiàn)的,因此,關于舵機和前輪轉向關系的分析就顯得尤為重要。依據(jù)數(shù)學建模,通過MATLAB進行分析后,得出了如下結果。
右前輪轉角(綠色)及舵機轉角(紅色)關于轉彎半徑關系圖,如圖2.4所示。
舵機轉角關于(右)前輪轉角關系圖,如圖2.5所示。
由以上兩圖得出結論:
舵機轉角變化范圍即使較小,轉彎半徑的變化也會很大,因而對多級的控制顯得尤為很重要。
前輪打角越小,隨著打角變化,轉彎半徑變化越明顯,即小轉角對半徑的變化會更加明顯,因而從前橋到舵機連片的機械固定需牢靠,盡量減少虛位。
舵機轉角關于前輪轉角呈線性變化,在思路上為通過舵機轉角改變從而獲得所要前輪轉角提供便利。改變前束,獲得新的右前輪轉角(綠色)及舵機轉角(紅色)關于轉彎半徑關系圖,如圖2.6。通過與圖2.4的對比,獲得兩種前輪方案對轉角的影響,從而選擇合適的方案。
▲ 圖2.6
2.2.6 攝像頭的安裝
為了降低整車重心,需要嚴格控制CMOS攝像頭的安裝位置和重量,我們自行設計了輕巧的鋁合金夾持組件并采用了碳纖維管作為安裝CMOS的主桅,這樣可以獲得最大的剛度質量比,整套裝置具有很高的定位精度和剛度,使攝像頭便于拆卸和維修,具有賽場快速保障能力。攝像頭的安裝如圖2.7所示。
▲ 圖2.7
2.2.7 運用mini攝像頭完成任務設計
在mini攝像頭固定的設計時,由于mini攝像頭需要旋轉,我們用了一個小金屬舵機帶動mini旋轉,這樣既可以減小體積,又可以減輕重量,固定方式和CMOS攝像頭一樣,該方案具有高穩(wěn)定性以及高魯棒性的優(yōu)點。經(jīng)過實際測試后,該方案可行性得到了驗證。
第三章 電路設計說明
3.1硬件方案設計
我們主要從系統(tǒng)的穩(wěn)定性、可靠性、高效性、實用性、簡潔等方面來考慮硬件的整體設計。從最初方案設定到最終方案的敲定,我們經(jīng)歷各種討論與大的改動才有了如下的硬件方案。
可靠性與穩(wěn)定性是一個系統(tǒng)能夠完成預設功能的最大前提。在原理圖與PCB的設計過程中,我們考慮到各個功能模塊的電特性以及之間的耦合作用。對易受干擾的模塊做了電磁屏蔽作用,而其他部分則做了相應的接地、濾波、模擬與數(shù)字電路的隔離等。
高效與實用性是指本系統(tǒng)的各模塊能充分完美的實現(xiàn)相應的功能。從以下兩點可以體現(xiàn)出:
視頻信號的提取一般有三種方法:片內AD轉化、基于TLC5510的8位并行AD、硬件二值化。第一種方通過片內AD轉換把連續(xù)的模擬視頻信號轉為數(shù)字信號存儲起來。第二種方法通過外部AD芯片直接把視頻信號轉為并行的數(shù)字信號,而處理芯片只要通過普通IO來讀取存儲;前者不需要外部電路但浪費系統(tǒng)時間,對于主頻不高的處理芯片會造成很大負擔。而后者雖然精度高但浪費過多的硬件資源。硬件二值化是通過比較器去捕捉視頻信號的跳變沿,這不僅減少了采集時間,也節(jié)約硬件資源,還省去了許多存儲空間。但硬件二值化靈活性差,在面對復雜光線環(huán)境,固定閾值無法根據(jù)需求動態(tài)調整局部閾值,無法解決光線分布不均勻的賽道環(huán)境。數(shù)字信號雖然占用運算資源,但在芯片運算能力滿足的條件下,可以通過程序復雜算法應對光線分布不均勻的賽道環(huán)境,適應能力更強。
對于電機驅動,由于新C車模電機對驅動性能要求高。我們設計了由單獨的驅動芯片組成驅動器,該驅動器瞬間驅動電流最大可以達到幾十安。
簡潔是指在滿足了可靠、高效的要求后,為了盡量減輕車模的負載,降低模型車的重心位置,應使電路設計盡量簡潔,盡量減少元器件使用數(shù)量,縮小電路板面積,使電路部分重量輕,易于安裝。在設計完原理圖后,注重PCB板的布局,優(yōu)化電路的走線,整齊排列元器件,最終做到電路板的簡潔。
3.2傳感器選擇
3.2.1攝像頭選擇
- COMS與CCD
CCD攝像頭具有對比度高、動態(tài)特性好的優(yōu)點,但需要工作在12V電壓下,對于整個系統(tǒng)來說過于耗電,而且CCD體積大,質量重,會抬高車體的重心,這對于高速情況下小車的行駛非常不利。
與之相比,COMS攝像頭具有體積小、質量輕、功耗低,圖像動態(tài)特性好等優(yōu)點,因為小車對圖像的清晰度,分辨率要求并不高,所以選用COMS攝像頭。
對于攝像頭的選擇,主要考慮以下幾個參數(shù):
- 芯片大小自動增益分辨率最小照度信噪比標準功率掃描方式
其中芯片大小主要會對視場的范圍會有影響,掃描方式主要有追行掃描以及隔行掃描,像ov5116就是隔行掃描。
市面上的攝像頭主要分為數(shù)字和模擬兩種,數(shù)字攝像頭主要有OV7620,OV6620,OV7670,OV7725,模擬攝像頭主要有OV5116,BF3003,MT9V136。大多數(shù)攝像頭都支持sccb通信,可以很好的實現(xiàn)單片機與攝像頭之間的交互。
智能車的攝像頭隊圖像的分辨率要求并不高,但是對動態(tài)特性要求非常高,特別是小車在高速行駛入彎或者出彎的時候,圖像變化較大,這就對攝像頭的自動增益有較高的要求。一般來說,在攝像頭圖像發(fā)生突變時,感光芯片本身會有一段適應時間,這段時間要求越小越好。
我們先后試用了OV5116、MT9V022、OV7725、BF3003、MT9V136以及PC1030N等攝像頭,后四種均為彩色攝像頭,在經(jīng)過硬件二值化后可以取其有效信息,與黑白數(shù)字攝像頭得到的信息類似。經(jīng)過對比,雖然后四種攝像頭圖像效果更好,動態(tài)性能也更好,但是在彎道、回環(huán)等元素中由于自動曝光導致得到賽道信息不準確,在智能車應用中MT9V022已足夠滿足需求,因此我們最終選擇了MT9V022數(shù)字攝像頭。
3.2.2陀螺儀選擇
本屆大賽對陀螺儀的型號沒有限制,經(jīng)過挑選我們最終確定陀螺儀使用L3G4200D。
L3G4200D該產品為ST推出采用一個感應結構檢測三條正交軸向運動的3軸數(shù)字陀螺儀。L3G4200D是三軸共用一個感應結構,這一突破性概念可以消除軸與軸之間的信號干擾,避免輸出信號收到干擾信號的影響。
3.2.3編碼器選擇
為了使用閉環(huán)控制,我們在汽車模型上附加了編碼器。經(jīng)過機械和電路性能的考慮和挑選,最終我們選用了ABI Mini增量式旋轉編碼器。
和其他元件相比,選用編碼器可以使電路更加完善,信號更加精確。編碼器功耗低,重量輕,抗沖擊抗震動,精度高,壽命長,非常實用。編碼器內部無上拉電阻,因此編碼器接口出需要設計上拉電阻。同時為了保證波形的穩(wěn)定,主控板上使用了74HC14非門隔離。微處理器自身具有正交解碼功能,因此這里無需使用任何外圍計數(shù)輔助器件,只需要將接口連接到單片機上相應的接口即可。接口如圖3.1和圖3.2所示。
▲ 圖3.1 編碼器接口
▲ 圖3.2 非門電路
3.3電路模塊實現(xiàn)
3.3.1電源管理模塊
首先了解一下不同電源的特點,電源分為開關電源和線性電源,線性電源的電壓反饋電路是工作在線性狀態(tài),開關電源是指用于電壓調整的管子工作在飽和和截至區(qū)即開關狀態(tài)的。線性電源一般是將輸出電壓取樣然后與參考電壓送入比較電壓放大器,此電壓放大器的輸出作為電壓調整管的輸入,用以控制調整管使其結電壓隨輸入的變化而變化,從而調整其輸出電壓,但開關電源是通過改變調整管的開和關的時間即占空比來改變輸出電壓的。
從其主要特點上看:線性電源技術很成熟,制作成本較低,可以達到很高的穩(wěn)定度,波紋也很小,而且沒有開關電源具有的干擾與噪音,開關電源效率高、損耗小、可以降壓也可以升壓,但是交流紋波稍大些。
電源模塊對于一個控制系統(tǒng)來說極其重要,關系到整個系統(tǒng)是否能夠正常工作,因此在設計控制系統(tǒng)時應選好合適的電源模塊。競賽規(guī)則規(guī)定,比賽使用智能汽車競賽統(tǒng)一配發(fā)的標準車模用7.2V 2000mAh Ni-cd供電或者使用鋰電池(兩節(jié)18650,2AH,配備保護板),我們在多次嘗試對比之后選擇采用鋰電池。而路徑識別的CCD傳感器均使用的是3.3V的電源。單片機系統(tǒng)、陀螺儀、編碼器需要5V電源,伺服電機工作電壓范圍為4V到6V(為提高伺服電機響應速度,采用7.2V 供電),直流電機可以使用鋰電池直接供電,智能汽車電壓調節(jié)電路示例見圖3.3。
▲ 圖3 3 電源管理模塊原理圖
在電源管理模塊中,我們選用了5片TPS7350和2片TPS7333,其中DCDC5-12和IR2184S共用一個5V電源,邏輯元件和編碼器共用另一個5V電源,OpenArt mini單獨使用一個5V電源,主單片機單獨使用一個5V電源,其余模塊共用3.3V電源。為了使攝像頭的供電穩(wěn)定,滿足攝像頭在高速下的運行要求,我們外加了一塊5V電源單獨給攝像頭供電。
16屆規(guī)則規(guī)定,AI視覺組的微控制器使用 NXP 公司的任意一款單片機。經(jīng)過考慮,我們決定采用 微處理器作為主控單片機。我們最先使用TPS7350作為 微處理器的供電芯片,但是在實際使用過程中發(fā)現(xiàn)TPS7350容易出現(xiàn)過熱保護的問題,考慮到 微處理器的功耗比較大,我們決定不采用LDO作為 微處理器最小系統(tǒng)的供電芯片,而是更換為DC-DC降壓芯片。我們向后嘗試了AOZ1280CI和MP1584EN這兩款芯片,實際使用一段時間后,我們最終確定使用MP1584EN。其原理圖和PCB布局如下:
▲ 圖3 4 ME1584EN-3.3V穩(wěn)壓原理圖
▲ 圖3 5 ME1584EN-3.3V穩(wěn)壓PCB布局
3.3.2電機驅動模塊
常用的電機驅動有兩種方式:
一、集成電機驅動芯片;
二、采用N溝道MOSFET和專用柵極驅動芯片設計。市面上常見的集成H橋式電機驅動芯片中,33886型芯片性能較為出色,該芯片具有完善的過流、欠壓、過溫保護等功能,內部MOSFET導通電阻為120毫歐,具有最大5A的連續(xù)工作電流。使用集成芯片的電路設計簡單,可靠性高,但是性能受限。由于比賽電機內阻僅為幾毫歐,而集成芯片內部的每個MOSFET導通電阻在120毫歐以上,大大增加了電樞回路總電阻,此時直流電動機轉速降落較大,驅動電路效率較低,電機性能不能充分發(fā)揮。
由于分立的N溝道MOSFET具有極低的導通電阻,大大減小了電樞回路總電阻。另外,專門設計的柵極驅動電路可以提高MOSFET的開關速度,使PWM控制方式的調制頻率可以得到提高,從而減少電樞電流脈動。并且專用柵極驅動芯片通常具有防同臂導通、硬件死區(qū)、欠電壓保護等功能,可以提高電路工作的可靠性。
1.專用柵極驅動芯片的選擇:IR公司號稱功率半導體領袖,所以我們主要在IR公司的產品中進行選擇。其中IR2184型半橋驅動芯片可以驅動高端和低端兩個N溝道MOSFET,能提供較大的柵極驅動電流,并具有硬件死區(qū)、硬件防同臂導通等功能。使用兩片 IR2184型半橋驅動芯片可以組成完整的直流電機H橋式驅動電路。由于其功能完善,價格低廉容易采購,所以我們選擇它進行設計,如圖3.4所示。
▲ 圖3 6 IR2184應用圖
2.MOSFET的選擇:選擇MOSFET時主要考慮的因素有:耐壓、導通內阻和封裝。智能汽車電源是額定電壓為7.2V的電池組,由于電機工作時可能處于再生發(fā)電狀態(tài),所以驅動部分的元件耐壓值最好取兩倍電源電壓值以上,即耐壓在16V以上。而導通內阻則越小越好。封裝越大功率越大,即同樣導通電阻下通過電流更大,但封裝越大柵極電荷越大,會影響導通速度。常用的MOSFET封裝有TO-220、TO-252、SO-8等,TO-252封裝功率較大、而柵極電荷較小。于是我們最終選擇了IR公司TO-252封裝的LR7843型N溝道MOSFET,VDSS=55伏、RDS(on)=8.0毫歐、ID=110安。
3、驅動電路的原理分析及元件參數(shù)確定
▲ 圖3 7 電機驅動分析圖
這個驅動設計單從信號邏輯上分析比較容易理解,但要深入的理解和更好的應用,就需要對電路做較深入的分析,對一些外圍元件的參數(shù)確定做理論分析計算。圖3.8中IC是一個高壓驅動芯片,驅動2個半橋MOSFET。Vb,Vs為高壓端供電;Ho為高壓端驅動輸出;COM為低壓端驅動供電,Lo為低壓端驅動輸出;Vss為數(shù)字電路供電.此半橋電路的上下橋臂是交替導通的,每當下橋臂開通,上橋臂關斷時Vs腳的電位為下橋臂功率管Q2的飽和導通壓降,基本上接近地電位,此時Vcc通過自舉二極管D對自舉電容C2充電使其接近Vcc電壓.當Q2關斷時Vs端的電壓就會升高,由于電容兩端的電壓不能突變,因此Vb端的電平接近于Vs和Vcc端電壓之和,而Vb和Vs之間的電壓還是接近Vcc電壓.當Q2開通時,C2作為一個浮動的電壓源驅動Q2;而C2在Q2開通其間損失的電荷在下一個周期又會得到補充,這種自舉供電方式就是利用Vs端的電平在高低電平之間不停地擺動來實現(xiàn)的。
由于自舉電路無需浮動電源,因此是最便宜的,如圖所示自舉電路給一只電容器充電,電容器上的電壓基于高端輸出晶體管源極電壓上下浮動。圖2.6中的D和C2是IR2184在脈寬調制(PWM)應用時應嚴格挑選和設計的元器件,根據(jù)一定的規(guī)則進行計算分析;并在電路實驗時進行調整,使電路工作處于最佳狀態(tài),其中D是一個重要的自舉器件,應能阻斷直流干線上的高壓,其承受的電流是柵極電荷與開關頻率之積,為了減少電荷損失,應選擇反向漏電流小的快恢復二極管,芯片內高壓部分的供電都來自圖中自舉電容C2上的電荷;為保證高壓部分電路有足夠的能量供給應適當選取C2的大小.
MOSFET具有相似的門極特性,開通時需要在極短的時間內向門極提供足夠的柵電荷,在自舉電容的充電路徑上,分布電感影響了充電的速率,下橋臂功率管的最窄導通時間應保證自舉電容有足夠的電荷以滿足柵極所需要的電荷量再加上功率器件穩(wěn)態(tài)導通時漏電流所失去的電荷量.因此,從最窄導通時間為最小值考慮,自舉電容應足夠小;綜上所述,在選擇自舉電容大小時應考慮,既不能太大影響窄脈沖的驅動性能;也不能太小影響寬脈沖的驅動要求,應從功率器件的工作頻率、開關速度、門極特性等方面進行選擇、估算后調試而定。
3.3.3視頻處理模塊
我們的智能模型車自動控制系統(tǒng)中使用黑白全電視信號格式CMOS攝像頭采集賽道信息。攝像頭視頻信號中除了包含圖像信號之外,還包括了行同步信號、行消隱信號、場同步信號、場消隱信號以及數(shù)字信號等。因此,若要對視頻信號進行采集,就必須通過SCCB設置數(shù)字攝像頭的部分參數(shù)。
3.3.4 OpenArt mini
對于AI視覺組來說,要完成AI部分的識別二維碼、數(shù)字、水果、動物等任務,OpenArt mini是必不可少的。我們購買了逐飛的成品攝像頭,通過串口將識別的信息與主單片機進行通信,從而執(zhí)行對應的任務。
3.3.5接口及外接模塊
對于單片機最小系統(tǒng)、陀螺板、視頻模塊、OpenArt mini,我們在主板上設計了外接接口,用于連接。
▲ 圖 3.8:微處理器 控制最小系統(tǒng)接口
▲ 圖3 9:微處理器 圖像最小系統(tǒng)接口
我們最小系統(tǒng)的原理圖參考了龍邱公司、NXP公司的 微處理器最小系統(tǒng)原理圖,我們更改了內核供電方案,屏蔽了沒有使用到的引腳。在軟件上,我們使用了龍邱公司提供的開源庫。
在調試過程之中,我們需要實時的了解與掌握一些車的運行狀態(tài),比如說傳感器的狀態(tài),舵機的轉角等,調試時用OLED顯示屏將這些參數(shù)顯示出來,讓我們實時的監(jiān)測車的狀態(tài),從而做出判斷,這樣很大程度的方便了對車的調試。
第四章 智能車控制軟件
高效的軟件程序是智能車高速平穩(wěn)自動尋線的基礎。我們設計的智能車系統(tǒng)采用CMOS攝像頭進行賽道識別,圖像采集及校正處理就成了整個軟件的核心內容。在智能車的轉向和速度控制方面,我們使用了魯棒性很好的經(jīng)典PID控制算法,配合使用理論計算和實際參數(shù)補償?shù)霓k法,使智能車能夠穩(wěn)定快速尋線。
4.1賽道中心線提取及優(yōu)化處理
4.1.1原始圖像的特點
在單片機采集圖像信號后需要對其進行處理以提取主要的賽道信息,同時,由于交叉道、起點線的存在,光線、雜點、賽道遠處圖像不清楚的干擾,圖像效果會大打折扣。因此,在軟件上必須排除干擾因素,對賽道進行有效識別,并提供盡可能多的賽道信息供決策使用。
在圖像信號處理中我們提取的賽道信息主要包括:賽道兩側邊沿點位置、通過校正計算的賽道中心位置,中心點規(guī)劃面積,賽道變化幅度,賽道類型判別。
由于攝像頭自身的特性,圖像會產生梯形式變形,這使得攝像頭看到的信息不真實。因此我們利用賽道進行測量,創(chuàng)建函數(shù)還原出了真實賽道信息。原始圖像是一個將數(shù)字圖像經(jīng)模擬電路轉換得到的二維數(shù)據(jù)矩陣,矩陣的每一個元素對應一個像素點,近處的圖像大,黑線為梯形狀。
程序上將每一行的黑白跳變點(跳變點按從右到左的順序)記錄下來,保存到兩個二維數(shù)組里(分別表示上升沿、下降沿)。通過遍歷上升沿和下降沿可以完成賽道邊沿的提取。
攝像頭采集到幾種典型賽道圖像如圖4.1~圖4.4所示。
4.1.2賽道邊沿提取
邊沿提取算法的基本思想如下:
(1) 直接逐行掃描原始圖像,根據(jù)設定的閾值提取黑白跳變點;
(2) 賽道寬度有一個范圍,在確定的賽道寬度范圍內提取有效賽道邊沿,這樣可以濾除不在寬度范圍內的干擾;
(3) 利用賽道的連續(xù)性,根據(jù)上一行白塊的位置和邊沿的位置來確定本行的邊沿點;
(4) 求邊沿點時,因為近處的圖像穩(wěn)定,遠處圖像不穩(wěn)定,所以采用由近及遠的辦法;
(5) 進出十字的時候,通過校正計算出邊沿角度可較好的濾除十字并補線;
(6) 人字元素是整個賽道邊沿角度是尖銳角的部分,根據(jù)這個特征通過計算邊沿的角度以及內側兩條邊沿包絡形成的面積可以有效的識別出人字;為了排除賽道方向的突變對控制造成干擾,將人字建模成為具有一定曲率的彎道,并進行補線;
(7) 由于權重分配的問題,如果不對障礙進行一定的處理的話,控制量對于遠端的障礙相應比較小,可能在很接近障礙的時候才有響應,這樣很容易造成撞到障礙,為了消除這種影響,我們利用曲線包絡的形式 將障礙作用的區(qū)域人為擴大,這樣有效避免了碰撞障礙的危險。
邊沿提取算法的程序流程如圖4.5所示。
處理后得到的黑線中心如圖4.6~4.9圖所示。
4.1.3圖像校正
圖像校正的實現(xiàn)如下:(1) 調整好攝像頭位置、前瞻,固定好;將攝像頭對準黑白相間的賽道板,然后用電視觀看攝像頭圖像,用照相機對準電視拍照(見圖4.10);
(2) 從照片中截取出賽道部分,然后用matlab編寫程序,載入圖片并進行相應的桶形變換、透視變換,調整好參數(shù),生成校正表和反校正表;
▲ 圖4.11 校正后的效果
(3) 在單片機程序中加入常量表,然后就可進行相應的校正和反校正變換了。(4) 用上位機觀察的校正效果如下:
▲ 圖4.12 上位機模擬校正
4.1.4推算中心
通過之前提取的賽道邊沿數(shù)據(jù)推算中心:當左右邊沿點總數(shù)較少時返回;若只有單邊有邊沿點數(shù)據(jù),則通過校正對單邊數(shù)據(jù)按法線平移賽道寬度一半的距離;當能找到與一邊能匹配上的另一邊沿點時則直接求其中心作為中心點。推算完中心點后,對中心點進行均勻化,方便之后的控制。計算出的中心點效果如下:
4.1.5攝像頭圖像入庫的處理
我們的策略是使用攝像頭后車入庫。車子接到球跑完賽道后半段,圖像在車庫前先識別出車庫的特征,判斷出當前圖像為車庫后,尋找入庫補線的起始點和終止點,然后調用補線函數(shù),在圖像校正域中補一條半徑為賽道寬度的四分之一圓弧,對左右邊界點進行均勻化處理后,就得到了以上圖像。
4.1.6路徑選擇
根據(jù)往屆比賽以及本屆華北賽的經(jīng)驗,賽車能否以最短的時間完成比賽,與賽車的速度和路徑都有著密切的關系,因此,如何使賽車以一個最合理、最高效的路徑完成比賽是提高平均速度的關鍵。對于賽車路徑的優(yōu)化,我們從以下三個方面來完成:
1)增加視場的長度和寬度根據(jù)我們的分析,當賽車采集到的圖像能夠覆蓋一個比較完整的S彎道時,通過加權算法計算出來的中心就會處于視場中央附近,此時賽車會以一個比較好的路徑快速通過S彎道;相反,如果視場無法覆蓋一個完整的S彎道,賽車就會誤處理為普通的單向彎道,這樣賽車的速度就會大大減慢。因此,盡量增大視場的長度和寬度就很有必要了。
視場的長度與單片機可以處理的圖像行數(shù)成正比。我們采用由運算放大器制作的模擬比較器進行圖像二值化,處理速度較A/D轉換有了很大提高,大大增加了單片機處理的圖像行數(shù),最終處理行數(shù)為95行(隔3行提取一行),達到的視場長度為200多cm。為了增加視場寬度,增加每行采集的圖像點數(shù)之外,我們采用了廣角鏡頭,從而有效地增加了視場寬度。
2)優(yōu)化加權算法對整場有效行的中心求加權平均值的算法,在低速情況下可以有效地優(yōu)化賽車路徑,但在賽車速度提高到一定程度之后由于過彎時的側滑,路徑不是很好。而由于圖像分布不均,三分之二的行分布于車體前方40cm的范圍內,求出的加權平均值受車體近處的圖像影響較大,因此整場圖像求加權的算法對于高速情況下的路徑優(yōu)化效果不是很明顯。
為了解決這個問題,我們對于參與加權計算的圖像行數(shù)及權重進行了處理,減小了車體前部50cm范圍內的圖像參與加權的行數(shù)和權重,同時增大視場前部圖像的權重。在經(jīng)過長期調試之后,得到了一套比較合適的參數(shù),能夠有效優(yōu)化高速情況下的賽車路徑。
3)對不合理的中心點進行處理對于在校正后的圖像數(shù)據(jù)中求得的中心線,反校正到原始圖像后存在一行中含有多個中心點的情況。在通常情況下,這種情況出現(xiàn)在較遠的視野中,但由于我們增大了視場前部圖像的權重,這些中心點對權重的影響極大,導致車模容易出現(xiàn)掉輪甚至沖出賽道的現(xiàn)象。
為了解決這個問題,我們利用數(shù)學方法求出了中心線的折點,對折點之后的中心點單獨處理,使車模不再出現(xiàn)掉輪的現(xiàn)象。
4.2折點求取原理簡介
折點是指數(shù)學中的極值點,即一階導數(shù)為0的點,但一階導數(shù)為0的點不一定都是極值點,究竟是否是極值點,還要判斷二階導數(shù)。在圖像的離散數(shù)據(jù)中,極值點的離散化計算公式如式如下:
但這個公式在圖4.18中存在一些問題,對于(Xn,Yn)點,由于 為0,所以該點不會被判斷為極值點。但我們認為這樣的點也能反映圖像的特征,因此對上式作出修改得到新的折點計算方法:
極值點是針對某一個坐標軸而言的,對上式稍作修改,即可得到針對另一個坐標軸的極值點的計算公式:
將兩個方向上的極值點結合使用,不僅可以對不合理的中心點加以濾除,還可以實現(xiàn)對賽道類型的粗略判斷。
4.3PID控制算法介紹
【PID算法,省略】
4.4轉向舵機的PID控制算法
對于舵機的閉環(huán)控制,我們采用了位置式PID控制算法,根據(jù)往屆的技術資料和實際測試,將每場圖像的黑線中心加權平均值與舵機PID參考角度值構成一次線性關系。
在較低速(2m/s以下)試驗時,在偏離黑線很少的某個范圍,將Kp直接置零,在偏離黑線較少的某個范圍,將Kp值減小為原來的一半,在偏離較大的其他情況,則保持Kp原來的大小。取得的實際效果在彎道較多、直道較短的賽道上,車子轉彎流暢,直道也能基本保持直線加速,車身左右抖動較小。
在提高車速至高速(2.5m/s以上)時,我們發(fā)現(xiàn)車身在直道上特別是長直道上時,車身左右震蕩比較嚴重,究其原因,硬件上,我們認為首先是輪軸本身的松動并且轉向機構左右轉向性能可能存在不對稱性,設計有待改進,軟件上,則是自身編寫的PID舵機控制還不夠精細,動態(tài)適應能力不夠。在從彎道到直道的過程中,由于小車尋賽道本質上是一個隨動系統(tǒng),積分項在彎道累積的偏差錯誤地加在直道的跟蹤上,造成在進入直道時轉向不夠準確,跑直道時雖然能跟蹤黑線,但是轉向調整往往超調,導致車身在直道上左右震蕩,這種震蕩嚴重影響了車的整體速度。此外,我們對S彎的控制也過于簡單,沒有特別的處理,導致車在跑S彎的時候,幾乎完全沿彎走,沒有明顯的直沖S彎的效果,原因是在前瞻有限的情況下,在采集的圖像中S彎入彎和普通彎道是一樣的,導致小車開始轉向,由于中間一直檢測到彎道,小車會沿S彎道左右震蕩,同時相應會減速。
經(jīng)過反復調試PID參數(shù),我們發(fā)現(xiàn)只調整PID參數(shù)很難使車在跑S彎和長直道時都選擇最佳路徑,同時不影響在普通彎處的轉向。這就要求系統(tǒng)能夠智能地識別出當前賽道是哪種類型,我們沒有選擇賽道記憶等方法,而采取在不降低遠處分辨率的情況下,盡量讓攝像頭看得更遠的方法。最后,在MCU超頻的條件下,每行圖像采集了210個點,成功地增大了CMOS攝像頭采集圖像的分辨率。在透視問題影響遠處分辨率的制約下,使視場長度(視場最遠處和最近處的距離)達到2m多,最遠前瞻達到2.20m,足以覆蓋賽道中的各種賽道類型,使得我們在程序中并沒有加入了對S彎、長直道以及大彎進行可靠識別的算法,僅僅根據(jù)中心位置動態(tài)改變PID參數(shù),就得到了較好的控制效果。
經(jīng)過反復測試,我們選擇的PID調節(jié)策略是:
(1) 將積分項系數(shù)置零,我們發(fā)現(xiàn)相比穩(wěn)定性和精確性,舵機在這種隨動系統(tǒng)中對動態(tài)響應性能的要求更高。更重要的是,在KI置零的情況下,我們通過合理調節(jié)Kp,發(fā)現(xiàn)車能夠在直線高速行駛時仍能保持車身非常穩(wěn)定,沒有震蕩,基本沒有必要使用KI參數(shù);
(2) 微分項系數(shù)KD使用定值,原因是舵機在一般賽道中都需要較好的動態(tài)響應能力;
(3) 對Kp,我們使用了二次函數(shù)曲線,Kp隨中心位置與中心值的偏差呈二次函數(shù)關系增大,在程序中具體代碼如下:loca_Kp = (loca_error * loca_error)/2 + 1000
其中,local_error是中心位置與中心值的偏差。
▲ 圖4 22 中心位置和動態(tài)Kp值的二次函數(shù)曲線
經(jīng)不斷調試,最終我們選擇了一組PID參數(shù),得到了較為理想的轉向控制效果。
4.5驅動電機的PID控制算法
對于速度控制,我們采用了增量式PID控制算法,基本思想是直道加速,彎道減速。經(jīng)過反復調試,將每場圖像得到的黑線位置與速度PID參考速度值構成二次曲線關系。在實際測試中,我們發(fā)現(xiàn)小車直道和彎道相互過渡時加減速比較靈敏,與舵機轉向控制配合得較好。
▲ 圖4 23 黑線位置和給定速度的二次函數(shù)曲線
在程序中具體代碼如下:sPID.vi_Ref = g_HighestSpeed - (59 - g_Control) * (59 - g_Control) * (g_HighestSpeed- g_LowestSpeed)/ 3481 其中,g_HighestSpeed為最高速,g_LowestSpeed為最低速,g_Control為黑線位置,取值范圍為0~120,圖4.10中,g_HighestSpeed為80,g_LowestSpeed為50。
但是,該方法存在一定的局限。一方面是車在從彎道入直道時加速和從直道入彎道時減速達不到最好的控制效果,彎道入直道減速不夠快速,直道入彎道加速的時機不夠及時。因此我們做了進一步的改進,根據(jù)入彎時黑線位置的特點動態(tài)改變二次曲線中最高點(直道的最高速度)和最低點(彎道的最低速度)的大小,結果表明,控制效果更好。另一方面是沒有考慮到實際比賽中長直道急速沖刺的情況,賽前在程序中人為設定直線速度不夠靈活不夠合理,所以我們在程序中根據(jù)賽道狀態(tài)動態(tài)提高了直線速度g_HighestSpeed,使車能夠在長直道上充分發(fā)揮潛能。
4.6 OpenArtMini模塊控制
對于視覺識別部分,我們采用了逐飛科技的產品OpenArtMini套件,部署了簡單的卷積神經(jīng)網(wǎng)絡,并通過tflite進行模型的量化,最終部署到OpenArtMini上,實現(xiàn)了對動物、水果、二維碼、數(shù)字的識別。同時通過設置模塊的PWM通道占空比實現(xiàn)了激光的點亮。
第五章 調試過程
5.1開發(fā)工具 程序開放在IAR Embedded Workbench IDE下進行, Embedded Workbench for ARM 是IAR Systems 公司為ARM 微處理器開發(fā)的一個集成開發(fā)環(huán)境(下面簡稱IAR EWARM)。比較其他的ARM 開發(fā)環(huán)境,IAR EWARM 具有入門容易、使用方便和代碼緊湊等特點。
EWARM 中包含一個全軟件的模擬程序(simulator)。用戶不需要任何硬件支持就可以模擬各種ARM 內核、外部設備甚至中斷的軟件運行環(huán)境。從中可以了解和評估IAR EWARM 的功能和使用方法。
5.2上位機圖像顯示
5.2.1C#靜態(tài)上位機
為了觀察攝像頭采集圖像的直觀效果,我們還采用了VS2012的C#作為輔助開發(fā)調試工具。
我們設計的智能車系統(tǒng)采用CMOS攝像頭采集賽道信息,分析處理之后用來編寫黑線識別及控制算法。雖然直接將攝像頭通過視頻接口連接到電視可觀察到攝像頭所采的圖像,但對于圖像分析不夠方便,且無法實時精確地反饋出一些特定信息。我們在VS2012的C#環(huán)境下開發(fā)了一套基于PC機平臺的圖像顯示與處理程序,可完成賽道顯示及相關參數(shù)的實時反饋。
顯示區(qū)域可原始圖像及處理后的中心點,這為控制算法的編寫提供了非常好的依據(jù),也大大減少了調試者的工作量。
5.2.2MFC SD卡上位機
我們在VS2012的C++環(huán)境下用MFC編寫了SD卡上位機,每次模型車跑完全程之后,通過該上位機程序可得到運動過程中的每一場圖像及相關數(shù)據(jù)及曲線,并可使用原始數(shù)據(jù)進行相關算法的模擬以及校正效果的顯示(上位機主界面見圖5.3)。
▲ 圖5 3 SD卡上位機主界面
▲ 圖5 4 SD卡上位機運行界面
模型車在運動過程中,記錄下的典型賽道圖像,如下圖5.5~5.9所示。
5.3SD卡模塊
5.3.1SD卡介紹
SD卡( Secure Digital Memory Card )是一種基于半導體快閃存的新一代記憶設備。由日本松下、東芝及美國SanDisk公司于1999年8月共同開發(fā)研制,其大小猶如一張郵票,重量只有2克,卻擁有高記憶容量、快速數(shù)據(jù)傳輸率、極大的移動靈活性以及很好的安全性。SD卡的數(shù)據(jù)存儲管理可以類似于硬盤的磁盤管理系統(tǒng),以FAT格式來存儲數(shù)據(jù)。
SD卡的接口支持SD模式和SPI模式,主機系統(tǒng)可以選擇其中任一模式。SPI模式允許簡單通用的SPI通道接口,這種模式相對于SD模式的不足之處是降低了速度。由于飛思卡爾系列單片機擁有SPI接口,所以我們使用了SD卡的SPI模式。
5.3.2SPI總線介紹
SPI (Serial Peripheral Interface,串行外圍設備接口總線) 總線技術是MOTOROLA公司推出的一種同步串行總線接口, 它是目前單片機應用系統(tǒng)中最常用的幾種串行擴展接口之一。SPI總線主要通過三根線進行數(shù)據(jù)傳輸: 同步時鐘線SCK,主機輸入/從機輸出數(shù)據(jù)線MISO、主機輸出/從機輸入數(shù)據(jù)線MOSI,另外還有一條低電平有效的從機片選線CS。SPI系統(tǒng)的片選信號以及同步時鐘脈沖由主機提供。SPI總線模式的數(shù)據(jù)是以字節(jié)為單位進行傳輸?shù)?,每字?jié)為8位,每個命令或者數(shù)據(jù)塊都以字節(jié)對齊的(8個時鐘的整數(shù)倍)。主機與SD卡的各種通信都由主機控制, 主機在對SD卡進行任何操作前都必須先要拉低SD卡的片選信號CS (card select) ,然后由主機向SD卡發(fā)送命令, SD卡對主機發(fā)送的任何命令都要進行響應, 不同的命令會有不同的響應格式(1個字節(jié)或2個字節(jié)響應)。SD卡除了對命令響應外, 在執(zhí)行寫操作時, 還要對主機發(fā)送的每個數(shù)據(jù)塊進行響應(向主機發(fā)送一個特殊的數(shù)據(jù)響應標志)。
5.3.3軟件實現(xiàn)
首先需要將SPI模塊設置為主機模式,并設置相關的寄存器使SPI模塊有高速和低速之分。SD卡的軟件設計主要包括兩部分內容:SD卡的上電初始化過程和對SD卡的讀寫操作。對SD卡初始化程序流程如圖5.10所示。
SD卡上電后,主機必須先向SD卡發(fā)送74個時鐘周期,以完成SD卡上電過程。SD卡上電后會自動進入SD總線模式,并在SD總線模式下向SD卡發(fā)送復位命令(CMD0),若此時片選信號CS處于低電平態(tài),則SD卡進入SPI總線模式,否則SD卡工作在SD總線模式。SD卡進入SPI工作模式會發(fā)出應答信號,若主機讀到的應答信號為01,即表明SD卡已進入SPI模式,此時主機即可不斷地向SD卡發(fā)送命令字(CMD1) 并讀取SD卡的應答信號,直到應答信號為00,以表明SD卡已完成初始化過程,準備好接受下一命令。
此后,系統(tǒng)便可讀取SD卡的各寄存器,并進行讀寫等操作,每次讀寫數(shù)據(jù)都是按照扇區(qū)操作的,每次操作512字節(jié)。
第六章 模型車的主要技術參數(shù)
賽車基本參數(shù)
- 長 295mm寬 183mm高 230mm車重 1200g功耗 空載 10W帶載 大于12W電容總容量 2500uF傳感器 CMOS攝像頭 1個陀螺儀 1個編碼器 2個OpenArt mini 1個除了車模原有的驅動電機、舵機之外伺服電機個數(shù) 1個賽道信息檢測 視野范圍(近瞻/遠瞻) 20cm/240cm精度(近/遠) 2/12.5mm頻率 50Hz
結論
自報名參加第十六屆全國大學生智能汽車競賽以來,我們小組成員從查找資料、設計機構、組裝車模、編寫程序一步一步的進行,最后終于完成了最初目標,定下了現(xiàn)在這個設計方案。
在此份技術報告中,我們主要介紹了準備比賽時的基本思路,包括機械、電路以及最重要的控制算法的創(chuàng)新思想。在機械結構方面,我們分析了整車質量分布,調整重心位置,優(yōu)化機械結構。在電路方面,我們以模塊形式分類,在最小系統(tǒng)、主板、電機驅動等模塊分別設計,在查找資料的基礎上各準備了幾套方案;然后我們分別實驗,最后以報告中所提到的形式?jīng)Q定了我們最終的電路圖。在程序方面,我們使用C語言編程,利用比賽推薦的開發(fā)工具調試程序,經(jīng)過小組成員不斷討論、改進,終于設計出一套比較通用穩(wěn)定的程序。在這套算法中,我們結合路況調整車速,做到直道加速、彎道減速,保證在最短時間內跑完全程。
在這幾個月的備戰(zhàn)過程中,場地和經(jīng)費方面都得到了學校和學院的大力支持,在此特別感謝一直支持和關注智能車比賽的學校和學院領導以及各位指導老師、指導學長,同時也感謝比賽組委會能組織這樣一項有意義的比賽。
現(xiàn)在,面對即將到來的大賽,在歷時近五個月的充分準備以及華北賽的考驗之后,我們有信心在全國比賽中取得優(yōu)異成績。也許我們的知識還不夠豐富,考慮問題也不夠全面,但是這份技術報告作為我們小組辛勤汗水的結晶,凝聚著我們小組每個人的心血和智慧,隨著它的誕生,這份經(jīng)驗將永伴我們一生,成為我們最珍貴的回憶。