熟悉AR的朋友大多聽說過蘋果的ARKit和谷歌的ARCore,它們在AR體驗中起到了什麼作用?為什麼很多AR應用都要求隻有獲得認證的手機才能夠安裝使用。今天就一起來看看ARKit和ARCore背後的運行原理,解開心中的困惑。
ARKit和ARCore 從技術上講是一個視覺慣性裡程計 (VIO) 系統。VIO意味着軟件算法會實時跟蹤您在空間中的位置(您的 6dof 姿态),即您的姿态會在顯示屏上的每幀畫面刷新之間進行重新計算,大約每秒 30 次或更高頻率。
視覺慣性裡程計 (VIO)
這些計算需要并行進行兩次計算。您的姿态是通過視覺相機系統跟蹤的,每幀将現實世界中的一個點與相機傳感器上的一個像素進行匹配。您的姿态也由慣性系統(加速度計和陀螺儀組成 - 統稱為慣性測量單元或 IMU)進行跟蹤。
然後通過卡爾曼濾波器組合這兩個系統的輸出,該濾波器确定兩個系統中的哪一個提供對您的“真實”位置的最佳估計,并通過SDK對外部程序發布該姿态更新數據。
卡爾曼濾波運用
就像汽車裡程表能夠跟蹤記錄汽車行駛的距離一樣,VIO 系統跟蹤手機設備在空間中行駛的距離和朝向,包含沿空間坐标系x、y、z三個坐标軸的平移運動和旋轉運動,簡稱6 dof(自由度)運動。
6 dof圖示
AR應用中6自由度應用效果
VIO 帶來的最大優勢一是 IMU 讀數頻率大約每秒 1000 次,二是基于加速度(用戶運動)進行計算。航位推算用于測量 IMU 讀數之間的設備移動。航位推算差不多是一種猜測估計,就像我讓你走一步并猜測那一步是多少米遠,你會使用航位推算來估計距離。
航位推算
當然,如何使這個猜測估計變得高度準确需要很多算法上的推敲優化。慣性系統中的誤差會随着時間的推移而累積,因此 IMU 幀之間的時間越長,或者慣性系統在沒有從視覺系統獲得“重置校正”的情況下運行的時間越長,跟蹤偏離真實情況的時間程度就越高。
視覺光學測量以相機幀速率進行,因此通常為 30幀/秒,并且與幀之間的距離有關(幀之間的場景變化)。光學系統通常會更高程度在距離上累積誤差(在時間維度誤差累積相對小),因此您走得越遠,誤差就越大。
兩種方式比較
不過幸運的是,光學系統和慣性系統聯合起來能夠相輔相成,在發揮出各自優勢的同時抵消了劣勢。
因此,視覺和慣性跟蹤系統是基于完全不同的測量系統,沒有相互依賴關系。這意味着相機可以被短時間遮蓋或可能查看具有少量光學特征(例如白牆)的場景,此時慣性系統可以短時間“承載”幾幀。或者在設備保持靜止的狀态下,視覺系統可以提供比慣性系統更穩定的姿态。卡爾曼濾波器不斷選擇質量最好的姿态,結果是穩定的跟蹤。
平面檢測能力
ARKit和ARCore都有的一個主要功能是簡單平面檢測,這是必要的能力,因此您才有“地面”能夠放置您的内容,否則它漂浮不定的懸空中,看起來不夠真實。這是根據光學系統檢測到的特征(您在圖中看到的那些小點)計算得出的,算法隻是将它們平均起來,因為任何 3 個點定義了一個平面,如果您這樣做足夠多次消除誤差,您可以估計真正的地面在哪裡。
稀疏點雲
這些點通常被稱為“點雲”,這是另一個令人困惑的術語。這些點共同構成一個稀疏點雲,用于光學跟蹤。稀疏點雲使用更少的内存和 CPU 時間來實現跟蹤,并且在慣性系統的支持下,光學系統可以在跟蹤少量點的情況下就能工作得不錯。這是一種與密集點雲不同類型的點雲,密集點雲看起來接近真實感,有一些跟蹤器可以使用密集點雲進行跟蹤,但通常需要更高的算力。
密集點雲
幾個常見問題
我見過人們将 ARKit 或ARCore稱為 SLAM,或者使用術語 SLAM 來指代跟蹤。為了澄清起見,将 SLAM 視為一個非常廣泛的術語,例如“多媒體”。 跟蹤本身是一個更通用的術語,其中裡程計更具體,但它們在實踐中與 AR 足夠接近。這可能會令人困惑。做 SLAM 的方法有很多種,而跟蹤隻是一個完整 SLAM 系統的一個組成部分。我認為 ARKit或ARCore是一個輕量級或簡單的 SLAM 系統。
完整SLAM流程
ARKit或ARCore讓很多人困惑的的兩個“謎團”是 - “如何從單個相機鏡頭構建出3D地圖?” 、“如何獲得對象真實尺度大小(就像AR尺子測量功能應用中演示的一樣)?”。這裡的秘訣是“真正”好的 IMU 錯誤消除(即使航位推算猜測高度準确)。當你能做到這一點時,會發生以下情況:
單個相機通過移動構建3D地圖
要獲得 3D,您需要擁有來自不同位置的場景的 2 個視圖,以便利用三角測距原理對您的位置進行立體計算。這就是我們的眼睛在3D世界中查看對象的方式,也是一些跟蹤器依賴立體攝像頭的原因。如果你有2個攝像頭這很容易計算,因為您知道它們之間的距離,并且幀是同時捕獲的。當使用一台相機時,您可以捕捉一幀,然後移動,然後捕捉第二幀。使用 IMU 航位推算,您可以計算兩幀之間移動的距離,然後照常進行立體計算(實際上,您可能會從超過 2 幀進行計算以獲得更高的精度)。 如果 IMU 精度足夠高,那麼這 2 幀之間的“運動”僅通過您試圖保持手機靜止不動的微小肌肉運動就能檢測出來!
為了獲得對象真實尺度大小,該系統依賴于來自 IMU 的準确航位推算。從 IMU 給出的加速度和時間測量值,您可以反向積分以計算出速度,并再次積分以獲取 IMU 幀之間的移動距離。數學公式不是很難,難的是從 IMU 中消除誤差以獲得近乎完美的加速度測量。一個微小的誤差(在您移動手機的幾秒鐘内每秒累積 1000 次)可能意味着 30% 或者更多的尺度比例誤差。ARKit和ARCore厲害的地方就是能夠将誤差率降至個位數,遠遠優于那些開源的SLAM算法。
很小的誤差累積1000次後就無法應用
好了,關于ARKit和ARCore的介紹就到這裡,大家有什麼想法或什麼問題,歡迎在評論區發表探讨。
AR更多相關文章:
AR和VR當前面臨的技術挑戰和未來展望 為什麼說人機交互的終點是AR空間界面交互?
兵馬未動,糧草先行,AR、VR之前的3D流水線都幹了什麼活?
什麼是增強現實(AR)與虛拟現實(VR)?它們是通往元宇宙的入口嗎?
距離AR普及應用還有多遠?關于增強現實的幾點思考
北京冬奧會閉幕式上的數字AR中國結技術實現解析
空戰中飛行員如何瞄準目标?談談AR頭盔的應用
AR和IoT之間是什麼關系?相愛相殺?相輔相成?
增強現實(AR)為什麼可以無中生有?看一看魔鏡背後發生的事情
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!