方艷紅,莊永智,王學(xué)淵,張紅英
(西南科技大學(xué) 信息工程學(xué)院 特殊環(huán)境機(jī)器人技術(shù)四川省重點(diǎn)實(shí)驗(yàn)室,四川 綿陽 621010)
增強(qiáng)現(xiàn)實(shí)(AR)技術(shù)又被稱為擴(kuò)增現(xiàn)實(shí)技術(shù),是一種實(shí)時計(jì)算攝影機(jī)影像的位置及角度并加上相應(yīng)圖像的技術(shù),已經(jīng)在游戲、電視媒體、商業(yè)推廣、導(dǎo)航、遠(yuǎn)程協(xié)作等方面有了廣泛應(yīng)用[1-4]。基于AR技術(shù)的汽車駕駛仿真實(shí)驗(yàn)系統(tǒng)能夠讓用戶在虛擬與現(xiàn)實(shí)融合的AR場景中控制汽車前進(jìn)、后退、轉(zhuǎn)向等,同時向用戶實(shí)時發(fā)送汽車行駛參數(shù)并進(jìn)行安全預(yù)警。從實(shí)用角度來說,通過修改汽車模型的各項(xiàng)參數(shù),可實(shí)現(xiàn)對真實(shí)汽車的模擬仿真,讓用戶足不出戶就能體會到某車型的行駛狀況。
基于AR的汽車駕駛仿真實(shí)驗(yàn)系統(tǒng)以Unity3D引擎為開發(fā)平臺[5-6],利用移動設(shè)備攝像頭獲取現(xiàn)實(shí)環(huán)境,采用Vuforia工具[7-8]掃描二維圖像,并將虛擬場景與現(xiàn)實(shí)環(huán)境疊加融合,實(shí)現(xiàn)AR場景呈現(xiàn)和AR交互操作;運(yùn)用C#語言編程實(shí)現(xiàn)汽車控制、行駛參數(shù)反饋、場景切換、環(huán)境隱藏等功能,通過錄入真實(shí)的汽車參數(shù),進(jìn)行汽車駕駛模擬。汽車駕駛仿真實(shí)驗(yàn)系統(tǒng)結(jié)構(gòu)框圖如圖1所示,包括UI交互模塊、AR模塊、汽車控制模塊、行駛參數(shù)反饋模塊。
圖1 汽車駕駛仿真實(shí)驗(yàn)系統(tǒng)結(jié)構(gòu)圖
圖 1所示的系統(tǒng)結(jié)構(gòu)框圖中,用戶通過 UI交互模塊來控制游戲的運(yùn)行,讀取汽車行駛過程中的參數(shù),進(jìn)行場景切換和環(huán)境隱藏;AR模塊包括AR場景呈現(xiàn)以及特定模式的AR交互操作;汽車控制模塊控制汽車的前進(jìn)、后退、轉(zhuǎn)向;行駛參數(shù)反饋模塊讀取汽車的狀態(tài),經(jīng)過計(jì)算后得出反饋參數(shù),并由 UI交互模塊呈現(xiàn)給用戶。
AR模塊實(shí)現(xiàn)包含兩個部分:AR場景呈現(xiàn)和AR交互操作。AR場景呈現(xiàn)利用 Vuforia工具中的 AR Camera(AR攝像頭)取代 Unity3D引擎中的 Main Camera(主攝像頭),使用 ImageTarget作為 AR Camera的識別對象,即特定的識別圖。虛擬模型、ImageTarget與AR Camera的層次關(guān)系如圖2所示。
圖2 虛擬模型、ImageTarget與AR Camera層次關(guān)系
由圖2可見,所有虛擬模型RaceTrack、Scene、Car1均為ImageTarget的子對象。AR模塊調(diào)用設(shè)備的攝像頭來獲取現(xiàn)實(shí)環(huán)境,令虛擬模型成為AR Camera的子對象后,虛擬模型就能疊加在攝像頭所拍攝的畫面中。當(dāng)識別圖被移動時,系統(tǒng)實(shí)時計(jì)算識別圖的坐標(biāo)位置,并更新虛擬模型的坐標(biāo),使虛擬模型跟隨識別圖移動。
AR交互操作的流程圖如圖3所示。圖3中,系統(tǒng)進(jìn)入車輛展示模式后,掃描識別圖并加載AR場景,循環(huán)判斷識別圖上的特定區(qū)域是否被遮擋,若被遮擋,則認(rèn)為虛擬按鍵被按下,顯示車輛詳細(xì)信息,如車型、油耗、尺寸、發(fā)動機(jī)型號等;若被再次遮擋,則隱藏車輛詳細(xì)信息。
汽車控制模塊主要包括汽車行駛控制和鏡頭追蹤兩個部分,實(shí)現(xiàn)流程如圖4所示。
圖3 AR交互操作流程圖
圖4 汽車控制流程圖
圖4 中,在移動設(shè)備上,用戶通過操縱屏幕上的虛擬搖桿來控制汽車行駛,并根據(jù)虛擬汽車模型的位置和角度信息,實(shí)時更新鏡頭相對于虛擬汽車模型的位置和角度,實(shí)現(xiàn)鏡頭對汽車模型的追蹤。
行駛參數(shù)反饋模塊包括實(shí)時速度監(jiān)測、汽車行駛時間記錄、偏離車道示警、碰撞損壞提示、實(shí)時油耗計(jì)算等功能,向用戶顯示和預(yù)警汽車的行駛狀態(tài)。其中,汽車實(shí)時速度監(jiān)測主要利用 Unity3D中 Velocity函數(shù)實(shí)時獲取汽車剛體的速度,并將該速度乘以比例系數(shù),即為汽車的實(shí)時速度。若實(shí)時速度超過最小閾值,則在UI界面實(shí)時顯示,否則顯示為0,以避免由于汽車模型輕微抖動引起的速度誤差。
汽車行駛時間記錄主要通過調(diào)用 Unity3D中InvokeRepeating函數(shù)完成。InvokeRepeating函數(shù)是一個延時循環(huán)執(zhí)行函數(shù),每隔指定時間執(zhí)行一次。本文中的計(jì)時單位是 0.01 s。汽車觸碰到起點(diǎn)線的觸發(fā)器時InvokeRepeating開始計(jì)時,行駛結(jié)束時停止計(jì)時。
偏離車道示警有3種模式:(1)當(dāng)汽車模型觸碰到車道邊緣的觸發(fā)器時,UI界面會顯示示警文字,提示用戶偏離車道;(2)當(dāng)汽車模型離開車道邊緣的觸發(fā)器,但又觸碰到車道以外場景的觸發(fā)器時,示警文字將持續(xù)顯示;(3)當(dāng)汽車模型離開車道邊緣的觸發(fā)器,且并未觸碰到車道以外場景的觸發(fā)器時,UI界面不再顯示示警文字。
碰撞損壞提示主要利用 Unity3D提供的 Collider(碰撞器)實(shí)時監(jiān)測汽車與場景物體的碰撞情況,通過C#腳本對碰撞次數(shù)進(jìn)行統(tǒng)計(jì),若碰撞發(fā)生,將碰撞次數(shù)+1;若達(dá)到示警閾值,則提示用戶汽車即將損壞;若達(dá)到損壞閾值,則提示用戶汽車已損壞。
實(shí)時油耗計(jì)算需要實(shí)時獲取汽車當(dāng)前速度,并根據(jù)微積分的思想對油耗進(jìn)行統(tǒng)計(jì),算法流程如圖5所示。
圖5 實(shí)時油耗計(jì)算流程
由圖5可見,游戲開始時,實(shí)時油耗值置零;系統(tǒng)每隔0.02 s采集一次汽車速度,用當(dāng)前時刻的汽車速度乘以0.02 s作為汽車的位移距離;再使用這個位移距離乘以車輛每m的油耗,則可近似算出0.02 s內(nèi)汽車的油耗;將每個0.02 s的汽車油耗相加,可得出汽車的實(shí)時油耗。
UI交互模塊主要有游戲模式切換、環(huán)境隱藏、提示信息顯示等功能。進(jìn)入系統(tǒng),用戶可以通過按鍵選擇游戲模式,包括AR游戲模式、AR車輛模型展示模式、普通游戲模式等。每一個游戲模式都對應(yīng)一個游戲場景,另外還有一個AR鏡頭追蹤模式場景。場景切換主要利用Unity3D提供的按鍵響應(yīng)和場景切換腳本來實(shí)現(xiàn)。加載全景場景主要代碼如下:
SceneManager.LoadScene(“ARCar-arfullview”);
在仿真實(shí)驗(yàn)中,虛擬場景有時會在屏幕上遮擋住攝像頭獲取的現(xiàn)實(shí)環(huán)境。為了便于用戶通過屏幕觀看真實(shí)場景,本設(shè)計(jì)添加一個通過按鍵來實(shí)現(xiàn)的虛擬環(huán)境隱藏功能,啟用該功能后便會隱藏虛擬場景中的環(huán)境,只留下車道和車輛模型。
提示信息使用 Unity3D提供的Text類和3DText類進(jìn)行顯示,包括汽車速度、行駛時間、偏離車道示警、碰撞損壞示警、實(shí)時油耗等信息。
在Unity3D引擎下開發(fā)完成系統(tǒng)各功能模塊后,將其打包發(fā)布在Android平臺,進(jìn)行系統(tǒng)測試。
本系統(tǒng)中設(shè)計(jì)了AR全景、車輛展示、AR鏡頭追蹤3種實(shí)驗(yàn)?zāi)J?,在?shí)驗(yàn)過程中均需要呈現(xiàn)AR場景。圖6是3種實(shí)驗(yàn)?zāi)J较碌腁R場景呈現(xiàn)。圖6所示的3種實(shí)驗(yàn)場景模式可以相互切換,滿足UI交互功能。
AR交互操作主要添加在車輛展示模式中。圖 7所示是手碰觸識別圖的AR場景顯示。圖7(a)為手碰觸識別圖后的響應(yīng)操作,AR場景中顯示汽車詳細(xì)信息;圖7(b)為手再次碰觸識別圖后的響應(yīng)操作,汽車詳細(xì)信息被隱藏起來。
由圖 7可以看出,AR交互操作功能運(yùn)行正常,可以正確識別用戶的操作,并在虛擬模型上作出響應(yīng)。
汽車控制模塊主要實(shí)現(xiàn)汽車的移動、轉(zhuǎn)向功能。圖8所示是系統(tǒng)分別在AR全景模式、AR鏡頭跟隨模式下通過虛擬搖桿對汽車的行駛控制??梢钥闯?,汽車可以在兩種模式下正常運(yùn)行,并實(shí)現(xiàn)移動、轉(zhuǎn)向功能。
圖6 不同模式下的AR場景呈現(xiàn)
圖8 汽車控制模塊測試
汽車行駛參數(shù)測試包括實(shí)時速度監(jiān)測、計(jì)時、實(shí)時油耗計(jì)算以及偏離車道示警等。圖 9所示是在 AR鏡頭跟隨模式下對上述參數(shù)的測試分析??梢钥闯觯囆旭傔^程中的速度監(jiān)測、計(jì)時、實(shí)時油耗計(jì)算以及偏離車道示警可以實(shí)時顯示。
圖9 汽車行駛參數(shù)反饋模塊測試
UI交互模塊除了上述測試模塊中用到的信息提示功能外,還包括場景切換、環(huán)境隱藏功能。圖 10所示為以AR全景模式為例的環(huán)境隱藏前后對比圖??梢钥闯?,在AR全景模式中,點(diǎn)擊了“隱藏環(huán)境”按鍵后,虛擬場景中車道周圍的草地、圍墻均被隱藏,僅有車道、護(hù)欄模型被加載。
圖10 AR全景模式下環(huán)境隱藏前后對比圖
本文研究的基于AR的汽車駕駛虛擬仿真實(shí)驗(yàn)系統(tǒng)是一個集AR場景呈現(xiàn)與交互操作、汽車控制與行駛參數(shù)反饋等功能于一體的實(shí)驗(yàn)系統(tǒng)。該系統(tǒng)能讓用戶足不出戶就可以近距離觀察汽車的外形、內(nèi)飾,體驗(yàn)汽車行駛狀態(tài),從而大大降低體驗(yàn)成本。