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