滕政哲 林士飏 王界欽 張?zhí)祉?穆虎
(山東理工大學(xué),淄博 255022)
目前,國內(nèi)對于車輛遠(yuǎn)程駕駛技術(shù)的研究大多集中在遠(yuǎn)程獲取車輛的信息以及對簡單電器設(shè)備的控制,包括遠(yuǎn)程控制車輛起動、打開和關(guān)閉車門、車輛定位等[1]。白云偉等人設(shè)計和開發(fā)出了一款遠(yuǎn)程控制車輛的APP,采用XMPP通信協(xié)議進(jìn)行手機(jī)端和車載系統(tǒng)的通信[2]。曹正策等人提出基于車聯(lián)網(wǎng)技術(shù)的分時租賃系統(tǒng)方案和分時租賃控制系統(tǒng)方案[3]。李治民等人提出了一種基于硬件在環(huán)半實物仿真平臺的遠(yuǎn)程控制系統(tǒng)的測試方法[4]。
智能網(wǎng)聯(lián)汽車研究目前主要集中在車輛的換道、超車、避碰,以及交叉路口附近車輛的協(xié)同控制。Nie等人提出了一種分布式自動駕駛車輛換道決策框架[5]。Michael Düring等人提出了自動駕駛汽車協(xié)同運動規(guī)劃的方法[6]。Huang等人提出了一種新型混合控制系統(tǒng)[7],利用人工勢場的方法實現(xiàn)對車輛路徑的規(guī)劃和運動控制。然而,對于窄路場景下車輛的協(xié)同運動卻鮮有研究,可以預(yù)見,若無相應(yīng)機(jī)制,當(dāng)兩對向行駛的無人駕駛車輛進(jìn)入窄路段,可能會觸發(fā)前向避碰機(jī)制,使車輛停于窄路導(dǎo)致會車死結(jié)情況的發(fā)生。
為滿足窄路場景下車輛協(xié)調(diào)通行需求,本文提出一種基于Android的車輛遠(yuǎn)程駕駛系統(tǒng),通過Socket通信、藍(lán)牙Socket通信、九針串口連接的方式建立從控制端到汽車CAN 網(wǎng)絡(luò)的連接,使用戶通過控制界面實現(xiàn)對車輛的加速、制動、轉(zhuǎn)向的遠(yuǎn)程控制,使得窄路兩側(cè)車輛形成集群,以有效避免會車死結(jié)的發(fā)生,并對該系統(tǒng)集成于云端對于窄路場景下車輛通行效率的影響進(jìn)行研究。
電腦端的控制程序以Eclipse 2019 作為開發(fā)平臺,控制界面(Server)通過Socket通信的方式實現(xiàn)與手機(jī)端(Client)之間信息的傳遞。本文選用JDK11作為編譯和執(zhí)行Java 程序的Java 開發(fā)環(huán)境,同時引入JavaFX11 作為外部依賴Java集開發(fā)控制界面。
手機(jī)端的控制程序以Android Studio 作為開發(fā)平臺,利用藍(lán)牙Socket 的通信方式實現(xiàn)手機(jī)與GCAN-203之間通信的連接,手機(jī)端的應(yīng)用程序?qū)碾娔X端獲得的控制字節(jié)流轉(zhuǎn)傳給GCAN-203。
操作人員通過電腦端的控制界面發(fā)送控制車輛運動的指令給手機(jī)端APP,指令是由13 個字節(jié)組成的數(shù)據(jù)幀。手機(jī)端的APP 獲取電腦端控制指令后將其轉(zhuǎn)傳給設(shè)備GCAN-203,GCAN-203 將該數(shù)據(jù)幀通過DB9 連接器傳送到汽車的CAN 總線,從而實現(xiàn)對車輛運動的控制。系統(tǒng)總體設(shè)計方案如圖1所示。
圖1 遠(yuǎn)程駕駛系統(tǒng)總體方案
該系統(tǒng)硬件由筆記本電腦、Android 手機(jī)、設(shè)備GCAN-203、汽車4 個部分組成,其中,筆記本電腦選用惠普星14,搭載Windows 10系統(tǒng),擁有16 GB運行內(nèi)存,使用Intel Core i7處理器,滿足電腦端Android控制主程序的需求。Android 手機(jī)選用華為Mate20x 5G 版手機(jī),其操作系統(tǒng)為基于Android 9的EMUI 9.0,搭載麒麟980處理器,擁有8 GB 運行內(nèi)存,可以使用5G 網(wǎng)絡(luò)。GCAN-203 為沈陽廣成科技有限公司的藍(lán)牙轉(zhuǎn)CAN 總線設(shè)備。汽車選用哈弗H7,該車輛經(jīng)改造,后備箱內(nèi)搭載dSPACE 公司的MicroAutoBox,有外接汽車CAN 總線的DB9連接器,以及為后備箱設(shè)備供電的超威12 V、60 A·h 的汽車蓄電池,轉(zhuǎn)向盤下加裝步進(jìn)電機(jī)用于接收來自CAN總線的報文后進(jìn)行轉(zhuǎn)向動作。設(shè)備GCAN-203 是將電腦端的控制指令發(fā)送到汽車CAN 總線上的關(guān)鍵硬件,如圖2所示。
圖2 GCAN-203設(shè)備
目前,GCAN-203 已廣泛應(yīng)用于現(xiàn)場總線實驗室、智能小區(qū)、工業(yè)控制、CAN 總線網(wǎng)絡(luò)領(lǐng)域中的數(shù)據(jù)處理、CAN總線網(wǎng)絡(luò)控制節(jié)點的數(shù)據(jù)采集等方面,該設(shè)備具有CAN-Bus通信波特率在5 Kb/s~1 Mb/s間任意可編程、使用9~24 V 直流供電、工作溫度范圍為-40~85 ℃、最高數(shù)據(jù)流量為300 幀/s 等性能特點,其6 個引腳的定義如表1所示。
表1 GCAN-203各引腳定義
為了保證設(shè)備GCAN-203 與汽車CAN 總線在車輛行駛過程中連接的穩(wěn)定性,消除物理連接不良導(dǎo)致數(shù)據(jù)發(fā)送失敗的可能性,制作九針串口的DB9連接器(公頭)與連接汽車CAN 總線的九針串口母頭相連。為使設(shè)備GCAN-203正常與汽車上的CAN 總線進(jìn)行控制信息傳遞,需要將GCAN-203 的4 號引腳(CAN_L)與DB9連接器的2 號引腳(CAN_L)以及GCAN-203 的6 號引腳(CAN_H)與DB9 連接器的7 號引腳(CAN_H)用導(dǎo)線連接。
3.2.1 電腦端軟件的設(shè)計
本文將電腦端作為車輛運動的控制終端,利用Eclipse 開發(fā)平臺,引入JDK11 以及JavaFX11 作為開發(fā)環(huán)境,進(jìn)行程序的開發(fā),該程序主要完成控制界面的設(shè)計、Socket 通信架構(gòu)的搭建(服務(wù)端)、按鈕點擊事件的構(gòu)建3個部分。
3.2.1.1 控制界面的設(shè)計
電腦端控制界面設(shè)計了上、下、左、右4 個鍵位,分別對應(yīng)車輛的加速、制動、左轉(zhuǎn)和右轉(zhuǎn)控制。此控制界面的開發(fā)用到了JavaFX11 中一些jar 包中的方法,所以在Java編程的初始階段需要導(dǎo)入javafx.*.*包,保證界面設(shè)計調(diào)用方法能夠被正確使用。
3.2.1.2 Socket通信架構(gòu)搭建
Socket 是一種相對底層的網(wǎng)絡(luò)編程方式,是支持TCP/IP 協(xié)議的網(wǎng)絡(luò)通信中的基本操作單元。在TCP/IP協(xié)議的5層模型中,Socket位于應(yīng)用層和傳輸層之間,是抽象層。Socket的通信模型如圖3所示。
圖3 Socket通信模型
由該通信模型可以明確電腦端(Server)與手機(jī)端(Client)建立Socket 通信的編程流程。Server 服務(wù)端初始化時設(shè)置一個端口,本文選用端口55533,然后建立一個ServerSocket 綁定該端口號并對該端口進(jìn)行監(jiān)聽,之后調(diào)用accept()方法為ServerSocket 接收請求并返回一個Socket對象。客戶端初始化時需設(shè)置端口和IP,并建立一個Socket 綁定該端口和IP。本文雙方建立連接后用getInputStream()和getOutputStream()的方法獲得輸入字節(jié)流和輸出字節(jié)流,并建立緩沖區(qū)對數(shù)據(jù)進(jìn)行讀取。由于本文使用了Socket通信以及getInputStream()和getOutputStream()等方法,需要在程序編寫的初始階段導(dǎo) 入 java.net.Socket、java.net.ServerSocket、java.io.OutputStream、java.io.InputStream等jar包。
3.2.1.3 按鈕點擊事件的構(gòu)建
完成控制界面的構(gòu)建以及Socket 通信架構(gòu)搭建后,為了在點擊按鈕時能夠傳遞相應(yīng)的控制指令,需要對按鈕點擊事件進(jìn)行設(shè)計,事件構(gòu)建流程如圖4所示。
圖4 點擊事件流程
其中,計算機(jī)時鐘內(nèi)時間的獲取使用Calendar.getInstance() 中 的get(Calendar.MINUTE) 方 法 以 及get(Calendar.SECOND)方法。按鍵按下與抬起時間的差值作為汽車加速、制動及轉(zhuǎn)向動作幅度的依據(jù),將取得的數(shù)值轉(zhuǎn)化為對應(yīng)的16進(jìn)制數(shù)寫入Socket通信模塊中服務(wù)端的輸入字節(jié)流,按鍵抬起時將對應(yīng)的控制指令從電腦端發(fā)送到手機(jī)端。
3.2.2 手機(jī)端軟件的設(shè)計
本文將手機(jī)作為控制信息從電腦發(fā)送到GCAN-203的中間設(shè)備,其作為客戶端接收來自電腦服務(wù)端的字節(jié)流,同時將其通過藍(lán)牙Socket 進(jìn)行轉(zhuǎn)傳。手機(jī)端Android 主程序以Android Studio 為開發(fā)平臺,該程序主要完成手機(jī)APP 主界面的設(shè)計、藍(lán)牙Socket 通信的構(gòu)建、Socket通信客戶端程序的編寫3個部分。
3.2.2.1 手機(jī)APP主界面設(shè)計
手機(jī)端主界面運用layout 中的activity_main.xml 文件設(shè)計Button 控件和TextView 控件。Button 控件完成對藍(lán)牙的搜索連接任務(wù),向Server服務(wù)端發(fā)送連接請求任務(wù),TextView控件完成對來自客戶端的控制指令的顯示。手機(jī)端主界面如圖5所示。
圖5 手機(jī)端主界面
3.2.2.2 藍(lán)牙Socket通信的構(gòu)建
為實現(xiàn)手機(jī)APP 與設(shè)備GCAN-203 之間的藍(lán)牙Socket 通信,需在配置文件中添加相關(guān)權(quán)限,包括允許程序連接到已配對的藍(lán)牙設(shè)備、允許程序發(fā)現(xiàn)和配對藍(lán)牙設(shè)備、允許程序打開網(wǎng)絡(luò)套接字。手機(jī)端藍(lán)牙Socket通信的程序設(shè)計流程如圖6所示。
圖6 藍(lán)牙Socket程序設(shè)計流程
通過Socket 通信及藍(lán)牙Socket 的方式傳送的控制信息(報文),需遵循車輛的控制接口協(xié)議以及GCAN-203使用的CAN2.0B協(xié)議幀格式,才能保證傳輸?shù)膱笪谋桓鞴?jié)點正確接收。CAN2.0B 協(xié)議幀格式?jīng)Q定了一條CAN 幀包含13 個字節(jié),其中包括1 個字節(jié)的幀信息,4個字節(jié)的幀ID以及8個字節(jié)的幀數(shù)據(jù),幀信息指明了該幀的幀類型和數(shù)據(jù)長度。所使用的車輛的控制接口協(xié)議決定了本文中幀信息設(shè)為0X08,表示該幀為數(shù)據(jù)幀和標(biāo)準(zhǔn)幀,數(shù)據(jù)長度為8個字節(jié);幀ID為0X238表明該幀用于主動加速、減速以及轉(zhuǎn)向請求;波特率為500 Kb/s,同時使用Motorola 的編碼格式。車輛的控制接口協(xié)議如表2所示。
表2 車輛控制接口協(xié)議
為了保證傳輸?shù)狡嘋AN 總線上數(shù)據(jù)的準(zhǔn)確性,排除因數(shù)據(jù)幀錯誤導(dǎo)致相應(yīng)節(jié)點無法接收而造成的車輛遠(yuǎn)程控制失敗,需要在實車測試前進(jìn)行通信測試。具體方法是通過12 V 的蓄電池為設(shè)備G-CAN203 供電,使其與USB-CAN 適配器通過DB9 連接器相連,USBCAN適配器再通過USB接口與電腦連接。
USB-CAN 適配器可以作為一個標(biāo)準(zhǔn)的CAN 節(jié)點,帶有USB2.0 接口和2 路CAN 接口,其與電腦連接后可通過USB-CAN Tool 對接收到的數(shù)據(jù)進(jìn)行解析,判斷從電腦端發(fā)送的數(shù)據(jù)是否正確,測試軟件如圖7所示。
圖7 通信測試軟件
由圖7所示軟件,可獲取從電腦端控制界面發(fā)送的數(shù)據(jù),包括ID 號、幀類型、幀格式、長度,由此判斷通信鏈路可行性。
理論上,當(dāng)設(shè)備GCAN-203 與汽車的CAN 總線連接后,電腦端的控制界面就可以向汽車發(fā)送控制信息,本文將設(shè)備GCAN-203置于汽車后備箱,使用DB9連接器將其與汽車CAN總線的外接DB9連接器CAN1相連,從電腦端發(fā)送控制信息進(jìn)行驗證,如圖8所示。
圖8 車輛設(shè)備
電腦端控制界面點擊“上”鍵后,電腦端通過通信鏈路向汽車發(fā)送0x080000023844000000**000000 數(shù)據(jù)幀,其中**代表1 個字節(jié)的目標(biāo)驅(qū)動加速度;點擊“下”按鍵后,向汽車發(fā)送數(shù)據(jù)幀0x08000002384800000000##0000,其中##代表1 個字節(jié)的目標(biāo)制動減速度;點擊“左”“右”按鍵后,向汽車發(fā)送數(shù)據(jù)幀0x0800000238420000000000XXXX,其中XXXX代表2個字節(jié)的目標(biāo)轉(zhuǎn)向盤轉(zhuǎn)角,向左轉(zhuǎn)向數(shù)值范圍為0~32 767,向右轉(zhuǎn)向數(shù)值范圍為32 768~65 535。通過電腦端控制車輛的加速、制動、轉(zhuǎn)向動作,可實現(xiàn)對車輛的遠(yuǎn)程控制。
文獻(xiàn)[8]提出了合作速度協(xié)調(diào)(Cooperative Speed Harmonization,CSH)的方法,證明了2 條不同道路的車輛交替通過交叉口的可行性。為了做到這一點,CSH將同一道路車輛分組,使其像波浪一樣向交叉口移動,對于2 條交匯的道路,CSH 分別運用不同的波長,以集中控制的方法使車輛接近最近的虛擬波,不同道路上的波浪會在不同的時間輪流到達(dá)交叉口。但是這種方法只適用于到達(dá)交叉口后車輛同向行駛的情況,對于窄路對向行駛的車輛不完全適用。因此,本文只借鑒其方法,使車輛到達(dá)到窄路段前形成集群,車輛集群過程如圖9所示。
圖9 車輛集群過程示意
由圖9 可以看出,道路左側(cè)的車輛由虛線波引導(dǎo),道路右側(cè)的車輛由實線波引導(dǎo),車輛會通過對自身速度的調(diào)整使其向最接近的虛擬波靠攏,同一運行方向的車輛在道路上形成分組集群。如圖10 所示,以道路右側(cè)被實線波引導(dǎo)的車輛B為例,車輛運行速度由以下過程獲得:
圖10 車速取得過程示意
首先取得窄路段中心位置與車輛前波間的距離dw:
式中,lw為波長;dt為目前車輛與窄路中心的距離;vw為虛擬波向窄路端行進(jìn)的速度;t為系統(tǒng)時間。
為了使窄路兩側(cè)的車輛到達(dá)窄路的時間不同,窄路左側(cè)的車輛增加1/2波長。然后計算車輛與其前波的距離et:
最后,車輛的速度可以估算為:
式中,P、I、D、T為控制器參數(shù);vmin為車輛運行的最小速度;Δet為et的差值;最大運算符可使差值et過低時有合適的控制器輸出速度。
進(jìn)入窄路段前,車輛會根據(jù)上述速度控制方式形成集群,當(dāng)車輛將要進(jìn)入窄路段,中止該速度控制方式,改由以下方式對車輛進(jìn)行速度的控制:
車輛進(jìn)入窄路段時會提前得到對向集群的信息以及道路信息,如集群內(nèi)車輛運行速度、集群的規(guī)模、集群內(nèi)車輛的間隙、窄路段的長度。車輛依據(jù)當(dāng)前獲取的信息,合理規(guī)劃進(jìn)入窄路的行車速度,其過程見圖10。
圖11所示為窄路通行過程。窄路左側(cè)集群中的主車為V1,長度為LV1,其后的跟隨車輛為V2,V1 與V2 的距離為Lg1,窄路端的長度為LW,目標(biāo)車輛與窄路段的距離為Lr。由此可以得出:
圖11 窄路通行過程示意
式中,LC為集群的長度;n為窄路一側(cè)車輛的數(shù)量。
由此可得:
式中,v為集群運行的速度;LC+LW為集群通過窄路行駛的總長度。
進(jìn)而得到目標(biāo)車輛的建議速度vs:
窄路右側(cè)的目標(biāo)車以建議速度vs運行時,理論上可以在主車通過窄路后,不停車通過窄路段。
本文打通了車輛遠(yuǎn)程控制的通信鏈路,在可期的未來將系統(tǒng)完善后置于云端,可以遠(yuǎn)程控制區(qū)域內(nèi)車輛的聯(lián)合運動。本文針對窄路場景,云端收集該區(qū)域內(nèi)的道路環(huán)境信息后對車輛遠(yuǎn)程控制,理論上可以使行車更加高效。窄路場景如圖12所示。
圖12 窄路場景
為了驗證車輛在窄路處的通行效率,使用SUMO搭建窄路場景進(jìn)行仿真。利用NETEDIT對仿真所需路網(wǎng)文件(net.xml)、車流文件(rou.xml)以及附加文件進(jìn)行設(shè)計。其中路網(wǎng)文件中構(gòu)筑長度為60 m 的狹窄路段,車流文件設(shè)計車輛的數(shù)量、行駛路徑以及車輛本身的屬性,附加文件中設(shè)置瞬時感應(yīng)線圈以記錄車輛進(jìn)入和離開窄路的時間。本文共設(shè)計了3組對照仿真工況,分別使50輛、75輛、100輛汽車從窄路段通過,每組進(jìn)行2次仿真,其中一次使車輛在遠(yuǎn)程駕駛下通過窄路,另一次使車輛依據(jù)自身的駕駛模型自由通過窄路段用來模擬人工駕駛。
通過SUMO-GUI 運行搭建的仿真場景獲得車輛運行整體情況以及各探測器的取得的結(jié)果,對取得的數(shù)據(jù)進(jìn)行處理,得到了3組通過窄路段汽車的數(shù)量與時間的關(guān)系以及車輛整個運行過程的平均速度與時間的關(guān)系,分別如圖13和圖14所示。
圖13 汽車通過窄路段數(shù)量與時間的關(guān)系
圖14 汽車平均行駛速度與時間的關(guān)系
由圖13 可知,在人工駕駛的方式下,3 種不同數(shù)量的汽車全部通過窄路段所需時間均大于遠(yuǎn)程控制方式所需時間,同時可以看出,遠(yuǎn)程控制的方式汽車通行過程較為規(guī)律,因此在遠(yuǎn)程控制下汽車的通行效率更高。在遠(yuǎn)程控制下,出現(xiàn)75 輛汽車通過窄路所需時間大于100 輛汽車通過窄路所需時間的情況。這與仿真軟件SUMO中車輛出現(xiàn)的時間點相關(guān),由于車輛出現(xiàn)的時間點隨機(jī),若某一時段內(nèi)車輛出現(xiàn)較少,按照該機(jī)制對車輛速度進(jìn)行控制,形成的集群內(nèi)車輛的數(shù)量將相對較少,因此車輛全部出現(xiàn)時將形成更多的集群,使得交替通過窄路的次數(shù)增多,通過窄路所需的時間增加,這與現(xiàn)實中路口處車流密度實時變化情況相符。
由圖14可知,在人工駕駛的方式下,汽車在整個運行過程中速度的波動較大,出現(xiàn)過停車的狀況,其運行過程大致分為3 個階段,以圖14c 為例:在第0~210 s 時由于沒有集群同行的機(jī)制,存在一側(cè)車輛在窄路前等待的狀況;第210~302 s 時等待一側(cè)的車輛找準(zhǔn)時間間隙開始通過窄路;第302~373 s窄路處車輛開始通行順暢,車輛整體平均速度提升。而在遠(yuǎn)程控制下,車輛運行速度平穩(wěn),速度維持在約20 m/s。由于每次經(jīng)過窄路段的車輛數(shù)量隨機(jī),75 輛汽車一組在遠(yuǎn)程控制下由于通過窄路次數(shù)較多,導(dǎo)致其時間略長于100輛汽車在遠(yuǎn)程控制下通過窄路段所需時間。
綜合圖13 和圖14 可以得出,在遠(yuǎn)程控制的方式下車輛通過窄路段效率更高,因為所有車輛被集中控制,這允許車輛間有更小的距離,同時收集到的窄路范圍內(nèi)的道路環(huán)境信息使得車輛能夠以合適的速度通過路口而無需停車,避免了車輛在路口起停的時間損耗。
本文設(shè)計了一種基于Android 的車輛遠(yuǎn)程控制系統(tǒng),使用支持TCP協(xié)議的Socket 以及支持OBEX 協(xié)議的藍(lán)牙Socket 的通信方式實現(xiàn)了字節(jié)流的傳輸,利用GCAN-203將字節(jié)流信息傳輸?shù)狡嘋AN總線,實現(xiàn)了對車輛的遠(yuǎn)程操縱,通過SUMO 構(gòu)筑窄路場景,驗證了遠(yuǎn)程駕駛系統(tǒng)集成在云端可以大幅提高車輛通行效率。本文未完成云端系統(tǒng)的構(gòu)建,未來將通過路側(cè)設(shè)備、車載傳感以及通訊設(shè)備完成對道路環(huán)境信息的獲取,在云端進(jìn)行信息處理后,通過本文設(shè)計的車輛遠(yuǎn)程控制系統(tǒng)完成決策的執(zhí)行,實現(xiàn)從云端整體控制窄路處車輛的通行。