黃姝娟,肖 鋒,曹子建
(西安工業(yè)大學(xué) 計(jì)算機(jī)科學(xué)與工程學(xué)院,陜西 西安 710021)
隨著近年來5G技術(shù)和物聯(lián)網(wǎng)技術(shù)的迅猛發(fā)展,車聯(lián)網(wǎng)[1-2]已經(jīng)成為城市智能交通乃至智慧城市的重要組成部分[3-5]。車聯(lián)網(wǎng)作為物聯(lián)網(wǎng)與智能交通結(jié)合的產(chǎn)物,借助通信、互聯(lián)網(wǎng)、汽車等行業(yè)的發(fā)展優(yōu)勢(shì),融合大數(shù)據(jù)、人工智能、云計(jì)算等先進(jìn)技術(shù),為人類生活帶來了巨大變化[6]。而相較于傳統(tǒng)汽車,無人駕駛汽車的推廣使用,不僅可以方便用戶,而且還利于緩解眾多國(guó)家城市交通的擁堵問題[7-9],但與此同時(shí),無人駕駛汽車中的相關(guān)技術(shù)仍是各國(guó)討論的熱點(diǎn)、發(fā)展的瓶
頸所在,如何實(shí)現(xiàn)精準(zhǔn)控制無人駕駛汽車,實(shí)現(xiàn)無人車上路零事故以及真正意義上的車聯(lián)網(wǎng)仍然是各國(guó)面臨的一大難題[10]。而隨著5G技術(shù)的到來,5G移動(dòng)通信成為車聯(lián)網(wǎng)通信的有競(jìng)爭(zhēng)力的選項(xiàng)[11],車聯(lián)網(wǎng)技術(shù)將是傳統(tǒng)汽車向智能化、網(wǎng)聯(lián)化轉(zhuǎn)變的關(guān)鍵技術(shù)之一[12],也是智能網(wǎng)聯(lián)汽車體系架構(gòu)的重要組成部分,對(duì)于提高智能交通系統(tǒng)的安全性和高效性具有十分重要的意義[13-15]。為此,通過模擬控制現(xiàn)實(shí)生活中的無人駕駛汽車,提前預(yù)測(cè)無人駕駛汽車和車聯(lián)網(wǎng)技術(shù)相結(jié)合時(shí)可能遇到的各種問題,為真正實(shí)現(xiàn)車聯(lián)網(wǎng)與無人駕駛汽車技術(shù)相結(jié)合時(shí)代的到來具有重要的意義。
在文獻(xiàn)[16]的基礎(chǔ)上,該文利用STM32嵌入式開發(fā)和ZigBee無線通信技術(shù)模擬一個(gè)無人駕駛智能小車的組隊(duì)系統(tǒng),研究如何利用物聯(lián)網(wǎng)相關(guān)技術(shù)對(duì)無人駕駛智能小車進(jìn)行高效、實(shí)時(shí)、準(zhǔn)確的控制以及實(shí)現(xiàn)無人駕駛智能小車與智能網(wǎng)關(guān)之間的相互通信,從而展示車聯(lián)網(wǎng)時(shí)代下集中控制無人駕駛汽車組隊(duì)的運(yùn)行方式。
采用智能網(wǎng)關(guān)集中控制方式實(shí)現(xiàn)無人駕駛智能小車的組隊(duì)過程如圖1所示。
圖1 智能網(wǎng)關(guān)集中式控制
系統(tǒng)首先利用STM32嵌入式技術(shù)和ZigBee無線通信技術(shù)實(shí)現(xiàn)智能網(wǎng)關(guān)與智能小車之間相互通信的功能。其次,規(guī)劃組隊(duì)軌跡,將智能網(wǎng)關(guān)設(shè)置為主模式,其他智能小車設(shè)置為從模式,給所有處于從模式的智能小車發(fā)送組隊(duì)命令。再次,處于從模式的所有智能小車能夠正確接收組隊(duì)命令并執(zhí)行和返回響應(yīng)信息。最后,處于主模式的智能網(wǎng)關(guān)會(huì)根據(jù)接收到的組隊(duì)返回信息執(zhí)行下一組組隊(duì)動(dòng)作的命令。
系統(tǒng)硬件涉及到的模塊主要是智能小車控制模塊,包括智能小車上的主控芯片STM32模塊、電機(jī)驅(qū)動(dòng)模塊和ZigBee無線通信模塊。智能小車控制模塊的主要功能是通過ZigBee無線通信模塊接收智能網(wǎng)關(guān)下發(fā)的指令,并且正確識(shí)別指令,進(jìn)而做出相應(yīng)動(dòng)作。其中智能小車主控芯片是STM32F10x芯片,電機(jī)驅(qū)動(dòng)電路芯片是L298電機(jī)驅(qū)動(dòng)芯片,以及ZigBee通信模塊是順舟的SZ20。
如圖2所示,智能小車電機(jī)使用L298芯片驅(qū)動(dòng),用STM32核心芯片控制,L298的IN1、IN2、IN3、IN4是指輸入的是控制智能小車輪子的STM32芯片四個(gè)管腳的高低電平,OUT1、OUT2控制的是智能小車的左前輪和左后輪的轉(zhuǎn)向,OUT3、OUT4控制的是智能小車右前輪和右后輪的轉(zhuǎn)向。STM32主控芯片的PB12、PB13、PB14、PB15這四個(gè)管腳分別控制智能小車的左前輪、左后輪、右前輪和右后輪。
通過為STM32主控芯片的四個(gè)管腳賦予不同的高低電平,最終實(shí)現(xiàn)智能小車的5種不同運(yùn)動(dòng)狀態(tài),例如前進(jìn)、后退、左轉(zhuǎn)、右轉(zhuǎn)、停止,如表1所示。
表1 電機(jī)驅(qū)動(dòng)模塊運(yùn)動(dòng)方向管腳設(shè)置
圖2 智能小車電機(jī)驅(qū)動(dòng)原理
智能小車的ZigBee芯片主要用于實(shí)現(xiàn)智能小車與ZigBee協(xié)調(diào)器之間的無線通信。車內(nèi)ZigBee模塊和STM32處理器通過串口1相連接,主要是為了實(shí)現(xiàn)ZigBee串行處理功能和數(shù)據(jù)傳輸功能。而且每個(gè)ZigBee設(shè)備都有一個(gè)獨(dú)特的地址,用于和其他設(shè)備區(qū)分。ZigBee模塊與STM32主控芯片的硬件連接圖如圖3所示。
圖3 ZigBee模塊連接原理
系統(tǒng)軟件主要涉及智能小車ZigBee通信模塊和組隊(duì)運(yùn)行模塊。智能小車之間首先通過ZigBee與智能網(wǎng)關(guān)進(jìn)行通信,然后接收智能網(wǎng)關(guān)發(fā)來的組隊(duì)運(yùn)行控制命令。在整個(gè)系統(tǒng)中,智能網(wǎng)關(guān)和每輛智能小車均具備通過ZigBee進(jìn)行發(fā)送數(shù)據(jù)、接收數(shù)據(jù)并對(duì)數(shù)據(jù)進(jìn)行實(shí)時(shí)處理的能力,智能網(wǎng)關(guān)與ZigBee協(xié)調(diào)器配合,在網(wǎng)絡(luò)中處于主模式,而所有智能小車處于從模式。
3.1.1 數(shù)據(jù)通信協(xié)議
在整個(gè)網(wǎng)絡(luò)中,智能網(wǎng)關(guān)屬于中心節(jié)點(diǎn),需要與其他智能小車保持通信,因此處于主動(dòng)模式,智能小車處于被動(dòng)模式。智能網(wǎng)關(guān)需要通過ZigBee協(xié)調(diào)器與智能小車通信,并通過發(fā)送不同的命令來分開控制智能小車,因此,在組隊(duì)過程中,智能網(wǎng)關(guān)需要根據(jù)智能小車的位置以及當(dāng)前的狀態(tài)發(fā)送相應(yīng)的控制命令。組隊(duì)過程中的智能網(wǎng)關(guān)控制智能小車運(yùn)行的數(shù)據(jù)通信協(xié)議以及數(shù)據(jù)幀格式分別如表2~表4所示。
表2 智能網(wǎng)關(guān)控制智能小車運(yùn)行的數(shù)據(jù)通信協(xié)議
表3 智能網(wǎng)關(guān)下達(dá)命令的數(shù)據(jù)幀格式
表4 智能小車主動(dòng)上報(bào)的數(shù)據(jù)幀格式
本協(xié)議設(shè)定智能網(wǎng)關(guān)在網(wǎng)絡(luò)中地址為0x01,智能小車地址為0x70-0x7F;為了快速區(qū)分?jǐn)?shù)據(jù)幀通信的方向,智能網(wǎng)關(guān)向智能小車發(fā)送指令類型為01,智能小車向智能網(wǎng)關(guān)主動(dòng)上報(bào)發(fā)送的指令類型為03。
例如:智能網(wǎng)關(guān)01向智能小車71發(fā)前進(jìn)命令:FF FE 710102011201 SUM,如表3中的數(shù)據(jù)。如果對(duì)所有智能小車發(fā)送信息,則目的地址寫為0xFF,表示廣播地址。
智能小車返回給智能網(wǎng)關(guān)的命令:FFFE 017001000112 SUM,如表4中的數(shù)據(jù)。
其中通信錯(cuò)誤類型如下:
00:正常;
01:無效指令;
02:無效數(shù)據(jù);
03:執(zhí)行不成功。
3.1.2 ZigBee網(wǎng)絡(luò)配置
該系統(tǒng)在如圖4所示的順舟ZigBee配置助手中將智能網(wǎng)關(guān)和智能小車的配置如下:
(1)節(jié)點(diǎn)地址:因?yàn)槊總€(gè)加入ZigBee網(wǎng)絡(luò)的設(shè)備具有唯一的地址標(biāo)識(shí),同一個(gè)網(wǎng)絡(luò)中不能有相同地址的節(jié)點(diǎn),根據(jù)上述的通信協(xié)議,智能網(wǎng)關(guān)的地址為0x01,智能小車的節(jié)點(diǎn)地址分別為0x70-0x7F。
(2)節(jié)點(diǎn)類型:智能網(wǎng)關(guān)為中心節(jié)點(diǎn),智能小車均為終端節(jié)點(diǎn)。采用主從模式發(fā)送。
(3)網(wǎng)絡(luò)類型:在智能小車自動(dòng)組隊(duì)過程中,智能小車均選擇主從網(wǎng)絡(luò)的星型網(wǎng)。因?yàn)樵谕粋€(gè)網(wǎng)絡(luò)中,網(wǎng)絡(luò)類型必須設(shè)置相同。注意此網(wǎng)絡(luò)中智能網(wǎng)關(guān)是唯一的中心節(jié)點(diǎn)。
(4)網(wǎng)絡(luò)ID:ID范圍從0000—FFFF之中選擇,同一個(gè)網(wǎng)絡(luò)中ID必須相同。本系統(tǒng)中智能網(wǎng)關(guān)和智能小車均選擇“F4”。
(5)頻點(diǎn)設(shè)置:本系統(tǒng)選擇的ZigBee無線網(wǎng)絡(luò)工作頻點(diǎn)均為“9-2.450 GHz”。
(6)發(fā)送模式:智能小車均選擇主從模式。因?yàn)樾枰悄苄≤囎鳛榉侵行墓?jié)點(diǎn),從而默認(rèn)將數(shù)據(jù)發(fā)給智能網(wǎng)關(guān)這個(gè)中心節(jié)點(diǎn)。
(7)串口屬性:智能小車的串口屬性相同。設(shè)置為波特率115200、校驗(yàn)位為“NONE”,而數(shù)據(jù)位為8、停止位為1、流控為“無”,數(shù)據(jù)位選擇“8+0+1”。
圖4 ZigBee網(wǎng)絡(luò)配置
在上述ZigBee通信模塊的基礎(chǔ)上,利用智能小車上的ZigBee模塊、電機(jī)驅(qū)動(dòng)電路模塊以及主控芯片模塊實(shí)現(xiàn)從ZigBee協(xié)調(diào)器接收數(shù)據(jù),并根據(jù)數(shù)據(jù)的值使能電機(jī)驅(qū)動(dòng)電路從而對(duì)智能小車進(jìn)行組隊(duì)控制。首先,初始化ZigBee串口配置,然后根據(jù)串口中斷發(fā)來的數(shù)值讓智能小車產(chǎn)生相應(yīng)的動(dòng)作。其中,通過調(diào)整PWM(pulse width modulation)占空比的數(shù)值來調(diào)整智能小車的速度,智能小車運(yùn)行控制模塊程序流程如圖5所示。
圖5 智能小車組隊(duì)運(yùn)行流程
程序開始,定義變量Flag并為之賦值為0,初始化時(shí)鐘和電機(jī),使用PWM調(diào)整智能小車初始速度,初始化ZigBee串口并配置串口中斷,循環(huán)等待中斷開始,若中斷開始則使用函數(shù)USART1_IRQHandler()從USART1接收數(shù)據(jù)并且將接收到的數(shù)據(jù)賦給Flag。隨后讀入Flag的值,若Flag的值與判斷句中的一致就執(zhí)行相應(yīng)語(yǔ)句,未找到符合的語(yǔ)句就直接執(zhí)行break語(yǔ)句跳出,重新等待中斷開始。
程序主要代碼實(shí)現(xiàn)如下:
/*main函數(shù)*/
#define ADVANCE 0x01//若接收到的數(shù)據(jù)為0x01,即為接收到前行命令
#define BACK0x02//若接收到的數(shù)據(jù)為0x02,即為接收到后退命令
#define LEFT0x03//若接收到的數(shù)據(jù)為0x03,即為接收到左轉(zhuǎn)命令
#define RIGHT0x04//若接收到的數(shù)據(jù)為0x04,即為接收到右轉(zhuǎn)命令
#define STOP0x05//若接收到的數(shù)據(jù)為0x05,即為接收到停止命令
#define SPEED_UP 0x06//若接收到的數(shù)據(jù)為0x06,即為接收到加速命令
#define SLOW_DOWN 0x07//若接收到的數(shù)據(jù)為0x07,即為接收到減速命令
uint16_t Flag=0;//用于標(biāo)記的變量
void main(void)
{SystemInit(); //系統(tǒng)時(shí)鐘初始化
Motor_Init();//智能小車電機(jī)初始化
TIM3_PWM_Init(600);//利用PWM調(diào)速
ZB_USART1_Init();//初始化主控芯片與ZigBee芯片的串口
ZB_NVIC_Configuration(); //ZigBee串口中斷配置
while(1)//無限循環(huán)
{ switch(Flag)//判斷Flag的值
{case ADVANCE:Advance();break;//若接收到0x01,使能電機(jī)前行
case BACK:Back();break;//若接收到0x02,使能電機(jī)后退
case LEFT:Left();break;//若接收到0x03,使能電機(jī)左轉(zhuǎn)
case RIGHT:Right();break;//若接收到0x04,使能電機(jī)右轉(zhuǎn)
case STOP:Stop();break;//若接收到0x05,電機(jī)停止
case SPEED_UP:TIM3_PWM_Init(750);break;//若接收到0x06,使能電機(jī)調(diào)速加速
case SLOW_DOWN:TIM3_PWM_Init(600);break;//若接收到0x07,使能電機(jī)調(diào)速減速
default:break;}}}
/*ZigBee串口中斷處理函數(shù)*/
void USART1_IRQHandler(void)
{if(USART_GetITStatus(USART1,USART_IT_RXNE) != RESET) //串口狀態(tài)若未被重置
{Flag=USART_ReceiveData(USART1);//將從串口接收到的數(shù)據(jù)的值賦給Flag
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);//一直讓串口重置}}
為了測(cè)試智能網(wǎng)關(guān)通過ZigBee協(xié)調(diào)器無線通信控制智能小車運(yùn)動(dòng),首先在智能網(wǎng)關(guān)上編寫串口測(cè)試程序ComTest,并將智能網(wǎng)關(guān)與ZigBee協(xié)調(diào)器通過串口連接,如圖6所示。
圖6 智能網(wǎng)關(guān)與協(xié)調(diào)器連接以及ComTest界面
智能網(wǎng)關(guān)界面上首先需要打開串口,才能與ZigBee協(xié)調(diào)器連接。CAR1、CAR2、CAR3、CAR4分別表示用戶需要操作的智能小車序號(hào),ALLCAR表示對(duì)所有智能小車的整體控制。CAR1代表網(wǎng)絡(luò)中節(jié)點(diǎn)地址為0x71的一號(hào)智能小車,CAR2代表網(wǎng)絡(luò)中節(jié)點(diǎn)地址為0x72的二號(hào)智能小車,CAR3代表網(wǎng)絡(luò)中節(jié)點(diǎn)地址為0x73的三號(hào)智能小車,CAR4代表網(wǎng)絡(luò)中節(jié)點(diǎn)地址為0x74的四號(hào)智能小車。每個(gè)CAR標(biāo)志后的按鈕代表對(duì)此智能小車的運(yùn)動(dòng)控制,比如按下CAR1的“前進(jìn)”按鈕,一號(hào)智能小車就會(huì)前進(jìn);按下CAR1的“加速”按鈕,一號(hào)智能小車就會(huì)加速。如果整體控制智能小車運(yùn)行時(shí),操作ALLCAR按鈕,則所有智能小車都會(huì)接收到命令并執(zhí)行。通過點(diǎn)擊智能網(wǎng)關(guān)上的按鈕控制智能小車運(yùn)行隊(duì)形,如圖7所示。
(a)智能小車隊(duì)形呈“X”型 (b)智能小車隊(duì)形呈“V”型 (c)智能小車隊(duì)形呈“一”型
未來無論是在科學(xué)技術(shù)領(lǐng)域,還是在工業(yè)、商業(yè)應(yīng)用領(lǐng)域或是在人們的生活中,車聯(lián)網(wǎng)技術(shù)都將發(fā)揮巨大作用,都是一項(xiàng)具有廣泛應(yīng)用前景的技術(shù)。該文通過ZigBee無線網(wǎng)絡(luò)通信技術(shù)實(shí)現(xiàn)了車聯(lián)網(wǎng)并模擬智能小車組隊(duì)運(yùn)行的全過程,主要通過主從方式實(shí)現(xiàn)了多輛無人駕駛智能小車高效、實(shí)時(shí)、準(zhǔn)確地執(zhí)行組隊(duì)命令,完成組隊(duì)過程。目前組隊(duì)過程需要人工干預(yù),后期將采用車與車之間通過點(diǎn)對(duì)點(diǎn)模式以及紅外測(cè)距的方法進(jìn)行自動(dòng)組隊(duì)模型的研究。