彭 亮, 仲思東,2, 李學(xué)鵬
(1.武漢大學(xué)電子信息學(xué)院,武漢 430072;2.測(cè)繪遙感信息工程國(guó)家重點(diǎn)實(shí)驗(yàn)室,武漢 430079)
據(jù)統(tǒng)計(jì),人的一生有70%~80%的時(shí)間是在室內(nèi)度過(guò)的[1],而室內(nèi)環(huán)境之復(fù)雜遠(yuǎn)遠(yuǎn)高于室外。在室外定位方面,技術(shù)已比較成熟,主要包括四套不同的衛(wèi)星定位導(dǎo)航系統(tǒng)[2]:包括中國(guó)的北斗衛(wèi)星導(dǎo)航系統(tǒng)、美國(guó)的全球定位系統(tǒng)、俄羅斯的格洛納斯衛(wèi)星導(dǎo)航系統(tǒng)、歐洲的伽利略衛(wèi)星導(dǎo)航系統(tǒng)。但是在室內(nèi)定位方面,衛(wèi)星定位導(dǎo)航系統(tǒng)鞭長(zhǎng)莫及,無(wú)法很好地實(shí)現(xiàn)定位功能,因此利用室外定位原理,通過(guò)在室內(nèi)搭建基站以及安裝信號(hào)接收器,再基于無(wú)線數(shù)據(jù)通信技術(shù),同樣能夠?qū)崿F(xiàn)室內(nèi)定位功能。目前主要的室內(nèi)定位方法有:時(shí)間到達(dá)法、時(shí)間到達(dá)差法、到達(dá)角度法及信號(hào)強(qiáng)度法;主要的定位技術(shù)主要有:WiFi定位、磁場(chǎng)定位、超聲波定位、藍(lán)牙定位、紅外線定位以及射頻識(shí)別定位[3-5]。其中,單純的地磁場(chǎng)定位因?yàn)槭芸臻g布局影響較大[6],因此多和其他技術(shù)混合使用。超聲波定位技術(shù)定位精度較高,能達(dá)到1~10 cm的精度,但其成本較高,且受環(huán)境濕度影響大,測(cè)量距離短[7]。WiFi、藍(lán)牙定位技術(shù)因能與智能手機(jī)等移動(dòng)終端設(shè)備有極好的兼容性,且其成本相對(duì)低廉、定位精度較好,在大興公共場(chǎng)合能夠得到廣泛應(yīng)用,但是易受環(huán)境干擾,穩(wěn)定性差[8]。
這些基于無(wú)線通信的室內(nèi)定位方法,需要在室內(nèi)場(chǎng)景中搭建基站和安裝相應(yīng)的信號(hào)接收器,而其定位精度還受室內(nèi)場(chǎng)景的復(fù)雜程度影響,當(dāng)信號(hào)發(fā)射器和信號(hào)接收器之間所經(jīng)過(guò)的場(chǎng)景越復(fù)雜時(shí),對(duì)定位精度的影響越大。為了克服這一問(wèn)題,提出了一種不同的室內(nèi)定位方式,將建筑物及其室內(nèi)場(chǎng)景做成三維模型[9-10],再將其做成能在安卓設(shè)備上運(yùn)行的軟件,結(jié)合現(xiàn)有的計(jì)算機(jī)技術(shù)、全球定位技術(shù)和WiFi室內(nèi)定位技術(shù),再充分利用現(xiàn)有技術(shù)整合室外電子導(dǎo)航地圖和室內(nèi)三維模型,通過(guò)虛擬現(xiàn)實(shí)技術(shù)及設(shè)置在軟件中的空間位置服務(wù)功能,達(dá)到室內(nèi)定位要求。
在沒(méi)有電子地圖進(jìn)行定位,人們依靠將眼前所見(jiàn)場(chǎng)景與之前保存在大腦中的場(chǎng)景進(jìn)行對(duì)比,判斷自己此時(shí)所在的位置。利用這種定位思維,通過(guò)將周圍建筑物及建筑物內(nèi)的場(chǎng)景進(jìn)行三維數(shù)據(jù)采集制成真三維模型,再使用Unity3D游戲引擎將模型制作成安卓軟件[11],即將畫面以虛擬形式呈現(xiàn)在安卓設(shè)備上。首先用戶利用基于百度地圖SDK(software development kit)開(kāi)發(fā)的二維電子地圖軟件通過(guò)WiFi及GPS定位到此時(shí)所處二維地圖的位置,軟件再通過(guò)自動(dòng)搜索獲取周邊已經(jīng)載入系統(tǒng)的三維室內(nèi)定位軟件,用戶根據(jù)需求打開(kāi)相應(yīng)的三維室內(nèi)定位軟件進(jìn)入軟件的室內(nèi)場(chǎng)景,并對(duì)離自身位置最近的地點(diǎn)選擇位置服務(wù),軟件場(chǎng)景則會(huì)改變到所選位置服務(wù)的地點(diǎn),通過(guò)對(duì)設(shè)置在軟件內(nèi)的虛擬搖桿手動(dòng)控制場(chǎng)景進(jìn)行改變,結(jié)合虛擬現(xiàn)實(shí)技術(shù)將現(xiàn)實(shí)場(chǎng)景和虛擬場(chǎng)景進(jìn)行對(duì)比,從而定位用戶此時(shí)所處位置。
如圖1所示,當(dāng)用戶到達(dá)某大型室內(nèi)場(chǎng)景時(shí),手機(jī)調(diào)用并打開(kāi)當(dāng)前場(chǎng)景下的模型軟件,進(jìn)入室內(nèi)場(chǎng)景進(jìn)行位置服務(wù)功能操作,再通過(guò)對(duì)虛擬環(huán)境操作,將所處環(huán)境的現(xiàn)實(shí)場(chǎng)景與虛擬場(chǎng)景進(jìn)行對(duì)比,判斷自身所在位置。通過(guò)對(duì)虛擬場(chǎng)景進(jìn)行瀏覽,用戶可了解更多的周邊環(huán)境并對(duì)下一個(gè)所要前往的目的地進(jìn)行路徑規(guī)劃。
圖1 定位原理
整個(gè)系統(tǒng)主要集成在安卓設(shè)備上,包括兩部分:二維室外定位軟件和三維室內(nèi)定位軟件。二維室內(nèi)定位軟件是基于百度地圖SDK在eclipse開(kāi)發(fā)工具下設(shè)計(jì)開(kāi)發(fā)的,具有實(shí)時(shí)定位及離線定位功能,實(shí)時(shí)定位功能是能通過(guò)WiFi和GPS實(shí)時(shí)獲取設(shè)備所在位置,而離線定位是用戶可根據(jù)自身需求自主選擇定位地點(diǎn)。三維室內(nèi)定位軟件是基于Unity3D游戲開(kāi)發(fā)引擎開(kāi)發(fā)的,能夠在安卓設(shè)備上對(duì)模型及其室內(nèi)場(chǎng)景進(jìn)行瀏覽及位置服務(wù)。如圖2所示為系統(tǒng)的基本模塊組成。
圖2 系統(tǒng)模塊組成
根據(jù)需求,在百度地圖官網(wǎng)下載相應(yīng)的SDK文件,將其導(dǎo)入eclipse創(chuàng)建的工程中,開(kāi)發(fā)一個(gè)能夠具有實(shí)時(shí)定位和離線定位功能的二維電子地圖,并將工程導(dǎo)出Apk安裝在安卓設(shè)備上。
如圖3所示,三維室內(nèi)定位軟件的開(kāi)發(fā)過(guò)程主要包括圖中所示部分。其中模型制作和模型格式轉(zhuǎn)換是在3DMax工具中進(jìn)行操作,腳本編寫是在VS2013中進(jìn)行操作,其余部分則是在Unity3D中進(jìn)行操作。
圖3 三維室內(nèi)定位軟件制作流程
程序開(kāi)發(fā)中所用到的真三維模型是根據(jù)實(shí)物場(chǎng)景按比例為1制成的,先利用實(shí)驗(yàn)室自主研發(fā)的Z-system雙目立體視覺(jué)系統(tǒng),并結(jié)合為配合雙目立體視覺(jué)系統(tǒng)使用而開(kāi)發(fā)的雙目系統(tǒng)測(cè)量軟件Visurv,獲取到三維空間數(shù)據(jù),再通過(guò)3DMax 軟件按獲取到的三維空間數(shù)據(jù)建立三維模型。并把模型文件轉(zhuǎn)換為FBX格式,便于Unity3D對(duì)模型的識(shí)別和導(dǎo)入。
將模型載入U(xiǎn)nity3D中,進(jìn)行三維室內(nèi)定位軟件的場(chǎng)景搭建[12]。為場(chǎng)景尋找一個(gè)合適的點(diǎn)作為場(chǎng)景所在空間坐標(biāo)系的原點(diǎn),并給模型的每一個(gè)組成部分添加Mesh Collider組件使模型具有碰撞屬性。切換到Navigation面板將導(dǎo)航時(shí)所能經(jīng)過(guò)的路徑模型(一般為路、樓道、樓梯等)設(shè)置為Walkable,即選擇可路徑烘焙的對(duì)象,如圖4所示為烘焙后的效果圖。
圖4 路徑烘焙
路徑烘焙是使軟件能夠具有位置服務(wù)功能,自動(dòng)尋路到所選擇的位置服務(wù)地點(diǎn),在場(chǎng)景中添加需要位置服務(wù)的地點(diǎn),即能夠自動(dòng)尋路的地點(diǎn)。位置服務(wù)功能是基于A*算法實(shí)現(xiàn)的,A*算法的思想是,首先設(shè)置一個(gè)Open表,一個(gè)Close表。A*算法每一個(gè)點(diǎn)都有一個(gè)估值函數(shù)F用來(lái)評(píng)價(jià)當(dāng)前點(diǎn)到目標(biāo)點(diǎn)的估值,F(xiàn)值越高表明到目標(biāo)空間上越遠(yuǎn)。初始狀態(tài)的時(shí)候,把起點(diǎn)放在Open表中,Close初始為空。在Open表中選取一個(gè)F值最小的節(jié)點(diǎn)作為當(dāng)前節(jié)點(diǎn),并將其添加到Close表并從Open表中移除。如果為終點(diǎn)節(jié)點(diǎn)則搜索結(jié)束,否則處理當(dāng)前節(jié)點(diǎn)的所有臨接節(jié)點(diǎn),如果這些節(jié)點(diǎn)不在Open表中,那么就將其添加到Open表,并找出其臨接節(jié)點(diǎn)的最優(yōu)點(diǎn),再加入Open表,重復(fù)此過(guò)程,直到找到目標(biāo)節(jié)點(diǎn)位置,通常情況下,最優(yōu)路徑就是最短路徑。
在Unity3D中利用自帶的用戶界面組件給程序設(shè)計(jì)操作界面實(shí)現(xiàn)三維室內(nèi)定位軟件的人機(jī)交互功能,并創(chuàng)建對(duì)應(yīng)C#腳本實(shí)現(xiàn)軟件功能。在導(dǎo)出Apk文件時(shí),程序的包名按格式“com.CCD.程序名稱_緯度_經(jīng)度”進(jìn)行導(dǎo)出,其中程序名稱由開(kāi)發(fā)者根據(jù)模型的名稱自定義選取,緯度和經(jīng)度則是該模型所在地的經(jīng)緯度保留小數(shù)點(diǎn)后六位并去除小數(shù)點(diǎn)后的數(shù)值,即相當(dāng)于將經(jīng)緯度乘以1 000 000后保留整數(shù)部分,經(jīng)緯度的查詢應(yīng)該以百度地圖為準(zhǔn)。按此格式進(jìn)行包名的命名是為了和在eclipse下開(kāi)發(fā)的二維室外定位軟件相呼應(yīng),便于模型所在地的經(jīng)緯度數(shù)據(jù)直接傳遞給二維軟件,從而使二維軟件能夠快速識(shí)別和調(diào)用此時(shí)所在地的基于真三維模型設(shè)計(jì)的三維軟件。
系統(tǒng)工作流程如圖5所示,啟動(dòng)安裝在安卓設(shè)備上的二維電子地圖,并確保GPS和WiFi功能已開(kāi)啟從而進(jìn)入實(shí)時(shí)定位模式,程序?qū)⒍ㄎ坏酱藭r(shí)設(shè)備所處二維平面所在位置(若選擇離線定位,則需用戶自行選定定位地點(diǎn)),并按就近原則對(duì)三維室內(nèi)定位軟件中的模型所在實(shí)際位置進(jìn)行排序,開(kāi)啟三維室內(nèi)定位軟件,選擇位置服務(wù)的地點(diǎn),軟件將自動(dòng)尋路到該地點(diǎn)處,如果用戶所處位置即為位置服務(wù)地點(diǎn),系統(tǒng)則完成了定位功能。用戶也可選擇通過(guò)操作虛擬搖桿對(duì)場(chǎng)景位置進(jìn)行改變,通過(guò)現(xiàn)實(shí)環(huán)境和虛擬環(huán)境進(jìn)行對(duì)比,獲取此時(shí)所處位置。在不需要定位時(shí),用戶亦可操作虛擬搖桿對(duì)三維模型中的室內(nèi)場(chǎng)景進(jìn)行瀏覽和觀察,了解建筑物中室內(nèi)場(chǎng)景的具體結(jié)構(gòu)。
圖5 系統(tǒng)工作流程圖
如圖6(a)所示為基于百度地圖SDK開(kāi)發(fā)的二維室外定位軟件運(yùn)行界面,點(diǎn)擊界面中的空間傳感按鈕即可進(jìn)入三維室內(nèi)定位軟件。如圖6(b)~圖6(e)所示為根據(jù)本文提出的室內(nèi)定位方法而設(shè)計(jì)的三維室內(nèi)定位軟件的運(yùn)行界面,選擇所需位置服務(wù)的地點(diǎn)并點(diǎn)擊,軟件則會(huì)將場(chǎng)景移動(dòng)到位置服務(wù)地點(diǎn)處。在位置服務(wù)過(guò)程中,在地面上有線條和箭頭提示,在屏幕上方有距離目的地的剩余距離提示。當(dāng)不需要位置服務(wù)時(shí),用戶也可通過(guò)拖拽左下角的虛擬搖桿來(lái)控制第一人稱角色移動(dòng),并且可通過(guò)滑動(dòng)屏幕來(lái)控制運(yùn)動(dòng)的方向,從而實(shí)現(xiàn)虛擬環(huán)境下對(duì)模型的整體瀏覽。目前,通過(guò)此方法已經(jīng)對(duì)學(xué)校內(nèi)的大多數(shù)學(xué)院即其他大型建筑進(jìn)行了建模[13]并開(kāi)發(fā)了相應(yīng)的應(yīng)用程序。如圖7所示為以深圳北站和廣州博物館制作的三維軟件。
三維室內(nèi)定位軟件中用到的模型數(shù)據(jù)都是符合國(guó)家精細(xì)三維模型建模標(biāo)準(zhǔn),精度在 0.2 m 以內(nèi)。根據(jù)此三維室內(nèi)定位軟件的原理,其定位精度主要受模型精度影響,在程序設(shè)計(jì)中所引起的誤差可忽略不計(jì),因此提出的基于真三維模型的室內(nèi)定位方法的定位精度在0.2 m以內(nèi)。
提出的室內(nèi)定位方法,再結(jié)合基于百度地圖SDK開(kāi)發(fā)的室外定位導(dǎo)航程序所組成的室內(nèi)外一體化定位導(dǎo)航系統(tǒng),具有直觀、全面和綜合的特點(diǎn)。具有的功能基本滿足用戶室內(nèi)外定位的需求,適用于一些大型的室內(nèi)外公共場(chǎng)合,如商場(chǎng)、機(jī)場(chǎng)和車站等。此軟件在消防方面意義巨大,利用此軟件消防人員可以快速了解建筑的內(nèi)部結(jié)構(gòu)并迅速做出相應(yīng)的消防措施,能夠有效地減少災(zāi)害損失。在購(gòu)物商場(chǎng)內(nèi),也可將商品放置在軟件模型中,讓買家能夠不在現(xiàn)場(chǎng)也能直觀地觀察商品[14]。但是,由于百度地圖SDK和導(dǎo)航SDK沖突,系統(tǒng)分為了二維室外定位軟件部分和三維室內(nèi)定位軟件部分,兩部分軟件通過(guò)數(shù)據(jù)傳遞來(lái)交換信息,無(wú)法將兩部分直接集成在一個(gè)應(yīng)用程序中。后續(xù)將對(duì)系統(tǒng)進(jìn)一步優(yōu)化,使三維室內(nèi)定位部分直接以離線地圖包的形式載入二維電子地圖,從而實(shí)現(xiàn)系統(tǒng)整體化。另外,由于在對(duì)室內(nèi)場(chǎng)景進(jìn)行完數(shù)據(jù)采集后,制作的三維模型精度越高,所耗費(fèi)的時(shí)間相對(duì)較久,無(wú)法達(dá)到數(shù)據(jù)獲取后迅速生成三維模型的需求,因此還需對(duì)該系統(tǒng)進(jìn)一步優(yōu)化以使系統(tǒng)更能滿足用戶要求。
圖6 軟件運(yùn)行界面
圖7 其他三維模型