GPS 穩定演算法:完美軌跡背後的秘密

Hikingbook Team
Hikingbook Blog
Published in
8 min readApr 15, 2020

--

如果你是常用軌跡記錄 App 來追蹤自己的活動(跑步、單車、登山等)的人,在使用不同 App 的時候,有沒有看過像是下圖「失控」的軌跡?你是否懷疑過,是不是自己的 App 設定或手機哪裡有問題?

先別急著怪罪 App 或手機!其實,會出現像圖片中鬼畫符的軌跡,是因為 「GPS 定位誤差」所造成的結果;自從 GPS 技術問世、普及後,如何穩定 GPS 訊號,就一直是運用 GPS 技術的公司需要克服的問題,也是不少學術研究探討的主題。今天這篇文章,就要來跟大家談談,在 Hikingbook App 內,我們怎麼去解決這個問題,現在就一起來了解吧!

某個失控的軌跡圖(玉山群峰)

話說從頭:GPS 與定位

【Hikingbook 科普教室】認識 GPSGPS(Global Positioning System)是 1973 年美國國防部因應軍事需求而研發與建立的全球衛星定位系統,於 1983 年部分開放給民間使用(軍用版 GPS 比民用版 GPS 精準),2000 年全面開放。隨著科技的發展,GPS 系統有越來越多的演進,減少 GPS 誤差與加速處理,如:DGPS(Differential GPS,差分全球定位系統),以及在智慧型手機廣泛使用的 AGPS(Assisted GPS,輔助全球衛星定位系統)等。

GPS 定位系統,是由至少 24 顆環繞在地球周圍的衛星所組成(至 2019 年,共有 31 顆在運行),而至少要收到 4 顆 GPS 衛星的訊號,才能夠定位。因此,如果處在不見天日的地方,如:地下室、密閉空間或是抬頭只能看到一小片天空,如:高樓大廈林立的街頭、室內,都會造成定位不準或無法定位的狀況。

GPS 系統組成,可以分成三大部分:衛星、地面監控站、接收設備。地面監控站會傳遞軌道與時間等資訊、並且下指令給衛星,同時監控衛星狀況;衛星把同步後的時間與軌道資訊,傳向位於地球的接收裝備;接收裝備接收到至少 4 臺衛星所傳遞的資訊,便能計算出所在位置。三者的關係可以用下圖來理解。

GPS 組成三要素

既然 GPS 只需要衛星就可以運作,自然就不需要網路囉!這樣大家應該可以理解,為什麼在沒有 4G 訊號的山上,你的登山 App 依舊可以定位你的位置了吧!(至於為什麼在山上打開 Google Map 仍是一片空白呢?這個我們有機會再來跟大家聊聊囉!)

GPS 定位不需要網路,有衛星訊號就行!

硬體與軟體的協力:GPS 晶片與 App

如果說 GPS 靠的是衛星,理論上同一臺 GPS 接收裝置(如:智慧型手機、平板)取得的定位資訊是一樣的,那為什麼還會常聽到有人說「某某 App 定位超準,不像另一個 App 很容易亂飄」?

這是因為,雖然同一臺 GPS 接收裝置取得的定位資訊是一樣的(如下圖),但每個 App 看待 GPS 資訊的方式卻很可能是不一樣的;換句話說,每個 App 處理 GPS 資訊的演算法不同,造成最後每個 App 呈現出來的結果不同。打個比方,就像是一樣的食材,經由不同的廚師料理,就會產生不同的料理,是類似的道理。

我們在 App 中看到的定位資訊,是 GPS 晶片、作業系統與 App 協力合作的結果。

iOS 與 Android 的「Location Framework」

在了解 GPS 最基本的運作原理、也知道 App 中的定位資訊是硬體與軟體合作的結果後,對於一個 App 開發者來說,能優化的其實就只有 App(軟體)本身。也因此,在說明 Hikingbook GPS 穩定演算法之前,我們必須先來認識 iOS 與 Android 兩大平台的 Location Framework,看看到底一個 App 可以取得的定位資訊有哪些。

[iOS] Core Location

在 iOS 13 的系統版本中,可取得的定位資訊包括:座標、海拔、樓層、水平準確度、垂直準確度、時間、瞬間速度、方向。

iOS 13 可取得的定位資訊
iOS 13 可取得的定位資訊

[Android] Location

而在 Android 10 的系統版本中,可取得的定位資訊包括:水平準確度、海拔、方位、方位準確度、緯度、經度、GPS 資訊提供者、瞬間速度、瞬間速度準確度、時間、垂直準確度。

Android 10 可取得的定位資訊
Android 10 可取得的定位資訊

從以上兩張表可以發現,Android 提供的定位資訊比 iOS 來得多,也因此在設計 GPS 穩定演算法時,Android App 或許可以更加準確(畢竟可參考資料較多),但其實只要使用最基本的座標、海拔、水平準確度、垂直準確度、速度與時間,便可設計出好的穩定演算法。

座標、海拔、水平準確度、垂直準確度、時間,是穩定演算法不可或缺的資訊。

Hikingbook GPS 穩定演算法(Hikingbook GPS Stabilization Algorithm)

其實,GPS 的原始訊號是很雜亂的,因此如果都不做處理,在 App 裡的呈現會非常混亂,幾乎無法參考。因此,只要有支援軌跡記錄的 App,理論上都應該要對訊號作處理,才能讓使用者看到的是接近實際行走路徑的軌跡。

Hikingbook GPS 穩定演算法(Hikingbook GPS Stabilization Algorithm)從 v5.0 推出記錄軌跡功能後,經歷多次的改版、修正與精進,才演進到最新版本 v6.5.3 所使用的設計(如下圖所示):模型預測、準確度啟發式篩選、平滑與簡化。以下就來認識這三種設計怎麼畫出穩定不亂跑的軌跡。

Hikingbook GPS 穩定演算法(Hikingbook GPS Stabilization Algorithm)for v6.5.3

1. 模型預測(Predictive modeling)

當開始記錄軌跡後,利用所累積的過往定位資訊與預測模型,能夠預測未來的定位資訊並進行校正,可大幅減少第二步驟被篩選掉的資訊。

2. 準確度啟發式篩選(Accuracy Heuristic Filtering)

利用 GPS 提供的資訊,捨棄掉不合理的資訊,如:準確度過小、距離過大等,降低軌跡四處亂竄的可能性。

3. 平滑與簡化(Smoothing & Simplifying)

適度簡化軌跡點數,不僅能夠減少 GPX 檔的檔案大小,也能夠平滑軌跡,減少在同一個地點停留導致軌跡混亂的狀況。

下圖是有使用與沒使用 Hikingbook GPS 穩定演算法記錄的結果差異。

此外,依據測試,在相同路線下,使用 Hikingbook GPS 穩定演算法所產生的 GPX 檔的檔案大小,比未使用小了 14 倍之多(如下圖),這樣的好處是可以加速資料處理速度、也更不佔裝置(手機、平板)的儲存空間。

Hikingbook GPS 穩定演算法前後 GPX 檔案大小差異

在未來的 App 版本,我們仍將持續優化演算法的設計,讓每一次記錄的軌跡,都可以滿足「在不增加過多資料負荷下,盡可能貼近實際行走路跡」的目標。如果你在使用軌跡記錄時,仍有遇到一些異常的狀況,也歡迎隨時透過客服告訴我們!

結語

透過 Hikingbook GPS 穩定演算法,讓 App 使用者可以更準確地記錄所到之處;準確而不亂飄的完美軌跡,不僅可以保存真實的美好回憶,也讓這份紀錄更具備參考價值,進而讓登山資訊的流通、傳遞更有效,讓每個人都可以貢獻自己的足跡、分享寶貴經驗,貢獻社群。

Hikingbook 致力於提供登山安全的創新解決方案,整合完整登山前中後歷程,讓登山可以更安全、更方便。我們相信,人身為大自然的一份子,都能安全、自在地徜徉並享受山林;透過創新科技,希望讓每一位山林愛好者都能盡情探索自然之美。歡迎造訪我們的官網,或關注我們的 FacebookInstagramYoutube
若有任何問題,歡迎隨時來信至:support@hikingbook.net
最後,如果你喜歡這篇文章,也請幫我們拍個手,給我們繼續寫下去的動力唷!🙂

--

--