search
尋找貓咪~QQ 地點 桃園市桃園區 Taoyuan , Taoyuan

史上最穩?微軟HoloLens中的SLAM技術大揭秘

IMU包含有陀螺儀(就不多說了)、環境感知攝像頭和深度攝像頭,(說人話!明明不就是攝像頭嘛!手機也有攝像頭啊?)區別就是,HoloLens有深度攝像頭,這種攝像頭和普通攝像頭的不同就是能夠獲得拍攝對象的深度信息,也就讓HoloLens獲得了環境三維立體數據。如下圖所示。

從HoloLens中SLAM技術揭秘(上)的小測試里,我們知道,「我在哪兒(定位)」「我周圍有什麼(三維場景重建)」離不開環境感知攝像頭。HoloLens的定位不依賴深度攝像頭,而對周圍三維環境構建也不僅僅依賴深度攝像頭。

那麼問題來了,環境感知攝像頭是怎麼知道HoloLens在空間中的位置呢?深度攝像頭又是如何重建三維場景呢?這就涉及到SLAM了。

SLAM作為一個三維感知的基礎技術並不新鮮,SLAM從提出到現在已經三十多年,用於解決實現機器人的自主定位和導航。微軟的SLAM項目早在2001年11月5日就創立了。目前SLAM體系發展已經相當龐大。

今天我們只談HoloLens使用的技術,就是攝像機里的單目視覺和RGBD類。

單目視覺,就是依靠一個攝像頭去完成SLAM。HoloLens有4個環境感知攝像頭,仔細看下,你會發現,靠內的兩個攝像頭朝向前方,靠外的兩個攝像頭分別朝向左右兩邊。主要起作用的是靠內的攝像頭,只要靠內的攝像頭有一個不被遮擋,即使其他三個攝像頭被遮擋,也不會影響HoloLens對空間位置的感知。

HoloLens正是用單目SLAM。首先提取圖像中的特徵,然後根據相鄰幀圖像的特徵去匹配,識別出場景某些特徵點位置,並通過圖像的變化反向計算出相機的運動。

[相機位置追蹤 來自 極客頭條-張哲《SLAM剛剛開始的未來》]

由於有深度攝像頭,HoloLens並不需要靠環境感知攝像頭去獲得場景每個像素的深度值,只需要根據一些匹配上的關鍵特徵點計算出攝像頭相對場景位置即可。否則僅僅依靠環境感知攝像頭計算場景所有深度信息,代價相當大。

RGBD類。最大的特點是可以通過紅外結構光或Time-of-Flight原理,直接測出圖像中各像素離相機的距離。因此,它比傳統相機能夠提供更豐富的信息,也不必像單目或雙目那樣費時費力地計算深度。HoloLens的深度攝像頭用的便是Time-of-Flight原理,即通過從投射的紅外線脈衝反射回來的時間來獲得Depth的信息。由於使用紅外線,也正是為什麼HoloLens對黑色表面識別不好的原因。

HoloLens的三維場景重建利用的是Richard Newcombe發明的Kinect Fusion。為了更好理解Kinect Fusion,可以想象下,我們在玩雕塑。先是有一個巨大的方塊,我們一個角度去挖,挖到想要成型樣子的表面就不挖了。挖多深,用的就是深度圖的信息。然後不斷換角度,繼續重複上面的,這樣多個角度后,雕塑的樣子慢慢浮現出來。

具體重建三維場景流程如下圖:

[來自 Microsoft Developer Network]

a)讀入的深度圖像轉換為三維點雲並且計算每一點的法向量。

b)相機的追蹤。Kinect Fusion是計算得到的帶有法向量的點雲,和通過光線投影演算法根據上一幀位置從模型投影出來的點雲,利用 ICP 演算法配准計算位置,但深度攝像頭的精細度並不高,如果HoloLens採用深度圖數據來計算HoloLens位置,誤差會挺大,全息場景也不會穩定固定在空間里。相機的位置用的是環境感知攝像頭計算出來的。

c)根據相機的位置,將當前幀的點雲融合到網格模型中去。

d)根據當前幀相機位置利用光線投影演算法從模型投影得到當前幀視角下的點雲,並且計算其法向量,用來對下一幀的輸入圖像配准。

如此是個循環的過程,通過移動相機獲取場景不同視角下的點雲,重建完整的場景表面。

現在,你應該對HoloLens中SLAM技術的使用有個清晰的認識了吧!

目前對SLAM的研究依然還在繼續,由於產品和硬體高度差異化,而SLAM相關技術的整合和優化又很複雜,導致演算法和軟體高度碎片化,市場上真正能在實際應用中運用SLAM的產品不多。



熱門推薦

本文由 yidianzixun 提供 原文連結

寵物協尋 相信 終究能找到回家的路
寫了7763篇文章,獲得2次喜歡
留言回覆
回覆
精彩推薦