鄭菲菲++宋麗紅++董靜



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