目的:人們在導航時往往需要設定具體的起點和終點,但有時他們可能只想找到某個型別的地方,比如最近的商店或廁所。
需求?最短距離、最快速路徑、最簡單或最少轉彎的路徑、最少或最多空間訪問、最少障礙物的路徑、一般安全路徑、避開動態障礙物的安全路徑、健康最優路徑(例如特定程度的卡路里消耗)、最小交通相關空氣汙染暴露、覆蓋最多頂部的路徑、通往最近半室內空間的路徑、室內旅行商問題路徑,考慮使用者維度的路徑。
準備室內導航網路:1、先將室內空間抽象為導航節點(圖c) 2、走廊空間細分 ?生成節點(圖c)3、Voronoi生成室內導航網路
概念和引數:
引數 | 定義 | |
---|---|---|
space | 空間 | N1-N22,R1-R7 |
dw | 步行距離 | 以此為半徑畫圓 |
Rs' | 潛在可達節點 集合 | 位於圓圈內的節點,如N7,R3 |
lp | 導航路徑長度 | 沿著導航路徑從起點到終點的距離 |
Rs | 可達節點 集合 | lp<dw 時的空間 ,Rs⊆RS' |
Ts | 過渡空間 | 兩層樓之間的樓梯 |
dt | 過渡距離 | 從一層到另一層的過渡空間的距離 |
dr | 剩餘步行距離 | dr=dw-lp |
五個步驟:
step1:將Rs'設定在起點所在的樓層,畫二維圓
step2:將Rs'按照與起點的直線距離降序排列
step3:在排序後的RS'的基礎上,根據Dijkstra一一計算出從起點到它們的最短導航路徑。導航路徑包含的所有節點都被記錄在RS集合中。並記錄這些路徑的長度在lp中。
step4:如果在可達空間Rs集合中存在一些過渡空間TS,計算每個Ts的dt,如果dr>dt,則返回步step1,且起點被設定到了另一層的TS上,且 dr要減去dt
如圖所示:A為起點,B在dw為半徑的圓內,A到B的導航路徑長度為lp。上下是相鄰的兩個過渡空間Ts。一旦(dr=dw-lp)>dt,則起點會被設定到過渡空間Ts上,即B1或B2點。並重復前四個步驟,步行距離要減去dt。
step5:最後,從Rs中選擇目的地,同時也選擇了路徑。
實驗結果:
一、從五樓的Nespresso出發,找到最近的廁所,dw=150m。
a)在五樓以dw為半徑畫二維圓,生成Rs'集合(81個) b)將直線距離按降序排列,計算lp,找到 lp<dw的Rs集合(56個)其中有7個過渡空間Ts。
表)7個Ts的dt和dr如表所示,發現EscalatorB_L5的dr<dt,所以排除。剩下6個Ts將作為新的起點,用(dr-dt)作為新的搜尋半徑
最後找到了18個可到達的空間,其中9個位於四樓,另外9個位於六樓,如果裡面包含廁所,就找到了目的地。
二、從一樓Fone King出發,想要找到最近的印表機,dw=150m。
a)彩色圓圈顯示搜尋區域從下層到上層變得越來越小
a)同一層的印表機Printer_A(143.63) b) Printer_B(125.01)的實際步行距離比到Printer_A(143.63)短