鄭菲菲++宋麗紅++董靜
摘要:采用基于GPS和傳感器的增強(qiáng)現(xiàn)實(shí)技術(shù)以及高德地圖接口,設(shè)計(jì)和開(kāi)發(fā)了導(dǎo)航系統(tǒng)。利用增強(qiáng)現(xiàn)實(shí)技術(shù)將路線指引和路況合成渲染,并利用手機(jī)傳感器使指引箭頭根據(jù)手機(jī)姿態(tài)的變化而旋轉(zhuǎn),實(shí)時(shí)指向正確的前進(jìn)方向,給予用戶更加直觀的導(dǎo)航體驗(yàn)。
關(guān)鍵詞:增強(qiáng)現(xiàn)實(shí)技術(shù);方向傳感器;Android系統(tǒng)
DOIDOI:10.11907/rjdk.161565
中圖分類號(hào):TP319
文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào)文章編號(hào):16727800(2016)009005703
基金項(xiàng)目基金項(xiàng)目:2015年地方高校國(guó)家級(jí)大學(xué)生創(chuàng)新創(chuàng)業(yè)訓(xùn)練計(jì)劃項(xiàng)目(201510070010)
作者簡(jiǎn)介作者簡(jiǎn)介:宋麗紅(1975-),女,天津人,博士,天津財(cái)經(jīng)大學(xué)理工學(xué)院副教授,研究方向?yàn)檐浖こ?、智能信息系統(tǒng);董靜(1975-),女,天津人,博士,天津財(cái)經(jīng)大學(xué)理工學(xué)院講師,研究方向?yàn)檐浖こ獭?/p>
0引言
增強(qiáng)現(xiàn)實(shí)(Augmented Reality,簡(jiǎn)稱AR)是一種將虛擬物體和真實(shí)環(huán)境“無(wú)縫”疊加在一起的技術(shù),將在現(xiàn)實(shí)世界一定時(shí)間空間范圍內(nèi)很難體驗(yàn)到的實(shí)體信息,如視覺(jué)信息、聲音、味道、觸覺(jué)等,通過(guò)電腦等技術(shù)模擬仿真后再疊加,將虛擬的信息應(yīng)用到真實(shí)世界,被人類感官所感知,從而獲得超越現(xiàn)實(shí)的感官體驗(yàn)[1]。相比于虛擬現(xiàn)實(shí)技術(shù)(Virtual Reality,簡(jiǎn)稱VR),增強(qiáng)現(xiàn)實(shí)技術(shù)增強(qiáng)了人對(duì)真實(shí)環(huán)境的感知與交互,它具有以下3個(gè)特征:①虛實(shí)結(jié)合:將虛擬物體和現(xiàn)實(shí)世界結(jié)合在一起,實(shí)現(xiàn)感官上的統(tǒng)一;②三維注冊(cè):增強(qiáng)現(xiàn)實(shí)技術(shù)與混合媒體(Mixed Media)的區(qū)分點(diǎn),虛擬物體必須準(zhǔn)確地注冊(cè)到真實(shí)世界中,與真實(shí)世界完美融合,要求虛擬物體的注冊(cè)位置是三維的[2];③實(shí)時(shí)交互:實(shí)時(shí)感知用戶操作并互動(dòng)。
增強(qiáng)現(xiàn)實(shí)技術(shù)由于具有對(duì)真實(shí)環(huán)境進(jìn)行增強(qiáng)顯示輸出的特性,在醫(yī)療研究、精密儀器維修、古跡復(fù)原、娛樂(lè)與藝術(shù)等領(lǐng)域具有明顯的優(yōu)勢(shì)[3]。
目前大多數(shù)智能手機(jī)的導(dǎo)航軟件都以2D或3D形式提供導(dǎo)航服務(wù),但這些都是通過(guò)矢量數(shù)據(jù)來(lái)提供地圖導(dǎo)航,滿足不了用戶獲取實(shí)時(shí)交通路況的需求,用戶體驗(yàn)較差。本文提出一種通過(guò)手機(jī)攝像頭獲取實(shí)時(shí)路況,通過(guò)高德地圖接口獲取導(dǎo)航信息,并利用增強(qiáng)現(xiàn)實(shí)技術(shù)將路線指引和路況合成渲染,以提供更加直觀的導(dǎo)航系統(tǒng)。
1關(guān)鍵技術(shù)
1.1增強(qiáng)現(xiàn)實(shí)技術(shù)
增強(qiáng)現(xiàn)實(shí)技術(shù)在智能手機(jī)客戶端有兩種實(shí)現(xiàn)方式:
(1)基于視覺(jué)的增強(qiáng)現(xiàn)實(shí)技術(shù)。它的識(shí)別方式分為基于標(biāo)志(Marker Based)和非基于標(biāo)志(Markerless)兩種。其中,基于標(biāo)志的識(shí)別又分為固定模板類和自定義模板類。
基于標(biāo)志的主要代表是ARToolKit,其為采用C/C++ 語(yǔ)言編寫(xiě)的庫(kù)。主要原理是預(yù)先將標(biāo)志(Marker)圖像信息保存,通過(guò)圖像識(shí)別技術(shù)將當(dāng)前圖像中的標(biāo)志圖像識(shí)別出來(lái),然后在標(biāo)識(shí)圖像上疊加信息[4]。效果如圖1和圖2所示。
圖1標(biāo)志圖像圖2疊加的立方體
目前,增強(qiáng)現(xiàn)實(shí)瀏覽器魔眼(Junaio)和Trading Card游戲等都采用了這種技術(shù)。但這種模板匹配方式的誤識(shí)別率較高,一旦標(biāo)志被遮擋將導(dǎo)致跟蹤失敗,所以不適合運(yùn)用于戶外導(dǎo)航。
非基于標(biāo)志的主要代表是PTAM(Parallel Tracking and Mapping),其主要原理是從攝影圖像上捕捉特征點(diǎn),檢測(cè)出平面,在上面建立虛擬的3D坐標(biāo),然后合成攝影圖像和動(dòng)畫(huà)。其特點(diǎn)在于立體平面的檢測(cè)和圖像的合成采用并行處理方式[5]。
(2)基于智能手機(jī)上的GPS和傳感器的增強(qiáng)現(xiàn)實(shí)技術(shù)。通過(guò)GPS獲取當(dāng)前位置的經(jīng)緯度和高度,通過(guò)方向傳感(Orientation Sensor)獲取面向的方向和傾斜的角度,然后根據(jù)這些位置信息疊加相關(guān)信息[4]。目前荷蘭SPRXmobile公司研發(fā)設(shè)計(jì)的增強(qiáng)現(xiàn)實(shí)手機(jī)瀏覽器Layar、Wikitude公司開(kāi)發(fā)的Wikitude drive與Wikitude World Browser等都基于這種技術(shù)。
本文采用基于智能手機(jī)的GPS和傳感器的增強(qiáng)現(xiàn)實(shí)技術(shù)來(lái)實(shí)現(xiàn)戶外導(dǎo)航系統(tǒng)功能。
1.2Android手機(jī)傳感器原理
目前大多數(shù)Android智能手機(jī)都配備有測(cè)量運(yùn)動(dòng)、方向和環(huán)境的傳感器。包括:加速度傳感器、磁力傳感器、方向傳感器、陀螺儀傳感器、溫度傳感器等[6]。
本系統(tǒng)主要采用方向傳感器。當(dāng)設(shè)備保持默認(rèn)方向時(shí)(見(jiàn)圖3),X軸指向屏幕面板的外部,Y軸水平向右,Z軸垂直向上。在方向傳感器SensorEvent類中的Values的3個(gè)值分別對(duì)應(yīng)3個(gè)坐標(biāo)軸的角度數(shù)據(jù),含義如下[7]:
Values[0]:方向角的大小,也就是手機(jī)繞著X軸旋轉(zhuǎn)的角度。Values[0]的取值范圍為0~360。0或360表示手機(jī)朝向正北;90表示手機(jī)朝向正東;180表示手機(jī)朝向正南;270表示手機(jī)朝向正西。
Values[1]:傾斜角的大小,也就是手機(jī)繞著Y軸旋轉(zhuǎn)的角度。Values[1]的取值范圍為-180~180。當(dāng)手機(jī)屏幕朝上水平放置時(shí),Values[1]的值為0;將手機(jī)頭部抬起,繞Y軸旋轉(zhuǎn),當(dāng)手機(jī)屏幕朝下水平放置時(shí),Values[1]的值為180;將手機(jī)尾部抬起,繞Y軸旋轉(zhuǎn),當(dāng)手機(jī)屏幕朝下水平放置時(shí),Values[1]的值為-180[6]。
Values[2]:側(cè)翻角大小,也就是手機(jī)繞Z軸旋轉(zhuǎn)的角度。Values[2]的取值范圍為-90~90。當(dāng)手機(jī)水平放置時(shí),Values[2]的值為0;當(dāng)手機(jī)屏幕面向左側(cè)時(shí),Values[2]的值為-90;當(dāng)手機(jī)屏幕面向右側(cè)時(shí),Values[2]的值為90。
1.3Android定位原理
本系統(tǒng)使用Android手機(jī)自帶的GPS進(jìn)行粗略定位,同時(shí)也使用高德地圖提供的定位SDK進(jìn)行精確定位。定位的基本原理:當(dāng)應(yīng)用程序向定位SDK發(fā)起定位請(qǐng)求時(shí), 定位SDK會(huì)根據(jù)當(dāng)前的GPS、WiFi信息生成相對(duì)應(yīng)的定位依據(jù)。如果需要, 定位SDK也會(huì)向定位服務(wù)器發(fā)送網(wǎng)絡(luò)請(qǐng)求,然后根據(jù)請(qǐng)求的定位依據(jù)推算出對(duì)應(yīng)的坐標(biāo)位置,生成定位結(jié)果后返回給定位SDK[8]。
2系統(tǒng)實(shí)現(xiàn)
2.1系統(tǒng)總體框架
系統(tǒng)流程如圖4所示。
2.2地圖定位
在MainActivity中調(diào)用高德地圖的地圖SDK和定位SDK。首先進(jìn)行地圖初始化,加載地圖,通過(guò)LocationManagerProxy每隔固定時(shí)間發(fā)起一次定位請(qǐng)求。再通過(guò)OnLocationChangedListener中onLocationChanged()方法使用aMapLocation.getLatitude()和aMapLocation.getLongitude()獲得經(jīng)緯度;AMapLocation.getExtras() 方法獲取位置的描述信息,包括省、市、區(qū)以及街道信息,并以空格分隔。最后將地圖中心定位到該位置。地圖可進(jìn)行縮放。運(yùn)行效果如圖5所示。
2.3路線規(guī)劃
點(diǎn)擊圖5中的出發(fā)按鈕,跳轉(zhuǎn)到RouteActivity進(jìn)行路線規(guī)劃。路線規(guī)劃有3種模式可以選擇,分別為公交模式、駕車(chē)模式、步行模式。為了便于測(cè)試,我們只選擇步行模式??梢赃x擇輸入起點(diǎn)和終點(diǎn)或者在地圖上點(diǎn)擊起點(diǎn)和終點(diǎn)。為了提高精確度,對(duì)起點(diǎn)和終點(diǎn)附近的興趣點(diǎn)進(jìn)行搜索,并顯示在ListView上讓用戶點(diǎn)擊確認(rèn)。界面如圖6所示。以起點(diǎn)為例,點(diǎn)擊確認(rèn)后,通過(guò)RouteSearchPoiDialog獲得startpoiItem,再通過(guò)startpoiItem.getLatLonPoint()方法轉(zhuǎn)換成起點(diǎn)的經(jīng)緯度。獲得起點(diǎn)和終點(diǎn)的經(jīng)緯度,用searchRouteResult(LatLonPoint startPoint,LatLonPoint endPoint)方法進(jìn)行路徑規(guī)劃。再通過(guò)回調(diào)方法onWalkRouteSearched()獲取路徑WalkPath,并將路徑的節(jié)點(diǎn)WalkRouteOverlay覆蓋在地圖上,運(yùn)行效果如圖7所示。
2.4增強(qiáng)現(xiàn)實(shí)導(dǎo)航
通過(guò)路徑規(guī)劃獲取路徑WalkPath,路徑節(jié)點(diǎn)列表由walkPath.getSteps() 獲得。通過(guò)Intent將其傳遞到NaviActivity中。
在NaviActivity中先開(kāi)啟攝像頭,創(chuàng)建一個(gè)相機(jī)預(yù)覽的類cameraPreview,繼承SurfaceView類,并實(shí)現(xiàn)SurfaceHolder接口。SurfaceHolder.Callback()方法進(jìn)行預(yù)覽。然后根據(jù)Intent傳遞過(guò)來(lái)的stepList,通過(guò)stepList.get(i).getAction()可獲取一個(gè)節(jié)點(diǎn)的導(dǎo)航信息。根據(jù)其判斷加載直行箭頭、左轉(zhuǎn)箭頭或者右轉(zhuǎn)箭頭(箭頭通過(guò)Android的Graphics類繪制而成)。本次測(cè)試中獲取的第一個(gè)節(jié)點(diǎn)導(dǎo)航信息是左轉(zhuǎn),所以加載左轉(zhuǎn)箭頭,并用TextView將詳細(xì)的導(dǎo)航信息顯示出來(lái),效果如圖8所示。
2.5傳感器實(shí)時(shí)導(dǎo)航
從圖8可以看出預(yù)先設(shè)定的預(yù)覽屏幕是橫屏,但是用戶在導(dǎo)航過(guò)程中不可能將手機(jī)姿態(tài)一直保持水平狀態(tài),所以需要利用手機(jī)的傳感器數(shù)據(jù),使箭頭根據(jù)手機(jī)姿態(tài)的變化而旋轉(zhuǎn),實(shí)時(shí)指向正確的前進(jìn)方向。首先要注冊(cè)和監(jiān)聽(tīng)方向傳感器,當(dāng)傳感器變化時(shí),在SensorEventListener中獲取傳感器變化的參數(shù)數(shù)組。調(diào)用SensorManager.getRotationMatrix方法獲取旋轉(zhuǎn)矩陣,然后調(diào)用 SensorManager.getOrientation方法獲取有手機(jī)方位信息的參數(shù)數(shù)組。將數(shù)組轉(zhuǎn)為角度信息,對(duì)應(yīng)圖3的X、Y、Z軸信息。把數(shù)組回調(diào)給繪制箭頭的類ArrowView,控制箭頭的旋轉(zhuǎn)。手機(jī)橫屏旋轉(zhuǎn)后的效果如圖9和圖10所示。
最后當(dāng)用戶接近路徑的下一個(gè)節(jié)點(diǎn)時(shí),用Android定時(shí)器對(duì)導(dǎo)航信息和箭頭進(jìn)行刷新。
3結(jié)語(yǔ)
本系統(tǒng)在Android平臺(tái)下,采用高德地圖接口實(shí)現(xiàn)地圖定位和路線規(guī)劃功能,并采用基于GPS和方向傳感器的增強(qiáng)現(xiàn)實(shí)技術(shù)將指引箭頭和路況合成渲染,給予用戶更直觀的導(dǎo)航體驗(yàn)。
圖9手機(jī)旋轉(zhuǎn)45度圖10手機(jī)旋轉(zhuǎn)90度
本系統(tǒng)還可擴(kuò)展到大型場(chǎng)所的室內(nèi)導(dǎo)航,也可以把景點(diǎn)作為興趣點(diǎn)應(yīng)用于旅游景區(qū)導(dǎo)航。
參考文獻(xiàn)參考文獻(xiàn):
[1]增強(qiáng)現(xiàn)實(shí)[EB/OL].http://wenku.baidu.com/view/c1ce3cb271fe 910ef12df8d2.html.
[2]張振穎.增強(qiáng)現(xiàn)實(shí)技術(shù)在產(chǎn)品服務(wù)系統(tǒng)設(shè)計(jì)中的應(yīng)用與研究[D].長(zhǎng)沙:湖南大學(xué),2012.
[3]白慧東.嵌入式增強(qiáng)現(xiàn)實(shí)系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D].成都:電子科技大學(xué),2010.
[4]曾浩.基于Android平臺(tái)的增強(qiáng)現(xiàn)實(shí)導(dǎo)航軟件的設(shè)計(jì)與實(shí)現(xiàn)[D].長(zhǎng)沙:湖南大學(xué),2012.
[5]孫俊.虛擬物體與視頻圖像融合算法在交通事故再現(xiàn)中的研究[D].南京:東南大學(xué),2013.
[6]江亞炬.基于移動(dòng)增強(qiáng)現(xiàn)實(shí)的導(dǎo)航系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].青島:中國(guó)海洋大學(xué),2014.
[7]RAGHAVSOOD.Pro Android Augmented Reality[M].America,Apress,2012.
[8]烏錚.基于Android平臺(tái)的手游社交應(yīng)用客戶端的設(shè)計(jì)與實(shí)現(xiàn)[D].哈爾濱:哈爾濱工業(yè)大學(xué),2014.
責(zé)任編輯(責(zé)任編輯:杜能鋼)