1. 程式人生 > >關於視覺SLAM的一些常識(純小白學習筆記)

關於視覺SLAM的一些常識(純小白學習筆記)

本文只是小白對於視覺slam的一個非常泛的介紹,對於視覺slam中的數學運算均沒有提及,適合於對沒有接觸過視覺slam的新人進行一個簡單的科普。作者即小白,文章如有錯誤,非常非常非常歡迎指正!(重要的事說三遍)
注:文中相機模型圖片借用了高翔博士的ppt內容

視覺slam從根本上其實就是為了回答兩個問題,機器人在哪,機器人所處的環境是什麼樣的。這其實和人進入一個陌生的環境時所思考的問題非常相似。比如我們被拉進了一個陌生的屋子,我們會首先觀察這個屋子,觀察我們處在一個什麼樣的環境之中,接下來我們就會思考我們這是在哪。機器人同樣如此,我們是通過眼睛、大腦來完成,而機器人就是利用攝像頭和處理器來實現。視覺SLAM分為三大主要模組:前端的視覺里程計,後端優化,迴環檢測。做完這些,就可以進行建圖的工作了,也就是我們常說的三維點雲圖。前端視覺里程計的作用,簡而言之,第一是要根據攝像頭回傳的影象計算相機的幀間運動,第二就是估計路標點大致的空間位置座標。後端優化的作用就是根據前端在不同時刻計算的相機位姿計算最大後驗概率估計,可以起到狀態預測的作用。迴環檢測的作用顯而易見,當攝像頭在環境中到達了自己曾經先前到達過的位置後,因為感測器和計算過程存在誤差,所以通常建立出的點雲圖都不能做到曲線閉合。迴環檢測的功能便是判斷相機是否回到過先前位置,從而修正誤差,保證點雲圖與實際空間的理想。從前端視覺里程計講起。影象用什麼攝像頭獲取?  1.單目相機      優點:便宜啊      缺點:初始化非常不精確,容易Tracking Lost;  存在尺度不確定的問題,比如丟失深度資訊的相片中,我們能見到“手捏太陽”“借位拍照”這樣的現象。2.雙目相機       優點:被動測量深度,即可以通過計算獲得物體的深度(距離相機的前後距離)     缺點:計算量大,在特徵少的白牆、沙漠等環境很容易Tracking Lost。3.RGB-D相機    優點:利用感測器主動測量深度,TOF相機更是被稱為相機的未來。建圖準確,不易Tracking Lost           缺點:受陽光,牆面反光等影響相機的幀間運動用什麼描述? 1.旋轉矩陣、平移向量   2.四元數    3.尤拉角   這些都是描述剛體在三維空間中運動的方式,具體有什麼運算規則或者幾何意義,這篇就不詳細講了,我這個小白也講不清楚,畢竟自己都不太明白2333
怎麼通過影象計算幀間運動?        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的原始碼,有很多不懂的地方,等搞懂了裡面的數學運算再寫一寫。