LBS应用的路径引导方法
LBS應用的路徑引導方法
發(fā)表于2015-11-16 16:46|747次閱讀| 來源《程序員》電子刊|0 條評論| 作者賈雙成
LBS智能手機定位Maneuver數(shù)據(jù)結構 程序員 摘要:目前LBS應用已在智能手機中占據(jù)了主導地位,但LBS技術覆蓋范圍太廣,很少有能深入描述LBS技術的資料。所以作者在《程序員》雜志開辟專欄來描述LBS核心技術,本文為該專欄的第三篇。編者按:目前LBS應用已在智能手機中占據(jù)了主導地位,但LBS技術覆蓋范圍太廣,很少有能深入描述LBS技術的資料。所以作者在《程序員》雜志開辟專欄來描述LBS核心技術,本文為該專欄的第三篇。
我們知道,大部分的LBS應用的一個重要功能就是其能幫助客戶實現(xiàn)路徑引導功能,比如:在團購應用中團購某商鋪的服務后,來實現(xiàn)從目前位置到此商鋪的導航。所以,本文將以LBS應用的路徑引導功能為例來講述LBS的核心技術。
路徑引導(Guidance)又被簡稱為導航,是指在路徑導航的過程,實時跟蹤當前車輛(或使用者)所在的路徑和狀態(tài),計算出當前車輛(或使用者)到下一引導點的距離、方向、下一道路名和目的地信息,并向自駕者發(fā)起視頻和語音指令,從而不斷地引導用戶方便、快速地到達(POI)目的地。
在裝有導航系統(tǒng)的汽車或手機應用內,用戶可以在導航興趣點搜索功能畫面中輸入想要去的旅游路線POI目的地——景點,然后導航系統(tǒng)會自動計算出一條最佳的行車路線。在車輛行駛的過程中,系統(tǒng)會對前方道路上的情況加以提示。一個典型應用的導航的界面,通常如圖1所示:
圖1 典型應用的導航界面
圖1中的“我的導航”,就是實現(xiàn)從A地(通常是使用者目前所處的位置)到B地的導航功能。
總的來說,一個完整導航的功能是確保用戶的軌跡保持在正確的道路上,以及當用戶到達分歧路口時,導航引擎能發(fā)出正確的提示音,這種提示音包含了“向左轉”,或者“向右轉”,或者“直行”等角度提示。相應的,導航過程中的技術難點可以分為:
定位,即:定位用戶的軌跡;
道路匹配,即:匹配用戶的軌跡到某條道路;
引導點模塊的設計,即:設計導航需要發(fā)出發(fā)出聲音的地點,以及相應的觸發(fā)原則;
引導角度的設計,即:計算用戶的“向左轉”等語音提示。
下文將依次介紹上述四個模塊。
定位模塊
在導航的過程中,由于各種原因偶爾偏離規(guī)劃的路徑行駛,一旦系統(tǒng)識別車輛(或使用者)不再行駛在給定的路徑上時,系統(tǒng)必須做出反應,應讓車(或使用者)盡力回到正確的路徑上,提醒自駕者的一個簡單方法是在界面上顯示一個方向箭頭指向預定的目的地。只有車始終偏移路徑行駛時,才考慮重新路徑規(guī)劃,讓自駕者興趣目的地導航服務跟隨無時不在。
可見,導航功能與定位以及路徑規(guī)劃功能(可參見《程序員》電子刊11A《LBS應用的定位與算路方法》一文)是密不可分的。
道路匹配模塊
所謂的道路匹配模塊是定位功能在導航功能中的應用,是指將用戶目前的位置和一條道路相匹配,從而得到用戶的軌跡,從而使用戶導航成為可能。用戶目前的位置和道路匹配的過程就是道路匹配,也稱為GPS綁定。
道路匹配方案在具體實施的過程中有很多,但其根源的方法可以分為以下兩種:
利用當前的GPS信號點與道路間進行逐個匹配:這種方法在本質上是一個利用當前的GPS信號點尋找最近鄰道路的問題。
在具體實施時,往往是將當前的GPS信號點與周圍的道路進行距離計算。距離最近的道路認為是當前的匹配道路。
具體的過程就是,先尋找到最近道路,之后進行道路綁定,GPS信號在當前綁定的道路上行駛,當?shù)竭_一個路口時,GPS信號將會重新開始綁定。
利用歷史軌跡點與當前道路的角度/距離差別進行綁定判斷:
圖2 綁定判斷過程
以圖2為例,具體的做法是:在灰色點的地方,對地圖綁定進行重新判斷,由于灰色點軌跡的方向和當前路段行駛方向的角度/距離(或者其他相似度度量)比較小,所以是當前路段的可能性比較大。
第二種做法,在本質上是一種簡單聚類的方法。這種做法與第一種做法的區(qū)別就在于引入了歷史軌跡點,由于引入了歷史軌跡點,從而可以抵消單個軌跡點的過大誤差。當導航用戶從主路轉到輔路時,由于主輔路的差距非常小,所以用聚類方法有助于提高提示的精度,不至于出現(xiàn)用戶已經(jīng)到了輔路,但是導航位置卻一直顯示在主路的情況。
引導點模塊
引導點是路徑引導的關鍵,因為在引導的過程中,最重要的就是時刻提供用戶所需的路徑引導信息,從而使用戶能一直保持在正確的路徑上。比如:導航時,發(fā)出各種語音就是當用戶到達“引導點位置”時發(fā)出的。
引導點制作是制作引導點以及相關引導信息的過程。根據(jù)實際需要,引導管理線程啟動進行引導點(列表)信息制作線程執(zhí)行制作任務。引導信息制作線程處理具體的引導點制作。引導信息制作的主要處理過程是在路徑探索完成后進行的,通過對探索路徑的遍歷,產(chǎn)生一系列控制點或行為點(Guide Point),并準備制作具體相關的引導信息,用于顯示和語音播報,從而以此為自駕者提供安全、準確的導航信息和語音指令服務。
制作過程中一個關鍵的概念是這些turn-by-turn中的“turn”控制點(或行為點),準確地說,是轉彎的衍生,即引導點(Guide Point、maneuver)信息,它好比指路向導,可以產(chǎn)生具體的語音指令和信息。引導信息包括路口的轉彎方向、下一道路名、到達距離,以及到達目的地時間和距離,當前車所在車道信息、周圍的實景、路牌指示標志(signpost)等。
由于在離前方道路不同的位置、在不同等級的道路、不同類型的引導點,引導展現(xiàn)的內容和語音播報的方式都不同,這些信息主要來源于turn-by-turn 列表。
一個實用的引導點的道路拓撲模型如圖3所示。
圖3 引導點的內部構造模型
該引導點包括的對象如下。
引導點的類型(包括行為類型、方向);
引導點的進、出道路線;
引導點的其他交叉道路(幾何構成);
引導階段提示點(Phase Advice Point,簡稱PaP);
引導點的位置;
引導點的前繼(對復合引導點)。
需要注意的是,當導航路線較長時,計算全部的Maneuver(引導點對象)耗時多,并且全部的Maneuver占用內存數(shù)量較多,因此,在設計時使用分段計算Maneuver的方式。每次只生成一定距離內的Maneuver信息,隨著車輛位置的變化,動態(tài)計算后續(xù)的Maneuver信息。
圖4的程序中,首次計算4條Maneuver,當行駛過第1個Maneuver后,更新一條Maneuver,以此類推,直到結束。
圖4 Maneuver的計算
一種簡單實用的Maneuver數(shù)據(jù)結構如下:
引導角度
在導航的過程中,語音提示是非常重要的,比如:左拐或者直行等語音提示。要想實現(xiàn)這種精確的語音提示,必須依賴使用者當前的道路定位以及當前道路與目標道路間的角度。比如:如果計算的目標道路與當前道路的角度是左側90度,那么,導航需要發(fā)出的語音是:左拐進入某某路。由于語音轉換可以由開源的文本到語音的生成器(TTS)來實現(xiàn),所以實現(xiàn)導航精度的關鍵就是計算精確的引導角度。
對拓撲關系較簡單的一般道路而言,只需要簡單的角度計算就能算出司機的行進方向。如果是環(huán)島、廣場等復雜路口,計算方法會復雜一些,這時需要考慮的角度比較多,如圖5所示。由
圖5 導航的角度計算方法
于在地圖數(shù)據(jù)中一般存儲了道路(Link)的進入、退出角度,所以在Maneuver計算時不但要使用數(shù)據(jù)提供的角度計算轉向角,還需要結合路口的拓撲關系進行全面計算,才能讓路口的提示更準確。比如圖6所示的路口情況中,帶箭頭的粗線是導航路線,無箭頭的線是路口的拓撲路線,為了使導航提示音更準確,計算轉向提示需要綜合考慮α、β、γ三個角度。
圖6 路口角度
如上所述,一個完整的導航引擎在實現(xiàn)導航時,利用了定位功能來實現(xiàn)定位用戶的位置,利用了道路匹配模塊來實現(xiàn)用戶位置和當前道路的綁定,利用了引導點模塊來實現(xiàn)導航信息的提示功能,利用了引導角度的設計模塊來實現(xiàn)精確提示音的自動生成。
作者簡介
賈雙成,阿里巴巴資深工程師,擅長于數(shù)據(jù)編譯、數(shù)據(jù)挖掘的系統(tǒng)分析和架構設計,主持研發(fā)過多個高端車載導航及adas數(shù)據(jù)編譯器。曾發(fā)表發(fā)明專利、論文四十余篇,著有《LBS核心技術揭秘》、《數(shù)據(jù)挖掘核心技術揭秘》。總結
以上是生活随笔為你收集整理的LBS应用的路径引导方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 摄像机摄标定靶标
- 下一篇: 先进驾驶辅助系统ADAS一些技术应用小结