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