第七屆“飛思卡爾”杯全國(guó)大學(xué)生 智能汽車競(jìng)賽 湖北文理學(xué)院攝像頭組 軟 件 類 技 術(shù) 報(bào) 告 隊(duì)伍名稱:黎明破浪號(hào) 參賽隊(duì)員:周 奇 胡 志 強(qiáng) 周 成 成 帶隊(duì)教師:程 昊 葉 建 明 目錄 一、寫在開(kāi)始之前 1.1 第七屆團(tuán)隊(duì)展示
上面左起分別是程昊老師和王宏達(dá)老師。 下面左起分別是光電二組的張潤(rùn)、王輝。攝像頭組的周奇、胡志強(qiáng)。光電一組的汪穩(wěn)、熊夢(mèng)杰。 1.2 自我介紹 同學(xué)你好,很高興你報(bào)名參加了全國(guó)大學(xué)生“飛思卡爾杯”智能汽車競(jìng)賽的攝像頭組,我是來(lái)自09級(jí)機(jī)械與汽車工程學(xué)院的周奇,是第七屆攝像頭組‘黎明破浪號(hào)’的隊(duì)長(zhǎng),也是‘黎明破浪號(hào)’的軟件主要負(fù)責(zé)人。首先,我以一個(gè)‘過(guò)來(lái)人’的身份代表‘黎明破浪號(hào)’,對(duì)你們本次的參賽表示熱烈的歡迎。其次,我希望你能認(rèn)真的把我寫的報(bào)告讀完,雖然說(shuō)黎明破浪號(hào)在競(jìng)賽中沒(méi)有取得好的成績(jī),可能是我使用的算法在我一個(gè)人的思路下已經(jīng)進(jìn)入死胡同,不足之處還希望指正后留給下一屆的同學(xué)。下面都是我就軟件這塊所做的總結(jié),或多或少會(huì)對(duì)你們有些幫助。最后,預(yù)祝你們?cè)诒敬胃?jìng)賽中取得好成績(jī)。 在第七屆“飛思卡爾杯”中,我們組所使用的有野火K60核心板(如果你使用32位的K60,我推薦購(gòu)買野火的核心板,這家的核心板面積小,性能穩(wěn)定,最主要的是他們提供有好的教程,好的底層驅(qū)動(dòng)代碼,技術(shù)支持也非常到位),ov7620數(shù)字?jǐn)z像頭,12864液晶等。采用的接線如下
1.3 必做的準(zhǔn)備工作 A:拒絕醬油 我說(shuō)這句話態(tài)度是很強(qiáng)硬的,比賽一起是3名隊(duì)員,最好的搭配是1個(gè)硬件2個(gè)軟件。硬件搭好后全部工作都靠軟件了,而算法這一塊是非常難的,一個(gè)人寫就非常容易陷入死胡同,而智能車的質(zhì)量直接影響因素就是算法。 所以,如果你是醬油,就請(qǐng)你主動(dòng)退出。原因很簡(jiǎn)單。1:參加主要目的還是學(xué)習(xí),我不敢保證你參加了就會(huì)有全國(guó)名次,因?yàn)閿z像頭組本來(lái)就是非常難的一個(gè)組,但是我可以保證你會(huì)學(xué)習(xí)到很多很多。2:就算獲得了一個(gè)獎(jiǎng)?wù),你去企業(yè)里面別人問(wèn)一句比賽的問(wèn)題馬上就原形畢露,不僅不能增加就業(yè)機(jī)會(huì),放而帶來(lái)不誠(chéng)信。3:這里也是很重要的,可能因?yàn)槟闶轻u油,占了一個(gè)本應(yīng)該做事的位置,那么也會(huì)大大削弱你們組的實(shí)力,拖后腿就成為必然。 B:準(zhǔn)備好試車環(huán)境 作為攝像頭組過(guò)來(lái)人,我這里講一個(gè)有趣的事情。第七屆的比賽湖北文理學(xué)院一共派出3支隊(duì)伍參賽。分別是光電一組,光電二組和攝像頭組的黎明破浪號(hào)。在學(xué)校試車的時(shí)候,光電一組最穩(wěn)定,光電二組不是很穩(wěn)定,因?yàn)榻?jīng)常出現(xiàn)問(wèn)題。而我們攝像頭組速度最快,穩(wěn)定性介于兩個(gè)光電組之間。當(dāng)時(shí)我們的速度為兩檔,慢速和中速。其中慢速的最穩(wěn)定,不夸張的說(shuō)黎明破浪號(hào)夜間在學(xué)校賽道上正反跑20圈兩個(gè)輪子同時(shí)出界才一兩次,白天拉開(kāi)窗簾效果則比較差。后來(lái)去了廈門(第七屆在廈門大學(xué)嘉庚學(xué)院比賽)試車的時(shí)候我發(fā)現(xiàn)我的車在學(xué)校速度為慢速的居然在賽道上面動(dòng)都動(dòng)不起來(lái),當(dāng)時(shí)以為是電池沒(méi)電了,于是馬上換電池,結(jié)果發(fā)現(xiàn)還是動(dòng)不起來(lái)。沒(méi)辦法,把速度提高到中速,車才開(kāi)始緩緩前行,并且車前輪有明顯跳動(dòng),穩(wěn)定性非常差。顯然,這是因?yàn)槲覀冊(cè)趯W(xué)校試車時(shí)候的環(huán)境和比賽時(shí)候環(huán)境出入太大,賽道摩擦明顯大了很多。在試車完畢后,我們和三峽大學(xué)共用一個(gè)賽道,由于試車時(shí)候沒(méi)有背景,得到賽道后我們給背景加上了黑色背景,車的穩(wěn)定性也比較差,后來(lái)才發(fā)現(xiàn)直接原因是閾值的問(wèn)題,我們?cè)趯?shí)驗(yàn)室時(shí)候閾值為180,經(jīng)過(guò)修改,最后確定為130,整整一個(gè)晚上的調(diào)試,車速可以達(dá)到2米了,穩(wěn)定性也非常不錯(cuò)。結(jié)果第二題比賽時(shí)候背景為藍(lán)色,穩(wěn)定性又下降了,連續(xù)幾次都是在同一個(gè)地方出去了。 差距怎么來(lái)的,從細(xì)微之處來(lái)的。上面提到的光電二組,在學(xué)校調(diào)試的時(shí)候一直出現(xiàn)問(wèn)題,穩(wěn)定性比較差,還一度因此而去不了廈門。兩支光電組都沒(méi)有使用算法,但是在加上背景后兩支光電組都表現(xiàn)除了非凡的穩(wěn)定性。我這樣說(shuō)不是夸張,光電二組的穩(wěn)定性一下子和光電一組可以媲美了,速度也一下子提升了很多,只留下我們攝像頭組經(jīng)常沖出賽道。所以,作為攝像頭組的你,一定要切記購(gòu)買好的賽道和鋪上正確的背景顏色,不然你所調(diào)出的參數(shù)全是白調(diào)的。 這里附上兩張圖片,我們學(xué)校和別人學(xué)校的賽道上面差距就很明顯了 我校的賽道
PS:圖中最上面的是用紙貼在地上的賽道,下面的是用KT板鋪的,但是沒(méi)有背景顏色,于是找來(lái)一些木板作為背景。木板的高低不平給調(diào)試帶來(lái)了很大困難。 別人的賽道 PS:標(biāo)準(zhǔn)的賽道,KT板看上去和比賽用賽道一模一樣 最終比賽的賽道 PS:比賽前有60秒的試車時(shí)間,圖中在賽道上試車的正是本人。 所以,我這里建議,從一開(kāi)始鋪賽道就按照組委會(huì)的標(biāo)準(zhǔn)來(lái),包括賽道樣式,背景顏色等等,這樣就不會(huì)在后來(lái)走太多彎路。 C:堅(jiān)持不懈 這句話可能是廢話,不過(guò)在寫代碼的時(shí)候出現(xiàn)大大小小的問(wèn)題也是在所難免的,這時(shí)候就需要一股堅(jiān)持不懈的干勁,有句話說(shuō):既然選擇了遠(yuǎn)方,便只顧風(fēng)雨兼程。當(dāng)你選擇了“飛思卡爾杯”,就證明你比別人優(yōu)秀了,不讓困難打敗你。加把勁,多付出,誰(shuí)都會(huì)累,待到你獲得成功了,對(duì)你,對(duì)你家庭,對(duì)學(xué)校都是無(wú)上的榮光。 1.4 工具介紹 這里我介紹兩款除了編譯環(huán)境IAR外我常用的工具,一款Source Insight(簡(jiǎn)稱SI),另外一款是UltraEdit(簡(jiǎn)稱UE)。結(jié)合source insight使用教程和UE配合SI的使用方法(附加代碼移植教程)這兩個(gè)PDF文檔的教程都是我寫的,內(nèi)容稍微有些簡(jiǎn)潔,但主要方法還是已經(jīng)提及,這兩款軟件在我學(xué)習(xí)飛思卡爾和ARM中確實(shí)有很大的幫助。沒(méi)有該教程的同學(xué)可以向你們指導(dǎo)老師要,關(guān)于所有的資料,我們都會(huì)上交給指導(dǎo)老師,這里,我希望它能對(duì)大家有所幫助。
二、圖像采集 2.1 圖像采集原理 圖像采集不需要硬件平臺(tái)的支持,所以當(dāng)你的主控板沒(méi)有成型之前,用杜邦線連接,就可以開(kāi)始圖像采集了。采集部分請(qǐng)自己查找相關(guān)資料,我們使用的是32位的K60系列,因?yàn)樾酒牟灰粯樱a自然會(huì)有差別,不過(guò)萬(wàn)變不離其宗,攝像頭也是一個(gè)傳感器,控制原理都是一樣的,所以最好還是看下攝像頭的原理后再根據(jù)別人寫的采集程序?qū)懽约旱,那樣就事半功倍。此處附上黎明破浪?hào)的圖像采集代碼 場(chǎng)采集
行采集
DMA處理
2.2 圖像處理 A:前期 在得到圖像后,先從編譯環(huán)境的watch里面看圖像是否采集到了,如果采集到了圖像,那么可以發(fā)送到上位機(jī)觀看圖像,也可使用液晶等顯示器之間觀看。這里推薦一款上位機(jī) 這款上位機(jī)打開(kāi)后
使用過(guò)程中可以直接實(shí)時(shí)觀察,功能非常強(qiáng)大。在使用的時(shí)候注意起始信號(hào)的識(shí)別問(wèn)題。
在使用時(shí)候請(qǐng)仔細(xì)閱讀該上位機(jī)的使用手冊(cè),如果不閱讀readme,將會(huì)出現(xiàn)采集不到圖像等等問(wèn)題。 采集到圖像后要對(duì)圖像進(jìn)行校正,梯形校正和對(duì)稱性校正?赡軘z像頭的正中間不在圖像的正中間,那么就需要修改代碼。這一步要在上位機(jī)的輔助下完成,在調(diào)整好最佳圖像后方可進(jìn)行下一步。 B:中期 在上位機(jī)里面觀察到正確的圖像后,我們就要對(duì)圖像進(jìn)行處理了,圖像處理的時(shí)候就不能使用這款上位機(jī)了,只能通過(guò)串口或者液晶來(lái)查看了。鑒于進(jìn)度,第一時(shí)間液晶寫不出來(lái)的同學(xué)可以先嘗試使用串口打印圖像,將所得到的圖像打印出來(lái),并且描繪出中心線。
如果有能力的,可以將圖像處理后所得到的數(shù)據(jù)全部打印出來(lái)。其實(shí)這個(gè)不難(只是我沒(méi)有保存圖片,無(wú)法給與直觀圖)。 C:末期 在串口里面觀察到正常數(shù)據(jù)后,我們就需要使用液晶了,液晶在攝像頭組中是必不可少的。黎明破浪號(hào)使用了12864液晶,用來(lái)實(shí)時(shí)顯示賽道和PWM值,后期用來(lái)顯示其他需要觀察的重要信息。不過(guò)12864體積有些龐大,速度也有點(diǎn)慢,所以還是推薦使用高速液晶。 液晶在攝像頭組的調(diào)試和觀察中起著不可磨滅作用。做硬件的同學(xué)一定要在主控板上面加上液晶的引腳,液晶在正式比賽之前都會(huì)一直使用到。 下面附上我所使用液晶的代碼,可以自行找老師要到我的代碼后用我介紹的兩款軟件仔細(xì)閱讀。
三、舵機(jī)和電機(jī)測(cè)試 3.1 參數(shù)測(cè)試 在舵機(jī)和電機(jī)控制前首先要測(cè)得各種參數(shù),比如舵機(jī)的中間值和左右最大的打角等等,正確的參數(shù)對(duì)于控制的準(zhǔn)確性有很大的影響,另外,如果不測(cè)試,直接給與舵機(jī)值,有可能超出允許范圍,舵機(jī)則會(huì)打死并且燒毀。第七屆光電組就因?yàn)檫@個(gè)情況燒毀了兩個(gè)舵機(jī)。關(guān)于參數(shù)測(cè)試各院校的報(bào)告里面對(duì)于測(cè)試必要性和方法都有提及,故這里就不詳細(xì)說(shuō)明。 這里附上我們舵機(jī)和電機(jī)測(cè)試代碼
電機(jī)測(cè)試
3.2 整體測(cè)試 整體測(cè)試在開(kāi)始控制之前也非常的重要,首先要確定前輪直線,外八還是內(nèi)八,根據(jù)個(gè)人情況而異。然后給與舵機(jī)中間值,電機(jī)給與一定速度,看車模能否正常的走直線。如果車模不能正常走直線,則要手動(dòng)調(diào)節(jié)傳動(dòng)機(jī)構(gòu)。 四、軟件整體設(shè)計(jì) 4.1 編程思想 編程的時(shí)候盡量用模塊化編程,少用全局變量,這樣可以減少BUG的產(chǎn)生。每個(gè)需要使用的變量需要簡(jiǎn)單易懂,便于他人閱讀代碼。每個(gè)模塊之間用注釋隔開(kāi) 例如:
使用模塊化編程簡(jiǎn)單易懂,而且便于BUG的查找。 4.2 多使用LED排查BUG 寫代碼的時(shí)候出現(xiàn)BUG是難免的,有時(shí)候可能因?yàn)橐粋(gè)小小的錯(cuò)誤,整個(gè)語(yǔ)句都進(jìn)入不了,那么就需要查找BUG了,查找BUG有兩種辦法,一種是單步調(diào)試,另外一種是使用直觀的現(xiàn)象查看。我經(jīng)常使用的就是LED了,在可能出現(xiàn)問(wèn)題的地方加入LED閃爍,如果LED不閃爍則說(shuō)明語(yǔ)前面出問(wèn)題了。野火的核心板上帶4個(gè)LED,寫好函數(shù)后多次調(diào)用,可以用來(lái)顯示很多信息了。
4.3 圖像中心線的提取 中心線提取根據(jù)論壇里面的資源,或者看我的代碼就可以理解,比較簡(jiǎn)單。 4.4 液晶12864的使用 我的12864液晶是根據(jù)以前寫的51驅(qū)動(dòng)直接移植過(guò)來(lái)的,上面還有明顯的移植痕跡
對(duì)應(yīng)的的51上面則是
根據(jù)我的模塊,則可以非常簡(jiǎn)單的使用12864了。 4.5 舵機(jī)PD控制 PD控制顧名思義,即比例、微分控制。 比例控制:就是對(duì)偏差進(jìn)行控制,偏差一旦產(chǎn)生,控制器立即就發(fā)生作用即調(diào)節(jié)控制輸出,使被控量朝著減小偏差的方向變化,偏差減小的速度取決于比例系數(shù)Kp, Kp越大偏差減小的越快,但是很容易引起振蕩,尤其是在遲滯環(huán)節(jié)比較大的情況下,Kp減小,發(fā)生振蕩的可能性減小但是調(diào)節(jié)速度變慢。但單純的比例控制存在靜差不能消除的缺點(diǎn),這里就需要積分控制。 積分控制:實(shí)質(zhì)上就是對(duì)偏差累積進(jìn)行控制,直至偏差為零。積分控制作用始終施加指向給定值的作用力,有利于消除靜差,其效果不僅與偏差大小有關(guān),而且還與偏差持續(xù)的時(shí)間有關(guān)。簡(jiǎn)單來(lái)說(shuō)就是把偏差積累起來(lái),一起進(jìn)行運(yùn)算。 微分控制:它能敏感出誤差的變化趨勢(shì),可在誤差信號(hào)出現(xiàn)之前就起到修正誤差的作用,有利于提高輸出響應(yīng)的快速性,減小被控量的超調(diào)和增加系統(tǒng)的穩(wěn)定性。但微分作用很容易放大高頻噪聲,降低系統(tǒng)的信噪比,從而使系統(tǒng)抑制干擾的能力下降。因此,在實(shí)際應(yīng)用中,應(yīng)慎用微分控制。 在實(shí)際中,我們組采用的是模糊PD控制,也就是對(duì)于不同的情況采用了多組PD參數(shù)進(jìn)行調(diào)節(jié)。此處附上我們部分舵機(jī)PD控制代碼
代碼中Ki不是積分的Ki,而是賽道邊界對(duì)舵機(jī)的影響因素,也就是說(shuō)如果車模在直道上,車模又太靠右邊了,那么采集到的中心線也是直線的,而這樣對(duì)于突如其來(lái)的轉(zhuǎn)彎則是致命的。此時(shí)則賽道邊界Ki則起到一定控制作用,它使舵機(jī)左打一定角度,讓車;氐劫惖勒虚g。 此處的參數(shù)最難調(diào)節(jié),據(jù)三峽大學(xué)的朋友說(shuō),他們調(diào)節(jié)這幾個(gè)參數(shù)就花了4個(gè)月,而我們因?yàn)闀r(shí)間關(guān)系,調(diào)節(jié)時(shí)間半個(gè)月不到。參數(shù)調(diào)節(jié)有一定技巧,不能盲目賦值。這里我舉個(gè)簡(jiǎn)單例子。上副圖像所得到PWM為正中間720,車跑直道。本次突來(lái)大S右轉(zhuǎn),PWM為900。通過(guò)PD參數(shù)的調(diào)節(jié),最終要得到的turn打角必須介于720和900之間。那么Kp和Kd就有了一定范圍。根據(jù)公式 turn=steer_middle+(int)((steer_value-steer_middle)*Kp+(turn1-steer_value)*Kd); Turn假如為800,那么就可以得到二元一次方程,再多給幾次值,便可得到最佳的Kp和Kd了。 我們就得到的turn進(jìn)行分析。1:如果本次采集是正確的,那么舵機(jī)有一定打角,但是沒(méi)有打到那么大,下次如果還是大S右偏,PWM仍為900,那么在此經(jīng)過(guò)算法所得到的turn則介于800和900之間了。很明顯,如果圖像正常,那么只需兩幅圖像的時(shí)間就打到正常角度,對(duì)正常的打角不會(huì)有太大影響。2:如果本次采集為錯(cuò)誤,那么經(jīng)過(guò)算法則對(duì)本次打角有一定緩沖,并沒(méi)有讓舵機(jī)一次性打到錯(cuò)誤最大角度。這個(gè)就是算法的實(shí)現(xiàn)。 在算法實(shí)現(xiàn)后,切記一定要對(duì)turn進(jìn)行校正,因?yàn)榻?jīng)過(guò)算法后的PWM有可能因?yàn)槟銋?shù)的錯(cuò)誤而變的超過(guò)舵機(jī)的正常范圍。防止舵機(jī)燒毀,則需要加上 if((turn<530)) turn=530; //左邊最大打角 if((turn>910)) turn=910; //右邊最大打角 4.6 電機(jī)PID控制和起始線識(shí)別 因?yàn)槲覀儨?zhǔn)備時(shí)間較晚,所以這兩個(gè)東西我都沒(méi)有用,對(duì)電機(jī)進(jìn)行的開(kāi)環(huán)控制,起始線則是直接延時(shí)3s后啟動(dòng),終點(diǎn)線則是直接沖過(guò)去了。這里就不能為你提供多大的幫助,你可以閱讀別人的技術(shù)報(bào)告,從中學(xué)取。 五、結(jié)論 5.1 心得 自報(bào)名參加“飛思卡爾杯”智能汽車競(jìng)賽以來(lái),我們小組成員從查找資料、設(shè)計(jì)機(jī)構(gòu)、組裝車模、編寫程序一步一步的進(jìn)行,最后終于完成了最初目標(biāo),定下了現(xiàn)在這個(gè)設(shè)計(jì)方案。在剛制作的初期我們遇到了很多困難,在選擇系統(tǒng)板時(shí)候,因?yàn)榱硗庖粋(gè)組選擇了xs128,而今年又新出規(guī)定,可以使用K60這款32位的單片機(jī),以為自己學(xué)過(guò)一段時(shí)間的ARM就可以征服它,結(jié)果差點(diǎn)撞的頭破血流。在編寫軟件的時(shí)候,完全沒(méi)有上屆留下的資料,沒(méi)有老師的指導(dǎo),全部靠自己一字一句的編寫。在最小系統(tǒng)、主板、電機(jī)驅(qū)動(dòng)等模塊分別設(shè)計(jì),經(jīng)過(guò)不斷實(shí)驗(yàn),最后決定了我們最終的電路圖。在軟件設(shè)計(jì)方面,如攝像頭的采集數(shù)據(jù),在寢室調(diào)節(jié)好的代碼放到實(shí)驗(yàn)室里面總是不采集圖像,用手擋住或者用帽子蓋住才采集,后來(lái)歷經(jīng)很久才發(fā)現(xiàn)是干擾問(wèn)題。此類的問(wèn)題層出不窮,就像我們說(shuō)的,動(dòng)則得咎,只要你在向前進(jìn),就會(huì)犯錯(cuò)誤。這時(shí)候就要堅(jiān)持不懈的客服,而不是放棄。本次小車作為我們組辛勤汗水的結(jié)晶,凝聚著我們小組每個(gè)人的心血和智慧,隨著它的誕生,這份經(jīng)驗(yàn)將永伴我們一生,成為我們最珍貴的回憶。 在這幾個(gè)月的備戰(zhàn)過(guò)程中,特別感謝葉建明老師給我的幫助,同樣,也感謝一直支持和關(guān)注智能車比賽的學(xué)院領(lǐng)導(dǎo)老師們。 現(xiàn)在,比賽結(jié)束了。歷時(shí)近四個(gè)月的準(zhǔn)備,雖然我們沒(méi)有取得優(yōu)異的成績(jī),沒(méi)有給學(xué)校帶來(lái)光榮。但是我們也努力了。也許我們的知識(shí)還不夠豐富,考慮問(wèn)題也不夠全面,但是這份技術(shù)報(bào)告凝聚了我們組所有的知識(shí)總結(jié)。希望對(duì)下屆的“飛思卡爾杯”攝像頭組有所幫助。同時(shí),我們也希望下屆的你,在比賽完后寫下和我一樣的報(bào)告,作為資源留給你的下屆同學(xué)。 六、參考資料 三天入門M4——Kinetis(V2)————野火編寫 source insight使用教程————周奇編寫 UE配合SI的使用方法(附加代碼移植教程)————周奇編寫
當(dāng)然還有很多有用的書籍,這里一時(shí)半會(huì)也想不起來(lái)具體信息了。更多的閱讀他人的報(bào)告,對(duì)你會(huì)有很大幫助。
|