摘要:隨著自動(dòng)駕駛技術(shù)不斷發(fā)展與落地,無人駕駛車輛逐漸涌入廠區(qū)內(nèi)物流配送行業(yè)。本文以公司廠區(qū)內(nèi)低速無人配送車為載體,在無人駕駛控制器上,建立與無人駕駛控制系統(tǒng)的通訊鏈路,開發(fā)設(shè)計(jì)一款基于Ubuntu18.04+ROS 系統(tǒng)的可實(shí)時(shí)控制并顯示當(dāng)前無人物流車位置、電量等基本信息的HMI 應(yīng)用,同時(shí)具備錄制& 調(diào)整無人物流車的路線以及設(shè)置車輛參數(shù)等功能,便于無人車運(yùn)維人員對(duì)當(dāng)前車輛運(yùn)行狀態(tài)查看以及對(duì)車輛進(jìn)行調(diào)試。
關(guān)鍵詞:無人車控制系統(tǒng);無人物流配;應(yīng)用開發(fā)
中圖分類號(hào):U270.2 文獻(xiàn)標(biāo)識(shí)碼:A
0 引言
具備自主感知定位的低速智能移動(dòng)機(jī)器人逐步替代人工進(jìn)行生產(chǎn)物料的配送工作,為企業(yè)降低人工配送成本[1]。在無人駕駛車輛配送過程中,配送物料的取放過程都需要對(duì)車輛進(jìn)行操控,一個(gè)可以和無人車控制器底層交互的車載HMI(HumanMachine Interface,人機(jī)界面)就顯得十分重要,可在無人物流車的無人駕駛控制系統(tǒng)的基礎(chǔ)上增設(shè)一個(gè)觸摸屏,開發(fā)一款面向客戶的HMI 應(yīng)用,將系統(tǒng)內(nèi)部數(shù)據(jù)信息從系統(tǒng)形式向人們習(xí)慣查看的形式轉(zhuǎn)換,這樣操作人員就可通過屏幕對(duì)車輛的實(shí)時(shí)狀態(tài)進(jìn)行查看及控制車輛啟停等。
1 HMI 開發(fā)背景簡(jiǎn)介
自2019 年起,公司無人駕駛物流方案落地,并在2020 年后擴(kuò)大規(guī)模,批量覆蓋到各個(gè)生產(chǎn)基地。在這樣的形勢(shì)下,新場(chǎng)景開發(fā)與批量化部署尤為重要,按開發(fā)階段的部署方案,線路采集和部署都需要以Linux 命令的方式進(jìn)行,采集的線路有缺陷時(shí)需要對(duì)線路重新采集,采集的工作量非常大。
同時(shí),在調(diào)試過程中需要查看車輛狀態(tài)也需要通過命令行的方式進(jìn)行查看,查看的方式以及結(jié)果顯示更偏向算法開發(fā)人員,并不能直觀地展示給客戶。
2 開發(fā)需求分析
由于駕控系統(tǒng)的操作難度過高,團(tuán)隊(duì)對(duì)現(xiàn)場(chǎng)需求進(jìn)行深入調(diào)研,對(duì)于HMI 需要的功能進(jìn)行歸類匯總,主要包括以下幾方面。
(1)車輛基礎(chǔ)功能控制組件實(shí)現(xiàn),包括對(duì)車輛車窗、雨刮、遠(yuǎn)近光燈等基礎(chǔ)控制,車輛電量信息顯示等。
(2)無人物流車運(yùn)行過程控制按鈕,包括對(duì)正在自動(dòng)運(yùn)行的車輛進(jìn)行暫?;蛘呋謴?fù)行駛,下發(fā)目標(biāo)站點(diǎn)或者切換站點(diǎn),切換手自動(dòng)等操作。
(3)無人物流車算法模塊信息顯示,包括對(duì)各個(gè)算法模塊的運(yùn)行狀態(tài)進(jìn)行顯示,以及報(bào)錯(cuò)提示等。
(4)車輛路線軌跡網(wǎng)格及車輛位置顯示,可以顯示當(dāng)前正在運(yùn)行的路線,以及車輛位于路線上的位置。
(5)線路編輯功能,包括新線路的錄制,錄制好的線路微調(diào),設(shè)置線路點(diǎn)的屬性等。
(6)參數(shù)設(shè)置,包括對(duì)線路上各個(gè)場(chǎng)景及速度等參數(shù)的設(shè)置。
(7)拓展功能,包括對(duì)當(dāng)前車輛的OTA 功能開發(fā)、軟件版本和路線版本維護(hù)等。
3 軟硬件架構(gòu)
本文以公司無人物流車搭載的無人駕駛系統(tǒng)為載體,在無人駕駛控制器上通過HDMI 線外接一塊屏幕,即可對(duì)控制器進(jìn)行操作及軟件開發(fā)調(diào)試。公司無人物流配送車輛的硬件架構(gòu)如圖1所示,基礎(chǔ)車輛通過CAN 總線與無人車控制器進(jìn)行交互,包括車輛本體的運(yùn)行速度、轉(zhuǎn)向角度等的數(shù)據(jù)獲取,以及控制器下發(fā)控車指令給到車輛執(zhí)行;無人車的感知定位傳感器通過網(wǎng)線或者CAN 總線等形式,將感知定位參數(shù)返回到無人車控制器;通過HDMI 線將控制器與屏幕連接,顯示控制器的UI 界面,這個(gè)架構(gòu)的核心是控制器,本文采用的是米文Apex Xavier Ⅱ ( 或米文Apex Xavier Ⅱ +) 作為控制核心,各個(gè)算法模塊的開發(fā)主要基于ROS(Robot Operating System, 機(jī)器人操作系統(tǒng)) 系統(tǒng)。
無人駕駛控制系統(tǒng)軟件采用具備高效通訊架構(gòu)的ROS 系統(tǒng)進(jìn)行開發(fā),分別有與車輛底層交互的驅(qū)動(dòng)模塊、感知定位模塊、規(guī)劃控制模塊以及HMI 模塊,各個(gè)模塊通過定時(shí)發(fā)布或者解析話題進(jìn)行交互。本文設(shè)計(jì)的HMI 應(yīng)用,采用前后端分離設(shè)計(jì),車輛運(yùn)行數(shù)據(jù)源于無人車控制系統(tǒng)的各個(gè)算法模塊發(fā)布的ROS 話題[2],通過前后端接口模塊對(duì)所需的各個(gè)話題解析,并定時(shí)回傳到前端UI 顯示。
同樣的,當(dāng)通過UI 控件操控車輛時(shí),控件的事件被觸發(fā),通過回調(diào)函數(shù)自動(dòng)把指定命令轉(zhuǎn)發(fā)到前后端接口模塊,接口模塊通過命令屬性,將控件事件按既定交互協(xié)議轉(zhuǎn)換成ROS 的話題發(fā)布到系統(tǒng)[3],供底層驅(qū)動(dòng)模塊訂閱解析,并轉(zhuǎn)發(fā)到車輛CAN 總線,控制車輛執(zhí)行對(duì)應(yīng)命令。
HMI 應(yīng)用框架如圖2 所示,前端主要是UI 布局設(shè)計(jì),自定義控件設(shè)計(jì)、控件事件處理、數(shù)據(jù)顯示等,前端的UI 設(shè)計(jì)是基于ImGUI 開源庫進(jìn)行開發(fā),該庫是一個(gè)用于C++ 的用戶界面庫,跨平臺(tái)、無依賴,支持OpenGL、DirectX 等多種渲染API ;后端主要是建立無人車控制器和UI 前端交互鏈路,獲取數(shù)據(jù)并回傳前端顯示,或者接收前端命令下發(fā)到無人車控制器,后端開發(fā)主要是通過新建一個(gè)ROS 功能包,建立一個(gè)專門解析所需數(shù)據(jù)話題的節(jié)點(diǎn),解析到指定話題后封裝成前端所需的數(shù)據(jù)類型并回傳到前端顯示。
4 HMI 功能模塊設(shè)計(jì)& 布局
4.1 主頁面設(shè)計(jì)
本文 HMI主頁面布局設(shè)計(jì)主要分為 5 個(gè)小模塊(圖 3)。
(1)模塊一顯示車輛電量以及車輛車窗、燈光等開關(guān),同時(shí)也是設(shè)計(jì)頁面的入口,主要用到的是自定義的按鈕控件ButtonWidget、自定義的圖文控件ImageWidget 和自定義彈窗控件PopupWidget,在彈窗界面中,設(shè)計(jì)了車輛的車窗和燈光的控制按鍵。
(2)模塊二顯示車輛運(yùn)行時(shí)的實(shí)時(shí)信息,有行駛速度、轉(zhuǎn)向角度、路程信息等, 主要使用的是ImGUI 自帶的文本控件Text。
(3)模塊三是部分控制車輛狀態(tài)的按鈕,以及下拉選擇目標(biāo)站點(diǎn),給車輛下發(fā)啟動(dòng)或暫停命令的按鈕,使用的都是自定義控件,有下拉控件ListBox,多功能按鈕控件MutilFuncButton 等。
(4)模塊四顯示的是車輛當(dāng)前行駛的路線,以及車輛在路線上的位置,該線路顯示模塊是自定義的點(diǎn)、線、圖標(biāo)顯示編輯模塊Grid,是基于Imgui 庫自帶的CANVAS 進(jìn)行重構(gòu)的,處理顯示路線和位置信息,還支持縮放、選擇對(duì)象的功能。
(5)模塊五顯示的是無人駕駛控制系統(tǒng)的各個(gè)算法模塊的狀態(tài),主要使用的是自定義的圖文顯示控件ImageWidget。當(dāng)算法模塊正常運(yùn)行時(shí),顯示綠色打勾,當(dāng)算法模塊異常時(shí),顯示紅色打叉,并支持查看異常的具體原因。
4.2 設(shè)置頁面設(shè)計(jì)
設(shè)置頁面(圖4)是所有子頁面的入口,車輛設(shè)置或者路線編排之類頁面都是排布的設(shè)置頁面內(nèi)部。子頁面主要包括有標(biāo)定、參數(shù)設(shè)置、路線編排、系統(tǒng)設(shè)置、系統(tǒng)版本等頁面, 該模塊使用的控件是自定義的列表控件ListBox,左側(cè)顯示主要項(xiàng)目,右側(cè)顯示對(duì)應(yīng)的子項(xiàng)目列表,通過選擇右側(cè)子列表,可跳轉(zhuǎn)到具體的子頁面內(nèi)部進(jìn)行相應(yīng)操作或者返回主頁面。
4.3 路線編輯模塊設(shè)計(jì)
無人車行駛過程是依據(jù)既有的高精度地圖和路線進(jìn)行循跡行走的,所以在正式部署到生產(chǎn)線上前,需進(jìn)行高精地圖和路線制作[1]。利用HMI 制作路線,只需啟動(dòng)HMI 路線錄制功能和車輛定位模塊,按既定線路人工駕駛車輛行駛一遍路線,將跑經(jīng)的線路經(jīng)度緯度高度以及車輛的轉(zhuǎn)向角度等屬性,記錄到Json 格式的路線文件內(nèi),即可完成線路的初版錄制工作。
新路線錄制好之后,并非完全沒有問題,針對(duì)有缺陷的局部路段,可通過路線編輯頁面(圖5)對(duì)線路位置進(jìn)行重新編排,使得車輛通過該路段更加合理,同樣的,對(duì)于缺陷太多的路段,只需將該路段刪除再重新錄制即可,無需全部路線都要重新錄制,這樣可以極大提高布線工作的效率。
4.4 調(diào)試頁面設(shè)計(jì)
在無人車功能開發(fā)階段,除了要制作點(diǎn)云地圖和路線外,還需對(duì)車輛的基礎(chǔ)功能進(jìn)行反復(fù)實(shí)驗(yàn),以及交付使用前的對(duì)車輛進(jìn)行壓力測(cè)試。針對(duì)調(diào)試階段,團(tuán)隊(duì)開發(fā)一個(gè)調(diào)試頁面(圖6),主要包括車輛各個(gè)算法模塊的狀態(tài)和故障信息顯示、車輛本體VCU\EPS 等模塊的狀態(tài)信息、給車輛下發(fā)下一站的功能按鍵、自動(dòng)托掛鉤的操作等。
4.5 OTA 頁面設(shè)計(jì)
在無人車批量復(fù)制和部署過程中,為了減輕大量重復(fù)工作,團(tuán)隊(duì)還考慮增加OTA 功能,設(shè)計(jì)了地圖和路線以及各個(gè)算法的OTA 頁面。主要功能是在車輛與云管理平臺(tái)建立連接后,可通過點(diǎn)擊升級(jí)按鈕,從云端獲取指定最新版本的文件并下載保存到指定路徑。
5 結(jié)束語
本次開發(fā)HMI 應(yīng)用主要是基于客戶使用需求及調(diào)試和部署過程高效性考慮。HMI 的開發(fā)主要是基于ROS 系統(tǒng)和C/C++ 語言進(jìn)行的,應(yīng)用的啟動(dòng)使用的是bash 腳本編寫,渲染主要利用到ImGUI 開源庫[4]。部分控件是團(tuán)隊(duì)根據(jù)實(shí)際需求進(jìn)行個(gè)性化設(shè)計(jì)的,控件布局使用的是XML 文件[5]。整個(gè)應(yīng)用的開發(fā)經(jīng)過了多個(gè)版本迭代,目前已滿足現(xiàn)場(chǎng)實(shí)際使用。
【參考文獻(xiàn)】
[1] 呂冀權(quán). 基于ROS 技術(shù)的無人物流配送車[J]. 中文科技期刊數(shù)據(jù)庫( 全文版) 工程技術(shù),2023(12):9-12.
[2] 劉伏志, 朱有鵬著.ROS 機(jī)器人編程零基礎(chǔ)入門與實(shí)踐[M]. 北京:機(jī)械工業(yè)出版社,2023.
[3] 曾俊皓. 基于ROS 的移動(dòng)機(jī)器人系統(tǒng)平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)[D]. 廣州: 華南理工大學(xué),2018.
[4] 格雷厄姆· 塞勒斯, 小理查德· 賴特, 尼古拉斯· 海梅爾著.OpenGL 超級(jí)寶典[M]. 第7 版. 顏松柏, 薛陶, 張林蘋, 譯. 北京: 人民郵電出版社,2020.
[5] 楊柳青, 孫運(yùn)強(qiáng), 姚愛琴.TinyXml 在Linux 平臺(tái)中的應(yīng)用研究[J]. 機(jī)械工程與自動(dòng)化,2009(05):41-43.
作者簡(jiǎn)介:
黃政華,本科,工程師,研究方向?yàn)橹悄荞{駛、無人物流。
羅程,本科,工程師,研究方向?yàn)橹悄荞{駛、機(jī)器視覺。