李 赟,李 凍,左志權(quán),劉正軍,畢京學(xué),3
(1.中國測繪科學(xué)研究院,北京 100830;2.蘭州交通大學(xué),蘭州 730070;3.山東科技大學(xué),山東 青島 266590)
隨著社會的快速發(fā)展和信息時代的到來,移動定位導(dǎo)航應(yīng)用服務(wù)正逐漸影響人們的日常生活。網(wǎng)絡(luò)地理信息系統(tǒng)(web geographic information system,WebGIS)的廣泛應(yīng)用以及移動智能終端的普及,使得人們在陌生環(huán)境中尋找特定的地點或目標(biāo)時,利用定位導(dǎo)航服務(wù)可以用最短的時間達到目的地[1]。室外環(huán)境中的導(dǎo)航技術(shù)近年來發(fā)展較快,截至目前已經(jīng)形成了較為成熟的商業(yè)體系,比如室外車載導(dǎo)航系統(tǒng)、手機導(dǎo)航系統(tǒng)等[2]。室外環(huán)境下的定位導(dǎo)航系統(tǒng)主要采用全球定位系統(tǒng)(global positioning system,GPS)衛(wèi)星信號或蜂窩信號來進行定位,將GPS和電子地圖配合使用,并結(jié)合相關(guān)的導(dǎo)航軟件,在電子地圖上顯示實時位置及路線信息,完成導(dǎo)航服務(wù)[3]。室內(nèi)環(huán)境下的定位導(dǎo)航研究主要集中在以下兩類[4-5]:一是研發(fā)室內(nèi)定位系統(tǒng),比較突出的研究包括室內(nèi)感知系統(tǒng)、上下文感知環(huán)境等;二是用移動機器人控制和實現(xiàn)導(dǎo)航服務(wù),這種類型注重系統(tǒng)硬件的實現(xiàn),對導(dǎo)航系統(tǒng)本身關(guān)注不多。
目前廣泛采用的導(dǎo)航地圖都是二維的,隨著移動終端設(shè)備計算能力的突飛猛進,使得在移動端進行高效的三維渲染成為可能[6]。虛擬現(xiàn)實技術(shù)近年來在計算機領(lǐng)域也引起了廣泛的關(guān)注。它能夠利用計算機生成較為真實的模擬環(huán)境,使用戶沉浸在虛擬環(huán)境中,同時通過人機交互接口,實現(xiàn)用戶與虛擬環(huán)境的直接交互[7]。
Unity3D作為一種三維虛擬現(xiàn)實游戲平臺,對DirectX和OpenGL擁有高度優(yōu)化的圖形渲染管道,支持常見的文件格式,并能和大部分相關(guān)應(yīng)用程序協(xié)同工作,可以充分、實時的處理大量的三維模型[8]。值得關(guān)注的是,Unity3D是一個跨平臺性非常好的三維引擎,從桌面系統(tǒng)到移動平臺和游戲主機,幾乎涵蓋了所有平臺。利用Unity3D進行三維應(yīng)用程序的開發(fā),便可以實現(xiàn)“開發(fā)一次,多處使用”的理想目標(biāo)。因此,本文在系統(tǒng)實現(xiàn)中選用Unity3D作為開發(fā)工具。
隨著網(wǎng)絡(luò)帶寬和移動終端性能的大幅提升,云技術(shù)和移動網(wǎng)絡(luò)技術(shù)的快速普及,以及大型建筑內(nèi)部導(dǎo)航和定位的需求與日俱增,基于三維的導(dǎo)航定位服務(wù)應(yīng)運而生。合理整合現(xiàn)有的各種硬件資源,軟件資源和信息資源,設(shè)計一套滿足當(dāng)前應(yīng)用環(huán)境下的系統(tǒng)成為本文以及今后繼續(xù)研究的重點。
移動客戶端程序是運行在移動終端設(shè)備(如智能手機)上的應(yīng)用程序,是用戶與室內(nèi)外導(dǎo)航定位系統(tǒng)進行交互的唯一接口。良好的導(dǎo)航定位移動客戶端程序需要具備以下要素:
(1)提供良好的交互界面方便用戶使用;
(2)與后臺位置服務(wù)通信,實時獲取用戶位置數(shù)據(jù);
(3)管理和調(diào)度本地或遠(yuǎn)程服務(wù)器上的三維模型數(shù)據(jù),優(yōu)化三維場景渲染,使客戶端程序在移動終端設(shè)備上能同時滿足流暢、美觀和低能耗的要求;
(4)具備三維場景中路徑規(guī)劃的能力,能滿足用戶在室內(nèi)外進行定位、導(dǎo)航的需求。
本文根據(jù)室內(nèi)外導(dǎo)航定位系統(tǒng)的功能需求,采用模塊化設(shè)計方法,將移動客戶端應(yīng)用程序分解為四大組成模塊,分別是:客戶端用戶接口、導(dǎo)航與空間查詢模塊、定位模塊和三維模型調(diào)度模塊(見圖1)。
圖1 客戶端結(jié)構(gòu)框圖
2.2.1 客戶端用戶接口
用戶接口(user interface,UI)是為人機交互提供幫助的功能集合。作為運行在移動終端上的定位導(dǎo)航系統(tǒng),UI主要應(yīng)為用戶提供基于觸摸屏的常用手勢操作,定位與空間查詢、路徑規(guī)劃等功能。在三維場景瀏覽方式方面,可以提供兩種不同的視角,即第一人稱視角(見圖2(a))和鳥瞰視角(第三人稱視角,見圖2(b))。兩種視角用于不同場合,第一人稱視角適合作為導(dǎo)航視角,為用戶帶來“沉浸式”導(dǎo)航體驗;鳥瞰視角用于大面積場景瀏覽,查看生成路徑的全貌等。另外,第一人稱視角也更適合于室內(nèi)導(dǎo)航的應(yīng)用。
圖2 客戶端程序的兩種視角
2.2.2 導(dǎo)航與空間查詢模塊
導(dǎo)航與空間查詢模塊負(fù)責(zé)處理用戶的輸入,通過位置服務(wù)模塊獲取用戶位置,然后利用空間數(shù)據(jù)庫和空間數(shù)據(jù)服務(wù)器進行查詢和計算最優(yōu)化路徑,并將結(jié)果作為導(dǎo)航路徑可視化和三維數(shù)據(jù)調(diào)度模塊的依據(jù)。
2.2.3 定位模塊
定位模塊包含室內(nèi)定位和室外定位兩個組成部分。其中室外定位主要依靠GPS衛(wèi)星或蜂窩數(shù)據(jù)、位置服務(wù)器和移動終端操作系統(tǒng)提供的定位應(yīng)用程序接口(application programming interface,API)來實現(xiàn)。室內(nèi)定位利用室內(nèi)場景中布設(shè)的無線保真(wireless fidelity,WiFi)熱點和預(yù)先采集的WiFi指紋庫,采用指紋庫匹配和內(nèi)插技術(shù)得到室內(nèi)位置信息。難點在于定位方式是室內(nèi)還是室外的判別,因此需要設(shè)計一個智能化的判別器來判別當(dāng)前的定位方式。判別器的判別結(jié)果將作為導(dǎo)航模塊,三維模型調(diào)度模塊的輸入。
2.2.4 三維模型調(diào)度模塊
三維模型調(diào)度模塊作為可視化的核心需要精心的設(shè)計[6,9-12]。衡量三維應(yīng)用程序性能的一個重要指標(biāo)是幀率(每秒鐘生成的畫面數(shù)),需要繪制的數(shù)據(jù)量越大,消耗的時間也越多。對于復(fù)雜場景的三維模型,通常包含大量數(shù)據(jù),如果將數(shù)據(jù)全部加載,即使有足夠的內(nèi)存容納它們,也沒有辦法流暢的繪制畫面[9]。精細(xì)模型的真實感渲染可以給人帶來愉悅的視覺享受,但提高渲染畫面效果的同時給硬件系統(tǒng)帶來了過量的計算負(fù)荷,使得渲染達到滿足交互需要的幀率成為奢望。因此,需要對模型數(shù)據(jù)進行合理的組織,創(chuàng)建空間索引[10],利用相機位置和視椎體對模型數(shù)據(jù)進行視椎體裁剪、遮擋剔除和細(xì)節(jié)層次模型(level of detail,LOD)[13]等技術(shù)的調(diào)度,合理的控制內(nèi)存中的數(shù)據(jù)量和送入圖形處理單元(graphic processing unit,GPU)渲染的數(shù)據(jù)量。該模塊接收位置模塊和導(dǎo)航模塊的輸出結(jié)果以及用戶的操作,控制相機的運動。
室內(nèi)模型主要分為兩類,一類是建筑物本身,另一類是其附屬物。具體分類原則為:將樓體建筑物(包括樓板、框架、外墻、樓梯)作為建筑物模型;剩余的都屬于附屬物(如商場建筑物中的單個小商鋪、衛(wèi)生間、服務(wù)臺、倉庫等等,以及它們的分隔物如內(nèi)墻、隔板等)。模型采用面向?qū)ο蟮姆椒ü芾砗驼{(diào)度,每個單獨的物體都作為單一模型,保存為單獨的模型文件,它們同時具有3種以上不同分辨率。
用大型商場的室內(nèi)模型來舉例,模型文件的目錄按圖3所示的層級結(jié)構(gòu)組織。
圖3 樓層及附屬物模型示意圖
模型的存放位置應(yīng)符合以上層級結(jié)構(gòu),如:整個建筑的外框模型應(yīng)存放在“建筑名稱或編號”文件夾中,每個樓層的整體建筑模型應(yīng)放在“樓層編號i”(i表示樓層數(shù))文件夾中,樓層的附屬物包括商鋪、電梯(樓梯)、洗手間、服務(wù)臺、倉庫等每一個存放在一個單獨的“商鋪編號i”文件夾中,該文件夾中只存放某一個樓層附屬設(shè)施不同分辨率的模型文件。紋理文件放在對應(yīng)模型所在文件夾中,單獨存放在名為“Texture”的文件夾中。
全部商鋪信息匯總為一個文件(.xls 或 .txt),該文件存放在“建筑名稱或編號”文件夾中。每一條商鋪記錄包括:建筑編號、樓層編號、商鋪編號、商鋪屬性(包括商鋪名稱,在該建筑局部坐標(biāo)系中的起始坐標(biāo),分類,如:餐飲、服裝、家居、樓梯、服務(wù)臺、洗手間等,商鋪屬性分類后續(xù)再做詳細(xì)分類)。
在Unity3D中將每一個模型文件單獨打包成Asset Bundle文件(一種Unity3D支持的可在本地或遠(yuǎn)程動態(tài)加載的文件格式),將打包后的文件按原來的層級保存在數(shù)據(jù)模型服務(wù)器上供遠(yuǎn)程下載。
這樣的模型組織方式便于調(diào)度和管理,程序只需讀取模型的屬性信息,然后生成空間索引用于調(diào)度。
二維地圖上采用基于圖論的最短路徑算法生成需要查找的路徑。將地圖上的關(guān)鍵點作為節(jié)點,根據(jù)地圖上點的連通性將相應(yīng)的節(jié)點連接成邊,并輔以權(quán)值就形成了二維問題的圖。
室內(nèi)導(dǎo)航有個明顯的特征,即在某個樓層內(nèi)的導(dǎo)航問題仍屬于二維問題。如果將相鄰樓層通過某種途徑連接就能夠使得樓層之間的圖連通,而樓層之間的物理連接樓梯或電梯剛好提供了這樣的途徑。因此,將樓梯和電梯作為節(jié)點加入圖中就可以構(gòu)造整個建筑室內(nèi)環(huán)境的三維圖,然后采用傳統(tǒng)的最短路生成算法即可生成室內(nèi)環(huán)境下的三維路徑[14]。
每一個區(qū)域的室外模型都有一個屬性描述文件,該文件記錄了每個建筑模型的ID,參考點坐標(biāo),包圍盒等信息。讀取該文件可以構(gòu)建一顆四叉樹:①將所有模型的參考點作為點群,計算該點群在x-z平面(Unity3D中y軸向上)的包圍盒;②將得到的包圍盒各邊向外擴展距離d,該距離可以取包圍盒邊長平均值的0.1倍,得到一個包含所有點的矩形區(qū)域;③將該矩形作為根節(jié)點,設(shè)四叉樹節(jié)點能保存點數(shù)的最大值為N,設(shè)根節(jié)點為當(dāng)前節(jié)點。比較當(dāng)前節(jié)點包圍盒中的點數(shù)n0與N的大小,若n0>N,則將當(dāng)前節(jié)點進行四叉剖分,再將每個子節(jié)點作為當(dāng)前節(jié)點重復(fù)步驟③;④經(jīng)過幾步遞歸后,全部葉子節(jié)點的包圍盒中點數(shù)都小于N,得到一顆四叉樹。
四叉樹的節(jié)點中應(yīng)保存位于該節(jié)點中的建筑模型文件路徑,模型ID,葉子節(jié)點包含節(jié)點包圍盒。節(jié)點包圍盒指包含節(jié)點內(nèi)所有建筑模型的最小包圍立方體。
模型調(diào)度過程是在每一次畫面更新前,判斷相機視椎體和四叉樹葉子節(jié)點包圍盒的拓?fù)潢P(guān)系,若包圍盒與視椎體相交或位于視椎體內(nèi)部,則從緩存池讀取該節(jié)點所包含的全部建筑模型,將它們添加到要渲染的模型數(shù)組中;否則若該節(jié)點包含的模型在渲染模型數(shù)組中,則將他們從數(shù)組中刪除。
本文提出了室內(nèi)外無縫定位與導(dǎo)航的移動客戶端設(shè)計思路,詳細(xì)探討了移動客戶端的實現(xiàn)框架、功能模塊,闡述了設(shè)計過程中的關(guān)鍵技術(shù)并且提供了可行的解決思路。城市空間信息化,無線網(wǎng)絡(luò)和移動智能終端日益普及,基于位置服務(wù)和室內(nèi)外定位信息可視化由二維轉(zhuǎn)向三維,在這樣的背景下,逐步實現(xiàn)和豐富模塊功能是今后的研究重點。室內(nèi)外無縫定位中的內(nèi)、外環(huán)境的識別與切換是難點,也是今后系統(tǒng)設(shè)計中要解決的主要問題。
[1] 干建松.基于Unity3d的室內(nèi)漫游仿真系統(tǒng)[J].淮陰師范學(xué)院學(xué)報:自然科學(xué)版,2011,10(6):515-518.
[2] 李德仁,劉強,朱慶.數(shù)碼城市GIS中建筑物室外與室內(nèi)三維一體化表示與漫游[J].武漢大學(xué)學(xué)報:信息科學(xué)版,2003,25(3):253-258.
[3] 李慧.室內(nèi)外融合導(dǎo)航系統(tǒng)的設(shè)計與實現(xiàn)[D].北京:北京郵電大學(xué),2011.
[4] 張紅平.樓宇三維尋徑分析研究[D].南京:南京師范大學(xué),2011.
[5] 杜建庚.樓宇三維路徑的生成、規(guī)劃及表達[D].北京:北京交通大學(xué),2008.
[6] 閆金金,尚建嘎,余芳文,等.一種面向室內(nèi)定位的3D建筑模型構(gòu)建方法[J].計算機應(yīng)用與軟件,2013,30(10):16-20.
[7] 卞鋒,江漫清,桑永英.虛擬現(xiàn)實及其應(yīng)用進展[J].計算機仿真,2007(6):1-4+12.
[8] 龍艷軍,俞佳曦.Unity3D游戲開發(fā)中的版本控制研究[J].軟件導(dǎo)刊,2012,11(11):12-14.
[9] 楊衛(wèi)軍.海量三維城市模型的調(diào)度與場景管理[D].武漢:武漢大學(xué),2005.
[10] 傅由甲.動態(tài)八叉樹在復(fù)雜場景設(shè)計中的應(yīng)用[J].系統(tǒng)仿真學(xué)報,2006,18(S2):408-410.
[11] 唐桂文,張慶娟,王功明,等.基于三維GIS的海量地形數(shù)據(jù)存儲和調(diào)度的研究[J].測繪科學(xué),2008,33(3):110-112+120.
[12] 王冬,王曉華.三維GIS中海量模型調(diào)度與存儲[J].地理空間信息,2012,10(1):109-111+4.
[13] HOLLIMAN N.Review of "Level of Detail for 3D Graphics" by David Luebke,Martin Reddy,Jonathan D.Cohen,Amitabh Varshney,Benjamin Watson,and Robert Heubner.Morgan Kaufmann[J].Presence:Teleoperators and Virtual Environments,2003,12(4):441-442.
[14] 艾海舟,張錢.移動機器人路徑規(guī)劃算法的實驗研究[C]//第一屆人工智能聯(lián)合會學(xué)術(shù)會議論文集.長春:吉林大學(xué)出版社,1990:400-405.