關於視覺SLAM的一些常識(純小白學習筆記)
阿新 • • 發佈:2019-01-25
本文只是小白對於視覺slam的一個非常泛的介紹,對於視覺slam中的數學運算均沒有提及,適合於對沒有接觸過視覺slam的新人進行一個簡單的科普。作者即小白,文章如有錯誤,非常非常非常歡迎指正!(重要的事說三遍)
注:文中相機模型圖片借用了高翔博士的ppt內容
怎麼通過影象計算幀間運動? 1.相機模型:針孔相機模型
2.視覺里程計中最基本的問題就是給定兩個已經成功匹配的空間點在相機平面內投影的座標,如何計算相機在這兩個觀察點之間的運動狀態。怎麼進行點的匹配?每幀影象包含的資訊:關鍵點、描述子。關鍵點是影象資訊最集中的部分。描述子是用於區別每個特徵點的資訊,用於不同幀影象間同一對特徵點的匹配。
特徵點匹配演算法:ORB、SIFT、SURF 等。
怎麼計算兩點間的運動狀態?1)計算方法:對極幾何方法、PnP方法、ICP方法。
對極幾何方法:知道兩組畫素的位置,估計相機運動狀態。 每兩個成功匹配的點可以 提供一對對極約束,提供八個點就可以計算出本質矩陣(八點法),對本質矩陣進行SVD分解就可以解出相機運動的旋轉矩陣R和平移向量t。PnP方法:知道一組匹配點的空間位置和在相機平面的投影位置,估計相機運動狀態。
ICP方法:知道兩組點的空間位置,估計相機運動狀態。
2)優化方法:BA優化。BA優化是利用迭代法(牛頓迭代、列文伯格-馬克爾特迭代法等)對R,t的值進行多次迭代使得誤差值最小化。
後端優化部分(多為一些比較成熟的演算法)
主要方法:1、基於濾波器 :KF、EKF
2、基於非線性優化:圖優化、因子圖
EKF:將系統線性化,用高斯分佈近似觀測噪聲,並利用卡爾曼濾波進行狀態更新。
圖優化:給定初值後不斷迭代更新圖,主要利用的是g2o庫
迴環檢測部分作用:當相機在空間中運動的時候,很有可能出現相機所在的點在之前到達過的情況。此時三維重建的點雲圖上,相機的運動軌跡應該是閉合的曲線。但是由於感測器存在誤差,計算過程也有很大的誤差,所以點雲圖上,相機的軌跡通常不閉合。詞袋檢測可以判斷相機是否在曾經到達過當前點,如果到達過,則讓點雲圖軌跡閉合。實現方法:建立詞袋,可以理解為一個袋子,這個袋子裡裝著每一幀影象中的特徵元素。利用詞袋比較每兩幀影象的相似度,當相似度大於某一個閾值的時候,就認為這兩幅影象是在同一點觀測到的,相機回到了曾經到達過的位置。
視覺slam大概簡介就這些,最近剛看完了lsdslam和orbslam的原始碼,有很多不懂的地方,等搞懂了裡面的數學運算再寫一寫。