彭 亮, 仲思東,2, 李學鵬
(1.武漢大學電子信息學院,武漢 430072;2.測繪遙感信息工程國家重點實驗室,武漢 430079)
據統計,人的一生有70%~80%的時間是在室內度過的[1],而室內環境之復雜遠遠高于室外。在室外定位方面,技術已比較成熟,主要包括四套不同的衛星定位導航系統[2]:包括中國的北斗衛星導航系統、美國的全球定位系統、俄羅斯的格洛納斯衛星導航系統、歐洲的伽利略衛星導航系統。但是在室內定位方面,衛星定位導航系統鞭長莫及,無法很好地實現定位功能,因此利用室外定位原理,通過在室內搭建基站以及安裝信號接收器,再基于無線數據通信技術,同樣能夠實現室內定位功能。目前主要的室內定位方法有:時間到達法、時間到達差法、到達角度法及信號強度法;主要的定位技術主要有:WiFi定位、磁場定位、超聲波定位、藍牙定位、紅外線定位以及射頻識別定位[3-5]。其中,單純的地磁場定位因為受空間布局影響較大[6],因此多和其他技術混合使用。超聲波定位技術定位精度較高,能達到1~10 cm的精度,但其成本較高,且受環境濕度影響大,測量距離短[7]。WiFi、藍牙定位技術因能與智能手機等移動終端設備有極好的兼容性,且其成本相對低廉、定位精度較好,在大興公共場合能夠得到廣泛應用,但是易受環境干擾,穩定性差[8]。
這些基于無線通信的室內定位方法,需要在室內場景中搭建基站和安裝相應的信號接收器,而其定位精度還受室內場景的復雜程度影響,當信號發射器和信號接收器之間所經過的場景越復雜時,對定位精度的影響越大。為了克服這一問題,提出了一種不同的室內定位方式,將建筑物及其室內場景做成三維模型[9-10],再將其做成能在安卓設備上運行的軟件,結合現有的計算機技術、全球定位技術和WiFi室內定位技術,再充分利用現有技術整合室外電子導航地圖和室內三維模型,通過虛擬現實技術及設置在軟件中的空間位置服務功能,達到室內定位要求。
在沒有電子地圖進行定位,人們依靠將眼前所見場景與之前保存在大腦中的場景進行對比,判斷自己此時所在的位置。利用這種定位思維,通過將周圍建筑物及建筑物內的場景進行三維數據采集制成真三維模型,再使用Unity3D游戲引擎將模型制作成安卓軟件[11],即將畫面以虛擬形式呈現在安卓設備上。首先用戶利用基于百度地圖SDK(software development kit)開發的二維電子地圖軟件通過WiFi及GPS定位到此時所處二維地圖的位置,軟件再通過自動搜索獲取周邊已經載入系統的三維室內定位軟件,用戶根據需求打開相應的三維室內定位軟件進入軟件的室內場景,并對離自身位置最近的地點選擇位置服務,軟件場景則會改變到所選位置服務的地點,通過對設置在軟件內的虛擬搖桿手動控制場景進行改變,結合虛擬現實技術將現實場景和虛擬場景進行對比,從而定位用戶此時所處位置。
如圖1所示,當用戶到達某大型室內場景時,手機調用并打開當前場景下的模型軟件,進入室內場景進行位置服務功能操作,再通過對虛擬環境操作,將所處環境的現實場景與虛擬場景進行對比,判斷自身所在位置。通過對虛擬場景進行瀏覽,用戶可了解更多的周邊環境并對下一個所要前往的目的地進行路徑規劃。

圖1 定位原理
整個系統主要集成在安卓設備上,包括兩部分:二維室外定位軟件和三維室內定位軟件。二維室內定位軟件是基于百度地圖SDK在eclipse開發工具下設計開發的,具有實時定位及離線定位功能,實時定位功能是能通過WiFi和GPS實時獲取設備所在位置,而離線定位是用戶可根據自身需求自主選擇定位地點。三維室內定位軟件是基于Unity3D游戲開發引擎開發的,能夠在安卓設備上對模型及其室內場景進行瀏覽及位置服務。如圖2所示為系統的基本模塊組成。

圖2 系統模塊組成
根據需求,在百度地圖官網下載相應的SDK文件,將其導入eclipse創建的工程中,開發一個能夠具有實時定位和離線定位功能的二維電子地圖,并將工程導出Apk安裝在安卓設備上。
如圖3所示,三維室內定位軟件的開發過程主要包括圖中所示部分。其中模型制作和模型格式轉換是在3DMax工具中進行操作,腳本編寫是在VS2013中進行操作,其余部分則是在Unity3D中進行操作。

圖3 三維室內定位軟件制作流程
程序開發中所用到的真三維模型是根據實物場景按比例為1制成的,先利用實驗室自主研發的Z-system雙目立體視覺系統,并結合為配合雙目立體視覺系統使用而開發的雙目系統測量軟件Visurv,獲取到三維空間數據,再通過3DMax 軟件按獲取到的三維空間數據建立三維模型。并把模型文件轉換為FBX格式,便于Unity3D對模型的識別和導入。
將模型載入Unity3D中,進行三維室內定位軟件的場景搭建[12]。為場景尋找一個合適的點作為場景所在空間坐標系的原點,并給模型的每一個組成部分添加Mesh Collider組件使模型具有碰撞屬性。切換到Navigation面板將導航時所能經過的路徑模型(一般為路、樓道、樓梯等)設置為Walkable,即選擇可路徑烘焙的對象,如圖4所示為烘焙后的效果圖。

圖4 路徑烘焙
路徑烘焙是使軟件能夠具有位置服務功能,自動尋路到所選擇的位置服務地點,在場景中添加需要位置服務的地點,即能夠自動尋路的地點。位置服務功能是基于A*算法實現的,A*算法的思想是,首先設置一個Open表,一個Close表。A*算法每一個點都有一個估值函數F用來評價當前點到目標點的估值,F值越高表明到目標空間上越遠。初始狀態的時候,把起點放在Open表中,Close初始為空。在Open表中選取一個F值最小的節點作為當前節點,并將其添加到Close表并從Open表中移除。如果為終點節點則搜索結束,否則處理當前節點的所有臨接節點,如果這些節點不在Open表中,那么就將其添加到Open表,并找出其臨接節點的最優點,再加入Open表,重復此過程,直到找到目標節點位置,通常情況下,最優路徑就是最短路徑。
在Unity3D中利用自帶的用戶界面組件給程序設計操作界面實現三維室內定位軟件的人機交互功能,并創建對應C#腳本實現軟件功能。在導出Apk文件時,程序的包名按格式“com.CCD.程序名稱_緯度_經度”進行導出,其中程序名稱由開發者根據模型的名稱自定義選取,緯度和經度則是該模型所在地的經緯度保留小數點后六位并去除小數點后的數值,即相當于將經緯度乘以1 000 000后保留整數部分,經緯度的查詢應該以百度地圖為準。按此格式進行包名的命名是為了和在eclipse下開發的二維室外定位軟件相呼應,便于模型所在地的經緯度數據直接傳遞給二維軟件,從而使二維軟件能夠快速識別和調用此時所在地的基于真三維模型設計的三維軟件。
系統工作流程如圖5所示,啟動安裝在安卓設備上的二維電子地圖,并確保GPS和WiFi功能已開啟從而進入實時定位模式,程序將定位到此時設備所處二維平面所在位置(若選擇離線定位,則需用戶自行選定定位地點),并按就近原則對三維室內定位軟件中的模型所在實際位置進行排序,開啟三維室內定位軟件,選擇位置服務的地點,軟件將自動尋路到該地點處,如果用戶所處位置即為位置服務地點,系統則完成了定位功能。用戶也可選擇通過操作虛擬搖桿對場景位置進行改變,通過現實環境和虛擬環境進行對比,獲取此時所處位置。在不需要定位時,用戶亦可操作虛擬搖桿對三維模型中的室內場景進行瀏覽和觀察,了解建筑物中室內場景的具體結構。

圖5 系統工作流程圖
如圖6(a)所示為基于百度地圖SDK開發的二維室外定位軟件運行界面,點擊界面中的空間傳感按鈕即可進入三維室內定位軟件。如圖6(b)~圖6(e)所示為根據本文提出的室內定位方法而設計的三維室內定位軟件的運行界面,選擇所需位置服務的地點并點擊,軟件則會將場景移動到位置服務地點處。在位置服務過程中,在地面上有線條和箭頭提示,在屏幕上方有距離目的地的剩余距離提示。當不需要位置服務時,用戶也可通過拖拽左下角的虛擬搖桿來控制第一人稱角色移動,并且可通過滑動屏幕來控制運動的方向,從而實現虛擬環境下對模型的整體瀏覽。目前,通過此方法已經對學校內的大多數學院即其他大型建筑進行了建模[13]并開發了相應的應用程序。如圖7所示為以深圳北站和廣州博物館制作的三維軟件。
三維室內定位軟件中用到的模型數據都是符合國家精細三維模型建模標準,精度在 0.2 m 以內。根據此三維室內定位軟件的原理,其定位精度主要受模型精度影響,在程序設計中所引起的誤差可忽略不計,因此提出的基于真三維模型的室內定位方法的定位精度在0.2 m以內。
提出的室內定位方法,再結合基于百度地圖SDK開發的室外定位導航程序所組成的室內外一體化定位導航系統,具有直觀、全面和綜合的特點。具有的功能基本滿足用戶室內外定位的需求,適用于一些大型的室內外公共場合,如商場、機場和車站等。此軟件在消防方面意義巨大,利用此軟件消防人員可以快速了解建筑的內部結構并迅速做出相應的消防措施,能夠有效地減少災害損失。在購物商場內,也可將商品放置在軟件模型中,讓買家能夠不在現場也能直觀地觀察商品[14]。但是,由于百度地圖SDK和導航SDK沖突,系統分為了二維室外定位軟件部分和三維室內定位軟件部分,兩部分軟件通過數據傳遞來交換信息,無法將兩部分直接集成在一個應用程序中。后續將對系統進一步優化,使三維室內定位部分直接以離線地圖包的形式載入二維電子地圖,從而實現系統整體化。另外,由于在對室內場景進行完數據采集后,制作的三維模型精度越高,所耗費的時間相對較久,無法達到數據獲取后迅速生成三維模型的需求,因此還需對該系統進一步優化以使系統更能滿足用戶要求。

圖6 軟件運行界面

圖7 其他三維模型