楊朝陽,曹坤澤,周奎,戈小中
(1.湖北汽車工業(yè)學(xué)院,湖北十堰 442002;2.東風悅享科技有限公司,湖北武漢 430056)
隨著5G技術(shù)的商業(yè)化落地以及車聯(lián)網(wǎng)相關(guān)體系的進一步完善[1],遠程駕駛技術(shù)進入汽車市場。5G 網(wǎng)絡(luò)通信由于其速率高、延時低、可靠性高[2-4]的特點,可以較好地滿足車聯(lián)網(wǎng)場景下高移動性的智能網(wǎng)聯(lián)汽車對低延時網(wǎng)絡(luò)性能的需求,為遠程駕駛提供技術(shù)保障。遠程駕駛應(yīng)用在環(huán)衛(wèi)領(lǐng)域,環(huán)衛(wèi)工作者只需在舒適的遠程駕駛艙內(nèi)操縱清掃車,解決高溫、大雨等惡劣天氣造成的困擾[5]。文中以智能清掃車為研究對象,設(shè)計了一套遠程駕駛系統(tǒng),并進行了實車驗證。
文中設(shè)計的遠程駕駛系統(tǒng)分為三大部分,即車端云控控制器、駕駛艙和調(diào)度臺,系統(tǒng)整體架構(gòu)見圖1。云控控制器負責車輛周圍環(huán)境的實時感知與視頻回傳,實現(xiàn)遠程駕駛艙對車輛的周圍監(jiān)測與管控;與調(diào)度臺與駕駛艙進行信息交互,接收來自駕駛艙的控車指令,并通過CAN 總線實現(xiàn)對車輛的控制。駕駛艙作為駕駛員的工作平臺,在遠程駕駛室布置有方向盤、擋位、油門、剎車等控車設(shè)備。被控清掃車將采集到的數(shù)據(jù)實時傳送到駕駛室,駕駛室配置高清顯示屏對車輛周圍環(huán)境以及車輛狀態(tài)進行監(jiān)控,輔助駕駛員進行決策。駕駛員將方向盤、擋位、制動踏板、加速踏板等決策信息傳回給車端,實現(xiàn)遠程控車。園區(qū)較大時,通常配備多臺清掃車進行清理工作,同時需要多個遠程駕駛艙。調(diào)度臺負責對不同清掃車與駕駛艙進行綁定,實現(xiàn)一對一工作,并實時監(jiān)控車輛與駕駛艙運行狀態(tài)。
圖1 系統(tǒng)整體架構(gòu)
車端、駕駛艙、調(diào)度臺需要協(xié)調(diào)工作,系統(tǒng)整體運行邏輯如下:1)調(diào)度臺作為服務(wù)器部署在某IP地址固定的主機上,車端控制器和駕駛艙分別向調(diào)度臺發(fā)送登錄請求。車端登錄信息包含車端控制器的IP地址、車輛編號,駕駛艙登錄請求包含駕駛艙的IP 地址以及駕駛艙編號。2)登錄成功后,調(diào)度臺的Web界面顯示處于在線狀態(tài)的車輛編號與駕駛艙編號,調(diào)度臺的安全員將車輛與對應(yīng)的駕駛艙進行綁定。3)綁定成功后,調(diào)度臺將獲取的車輛與駕駛艙的IP 地址相應(yīng)地發(fā)送給對方,車端與駕駛艙開始駕駛工作,車端與駕駛艙通過對方的IP地址完成數(shù)據(jù)交互,此時車輛與駕駛艙處于遠程駕駛狀態(tài)。4)車輛與駕駛艙實時向調(diào)度臺發(fā)送心跳信息,以確保二者處于工作狀態(tài),沒有掉線。調(diào)度臺1min 未收到車輛或駕駛艙的心跳信息,則判定為其中一方已經(jīng)掉線、自動解綁,未掉線的一方返回在線待綁定狀態(tài),掉線一方嘗試重新登錄。5)清掃任務(wù)結(jié)束后,駕駛艙向調(diào)度臺發(fā)送解綁請求,安全員將車輛與駕駛艙解綁,結(jié)束遠程駕駛工作。
云控控制器基于NXP 的i.MX8 QM 進行嵌入式Linux 系統(tǒng)搭建、驅(qū)動設(shè)計及應(yīng)用程序開發(fā),控制器整體軟件架構(gòu)見圖2。云控控制器應(yīng)用程序分為實時視頻模塊、遠程通信模塊和車端控車模塊。實時視頻模塊實現(xiàn)四路車載魚眼攝像頭的采集、硬編碼與RTP 實時推流。遠程通信模塊通過HTTPS 協(xié)議與調(diào)度臺進行登錄鑒權(quán),并向調(diào)度臺實時發(fā)送心跳數(shù)據(jù)??剀嚹K負責接收駕駛艙發(fā)送的遠程控車指令,通過CAN總線實現(xiàn)整車控制。
圖2 云控控制器軟件架構(gòu)
實時視頻模塊采用四路魚眼攝像頭采集清掃車前、后、左、右的視頻數(shù)據(jù)。攝像頭有效輸出像素為960(H)×720(V),幀率為30 f·s?1,視頻圖像輸出格式為NV12格式。
攝像頭視頻采集使用V4L2(Vedio for Linux 2)框架,V4L2框架是Linux內(nèi)核中關(guān)于視頻設(shè)備的子系統(tǒng)[6],為Linux下的視頻驅(qū)動提供了統(tǒng)一的接口,使應(yīng)用程序可使用統(tǒng)一的API 函數(shù)操作不同的視頻設(shè)備。V4L2編程通過系統(tǒng)調(diào)用函數(shù)ioctl實現(xiàn)用戶空間與攝像頭設(shè)備的數(shù)據(jù)交互。ioctl 函數(shù)具體的輸入輸出參數(shù)為int ioctl(int fd,int request,struct v4l2*argp)。第1個參數(shù)是打開攝像頭設(shè)備后返回的設(shè)備描述符;第2 個參數(shù)是寫入設(shè)備命令標識符;第3個參數(shù)是執(zhí)行命令標識符具體用到的結(jié)構(gòu)體。ioctl函數(shù)用到的主要命令標識符見表1。
表1 主要的命令標識符
1幀720p的NV12圖像大小約為1 MB,數(shù)據(jù)量較大,不適合實時流媒體傳輸,需要對視頻進行編碼。編碼分為軟編碼和硬編碼,軟編碼采用CPU進行編碼,CPU負載大,編碼性能低。i.MX8 QM帶有視頻處理單元(VPU),同時支持四路視頻硬編碼,硬編碼使用GPU 進行編碼,不占用CPU 資源。系統(tǒng)采用硬編碼,將原始YUV數(shù)據(jù)編碼成H264碼流,具有更高的編碼性能與效率。實時視頻流傳輸采用RTP(實時傳輸協(xié)議),RTP報文格式由報頭和有效載荷組成。報頭由12 個字節(jié)組成,報頭結(jié)構(gòu)見圖3。RTP有效載荷即H264碼流數(shù)據(jù),將視頻流封裝成數(shù)據(jù)包前,需要在RTP 報頭中設(shè)置序列號、時間戳、同步、有效載荷類型等相關(guān)控制信息。由于鏈路層的載荷數(shù)據(jù)有最大傳輸單元(MTU,maxi?mum transmission unit)大小限制[7],1個RTP包大小通常不大于1472 個字節(jié),否則需要手動將NAL 單元分片,再分別將數(shù)據(jù)片交鏈路層發(fā)送。接收端將數(shù)據(jù)片重組,重新獲得完整的1幀H264數(shù)據(jù)。
圖3 RTP報頭格式
車端控制器工作前要向調(diào)度臺登錄鑒權(quán),登錄成功后調(diào)度臺將車輛與駕駛艙綁定,開啟遠程駕駛模式,車端實時向調(diào)度臺發(fā)送心跳數(shù)據(jù),以確保車輛處于工作狀態(tài)。
為了保護公共網(wǎng)絡(luò)下數(shù)據(jù)交互的安全問題,車端與調(diào)度臺通信采用HTTPS協(xié)議。HTTPS是以安全為目的的HTTP 通道,通過在HTTP 下加入SSL層來實現(xiàn)HTTP的加密安全[8]。車端控制器作為客戶端,調(diào)度臺作為服務(wù)端,握手流程如圖4 所示。車端控制器以明文傳輸發(fā)起登錄請求信息;調(diào)度臺返回協(xié)商的信息結(jié)果后,車端驗證證書的合法性,將生成的隨機值使用公鑰對對稱密鑰加密,發(fā)送給調(diào)度臺;調(diào)度臺用私鑰解密,拿到對稱加密的密鑰并傳輸加密后的信息;車端用私鑰解密調(diào)度臺傳過來的信息,判斷是否登錄成功。車端登陸成功并開啟遠程駕駛模式后,車端每1 s 向調(diào)度臺發(fā)送1 次心跳,心跳內(nèi)容包括車輛編號、車輛剩余電量以及綁定的駕駛艙編號,以確保車輛在線。調(diào)度臺接收的車輛心跳信息如圖5所示。
圖4 HTTPS握手流程
圖5 車輛心跳信息
駕駛艙與車端云控控控制器通過TCP/IP 協(xié)議實現(xiàn)遠程控車數(shù)據(jù)的發(fā)送以及車輛狀態(tài)信息的回傳。云控控制器作為客戶端(TCP client),駕駛艙作為服務(wù)端(TCP server)。通過TCP/IP協(xié)議交換的數(shù)據(jù)定義格式如圖6 所示,數(shù)據(jù)由固定長度的Header、可變長度的Payload 及一個字節(jié)的Check?sum 組成,采用網(wǎng)絡(luò)字節(jié)序。幀頭即消息幀頭部,其值固定為0x5AA5。協(xié)議版本當前為初始版本,其值固定為0x01。對于駕駛艙的下行控車數(shù)據(jù),消息類型值為0xB1;對于車端返回的上行車輛狀態(tài)信息,消息類型值為0xA1。可變消息體即待傳的有效數(shù)據(jù)內(nèi)容,字節(jié)流格式。下行控車數(shù)據(jù)可變消息體主要數(shù)據(jù)內(nèi)容如表2所示,上行車輛狀態(tài)信息可變消息體主要數(shù)據(jù)內(nèi)容如表3 所示。其余控車數(shù)據(jù)與車輛狀態(tài)信息數(shù)據(jù)包括轉(zhuǎn)向燈、喇叭、清掃、噴水,采用布爾類型值定義,0值表示關(guān)閉,1值表示開啟。校驗碼即當前數(shù)據(jù)幀內(nèi)所有字節(jié)(不含校驗碼自身)逐次和0x00 異或,即第1 個字節(jié)和0x00 異或,得到的結(jié)果再和第2 個字節(jié)異或,然后得到的結(jié)果再和第3個字節(jié)異或,直到包頭和可變消息體內(nèi)的所有字節(jié)計算完畢。通信的另一端收到TCP 數(shù)據(jù)幀后,幀頭和可變消息體按照相同規(guī)則進行計算,若計算結(jié)果與數(shù)據(jù)幀中原有的校驗碼一致,說明數(shù)據(jù)包完整且正確;若不一致,說明數(shù)據(jù)包有誤,作丟棄處理。
圖6 TCP/IP數(shù)據(jù)幀格式
表2 控車指令主要的可變消息體內(nèi)容
表3 車輛狀態(tài)信息主要的可變消息體內(nèi)容
控車總體流程見圖7。駕駛艙的控車指令根據(jù)制定好的數(shù)據(jù)格式設(shè)置好幀頭、版本協(xié)議與消息類型,將有效的控車指令寫入可變消息體中,通過Linux 下的Socket TCP通信發(fā)送至車端控制器。清掃車通過CAN 總線進行車輛控制。Linux 將CAN設(shè)備作為網(wǎng)絡(luò)設(shè)備進行管理,提供Socket CAN 接口,使CAN總線通信近似于以太網(wǎng)通信,應(yīng)用程序開發(fā)接口更加通用和靈活??刂破髯x取遠程控車數(shù)據(jù)并寫入到SocketCAN 中的struct can_frame 結(jié)構(gòu)體中,調(diào)用write函數(shù)發(fā)送CAN報文,實現(xiàn)整車控制;調(diào)用read函數(shù)讀取車輛狀態(tài)信息并寫入可變消息體,通過Socket TCP通信回傳至駕駛艙。
圖7 控車流程圖
實車測試內(nèi)容包括三方遠程通信、實時視頻傳輸以及遠程控車功能。調(diào)度臺與駕駛艙連入園區(qū)內(nèi)的公網(wǎng),并申請專用端口接收實時視頻、車輛信息以及HTTPS心跳信息,控制器上布置5G SIM卡。
駕駛艙輸入登錄賬號密碼后向調(diào)度臺發(fā)送登錄請求。同時啟動車輛電源,車端控制器向調(diào)度臺發(fā)送登錄請求,等待調(diào)度臺綁定駕駛艙。調(diào)度員對在線車輛與對應(yīng)的駕駛艙進行綁定,進入遠程駕駛工作狀態(tài)。駕駛艙工作界面見圖8。遠程駕駛工作界面顯示四路攝像頭采集的實時車輛周圍環(huán)境、環(huán)視拼接后的畫面以及車輛實時信息(車速、方向盤轉(zhuǎn)角、電量以及行駛里程)。駕駛員通過車端回傳的信息進行決策,操縱方向盤、擋位、油門、剎車等控車設(shè)備實現(xiàn)車輛遠程控制,車輛實際行駛?cè)鐖D9所示。通過駕駛界面顯示的車輛信息,此時車輛處于轉(zhuǎn)彎行駛狀態(tài),行駛車速為4 km·s?1,方向盤轉(zhuǎn)角為35°,車輛剩余電量為44%,總的行駛里程為19 km。攝像頭視頻傳輸延時測試如圖10 所示。通過對比攝像頭拍攝與視頻接收端顯示的秒表時間,攝像頭傳輸延時低于200 ms,滿足實時性要求。
圖8 遠程駕駛工作界面
圖9 實車測試
圖10 攝像頭延時測試
為某清掃車設(shè)計了完整的遠程駕駛方案,詳細介紹了車端控制器軟件設(shè)計。在5G網(wǎng)絡(luò)有效覆蓋范圍內(nèi),實現(xiàn)了車輛周圍環(huán)境信息采集與回傳,并對遠程車輛進行操控,完成直線、轉(zhuǎn)彎、換擋和加減速等控車行為,且攝像頭傳輸延時滿足性能要求。