(清華大學(xué) 自動(dòng)化系,北京 100084)
智能小車是輪式移動(dòng)機(jī)器人研究領(lǐng)域的一項(xiàng)重要內(nèi)容,也是陸地自主行駛車輛(autonomous ground vehicle,AGV)的一種,在社會(huì)生活的各個(gè)領(lǐng)域中,有廣泛的應(yīng)用前景[1-4]。智能小車一般由行走部件和控制部件組成??刂撇考侵悄苄≤嚨暮诵模鶕?jù)小車要實(shí)現(xiàn)的不同運(yùn)動(dòng)功能,控制部件可以采用相應(yīng)的各種控制芯片。
小車的控制芯片的類型多種多樣,單片機(jī)是其中應(yīng)用最為廣泛的一種。而FPGA作為控制芯片中的重要一類,也被廣泛使用。尤其在遇到需要控制多種輸入輸出元件時(shí),由于單片機(jī)本身并不能與外設(shè)直接相接,所以,每當(dāng)增加外設(shè)時(shí),單片機(jī)的驅(qū)動(dòng)電路就需要進(jìn)行很大的改動(dòng)。而由于FPGA提供許多的管腳和接口,就使得FPGA外接外設(shè)相對(duì)更加方便。同時(shí),F(xiàn)PGA使用硬件描述語(yǔ)言進(jìn)行編程,硬件描述語(yǔ)言在信號(hào)的邏輯處理和輸入輸出上更加通俗易懂??傊?,F(xiàn)PGA憑借相較單片機(jī)更好的定制性,更快的燒錄速度和更簡(jiǎn)潔的編程從而被廣泛的認(rèn)可和應(yīng)用。
本文設(shè)計(jì)了一臺(tái)基于FPGA控制的智能小車, FPGA使用Cyclone 2類型的主控芯片,這種芯片功能強(qiáng)大,功耗較低。FPGA板上有多種輸入和輸出元件,如撥碼開(kāi)關(guān)、按鍵開(kāi)關(guān)、LED燈和數(shù)碼管等。同時(shí),F(xiàn)PGA板上還留有許多管腳,方便外接傳感器與電路。FPGA板經(jīng)過(guò)編程調(diào)試后與外設(shè)配合協(xié)作可以實(shí)現(xiàn)多種控制功能[5]。
本文以能實(shí)現(xiàn)避障、循跡、遙控和測(cè)速的智能小車作為研究對(duì)象,分硬件部分和軟件部分對(duì)小車進(jìn)行設(shè)計(jì)。在硬件部分中,利用模塊化的原則,設(shè)計(jì)了簡(jiǎn)潔、高效并且可靠性強(qiáng)的電源管理電路、電機(jī)驅(qū)動(dòng)電路和傳感器信號(hào)處理電路。在軟件部分,本文創(chuàng)新性的在循跡功能中引入現(xiàn)實(shí)車輛的轉(zhuǎn)彎處理辦法,簡(jiǎn)化了智能小車轉(zhuǎn)彎的流程,提高了效率和可靠性。并且在避障功能中對(duì)多個(gè)距離數(shù)據(jù)進(jìn)行加權(quán)后再處理,提高了數(shù)據(jù)利用率和避障效率。經(jīng)過(guò)調(diào)整測(cè)試后,小車獲得了較好的運(yùn)動(dòng)功能。
本文設(shè)計(jì)的能實(shí)現(xiàn)避障、循跡、遙控和測(cè)速功能的智能小車的硬件結(jié)構(gòu)如圖1所示。從圖1中可以看出,F(xiàn)PGA板是整個(gè)硬件部分的核心,它能接收各個(gè)傳感器傳輸?shù)男盘?hào),并且將信號(hào)經(jīng)過(guò)FPGA內(nèi)部調(diào)試好的程序處理之后,發(fā)送到電機(jī)與舵機(jī)及其相應(yīng)的驅(qū)動(dòng)電路,最終實(shí)現(xiàn)對(duì)小車行進(jìn)方向和速度的控制。
圖1 智能小車硬件結(jié)構(gòu)圖
由于FPGA易于連接外設(shè),所以小車的整體設(shè)計(jì)采用模塊化結(jié)構(gòu)。以下對(duì)圖1中所示的相關(guān)硬件部分的設(shè)計(jì)過(guò)程和工作原理進(jìn)行說(shuō)明。
無(wú)論智能小車中的電機(jī)和各個(gè)傳感器模塊都需要相應(yīng)的供電電源,而所設(shè)計(jì)智能小車的電池組參數(shù)為額定電壓7.2 V、容量為2000 mAh,因此,需要設(shè)計(jì)相應(yīng)的電源管理電路。
對(duì)于傳感器,由于升壓電路在7.2 V這樣的低電壓條件下的可靠性不如降壓電路的好,所以選擇傳感器的額定電壓應(yīng)小于7.2 V,本設(shè)計(jì)的四種傳感器的額定電壓選擇為兩種:5 V和3.3 V。所以,一共需要兩種電源管理電路,如圖2和圖3所示。
圖2 7.2 V轉(zhuǎn)5 V電源管理電路
圖2所示為7.2 V轉(zhuǎn)5 V的電源管理電路,電路左端輸入7.2 V直流電壓,右端輸出5 V電壓,整個(gè)電路中只有一個(gè)穩(wěn)壓器芯片,這樣使得整體電路簡(jiǎn)單同時(shí)可靠性較高。這個(gè)電壓轉(zhuǎn)換電路為超聲波模塊、霍爾模塊和藍(lán)牙模塊供電。
圖3 7.2 V轉(zhuǎn)3.3 V電源管理電路
圖3所示為7.2 V轉(zhuǎn)3.3 V的電源管理電路,同樣地,電路左端輸入7.2 V直流電壓,右端輸出3.3 V電壓,相對(duì)于5 V的電壓轉(zhuǎn)換電路而言,這個(gè)電路中也只有一個(gè)穩(wěn)壓器芯片,但是其他元件的數(shù)量相對(duì)較多,使得整體電路比5 V電壓轉(zhuǎn)換電路更加復(fù)雜。這個(gè)電壓轉(zhuǎn)換電路為紅外模塊供電。
在本設(shè)計(jì)中選擇的驅(qū)動(dòng)電機(jī)的驅(qū)動(dòng)電壓在5.4 V至9.0 V之間,雖然,電池電壓在這個(gè)范圍內(nèi),但是,由于電機(jī)工作時(shí)需要11.6 A左右的大電流,這樣的功率無(wú)法由FPGA板直接提供,所以需要設(shè)計(jì)特定的電機(jī)驅(qū)動(dòng)電路,如圖4所示。
圖4 電機(jī)驅(qū)動(dòng)電路
在圖4中,電路左端輸入5 V直流電壓和FPGA輸出的PWM波,電路右端輸出調(diào)制好的PWM波。電路中使用兩個(gè)BTS7960穩(wěn)壓芯片,他們分別在電動(dòng)機(jī)正轉(zhuǎn)和反轉(zhuǎn)時(shí)候工作。這個(gè)電路相較于之前的電源管理電路,由于輸出電流較大,需要很高的可靠性,所以電路形式最為復(fù)雜[6]。
此外,舵機(jī)的驅(qū)動(dòng)由于不需要很大的輸入功率,所以可以使用FPGA的引腳輸出直接驅(qū)動(dòng)。
由于傳感器模塊采集到的數(shù)據(jù)需要傳遞給FPGA板進(jìn)行處理,而紅外、霍爾元件等傳感器直接傳遞的數(shù)據(jù)為模擬信號(hào),需要進(jìn)行相應(yīng)的處理后傳遞給FPGA板進(jìn)行進(jìn)一步的分析[7]。下面將介紹每個(gè)傳感器相對(duì)應(yīng)的處理電路。
霍爾元件的信號(hào)處理電路如圖5所示,電路中使用的芯片為L(zhǎng)M393,是一個(gè)運(yùn)放芯片。圖中的P3代指霍爾元件的三個(gè)接口?;魻栐妮敵鐾ㄟ^(guò)一個(gè)上拉電阻之后進(jìn)入運(yùn)算放大器構(gòu)成的比較器,與設(shè)定好的比較電壓進(jìn)行比較,然后向FPGA輸出設(shè)定好的電壓,經(jīng)過(guò)FPGA的判斷后,即成為一個(gè)輪子轉(zhuǎn)動(dòng)一周的信號(hào),從而實(shí)現(xiàn)最終的車速的測(cè)量[8]。
圖5 霍爾元件信號(hào)處理電路
紅外對(duì)管的信號(hào)處理電路如圖6所示,電路中使用的芯片為74HC04,是一個(gè)運(yùn)放芯片,它起反相器的作用。圖6中DS1是電源指示燈、DS2是信號(hào)輸出指示燈。當(dāng)紅外接收管U3接收到反射回來(lái)的紅外信號(hào)時(shí),U3管的3與4導(dǎo)通,即4處于低電平,經(jīng)過(guò)74HC04反相之后輸出高電平,使指示燈DS2亮。如果紅外接收管U3沒(méi)有接收到反射回來(lái)的紅外信號(hào),則U3管的4處于高電平,反向后為低電平,指示燈DS2不亮。最后P1將輸出的高/低電平輸出給FPGA板進(jìn)行下一步的處理,這樣就可以實(shí)現(xiàn)紅外循跡的功能[9]。
圖6 紅外對(duì)管信號(hào)處理電路
對(duì)于藍(lán)牙模塊和超聲波傳感器模塊,為了保證電路的高可靠性,在本設(shè)計(jì)的智能小車中,藍(lán)牙模塊選用了成熟的HC-05模塊,超聲波模塊選用了成熟的HCSR04模塊。
軟件程序的編寫(xiě)就相當(dāng)于給這個(gè)小車注入“靈魂”。在FPGA中,自動(dòng)控制的實(shí)現(xiàn)依靠狀態(tài)機(jī)。所以本小車行駛狀態(tài)的切換由狀態(tài)機(jī)完成,利用設(shè)定好的狀態(tài)和狀態(tài)跳轉(zhuǎn)條件,就可以使得智能小車依據(jù)傳感器采集到的數(shù)據(jù)自動(dòng)判斷和切換行駛狀態(tài)。
智能小車在運(yùn)動(dòng)過(guò)程中,當(dāng)環(huán)境條件變化時(shí),需要具備快速的反應(yīng)能力,而這種快速的反應(yīng)能力可以通過(guò)軟件的邏輯判斷來(lái)快速實(shí)現(xiàn)。FPGA的硬件描述語(yǔ)言善于表達(dá)邏輯關(guān)系和描述輸入輸出信號(hào),因此,采用FPGA智能芯片的智能小車的控制系統(tǒng)就能表達(dá)成相關(guān)的邏輯判斷,從而確保了智能小車具有很好快速的反應(yīng)能力。
小車上安裝的超聲波傳感器和紅外傳感器如圖7所示。當(dāng)前能夠?qū)崿F(xiàn)循跡、避障和遙控功能的小車有許多種,它們的硬件結(jié)構(gòu)大致相似,所以軟件程序就成為了決定智能小車性能的關(guān)鍵要素。
以下主要講述實(shí)現(xiàn)循跡和避障功能的軟件程序設(shè)計(jì)。
圖7 小車車頭上的超聲波傳感器與紅外傳感器位置圖
循跡功能的實(shí)現(xiàn):在圖7中可以看出,三個(gè)紅外傳感器被水平的安裝在了車頭的前部,而地面上的黑線是小車循跡的路線。在文獻(xiàn)[10]中,作者分別選用了一個(gè)和兩個(gè)紅外傳感器來(lái)實(shí)現(xiàn)小車在一條直線和兩條平行直線上循跡的功能,由于循跡的路線可能是一條黑線作為小車中心部分的指示線,也有可能是兩條代表路邊緣指示線的平行黑線。這時(shí),如果小車僅僅使用一個(gè)或者兩個(gè)紅外傳感器就不能保證在兩種軌跡上都能循跡[11]。小車在上述兩種不同道路上的循跡功能的適應(yīng)性也就得不到保證。
因此,本文設(shè)計(jì)的小車采用三組紅外傳感器,如果是在一條軌跡的循跡路線上,可以使用中間的一個(gè)紅外傳感器判定黑線的位置,兩邊的紅外傳感器判定偏離黑線的距離;而對(duì)于兩條平行的循跡軌跡,則可以使用兩邊的紅外傳感器分別判定小車是否越過(guò)道路的“邊界線”。這樣就是使得本文設(shè)計(jì)的智能小車在循跡中具有更強(qiáng)的適應(yīng)性。
除此之外,在循跡中還會(huì)遇到另一個(gè)問(wèn)題:就是有時(shí)候循跡軌跡的轉(zhuǎn)彎半徑很小,甚至小于小車的最小轉(zhuǎn)彎半徑。在文獻(xiàn)[12]中,作者給出的解決方案是:設(shè)計(jì)可以伸縮調(diào)整的小車底盤(pán),從而適應(yīng)不同的轉(zhuǎn)彎半徑。但是這會(huì)導(dǎo)致小車機(jī)械結(jié)構(gòu)的復(fù)雜性增加,同時(shí)可靠性降低。本文設(shè)計(jì)的智能小車,參考了實(shí)際車輛在遇到較小轉(zhuǎn)彎半徑時(shí)候的解決辦法:即利用倒車的辦法。
在轉(zhuǎn)彎半徑小于小車的最小轉(zhuǎn)彎半徑的拐彎處,三個(gè)紅外傳感器對(duì)于地面上是否在“線”上的判定會(huì)組成8種情況,將這8種情況進(jìn)行分類之后可以得知:如果小車上的左側(cè)或者右側(cè)兩個(gè)紅外傳感器判定小車已經(jīng)偏離了黑線的位置,那么此時(shí)小車在轉(zhuǎn)彎處偏離黑線的距離就比較大,也就是說(shuō),黑線的轉(zhuǎn)彎半徑可能比較小,這個(gè)時(shí)候,就需要利用“倒車”進(jìn)行挪車。
倒車的程序?qū)崿F(xiàn)一般有兩種方式進(jìn)行“倒車結(jié)束”的判定:固定倒車時(shí)間和利用紅外傳感器實(shí)時(shí)判定倒車位置。從理論上看,利用傳感器判定倒車位置會(huì)使得智能小車行進(jìn)的更加精準(zhǔn),但是在實(shí)際運(yùn)行中,由于轉(zhuǎn)彎半徑很小,觸發(fā)信號(hào)的間隔也很小,而小車切換前進(jìn)與倒車需要一定的加速與減速時(shí)間,當(dāng)觸發(fā)信號(hào)間隔小于加速時(shí)間時(shí),就會(huì)導(dǎo)致小車處于加速與減速的死循環(huán)中。所以,為了避免上述情況的發(fā)生,本文設(shè)計(jì)的智能小車選擇固定的倒車時(shí)間來(lái)實(shí)現(xiàn)在小的轉(zhuǎn)彎半徑中轉(zhuǎn)彎。
實(shí)際的倒車時(shí)間t需要在現(xiàn)場(chǎng)中進(jìn)行測(cè)試來(lái)獲得。將測(cè)試環(huán)境設(shè)定為:半徑為5厘米的90度角的轉(zhuǎn)彎,小車從同一位置出發(fā),記錄在不同倒車時(shí)間情況下小車通過(guò)該彎道的總時(shí)間t。繪制出如圖8所示的曲線。
圖8 倒車時(shí)間對(duì)轉(zhuǎn)彎所需時(shí)間影響曲線
從圖8中可以看出,當(dāng)?shù)管嚂r(shí)間T=0.4秒時(shí),智能小車轉(zhuǎn)彎時(shí)間最短,所以,最終設(shè)定該小車的倒車時(shí)間為0.4秒。
避障功能的實(shí)現(xiàn):從圖7中可以看出,小車的前部放置有3個(gè)超聲波傳感器,中間的傳感器方向正對(duì)小車前方,左右的傳感器分別向左前方和右前方,與正前方的夾角為45度[13]。小車在行進(jìn)過(guò)程中,一共會(huì)收到超聲波傳感器傳遞的三個(gè)距離數(shù)據(jù),取這三個(gè)距離數(shù)據(jù)的最小值為L(zhǎng),將其與一個(gè)設(shè)定好的臨界距離值Lmin比較,當(dāng)L
霍爾測(cè)速的實(shí)現(xiàn):霍爾元件處理電路的輸出端向FPGA輸出一個(gè)電壓信號(hào),這個(gè)電壓信號(hào)經(jīng)過(guò)FPGA的判斷后,成為輪子轉(zhuǎn)動(dòng)一周的信號(hào),接著判斷單位時(shí)間內(nèi)輪子轉(zhuǎn)動(dòng)的圈數(shù),也就可以算出小車單位時(shí)間行進(jìn)的距離。從而完成了車速的測(cè)量。
藍(lán)牙遙控的實(shí)現(xiàn):每一次藍(lán)牙通信中,都會(huì)傳遞16位的字符數(shù)據(jù)[14],可以將小車的控制信號(hào)寫(xiě)在這16位字符數(shù)據(jù)中。只要設(shè)定好每種字符數(shù)據(jù)對(duì)應(yīng)的小車運(yùn)動(dòng)狀態(tài),就可以利用電腦或者手機(jī)端的藍(lán)牙發(fā)送裝置向小車發(fā)送字符數(shù)據(jù)[15],控制小車的行進(jìn)。
經(jīng)過(guò)軟件程序編寫(xiě)與控制參數(shù)的實(shí)際測(cè)試之后,智能小車也完成了從小車向“智能”小車的蛻變。再經(jīng)過(guò)實(shí)際測(cè)試之后,智能小車就可以投入使用了。
完成整車拼裝,并寫(xiě)入控制程序后,實(shí)際的小車如圖9所示。從圖9可看出,小車分為三層,最上層是用于控制的FPGA板,其上的導(dǎo)線與許多傳感器連接。中間層是電源轉(zhuǎn)換電路和電機(jī)驅(qū)動(dòng)電路,最下層是各種傳感器、電池以及小車的機(jī)械部件。
圖9 整車圖
實(shí)際測(cè)試的軌道如圖10所示,整個(gè)測(cè)試分為3個(gè)步驟進(jìn)行,第一個(gè)步驟為藍(lán)牙遙控測(cè)試,在測(cè)試中,使用安卓智能手機(jī)中的藍(lán)牙客戶端與小車進(jìn)行通信,控制小車的行進(jìn)和方向,由于手機(jī)使用藍(lán)牙4.0技術(shù),所以藍(lán)牙遙控的延遲時(shí)間少于0.1 s,同時(shí)小車上的FPGA板上的數(shù)碼管也能顯示出小車的運(yùn)行速度。第二個(gè)步驟為循跡測(cè)試,在測(cè)試中,小車在粗軌道與細(xì)軌道上的循跡運(yùn)行良好,并且在進(jìn)行轉(zhuǎn)彎時(shí),倒車時(shí)間控制在0.4 s,小車總的轉(zhuǎn)彎時(shí)間約為3.4 s,在轉(zhuǎn)彎中兼顧穩(wěn)定性與速度。第三個(gè)步驟為避障測(cè)試,在測(cè)試中,使用紙箱作為障礙物,在識(shí)別紙箱代表的障礙物時(shí),小車能精準(zhǔn)識(shí)別障礙物距離并且成功避障運(yùn)行。
圖10 實(shí)際測(cè)試軌道
由于藍(lán)牙信號(hào)的傳遞和處理需要一定的時(shí)間,所以小車的遙控存在一定的滯后現(xiàn)象是必然的,能盡量減少的時(shí)間是電路和芯片處理信號(hào)的時(shí)間,當(dāng)前的結(jié)果已經(jīng)符合了一般的遙控需求。而由于小車車速是由霍爾元件識(shí)別的小車車輪轉(zhuǎn)速計(jì)算而來(lái),所以最終精確到小數(shù)點(diǎn)后一位,單位為厘米×秒-1。循跡測(cè)試中,由于小車使用了本文創(chuàng)新的“在轉(zhuǎn)彎中倒車”方法,所以小車的轉(zhuǎn)彎速度和穩(wěn)定性都比較高。在避障測(cè)試中,設(shè)定好了足夠的最小障礙距離,小車就可以比較好的避開(kāi)障礙物,實(shí)現(xiàn)避障運(yùn)行。
在測(cè)試中,F(xiàn)PGA優(yōu)異的燒錄速度和優(yōu)秀的外接外設(shè)能力給調(diào)試提供了很大的便利。
從測(cè)試中可以看出,本文設(shè)計(jì)的智能小車能很好的完成設(shè)計(jì)的功能,并且整體框架簡(jiǎn)潔,可靠性強(qiáng)。
本文設(shè)計(jì)并實(shí)地調(diào)試了能實(shí)現(xiàn)避障、循跡、遙控和測(cè)速的智能小車,分硬件部分和軟件部分對(duì)小車進(jìn)行設(shè)計(jì)。在硬件部分,利用FPGA的易于連接外設(shè)的特點(diǎn),采用模塊化的結(jié)構(gòu),設(shè)計(jì)了簡(jiǎn)潔、高效并且可靠性高的電源管理電路、電機(jī)驅(qū)動(dòng)電路和傳感器信號(hào)處理電路。在軟件部分,由于FPGA的硬件描述語(yǔ)言易于表達(dá)邏輯和信號(hào)輸入輸出的特點(diǎn),創(chuàng)新性的在循跡功能中引入現(xiàn)實(shí)車輛的轉(zhuǎn)彎處理辦法,簡(jiǎn)化了智能小車轉(zhuǎn)彎的流程,提高了效率和可靠性,并且實(shí)地調(diào)試了轉(zhuǎn)彎參數(shù),如“倒車時(shí)間”。在避障功能中對(duì)多個(gè)距離數(shù)據(jù)進(jìn)行加權(quán)后再處理,提高了數(shù)據(jù)利用率和避障效率。通過(guò)實(shí)際場(chǎng)地的調(diào)試,小車實(shí)現(xiàn)了較好的運(yùn)動(dòng)功能。