熟悉AR的朋友大多聽(tīng)說(shuō)過(guò)蘋(píng)果的ARKit和谷歌的ARCore,他們?cè)贏R經(jīng)驗(yàn)中扮演了什么角色?為什么很多AR應(yīng)用程序只能安裝和使用經(jīng)過(guò)認(rèn)證的手機(jī)。
今天就一起來(lái)看看ARKit和ARCore背后的運(yùn)行原理,解開(kāi)心中的困惑。ARKit和ARCore 從技術(shù)上講是一個(gè)視覺(jué)慣性里程計(jì) (VIO) 系統(tǒng)。VIO意味著軟件算法會(huì)實(shí)時(shí)跟蹤您在空間中的位置(您的 6dof 姿態(tài)),即您的姿態(tài)會(huì)在顯示屏上的每幀畫(huà)面刷新之間進(jìn)行重新計(jì)算,大約每秒 30 次或更高頻率。
視覺(jué)慣性里程計(jì) (VIO)
這些計(jì)算需要并行進(jìn)行兩次計(jì)算。您的姿態(tài)是通過(guò)視覺(jué)相機(jī)系統(tǒng)跟蹤的,每幀將現(xiàn)實(shí)世界中的一個(gè)點(diǎn)與相機(jī)傳感器上的一個(gè)像素進(jìn)行匹配。您的姿態(tài)也由慣性系統(tǒng)(加速度計(jì)和陀螺儀組成 - 統(tǒng)稱(chēng)為慣性測(cè)量單元或 IMU)進(jìn)行跟蹤。
然后通過(guò)卡爾曼濾波器組合這兩個(gè)系統(tǒng)的輸出,該濾波器確定兩個(gè)系統(tǒng)中的哪一個(gè)提供對(duì)您的“真實(shí)”位置的最佳估計(jì),并通過(guò)SDK對(duì)外部程序發(fā)布該姿態(tài)更新數(shù)據(jù)。
卡爾曼濾波運(yùn)用
就像汽車(chē)?yán)锍瘫砟軌蚋櫽涗浧?chē)行駛的距離一樣,VIO 系統(tǒng)跟蹤手機(jī)設(shè)備在空間中行駛的距離和朝向,包含沿空間坐標(biāo)系x、y、z三個(gè)坐標(biāo)軸的平移運(yùn)動(dòng)和旋轉(zhuǎn)運(yùn)動(dòng),簡(jiǎn)稱(chēng)6 dof(自由度)運(yùn)動(dòng)。
6 dof圖示
AR應(yīng)用中6自由度應(yīng)用效果
VIO 帶來(lái)的最大優(yōu)勢(shì)一是 IMU 讀數(shù)頻率大約每秒 1000 次,二是基于加速度(用戶(hù)運(yùn)動(dòng))進(jìn)行計(jì)算。航位推算用于測(cè)量 IMU 讀數(shù)之間的設(shè)備移動(dòng)。航位推算差不多是一種猜測(cè)估計(jì),就像我讓你走一步并猜測(cè)那一步是多少米遠(yuǎn),你會(huì)使用航位推算來(lái)估計(jì)距離。
航位推算
當(dāng)然,如何使這個(gè)猜測(cè)估計(jì)變得高度準(zhǔn)確需要很多算法上的推敲優(yōu)化。慣性系統(tǒng)中的誤差會(huì)隨著時(shí)間的推移而累積,因此 IMU 幀之間的時(shí)間越長(zhǎng),或者慣性系統(tǒng)在沒(méi)有從視覺(jué)系統(tǒng)獲得“重置校正”的情況下運(yùn)行的時(shí)間越長(zhǎng),跟蹤偏離真實(shí)情況的時(shí)間程度就越高。
視覺(jué)光學(xué)測(cè)量以相機(jī)幀速率進(jìn)行,因此通常為 30幀/秒,并且與幀之間的距離有關(guān)(幀之間的場(chǎng)景變化)。光學(xué)系統(tǒng)通常會(huì)更高程度在距離上累積誤差(在時(shí)間維度誤差累積相對(duì)?。?,因此您走得越遠(yuǎn),誤差就越大。
兩種方式比較
不過(guò)幸運(yùn)的是,光學(xué)系統(tǒng)和慣性系統(tǒng)聯(lián)合起來(lái)能夠相輔相成,在發(fā)揮出各自?xún)?yōu)勢(shì)的同時(shí)抵消了劣勢(shì)。
因此,視覺(jué)和慣性跟蹤系統(tǒng)是基于完全不同的測(cè)量系統(tǒng),沒(méi)有相互依賴(lài)關(guān)系。這意味著相機(jī)可以被短時(shí)間遮蓋或可能查看具有少量光學(xué)特征(例如白墻)的場(chǎng)景,此時(shí)慣性系統(tǒng)可以短時(shí)間“承載”幾幀?;蛘咴谠O(shè)備保持靜止的狀態(tài)下,視覺(jué)系統(tǒng)可以提供比慣性系統(tǒng)更穩(wěn)定的姿態(tài)??柭鼮V波器不斷選擇質(zhì)量最好的姿態(tài),結(jié)果是穩(wěn)定的跟蹤。
平面檢測(cè)能力
ARKit和ARCore都有的一個(gè)主要功能是簡(jiǎn)單平面檢測(cè),這是必要的能力,因此您才有“地面”能夠放置您的內(nèi)容,否則它漂浮不定的懸空中,看起來(lái)不夠真實(shí)。這是根據(jù)光學(xué)系統(tǒng)檢測(cè)到的特征(您在圖中看到的那些小點(diǎn))計(jì)算得出的,算法只是將它們平均起來(lái),因?yàn)槿魏?3 個(gè)點(diǎn)定義了一個(gè)平面,如果您這樣做足夠多次消除誤差,您可以估計(jì)真正的地面在哪里。
稀疏點(diǎn)云
這些點(diǎn)通常被稱(chēng)為“點(diǎn)云”,這是另一個(gè)令人困惑的術(shù)語(yǔ)。這些點(diǎn)共同構(gòu)成一個(gè)稀疏點(diǎn)云,用于光學(xué)跟蹤。稀疏點(diǎn)云使用更少的內(nèi)存和 CPU 時(shí)間來(lái)實(shí)現(xiàn)跟蹤,并且在慣性系統(tǒng)的支持下,光學(xué)系統(tǒng)可以在跟蹤少量點(diǎn)的情況下就能工作得不錯(cuò)。這是一種與密集點(diǎn)云不同類(lèi)型的點(diǎn)云,密集點(diǎn)云看起來(lái)接近真實(shí)感,有一些跟蹤器可以使用密集點(diǎn)云進(jìn)行跟蹤,但通常需要更高的算力。
密集點(diǎn)云
幾個(gè)常見(jiàn)問(wèn)題
我見(jiàn)過(guò)人們將 ARKit 或ARCore稱(chēng)為 SLAM,或者使用術(shù)語(yǔ) SLAM 來(lái)指代跟蹤。為了澄清起見(jiàn),將 SLAM 視為一個(gè)非常廣泛的術(shù)語(yǔ),例如“多媒體”。 跟蹤本身是一個(gè)更通用的術(shù)語(yǔ),其中里程計(jì)更具體,但它們?cè)趯?shí)踐中與 AR 足夠接近。這可能會(huì)令人困惑。做 SLAM 的方法有很多種,而跟蹤只是一個(gè)完整 SLAM 系統(tǒng)的一個(gè)組成部分。我認(rèn)為 ARKit或ARCore是一個(gè)輕量級(jí)或簡(jiǎn)單的 SLAM 系統(tǒng)。
完整SLAM流程
ARKit或ARCore讓很多人困惑的的兩個(gè)“謎團(tuán)”是 - “如何從單個(gè)相機(jī)鏡頭構(gòu)建出3D地圖?” 、“如何獲得對(duì)象真實(shí)尺度大小(就像AR尺子測(cè)量功能應(yīng)用中演示的一樣)?”。這里的秘訣是“真正”好的 IMU 錯(cuò)誤消除(即使航位推算猜測(cè)高度準(zhǔn)確)。當(dāng)你能做到這一點(diǎn)時(shí),會(huì)發(fā)生以下情況:
單個(gè)相機(jī)通過(guò)移動(dòng)構(gòu)建3D地圖
要獲得 3D,您需要擁有來(lái)自不同位置的場(chǎng)景的 2 個(gè)視圖,以便利用三角測(cè)距原理對(duì)您的位置進(jìn)行立體計(jì)算。這就是我們的眼睛在3D世界中查看對(duì)象的方式,也是一些跟蹤器依賴(lài)立體攝像頭的原因。如果你有2個(gè)攝像頭這很容易計(jì)算,因?yàn)槟浪鼈冎g的距離,并且?guī)峭瑫r(shí)捕獲的。當(dāng)使用一臺(tái)相機(jī)時(shí),您可以捕捉一幀,然后移動(dòng),然后捕捉第二幀。使用 IMU 航位推算,您可以計(jì)算兩幀之間移動(dòng)的距離,然后照常進(jìn)行立體計(jì)算(實(shí)際上,您可能會(huì)從超過(guò) 2 幀進(jìn)行計(jì)算以獲得更高的精度)。 如果 IMU 精度足夠高,那么這 2 幀之間的“運(yùn)動(dòng)”僅通過(guò)您試圖保持手機(jī)靜止不動(dòng)的微小肌肉運(yùn)動(dòng)就能檢測(cè)出來(lái)!
為了獲得對(duì)象真實(shí)尺度大小,該系統(tǒng)依賴(lài)于來(lái)自 IMU 的準(zhǔn)確航位推算。從 IMU 給出的加速度和時(shí)間測(cè)量值,您可以反向積分以計(jì)算出速度,并再次積分以獲取 IMU 幀之間的移動(dòng)距離。數(shù)學(xué)公式不是很難,難的是從 IMU 中消除誤差以獲得近乎完美的加速度測(cè)量。一個(gè)微小的誤差(在您移動(dòng)手機(jī)的幾秒鐘內(nèi)每秒累積 1000 次)可能意味著 30% 或者更多的尺度比例誤差。ARKit和ARCore厲害的地方就是能夠?qū)⒄`差率降至個(gè)位數(shù),遠(yuǎn)遠(yuǎn)優(yōu)于那些開(kāi)源的SLAM算法。
很小的誤差累積1000次后就無(wú)法應(yīng)用
好了,關(guān)于ARKit和ARCore的介紹就到這里,大家有什么想法或什么問(wèn)題,歡迎在評(píng)論區(qū)發(fā)表探討。
AR更多相關(guān)文章:
AR和VR當(dāng)前面臨的技術(shù)挑戰(zhàn)和未來(lái)展望 為什么說(shuō)人機(jī)交互的終點(diǎn)是AR空間界面交互?
兵馬未動(dòng),糧草先行,AR、VR之前的3D流水線(xiàn)都干了什么活?
什么是增強(qiáng)現(xiàn)實(shí)(AR)與虛擬現(xiàn)實(shí)(VR)?它們是通往元宇宙的入口嗎?
距離AR普及應(yīng)用還有多遠(yuǎn)?關(guān)于增強(qiáng)現(xiàn)實(shí)的幾點(diǎn)思考
北京冬奧會(huì)閉幕式上的數(shù)字AR中國(guó)結(jié)技術(shù)實(shí)現(xiàn)解析
空戰(zhàn)中飛行員如何瞄準(zhǔn)目標(biāo)?談?wù)凙R頭盔的應(yīng)用
AR和IoT之間是什么關(guān)系?相愛(ài)相殺?相輔相成?
增強(qiáng)現(xiàn)實(shí)(AR)為什么可以無(wú)中生有?看一看魔鏡背后發(fā)生的事情
1.《怎么用arkit?終于找到答案了蘋(píng)果的ARKit和谷歌的ARCore對(duì)于AR起到什么作用?》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡(luò)信息知識(shí),僅代表作者本人觀點(diǎn),與本網(wǎng)站無(wú)關(guān),侵刪請(qǐng)聯(lián)系頁(yè)腳下方聯(lián)系方式。
2.《怎么用arkit?終于找到答案了蘋(píng)果的ARKit和谷歌的ARCore對(duì)于AR起到什么作用?》僅供讀者參考,本網(wǎng)站未對(duì)該內(nèi)容進(jìn)行證實(shí),對(duì)其原創(chuàng)性、真實(shí)性、完整性、及時(shí)性不作任何保證。
3.文章轉(zhuǎn)載時(shí)請(qǐng)保留本站內(nèi)容來(lái)源地址,http://f99ss.com/gl/3047304.html