黃姝娟,肖 鋒,曹子建
(西安工業大學 計算機科學與工程學院,陜西 西安 710021)
隨著近年來5G技術和物聯網技術的迅猛發展,車聯網[1-2]已經成為城市智能交通乃至智慧城市的重要組成部分[3-5]。車聯網作為物聯網與智能交通結合的產物,借助通信、互聯網、汽車等行業的發展優勢,融合大數據、人工智能、云計算等先進技術,為人類生活帶來了巨大變化[6]。而相較于傳統汽車,無人駕駛汽車的推廣使用,不僅可以方便用戶,而且還利于緩解眾多國家城市交通的擁堵問題[7-9],但與此同時,無人駕駛汽車中的相關技術仍是各國討論的熱點、發展的瓶
頸所在,如何實現精準控制無人駕駛汽車,實現無人車上路零事故以及真正意義上的車聯網仍然是各國面臨的一大難題[10]。而隨著5G技術的到來,5G移動通信成為車聯網通信的有競爭力的選項[11],車聯網技術將是傳統汽車向智能化、網聯化轉變的關鍵技術之一[12],也是智能網聯汽車體系架構的重要組成部分,對于提高智能交通系統的安全性和高效性具有十分重要的意義[13-15]。為此,通過模擬控制現實生活中的無人駕駛汽車,提前預測無人駕駛汽車和車聯網技術相結合時可能遇到的各種問題,為真正實現車聯網與無人駕駛汽車技術相結合時代的到來具有重要的意義。
在文獻[16]的基礎上,該文利用STM32嵌入式開發和ZigBee無線通信技術模擬一個無人駕駛智能小車的組隊系統,研究如何利用物聯網相關技術對無人駕駛智能小車進行高效、實時、準確的控制以及實現無人駕駛智能小車與智能網關之間的相互通信,從而展示車聯網時代下集中控制無人駕駛汽車組隊的運行方式。
采用智能網關集中控制方式實現無人駕駛智能小車的組隊過程如圖1所示。

圖1 智能網關集中式控制
系統首先利用STM32嵌入式技術和ZigBee無線通信技術實現智能網關與智能小車之間相互通信的功能。其次,規劃組隊軌跡,將智能網關設置為主模式,其他智能小車設置為從模式,給所有處于從模式的智能小車發送組隊命令。再次,處于從模式的所有智能小車能夠正確接收組隊命令并執行和返回響應信息。最后,處于主模式的智能網關會根據接收到的組隊返回信息執行下一組組隊動作的命令。
系統硬件涉及到的模塊主要是智能小車控制模塊,包括智能小車上的主控芯片STM32模塊、電機驅動模塊和ZigBee無線通信模塊。智能小車控制模塊的主要功能是通過ZigBee無線通信模塊接收智能網關下發的指令,并且正確識別指令,進而做出相應動作。其中智能小車主控芯片是STM32F10x芯片,電機驅動電路芯片是L298電機驅動芯片,以及ZigBee通信模塊是順舟的SZ20。
如圖2所示,智能小車電機使用L298芯片驅動,用STM32核心芯片控制,L298的IN1、IN2、IN3、IN4是指輸入的是控制智能小車輪子的STM32芯片四個管腳的高低電平,OUT1、OUT2控制的是智能小車的左前輪和左后輪的轉向,OUT3、OUT4控制的是智能小車右前輪和右后輪的轉向。STM32主控芯片的PB12、PB13、PB14、PB15這四個管腳分別控制智能小車的左前輪、左后輪、右前輪和右后輪。
通過為STM32主控芯片的四個管腳賦予不同的高低電平,最終實現智能小車的5種不同運動狀態,例如前進、后退、左轉、右轉、停止,如表1所示。

表1 電機驅動模塊運動方向管腳設置

圖2 智能小車電機驅動原理
智能小車的ZigBee芯片主要用于實現智能小車與ZigBee協調器之間的無線通信。車內ZigBee模塊和STM32處理器通過串口1相連接,主要是為了實現ZigBee串行處理功能和數據傳輸功能。而且每個ZigBee設備都有一個獨特的地址,用于和其他設備區分。ZigBee模塊與STM32主控芯片的硬件連接圖如圖3所示。

圖3 ZigBee模塊連接原理
系統軟件主要涉及智能小車ZigBee通信模塊和組隊運行模塊。智能小車之間首先通過ZigBee與智能網關進行通信,然后接收智能網關發來的組隊運行控制命令。在整個系統中,智能網關和每輛智能小車均具備通過ZigBee進行發送數據、接收數據并對數據進行實時處理的能力,智能網關與ZigBee協調器配合,在網絡中處于主模式,而所有智能小車處于從模式。
3.1.1 數據通信協議
在整個網絡中,智能網關屬于中心節點,需要與其他智能小車保持通信,因此處于主動模式,智能小車處于被動模式。智能網關需要通過ZigBee協調器與智能小車通信,并通過發送不同的命令來分開控制智能小車,因此,在組隊過程中,智能網關需要根據智能小車的位置以及當前的狀態發送相應的控制命令。組隊過程中的智能網關控制智能小車運行的數據通信協議以及數據幀格式分別如表2~表4所示。

表2 智能網關控制智能小車運行的數據通信協議

表3 智能網關下達命令的數據幀格式

表4 智能小車主動上報的數據幀格式
本協議設定智能網關在網絡中地址為0x01,智能小車地址為0x70-0x7F;為了快速區分數據幀通信的方向,智能網關向智能小車發送指令類型為01,智能小車向智能網關主動上報發送的指令類型為03。
例如:智能網關01向智能小車71發前進命令:FF FE 710102011201 SUM,如表3中的數據。如果對所有智能小車發送信息,則目的地址寫為0xFF,表示廣播地址。
智能小車返回給智能網關的命令:FFFE 017001000112 SUM,如表4中的數據。
其中通信錯誤類型如下:
00:正常;
01:無效指令;
02:無效數據;
03:執行不成功。
3.1.2 ZigBee網絡配置
該系統在如圖4所示的順舟ZigBee配置助手中將智能網關和智能小車的配置如下:
(1)節點地址:因為每個加入ZigBee網絡的設備具有唯一的地址標識,同一個網絡中不能有相同地址的節點,根據上述的通信協議,智能網關的地址為0x01,智能小車的節點地址分別為0x70-0x7F。
(2)節點類型:智能網關為中心節點,智能小車均為終端節點。采用主從模式發送。
(3)網絡類型:在智能小車自動組隊過程中,智能小車均選擇主從網絡的星型網。因為在同一個網絡中,網絡類型必須設置相同。注意此網絡中智能網關是唯一的中心節點。
(4)網絡ID:ID范圍從0000—FFFF之中選擇,同一個網絡中ID必須相同。本系統中智能網關和智能小車均選擇“F4”。
(5)頻點設置:本系統選擇的ZigBee無線網絡工作頻點均為“9-2.450 GHz”。
(6)發送模式:智能小車均選擇主從模式。因為需要智能小車作為非中心節點,從而默認將數據發給智能網關這個中心節點。
(7)串口屬性:智能小車的串口屬性相同。設置為波特率115200、校驗位為“NONE”,而數據位為8、停止位為1、流控為“無”,數據位選擇“8+0+1”。

圖4 ZigBee網絡配置
在上述ZigBee通信模塊的基礎上,利用智能小車上的ZigBee模塊、電機驅動電路模塊以及主控芯片模塊實現從ZigBee協調器接收數據,并根據數據的值使能電機驅動電路從而對智能小車進行組隊控制。首先,初始化ZigBee串口配置,然后根據串口中斷發來的數值讓智能小車產生相應的動作。其中,通過調整PWM(pulse width modulation)占空比的數值來調整智能小車的速度,智能小車運行控制模塊程序流程如圖5所示。

圖5 智能小車組隊運行流程
程序開始,定義變量Flag并為之賦值為0,初始化時鐘和電機,使用PWM調整智能小車初始速度,初始化ZigBee串口并配置串口中斷,循環等待中斷開始,若中斷開始則使用函數USART1_IRQHandler()從USART1接收數據并且將接收到的數據賦給Flag。隨后讀入Flag的值,若Flag的值與判斷句中的一致就執行相應語句,未找到符合的語句就直接執行break語句跳出,重新等待中斷開始。
程序主要代碼實現如下:
/*main函數*/
#define ADVANCE 0x01//若接收到的數據為0x01,即為接收到前行命令
#define BACK0x02//若接收到的數據為0x02,即為接收到后退命令
#define LEFT0x03//若接收到的數據為0x03,即為接收到左轉命令
#define RIGHT0x04//若接收到的數據為0x04,即為接收到右轉命令
#define STOP0x05//若接收到的數據為0x05,即為接收到停止命令
#define SPEED_UP 0x06//若接收到的數據為0x06,即為接收到加速命令
#define SLOW_DOWN 0x07//若接收到的數據為0x07,即為接收到減速命令
uint16_t Flag=0;//用于標記的變量
void main(void)
{SystemInit(); //系統時鐘初始化
Motor_Init();//智能小車電機初始化
TIM3_PWM_Init(600);//利用PWM調速
ZB_USART1_Init();//初始化主控芯片與ZigBee芯片的串口
ZB_NVIC_Configuration(); //ZigBee串口中斷配置
while(1)//無限循環
{ switch(Flag)//判斷Flag的值
{case ADVANCE:Advance();break;//若接收到0x01,使能電機前行
case BACK:Back();break;//若接收到0x02,使能電機后退
case LEFT:Left();break;//若接收到0x03,使能電機左轉
case RIGHT:Right();break;//若接收到0x04,使能電機右轉
case STOP:Stop();break;//若接收到0x05,電機停止
case SPEED_UP:TIM3_PWM_Init(750);break;//若接收到0x06,使能電機調速加速
case SLOW_DOWN:TIM3_PWM_Init(600);break;//若接收到0x07,使能電機調速減速
default:break;}}}
/*ZigBee串口中斷處理函數*/
void USART1_IRQHandler(void)
{if(USART_GetITStatus(USART1,USART_IT_RXNE) != RESET) //串口狀態若未被重置
{Flag=USART_ReceiveData(USART1);//將從串口接收到的數據的值賦給Flag
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);//一直讓串口重置}}
為了測試智能網關通過ZigBee協調器無線通信控制智能小車運動,首先在智能網關上編寫串口測試程序ComTest,并將智能網關與ZigBee協調器通過串口連接,如圖6所示。

圖6 智能網關與協調器連接以及ComTest界面
智能網關界面上首先需要打開串口,才能與ZigBee協調器連接。CAR1、CAR2、CAR3、CAR4分別表示用戶需要操作的智能小車序號,ALLCAR表示對所有智能小車的整體控制。CAR1代表網絡中節點地址為0x71的一號智能小車,CAR2代表網絡中節點地址為0x72的二號智能小車,CAR3代表網絡中節點地址為0x73的三號智能小車,CAR4代表網絡中節點地址為0x74的四號智能小車。每個CAR標志后的按鈕代表對此智能小車的運動控制,比如按下CAR1的“前進”按鈕,一號智能小車就會前進;按下CAR1的“加速”按鈕,一號智能小車就會加速。如果整體控制智能小車運行時,操作ALLCAR按鈕,則所有智能小車都會接收到命令并執行。通過點擊智能網關上的按鈕控制智能小車運行隊形,如圖7所示。

(a)智能小車隊形呈“X”型 (b)智能小車隊形呈“V”型 (c)智能小車隊形呈“一”型
未來無論是在科學技術領域,還是在工業、商業應用領域或是在人們的生活中,車聯網技術都將發揮巨大作用,都是一項具有廣泛應用前景的技術。該文通過ZigBee無線網絡通信技術實現了車聯網并模擬智能小車組隊運行的全過程,主要通過主從方式實現了多輛無人駕駛智能小車高效、實時、準確地執行組隊命令,完成組隊過程。目前組隊過程需要人工干預,后期將采用車與車之間通過點對點模式以及紅外測距的方法進行自動組隊模型的研究。