(清華大學(xué) 自動化系,北京 100084)
智能小車是輪式移動機(jī)器人研究領(lǐng)域的一項重要內(nèi)容,也是陸地自主行駛車輛(autonomous ground vehicle,AGV)的一種,在社會生活的各個領(lǐng)域中,有廣泛的應(yīng)用前景[1-4]。智能小車一般由行走部件和控制部件組成。控制部件是智能小車的核心,根據(jù)小車要實現(xiàn)的不同運(yùn)動功能,控制部件可以采用相應(yīng)的各種控制芯片。
小車的控制芯片的類型多種多樣,單片機(jī)是其中應(yīng)用最為廣泛的一種。而FPGA作為控制芯片中的重要一類,也被廣泛使用。尤其在遇到需要控制多種輸入輸出元件時,由于單片機(jī)本身并不能與外設(shè)直接相接,所以,每當(dāng)增加外設(shè)時,單片機(jī)的驅(qū)動電路就需要進(jìn)行很大的改動。而由于FPGA提供許多的管腳和接口,就使得FPGA外接外設(shè)相對更加方便。同時,F(xiàn)PGA使用硬件描述語言進(jìn)行編程,硬件描述語言在信號的邏輯處理和輸入輸出上更加通俗易懂。總之,F(xiàn)PGA憑借相較單片機(jī)更好的定制性,更快的燒錄速度和更簡潔的編程從而被廣泛的認(rèn)可和應(yīng)用。
本文設(shè)計了一臺基于FPGA控制的智能小車, FPGA使用Cyclone 2類型的主控芯片,這種芯片功能強(qiáng)大,功耗較低。FPGA板上有多種輸入和輸出元件,如撥碼開關(guān)、按鍵開關(guān)、LED燈和數(shù)碼管等。同時,F(xiàn)PGA板上還留有許多管腳,方便外接傳感器與電路。FPGA板經(jīng)過編程調(diào)試后與外設(shè)配合協(xié)作可以實現(xiàn)多種控制功能[5]。
本文以能實現(xiàn)避障、循跡、遙控和測速的智能小車作為研究對象,分硬件部分和軟件部分對小車進(jìn)行設(shè)計。在硬件部分中,利用模塊化的原則,設(shè)計了簡潔、高效并且可靠性強(qiáng)的電源管理電路、電機(jī)驅(qū)動電路和傳感器信號處理電路。在軟件部分,本文創(chuàng)新性的在循跡功能中引入現(xiàn)實車輛的轉(zhuǎn)彎處理辦法,簡化了智能小車轉(zhuǎn)彎的流程,提高了效率和可靠性。并且在避障功能中對多個距離數(shù)據(jù)進(jìn)行加權(quán)后再處理,提高了數(shù)據(jù)利用率和避障效率。經(jīng)過調(diào)整測試后,小車獲得了較好的運(yùn)動功能。
本文設(shè)計的能實現(xiàn)避障、循跡、遙控和測速功能的智能小車的硬件結(jié)構(gòu)如圖1所示。從圖1中可以看出,F(xiàn)PGA板是整個硬件部分的核心,它能接收各個傳感器傳輸?shù)男盘枺⑶覍⑿盘柦?jīng)過FPGA內(nèi)部調(diào)試好的程序處理之后,發(fā)送到電機(jī)與舵機(jī)及其相應(yīng)的驅(qū)動電路,最終實現(xiàn)對小車行進(jìn)方向和速度的控制。

圖1 智能小車硬件結(jié)構(gòu)圖
由于FPGA易于連接外設(shè),所以小車的整體設(shè)計采用模塊化結(jié)構(gòu)。以下對圖1中所示的相關(guān)硬件部分的設(shè)計過程和工作原理進(jìn)行說明。
無論智能小車中的電機(jī)和各個傳感器模塊都需要相應(yīng)的供電電源,而所設(shè)計智能小車的電池組參數(shù)為額定電壓7.2 V、容量為2000 mAh,因此,需要設(shè)計相應(yīng)的電源管理電路。
對于傳感器,由于升壓電路在7.2 V這樣的低電壓條件下的可靠性不如降壓電路的好,所以選擇傳感器的額定電壓應(yīng)小于7.2 V,本設(shè)計的四種傳感器的額定電壓選擇為兩種: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電壓,整個電路中只有一個穩(wěn)壓器芯片,這樣使得整體電路簡單同時可靠性較高。這個電壓轉(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電壓,相對于5 V的電壓轉(zhuǎn)換電路而言,這個電路中也只有一個穩(wěn)壓器芯片,但是其他元件的數(shù)量相對較多,使得整體電路比5 V電壓轉(zhuǎn)換電路更加復(fù)雜。這個電壓轉(zhuǎn)換電路為紅外模塊供電。
在本設(shè)計中選擇的驅(qū)動電機(jī)的驅(qū)動電壓在5.4 V至9.0 V之間,雖然,電池電壓在這個范圍內(nèi),但是,由于電機(jī)工作時需要11.6 A左右的大電流,這樣的功率無法由FPGA板直接提供,所以需要設(shè)計特定的電機(jī)驅(qū)動電路,如圖4所示。

圖4 電機(jī)驅(qū)動電路
在圖4中,電路左端輸入5 V直流電壓和FPGA輸出的PWM波,電路右端輸出調(diào)制好的PWM波。電路中使用兩個BTS7960穩(wěn)壓芯片,他們分別在電動機(jī)正轉(zhuǎn)和反轉(zhuǎn)時候工作。這個電路相較于之前的電源管理電路,由于輸出電流較大,需要很高的可靠性,所以電路形式最為復(fù)雜[6]。
此外,舵機(jī)的驅(qū)動由于不需要很大的輸入功率,所以可以使用FPGA的引腳輸出直接驅(qū)動。
由于傳感器模塊采集到的數(shù)據(jù)需要傳遞給FPGA板進(jìn)行處理,而紅外、霍爾元件等傳感器直接傳遞的數(shù)據(jù)為模擬信號,需要進(jìn)行相應(yīng)的處理后傳遞給FPGA板進(jìn)行進(jìn)一步的分析[7]。下面將介紹每個傳感器相對應(yīng)的處理電路。
霍爾元件的信號處理電路如圖5所示,電路中使用的芯片為LM393,是一個運(yùn)放芯片。圖中的P3代指霍爾元件的三個接口。霍爾元件的輸出通過一個上拉電阻之后進(jìn)入運(yùn)算放大器構(gòu)成的比較器,與設(shè)定好的比較電壓進(jìn)行比較,然后向FPGA輸出設(shè)定好的電壓,經(jīng)過FPGA的判斷后,即成為一個輪子轉(zhuǎn)動一周的信號,從而實現(xiàn)最終的車速的測量[8]。

圖5 霍爾元件信號處理電路
紅外對管的信號處理電路如圖6所示,電路中使用的芯片為74HC04,是一個運(yùn)放芯片,它起反相器的作用。圖6中DS1是電源指示燈、DS2是信號輸出指示燈。當(dāng)紅外接收管U3接收到反射回來的紅外信號時,U3管的3與4導(dǎo)通,即4處于低電平,經(jīng)過74HC04反相之后輸出高電平,使指示燈DS2亮。如果紅外接收管U3沒有接收到反射回來的紅外信號,則U3管的4處于高電平,反向后為低電平,指示燈DS2不亮。最后P1將輸出的高/低電平輸出給FPGA板進(jìn)行下一步的處理,這樣就可以實現(xiàn)紅外循跡的功能[9]。

圖6 紅外對管信號處理電路
對于藍(lán)牙模塊和超聲波傳感器模塊,為了保證電路的高可靠性,在本設(shè)計的智能小車中,藍(lán)牙模塊選用了成熟的HC-05模塊,超聲波模塊選用了成熟的HCSR04模塊。
軟件程序的編寫就相當(dāng)于給這個小車注入“靈魂”。在FPGA中,自動控制的實現(xiàn)依靠狀態(tài)機(jī)。所以本小車行駛狀態(tài)的切換由狀態(tài)機(jī)完成,利用設(shè)定好的狀態(tài)和狀態(tài)跳轉(zhuǎn)條件,就可以使得智能小車依據(jù)傳感器采集到的數(shù)據(jù)自動判斷和切換行駛狀態(tài)。
智能小車在運(yùn)動過程中,當(dāng)環(huán)境條件變化時,需要具備快速的反應(yīng)能力,而這種快速的反應(yīng)能力可以通過軟件的邏輯判斷來快速實現(xiàn)。FPGA的硬件描述語言善于表達(dá)邏輯關(guān)系和描述輸入輸出信號,因此,采用FPGA智能芯片的智能小車的控制系統(tǒng)就能表達(dá)成相關(guān)的邏輯判斷,從而確保了智能小車具有很好快速的反應(yīng)能力。
小車上安裝的超聲波傳感器和紅外傳感器如圖7所示。當(dāng)前能夠?qū)崿F(xiàn)循跡、避障和遙控功能的小車有許多種,它們的硬件結(jié)構(gòu)大致相似,所以軟件程序就成為了決定智能小車性能的關(guān)鍵要素。
以下主要講述實現(xiàn)循跡和避障功能的軟件程序設(shè)計。

圖7 小車車頭上的超聲波傳感器與紅外傳感器位置圖
循跡功能的實現(xiàn):在圖7中可以看出,三個紅外傳感器被水平的安裝在了車頭的前部,而地面上的黑線是小車循跡的路線。在文獻(xiàn)[10]中,作者分別選用了一個和兩個紅外傳感器來實現(xiàn)小車在一條直線和兩條平行直線上循跡的功能,由于循跡的路線可能是一條黑線作為小車中心部分的指示線,也有可能是兩條代表路邊緣指示線的平行黑線。這時,如果小車僅僅使用一個或者兩個紅外傳感器就不能保證在兩種軌跡上都能循跡[11]。小車在上述兩種不同道路上的循跡功能的適應(yīng)性也就得不到保證。
因此,本文設(shè)計的小車采用三組紅外傳感器,如果是在一條軌跡的循跡路線上,可以使用中間的一個紅外傳感器判定黑線的位置,兩邊的紅外傳感器判定偏離黑線的距離;而對于兩條平行的循跡軌跡,則可以使用兩邊的紅外傳感器分別判定小車是否越過道路的“邊界線”。這樣就是使得本文設(shè)計的智能小車在循跡中具有更強(qiáng)的適應(yīng)性。
除此之外,在循跡中還會遇到另一個問題:就是有時候循跡軌跡的轉(zhuǎn)彎半徑很小,甚至小于小車的最小轉(zhuǎn)彎半徑。在文獻(xiàn)[12]中,作者給出的解決方案是:設(shè)計可以伸縮調(diào)整的小車底盤,從而適應(yīng)不同的轉(zhuǎn)彎半徑。但是這會導(dǎo)致小車機(jī)械結(jié)構(gòu)的復(fù)雜性增加,同時可靠性降低。本文設(shè)計的智能小車,參考了實際車輛在遇到較小轉(zhuǎn)彎半徑時候的解決辦法:即利用倒車的辦法。
在轉(zhuǎn)彎半徑小于小車的最小轉(zhuǎn)彎半徑的拐彎處,三個紅外傳感器對于地面上是否在“線”上的判定會組成8種情況,將這8種情況進(jìn)行分類之后可以得知:如果小車上的左側(cè)或者右側(cè)兩個紅外傳感器判定小車已經(jīng)偏離了黑線的位置,那么此時小車在轉(zhuǎn)彎處偏離黑線的距離就比較大,也就是說,黑線的轉(zhuǎn)彎半徑可能比較小,這個時候,就需要利用“倒車”進(jìn)行挪車。
倒車的程序?qū)崿F(xiàn)一般有兩種方式進(jìn)行“倒車結(jié)束”的判定:固定倒車時間和利用紅外傳感器實時判定倒車位置。從理論上看,利用傳感器判定倒車位置會使得智能小車行進(jìn)的更加精準(zhǔn),但是在實際運(yùn)行中,由于轉(zhuǎn)彎半徑很小,觸發(fā)信號的間隔也很小,而小車切換前進(jìn)與倒車需要一定的加速與減速時間,當(dāng)觸發(fā)信號間隔小于加速時間時,就會導(dǎo)致小車處于加速與減速的死循環(huán)中。所以,為了避免上述情況的發(fā)生,本文設(shè)計的智能小車選擇固定的倒車時間來實現(xiàn)在小的轉(zhuǎn)彎半徑中轉(zhuǎn)彎。
實際的倒車時間t需要在現(xiàn)場中進(jìn)行測試來獲得。將測試環(huán)境設(shè)定為:半徑為5厘米的90度角的轉(zhuǎn)彎,小車從同一位置出發(fā),記錄在不同倒車時間情況下小車通過該彎道的總時間t。繪制出如圖8所示的曲線。

圖8 倒車時間對轉(zhuǎn)彎所需時間影響曲線
從圖8中可以看出,當(dāng)?shù)管嚂r間T=0.4秒時,智能小車轉(zhuǎn)彎時間最短,所以,最終設(shè)定該小車的倒車時間為0.4秒。
避障功能的實現(xiàn):從圖7中可以看出,小車的前部放置有3個超聲波傳感器,中間的傳感器方向正對小車前方,左右的傳感器分別向左前方和右前方,與正前方的夾角為45度[13]。小車在行進(jìn)過程中,一共會收到超聲波傳感器傳遞的三個距離數(shù)據(jù),取這三個距離數(shù)據(jù)的最小值為L,將其與一個設(shè)定好的臨界距離值Lmin比較,當(dāng)L
霍爾測速的實現(xiàn):霍爾元件處理電路的輸出端向FPGA輸出一個電壓信號,這個電壓信號經(jīng)過FPGA的判斷后,成為輪子轉(zhuǎn)動一周的信號,接著判斷單位時間內(nèi)輪子轉(zhuǎn)動的圈數(shù),也就可以算出小車單位時間行進(jìn)的距離。從而完成了車速的測量。
藍(lán)牙遙控的實現(xiàn):每一次藍(lán)牙通信中,都會傳遞16位的字符數(shù)據(jù)[14],可以將小車的控制信號寫在這16位字符數(shù)據(jù)中。只要設(shè)定好每種字符數(shù)據(jù)對應(yīng)的小車運(yùn)動狀態(tài),就可以利用電腦或者手機(jī)端的藍(lán)牙發(fā)送裝置向小車發(fā)送字符數(shù)據(jù)[15],控制小車的行進(jìn)。
經(jīng)過軟件程序編寫與控制參數(shù)的實際測試之后,智能小車也完成了從小車向“智能”小車的蛻變。再經(jīng)過實際測試之后,智能小車就可以投入使用了。
完成整車拼裝,并寫入控制程序后,實際的小車如圖9所示。從圖9可看出,小車分為三層,最上層是用于控制的FPGA板,其上的導(dǎo)線與許多傳感器連接。中間層是電源轉(zhuǎn)換電路和電機(jī)驅(qū)動電路,最下層是各種傳感器、電池以及小車的機(jī)械部件。

圖9 整車圖
實際測試的軌道如圖10所示,整個測試分為3個步驟進(jìn)行,第一個步驟為藍(lán)牙遙控測試,在測試中,使用安卓智能手機(jī)中的藍(lán)牙客戶端與小車進(jìn)行通信,控制小車的行進(jìn)和方向,由于手機(jī)使用藍(lán)牙4.0技術(shù),所以藍(lán)牙遙控的延遲時間少于0.1 s,同時小車上的FPGA板上的數(shù)碼管也能顯示出小車的運(yùn)行速度。第二個步驟為循跡測試,在測試中,小車在粗軌道與細(xì)軌道上的循跡運(yùn)行良好,并且在進(jìn)行轉(zhuǎn)彎時,倒車時間控制在0.4 s,小車總的轉(zhuǎn)彎時間約為3.4 s,在轉(zhuǎn)彎中兼顧穩(wěn)定性與速度。第三個步驟為避障測試,在測試中,使用紙箱作為障礙物,在識別紙箱代表的障礙物時,小車能精準(zhǔn)識別障礙物距離并且成功避障運(yùn)行。

圖10 實際測試軌道
由于藍(lán)牙信號的傳遞和處理需要一定的時間,所以小車的遙控存在一定的滯后現(xiàn)象是必然的,能盡量減少的時間是電路和芯片處理信號的時間,當(dāng)前的結(jié)果已經(jīng)符合了一般的遙控需求。而由于小車車速是由霍爾元件識別的小車車輪轉(zhuǎn)速計算而來,所以最終精確到小數(shù)點后一位,單位為厘米×秒-1。循跡測試中,由于小車使用了本文創(chuàng)新的“在轉(zhuǎn)彎中倒車”方法,所以小車的轉(zhuǎn)彎速度和穩(wěn)定性都比較高。在避障測試中,設(shè)定好了足夠的最小障礙距離,小車就可以比較好的避開障礙物,實現(xiàn)避障運(yùn)行。
在測試中,F(xiàn)PGA優(yōu)異的燒錄速度和優(yōu)秀的外接外設(shè)能力給調(diào)試提供了很大的便利。
從測試中可以看出,本文設(shè)計的智能小車能很好的完成設(shè)計的功能,并且整體框架簡潔,可靠性強(qiáng)。
本文設(shè)計并實地調(diào)試了能實現(xiàn)避障、循跡、遙控和測速的智能小車,分硬件部分和軟件部分對小車進(jìn)行設(shè)計。在硬件部分,利用FPGA的易于連接外設(shè)的特點,采用模塊化的結(jié)構(gòu),設(shè)計了簡潔、高效并且可靠性高的電源管理電路、電機(jī)驅(qū)動電路和傳感器信號處理電路。在軟件部分,由于FPGA的硬件描述語言易于表達(dá)邏輯和信號輸入輸出的特點,創(chuàng)新性的在循跡功能中引入現(xiàn)實車輛的轉(zhuǎn)彎處理辦法,簡化了智能小車轉(zhuǎn)彎的流程,提高了效率和可靠性,并且實地調(diào)試了轉(zhuǎn)彎參數(shù),如“倒車時間”。在避障功能中對多個距離數(shù)據(jù)進(jìn)行加權(quán)后再處理,提高了數(shù)據(jù)利用率和避障效率。通過實際場地的調(diào)試,小車實現(xiàn)了較好的運(yùn)動功能。