黃姝娟,劉萍萍,白小軍,張 雅
(西安工業(yè)大學(xué) 計(jì)算機(jī)科學(xué)與工程學(xué)院,陜西 西安 710021)
隨著計(jì)算機(jī)技術(shù)的快速發(fā)展,人工智能[1]、物聯(lián)網(wǎng)[2-3]等新技術(shù)也漸漸走入人們的視野。智能交通系統(tǒng)(intelligent transportation system,ITS[4-5]),就是一種先進(jìn)的一體化交通綜合管理系統(tǒng),是指利用先進(jìn)的信息技術(shù)、數(shù)據(jù)通信傳輸技術(shù)、電子傳感器技術(shù)、電子控制技術(shù)和計(jì)算機(jī)處理技術(shù)相對(duì)完善的基礎(chǔ)設(shè)施,有效整合了整個(gè)運(yùn)輸管理系統(tǒng),建立實(shí)時(shí)、準(zhǔn)確、高效的綜合運(yùn)輸管理體系[6]。ITS可以有效利用現(xiàn)有交通設(shè)施,減少交通負(fù)荷和環(huán)境污染,確保交通安全,提高交通運(yùn)輸效率,從而受到了廣泛關(guān)注。
智能車是智能交通系統(tǒng)的重要組成部分[7],也是輪式移動(dòng)機(jī)器人[8],是現(xiàn)代汽車工業(yè)和電子計(jì)算機(jī)互相結(jié)合的最新科技成果,具有自動(dòng)駕駛、自動(dòng)變速,甚至具有道路自動(dòng)識(shí)別的功能。目前物聯(lián)網(wǎng)技術(shù)飛速發(fā)展,并廣泛應(yīng)用于各行各業(yè)之中,無人駕駛智能車也必將成為物聯(lián)網(wǎng)技術(shù)應(yīng)用的主流領(lǐng)域。智能車是指將汽車模型化,并以此為載體裝載各種功能型的控制器、傳感器、執(zhí)行器等裝置,通過傳感系統(tǒng)感知和智能信息交換,以實(shí)現(xiàn)循跡、避障、無人駕駛等功能[9]。在此背景下,文中基于STM32微控制器[10-11]、磁導(dǎo)航傳感器、紅外線傳感器、RFID模塊[12-13]、ZigBee通信[14-15]模塊等設(shè)計(jì)了一款能夠自動(dòng)循跡、規(guī)定路線行走避障的無人駕駛的智能車控制系統(tǒng)。
系統(tǒng)設(shè)計(jì)實(shí)現(xiàn)智能車的路徑規(guī)劃、碰撞檢測(cè)、與上位機(jī)通信三大功能,所涉及到的系統(tǒng)結(jié)構(gòu)如圖1所示。其中智能車主要是由STM32F10x芯片、L298電機(jī)驅(qū)動(dòng)芯片、磁導(dǎo)航傳感器、RFID傳感器、紅外傳感器以及ZigBee通信模塊組成。上位機(jī)與智能車之間通過ZigBee通信。
圖1 智能車控制系統(tǒng)結(jié)構(gòu)
智能車電機(jī)使用STM32芯片的四個(gè)管腳PB12、PB13、PB14、PB15分別控制智能車的左前輪、左后輪、右前輪和右后輪。當(dāng)PB12為低電平,PB13為高電平,PB14為低電平,PB15為高電平時(shí),四個(gè)電機(jī)正轉(zhuǎn),實(shí)現(xiàn)智能車的前進(jìn);當(dāng)PB12為高電平,PB13為低電平,PB14為高電平,PB15為低電平時(shí),四個(gè)電機(jī)反轉(zhuǎn),實(shí)現(xiàn)智能車的后退;當(dāng)PB12、PB13為低電平,PB14為低電平,PB15為高電平時(shí),左輪停止右輪正轉(zhuǎn),實(shí)現(xiàn)智能車的左轉(zhuǎn);也可以通過左輪右輪的速度差實(shí)現(xiàn)智能車的左轉(zhuǎn)右轉(zhuǎn)。
系統(tǒng)中的三個(gè)傳感器:磁導(dǎo)航傳感器、RFID傳感器、紅外傳感器分別負(fù)責(zé)循跡、轉(zhuǎn)向以及避障。ZigBee通信模塊主要負(fù)責(zé)與上位機(jī)進(jìn)行通信,實(shí)時(shí)匯報(bào)智能車所處位置以及接受上位機(jī)發(fā)來的命令。
智能車控制系統(tǒng)主要完成路徑規(guī)劃、碰撞檢測(cè)以及與上位機(jī)通信三大功能。
(1)路徑規(guī)劃。
智能車路徑規(guī)劃分為兩部分,一是利用磁導(dǎo)航傳感器完成自動(dòng)循跡功能。通過磁導(dǎo)航傳感器三個(gè)掃描點(diǎn)掃描路面上的磁條,結(jié)合智能車的左輪或右輪調(diào)速來調(diào)整智能車的轉(zhuǎn)向,以保持智能車在路面的中間行駛而不會(huì)偏離軌道。二是對(duì)路線進(jìn)行規(guī)劃,智能車在前進(jìn)中會(huì)掃到RFID電子標(biāo)簽,根據(jù)標(biāo)簽決定智能車是否轉(zhuǎn)向。具體由路徑編碼和路徑編碼有效位數(shù)決定。
(2)碰撞檢測(cè)。
通過紅外傳感器掃描識(shí)別智能車前方有無障礙物,掃描到前方有障礙物時(shí)智能車停止然后繞過障礙物。通過檢查外部中斷觸發(fā)請(qǐng)求,說明前方有障礙物。
(3)與上位機(jī)通信。
主要實(shí)現(xiàn)的是智能車與上位機(jī)之間收發(fā)無線通信傳輸?shù)臄?shù)據(jù),智能車需要通過ZigBee模塊將一些數(shù)據(jù)信息上報(bào)給上位機(jī),包括智能車信息、智能車運(yùn)行狀態(tài)、智能車到達(dá)特殊位置反饋指令、智能車的位置信息等。而上位機(jī)是通過協(xié)調(diào)器的ZigBee模塊實(shí)現(xiàn)對(duì)智能車的控制。
路徑規(guī)劃包括自動(dòng)循跡和讀RFID電子標(biāo)簽兩部分。
首先,智能車根據(jù)磁導(dǎo)航傳感器三個(gè)觸點(diǎn)的值來決定是否偏離軌道,是需要左轉(zhuǎn)、右轉(zhuǎn)還是直行。左轉(zhuǎn)時(shí)就是執(zhí)行調(diào)速程序讓右側(cè)前、后輪加速,右轉(zhuǎn)時(shí)就是執(zhí)行調(diào)速程序讓左側(cè)前、后輪加速,使智能車始終保持在路面的中間行駛而不會(huì)偏離軌道。具體的自動(dòng)循跡方案如表1所示。
表1 自動(dòng)循跡表
實(shí)現(xiàn)的核心部分代碼如下:
for(i=0;i<=3;i ++) //三個(gè)觸發(fā)點(diǎn)監(jiān)測(cè)
{if(Trigger[i]==LED_ON)//根據(jù)點(diǎn)的觸發(fā)情況計(jì)算調(diào)整參數(shù)
{value|=(1<
//將磁導(dǎo)航觸發(fā)分為幾種觸發(fā)情況,1點(diǎn)觸發(fā),2點(diǎn)觸發(fā),3點(diǎn)觸發(fā)
if(value==0x05) //兩邊觸發(fā)中間不觸發(fā)情況
{if(signed==3) n=3;//右轉(zhuǎn)
else if(signed==1) n=1; //左轉(zhuǎn)}
else if((value==0x07)&&(signed==0)) n=2; //直行模式中的全觸發(fā)默認(rèn)直行
else if((value==0x07)&&(signed==1)) n=1;//左轉(zhuǎn)模式中的全觸發(fā)默認(rèn)左轉(zhuǎn)
else if((value==0x07)&&(signed==3)) n=3;//右轉(zhuǎn)模式中的全觸發(fā)默認(rèn)右轉(zhuǎn)
else if((value==0x06)&&(signed==0)) n=2;//直行模式中的2點(diǎn)觸發(fā)默認(rèn)直行
else if((value==0x06)&&(signed==1)) n=1;//左轉(zhuǎn)模式中的2點(diǎn)觸發(fā)默認(rèn)左轉(zhuǎn)
else if((value==0x03)&&(signed==0)) n=2;//直行模式中的2點(diǎn)觸發(fā)默認(rèn)直行
else if((value==0x03)&&(signed==3)) n=3;//右轉(zhuǎn)模式中的2點(diǎn)觸發(fā)默認(rèn)右轉(zhuǎn)
else if((value==0x04) n=1;//第一個(gè)點(diǎn)觸發(fā),左轉(zhuǎn)
else if(value==0x01) n=3;//第三個(gè)點(diǎn)觸發(fā),右轉(zhuǎn)
其次,當(dāng)智能車掃描到RFID電子標(biāo)簽時(shí),讀到RFID標(biāo)簽的內(nèi)容,根據(jù)其內(nèi)容,按照事先安排的路徑行駛。
具體路徑規(guī)劃的函數(shù)包含了險(xiǎn)情提醒、出入停車場(chǎng)檢測(cè)、輔助直線點(diǎn)、輔助左轉(zhuǎn)右轉(zhuǎn)點(diǎn)、減速帶標(biāo)志檢測(cè)等RFID標(biāo)簽,當(dāng)智能車掃描到RFID電子標(biāo)簽時(shí),首先判斷是否到達(dá)避險(xiǎn)模塊和停車場(chǎng)模塊,然后判斷是否到達(dá)特殊標(biāo)簽位置匹配RFID電子標(biāo)簽,如果掃描到特殊RFID電子標(biāo)簽,也就是當(dāng)匹配到關(guān)鍵點(diǎn)的地址坐標(biāo)時(shí),就根據(jù)路徑編碼和路徑編碼有效位數(shù)決定智能車接下來將要走的路線。實(shí)現(xiàn)方法是將32位路徑編碼分成每?jī)晌贿M(jìn)行判斷,若路徑編碼為00,表示右轉(zhuǎn);為01,表示左轉(zhuǎn);為1X,表示直行。
路徑編碼和路徑有效位數(shù)是決定智能車路徑的最重要的因素。規(guī)劃智能車的路徑根據(jù)是否與上位機(jī)通信分為兩種情況:當(dāng)智能車與上位機(jī)不通信時(shí),智能車的路徑完全是由路徑編碼決定;當(dāng)智能車與上位機(jī)通信時(shí),智能車的路徑就由上位機(jī)發(fā)送指令數(shù)據(jù)到智能車來決定智能車接下來要走的路徑。智能車實(shí)現(xiàn)路徑規(guī)劃的流程如圖2所示。
智能車與上位機(jī)通信分為兩種情況:一種是智能車上報(bào)信息給上位機(jī);另一種是上位機(jī)發(fā)送指令給智能車命令字,如表2所示。這兩種情況的信息都是以數(shù)據(jù)幀格式發(fā)送,數(shù)據(jù)幀中包含啟動(dòng)命令字0xFFFE、目標(biāo)節(jié)點(diǎn)地址、自身節(jié)點(diǎn)地址、發(fā)送命令、數(shù)據(jù)信息、字節(jié)數(shù)和校驗(yàn)和。發(fā)送數(shù)據(jù)函數(shù)就是打開串口發(fā)送數(shù)據(jù)到緩沖區(qū),先判斷發(fā)送緩沖隊(duì)列頭有沒有新接收的數(shù)據(jù)幀,然后判斷接收到的數(shù)據(jù)幀是否處理,如果沒有處理就打開串口發(fā)送數(shù)據(jù),否則就將發(fā)送緩沖隊(duì)列指針后移,插入要發(fā)送的數(shù)據(jù)。
圖2 路徑規(guī)劃流程
命令字命令解釋獲取的內(nèi)容0X11獲取車輛信息命令第1個(gè)字節(jié):車輛ID第2個(gè)字節(jié):車輛類型,0:公交車 1:私家車0X12給智能車發(fā)運(yùn)行命令第1個(gè)字節(jié):運(yùn)動(dòng)指令00:前進(jìn)(結(jié)合路徑編碼實(shí)現(xiàn))01:停止02:加速03:減速04:入庫(進(jìn)入車庫時(shí)使用)05:出庫(從停車位到停車場(chǎng)出口時(shí)使用)
首先測(cè)試智能車在磁條上能否沿磁條運(yùn)行,將磁條鋪設(shè)在地面上,智能車可以沿磁條運(yùn)行,如圖3所示。其次,測(cè)試智能車按照路徑編碼運(yùn)行,測(cè)試結(jié)果如表3所示。
圖3 智能車沿磁條運(yùn)行
路徑編碼智能車路線路徑編碼有效位數(shù)0X92FFF0000X1001 0010 1111 1111 1111 0000 0000 0000直行,左轉(zhuǎn),右轉(zhuǎn),直行,直行,直行,直行,直行,直行,直行,右轉(zhuǎn),右轉(zhuǎn),右轉(zhuǎn),右轉(zhuǎn),右轉(zhuǎn),右轉(zhuǎn)0X200X900A2F000X1001 0000 0000 1010 0010 1111 0000 0000直行,左轉(zhuǎn),右轉(zhuǎn),右轉(zhuǎn),右轉(zhuǎn),右轉(zhuǎn),直行,直行,右轉(zhuǎn),直行,直行,直行,右轉(zhuǎn),右轉(zhuǎn),右轉(zhuǎn),右轉(zhuǎn)0X160X6FFFF0000X0110 1111 1111 1111 1111 0000 0000 0000左轉(zhuǎn),直行,直行,直行,直行,直行,直行,直行,直行,直行,右轉(zhuǎn),右轉(zhuǎn),右轉(zhuǎn),右轉(zhuǎn),右轉(zhuǎn),右轉(zhuǎn)0X10
對(duì)智能車的避障功能進(jìn)行測(cè)試,智能車掃描到障礙物后停止,后退并繞過障礙物繼續(xù)前行。測(cè)試結(jié)果如圖4所示。
圖4 智能車?yán)@開障礙物
智能車與上位機(jī)進(jìn)行通信,對(duì)上位機(jī)發(fā)送指令給智能車和智能車上報(bào)信息給上位機(jī)兩方面進(jìn)行測(cè)試。
(1)上位機(jī)發(fā)送指令給智能車,如果智能車能夠按照指令運(yùn)行,說明上位機(jī)發(fā)送指令成功,否則說明智能車沒有發(fā)送成功。經(jīng)測(cè)試之后,智能車能夠按照上位機(jī)指令執(zhí)行相應(yīng)的動(dòng)作。
(2)智能車主動(dòng)上報(bào)信息給上位機(jī),如果上位機(jī)沒有顯示出智能車位置,說明智能車信息未上報(bào)成功。經(jīng)測(cè)試之后,智能車能夠上報(bào)自己的信息給上位機(jī),上位機(jī)可以實(shí)時(shí)顯示小車位置,如圖5所示。
圖5 上位機(jī)顯示出智能車位置
文中設(shè)計(jì)了一種以STM32為主控制器的智能車控制系統(tǒng),主要完成智能車路徑規(guī)劃、智能車碰撞檢測(cè)和Zigbee通信三大功能模塊的設(shè)計(jì)與實(shí)現(xiàn)。測(cè)試結(jié)果表明,該系統(tǒng)能夠完成按照規(guī)劃的路徑行駛,能夠通過ZigBee完成與上位機(jī)接收和發(fā)送數(shù)據(jù)并且能避開障礙物行駛。作為一項(xiàng)具有廣泛應(yīng)用前景的技術(shù),未來智能車將在科技、工商業(yè)、軍事以及人們的生活中發(fā)揮越來越重要的作用。