Surfel
- 又稱: surface element
- 類別: Sensing › 3D maps & reconstruction
- 標籤: mapping, slam, 3d-reconstruction, lidar, 3d-perception
表面元素:一個帶有位置、法向量與半徑的小型有向圓盤,通常也帶有顏色、信賴度與時間戳記,用於建立稠密的 3D 地圖。
定義
面元(surfel,surface element 的縮寫)是近似一小塊表面的小型平面圓盤。每個面元至少儲存一個 3D 位置、一個法向量與一個半徑,建圖系統通常還會加入顏色、信賴度或穩定度數值,以及它被建立與最後一次更新的時間等欄位。面元由 Pfister 與同事於 2000 年作為電腦圖學中的算繪基元提出,後來被用於以深度攝影機與光達進行的稠密 3D 重建與 SLAM。
面元地圖介於原始點雲與網格或體積地圖之間。與單純的點不同,面元帶有方向與範圍,因此可以算繪成看起來封閉的表面,並能以點對面距離與新的量測比較。與體素網格上的截斷有號距離場不同,它們不需要固定的體積,也不需要固定的解析度,而且可以個別移動。最後這項特性對 SLAM 很重要:當迴圈閉合修正軌跡時,ElasticFusion 等系統會以變形圖讓面元地圖變形,而不是重建一個體積。
在典型的面元 SLAM 流程中,目前的地圖會從估計的感測器姿態進行算繪(通常在 GPU 上),產生一張由位置與法向量構成的模型影像。新的一幀會與這個算繪結果對齊,為 ICP 式對位提供快速的投影式資料關聯。與既有面元相符的量測會以加權平均更新該面元並提高其信賴度;不相符的量測會建立新的面元,而很少被確認的面元則會被移除。SuMa 與 SuMa++ 把這套方案應用於旋轉式光達,使用距離影像進行算繪,SuMa++ 還為每個面元加上語意標籤,以濾除移動中的物體。
為何重要
面元提供稠密且可編輯的表面地圖,支援快速對位,而且在迴圈閉合後不必重建就能修正。它們是稠密 RGB-D SLAM 與光達 SLAM 中的常見選擇,類似的有向圓盤也出現在較新的神經場景表示與以高斯為基礎的場景表示中。
主要應用
- 稠密 RGB-D SLAM 與室內 3D 重建
- 用於戶外駕駛與建圖的光達 SLAM
- 帶有逐面元類別標籤的語意建圖
- 掃描場景的以點為基礎的算繪
- 迴圈閉合後的地圖變形
實際應用
某團隊以裝在汽車上的旋轉式光達為一個城市街區建圖,使用的是以面元為基礎的 SLAM 系統。對每一次新的掃描,系統在預測的姿態下把目前的面元地圖算繪成距離影像,以點對面 ICP 將掃描與之對齊,再把相符的點融合進既有面元,同時為不相符的區域加入新的面元。工程師調整決定何時信任一個面元的穩定度門檻,以及移除不再被觀測到之面元的規則,否則已經駛離的停放車輛會一直留在地圖中。來自分割網路的語意標籤會附加到每個面元上,讓位於移動車輛上的點能被排除在對位之外。
常見誤解
- 面元只是一個點 — 它還有法向量與半徑,因此是一個小型有向圓盤,而不是沒有範圍的取樣點
- 面元地圖就是網格 — 面元彼此不相連,相鄰面元之間沒有明確的拓樸關係
- 面元需要固定的體素網格 — 它們存在於連續空間中,這是它們相對於體積地圖的優勢之一
- 每個觀測到的點都會成為永久的面元 — 融合會合併重複的觀測,並移除未被確認的面元
誰需要了解
- SLAM 與 3D 建圖工程師
- 光達與 RGB-D 感知開發人員
- 電腦圖學與算繪工程師
- 自駕車建圖團隊
相關技術
- ElasticFusion
- SuMa
- TSDF 融合(TSDF Fusion)
- 以點為基礎的算繪(Point-Based Rendering)
- 2D 高斯潑濺(2D Gaussian Splatting)
相關術語
相關專案
- LingBot-Map: Streaming 3D reconstruction from one camera: pose and depth for every frame, live
- oomwoo: Open-source DIY robot vacuum: 3D-printed, ROS2 + 2D LiDAR, fully local.
- Cartographer: Google's real-time 2D and 3D SLAM system for multi-platform robotics
- OpenDroneMap: Open-source photogrammetry toolkit that turns drone images into maps and 3D models
- FAST-LIVO2: Fast, direct LiDAR-inertial-visual odometry from HKU-MARS, published in IEEE T-RO
- DimOS: Python robotics runtime with agents, SLAM and teleop, no ROS required