1. 程式人生 > >SLAM學習基礎(二)——《視覺SLAM十四講》讀後感、SLAM核心技術總結(部分)

SLAM學習基礎(二)——《視覺SLAM十四講》讀後感、SLAM核心技術總結(部分)

(1)《視覺SLAM十四講》_高翔

第一遍學習:

《視覺SLAM十四講》這本書,很詳細的從幾何學的角度講述了SLAM的各種核心技術。是成為一名SLAM技術的邊緣OB者的不二選擇。

本書的前六講主要是在安裝庫(當然,順道介紹書數學基礎知識),SLAM執行需要的各種庫,因為我是在ubuntu16.04下做的,很多依賴項因為系統版本更新都變了,不過問題不大,如果安裝報錯,系統會提醒我們可以相應依賴項在什麼新的lib***-dev裡面有照著安就完事了。

系統這個東西,沒啥好說的。找本薄點的書,外加每個命令敲一敲,通過實踐來慢慢熟悉這個系統吧~

接下來的幾講,分別介紹了SLAM技術的前端,後端,迴環檢測和建圖。具體是什麼,看書吧,很詳細啦~

SLAM和SFM的區別,可以把SLAM理解成實時的SFM。同時SFM給出的影象可以不具有時間順序,並且因為沒有時間限制,可以不選擇0RB-SLAM(特徵點法的標杆)中的ORB做特徵點提取,可以選擇恢復三維模型效果更好的SIFT/SURF特徵提取方法。

這本書的核心在於向我們展示了完整而基礎的SLAM幾何框架下的核心技術,然而實際的SLAM系統是一個完整的東東,不會一個部分一個CMAKE,換言之一個main.cpp就完事了,所以你如果裡面那個部分暫時沒弄懂,別慌,有開源的完整程式碼在,那個能搞懂就OK了,當然能都跑一下,感受一下各部分的作用也是很棒的,加油!!!(這是我第一遍的理解,其實也有點問題,呵呵)

對了,學這本書的時候,學會看cmakelist.txt,不弄懂後面白搭!!!

第7章對應傳統的特徵點法,第8章對應較新一點的直接法。兩者各有千秋,我愛特徵!!

PS: 有對PL-SLAM感興趣的沒,交流一下啊~

第二遍學習:

第二遍看,發現4、6、10章串起來g2o那篇論文,這三章需要有一個整體的理解。並且他和Isam不是一路數,具體區別,還不知道。

第9章,是一個微型化的工程,在第一遍看的時候,C++基礎不牢固,也沒學設計模式,就簡單跑一下程式碼,這很不科學。有了相關基礎才能瞭解一個軟體框架為什麼這麼搭,這是看一個實際工程的基礎。所以,在第一遍近乎跳過的這一章,需要細細品讀。

(2)SLAM核心技術總結

(0)【泡泡機器人公開課】公開課連結(實時更新)

找自己相關,並且感興趣的東西看看吧~

https://www.rosclub.cn/post-1065.html

(1)Bundle Adjustment到底是什麼?

Bundle adjustment優化的是sum of reprojection error,這是一個geometric distance(為什麼要minimize geometric distance可以參考[Hartley00]),問題可以formulate成一個least squares problem, 如果nosie是gaussian的話,那就是一個maximum likelihood estimator,是這種情況下所能得到的最優解了。

機器人導航中,2D的特徵reproject回三維域內,和真正的3D點的位置會有偏差。但是在物理意義上,3D點和投射到攝像機的2D特徵點是同一個點。所以這個誤差出現在計算3D點時攝像機自身旋轉矩陣和位移向量上。

Bundle Adjustment的作用是,通過least square等演算法,去最小化這個偏差,以此得到機器人移動和方向的精確值。這在物理意義上是最精確的,是Visual SLAM問題的state-of-art解決方法。

作者:versatran01
連結:https://www.zhihu.com/question/29082659/answer/62472382
來源:知乎
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處

下面是個人的一點認識:

以ORB-SLAM為例,我們談論BA,在ORB-SLAM中主要指的是Localmapping執行緒(後端)中同時對路標點和位姿進行區域性BA優化的過程。而在Tracking執行緒(前端)是進行僅位姿的優化估計,路標點是不進行調整的,這為了保證計算速度。

(2)RANSAC隨機抽樣一致性演算法

概述:
RANSAC演算法的輸入是一組觀測資料,一個可以解釋或者適應於觀測資料的引數化模型,一些可信的引數。
RANSAC通過反覆選擇資料中的一組隨機子集來達成目標。被選取的子集被假設為局內點,並用下述方法進行驗證:
1.有一個模型適應於假設的局內點,即所有的未知引數都能從假設的局內點計算得出。
2.用1中得到的模型去測試所有的其它資料,如果某個點適用於估計的模型,認為它也是局內點。
3.如果有足夠多的點被歸類為假設的局內點,那麼估計的模型就足夠合理。
4.然後,用所有假設的局內點去重新估計模型,因為它僅僅被初始的假設局內點估計過。
5.最後,通過估計局內點與模型的錯誤率來評估模型。
這個過程被重複執行固定的次數,每次產生的模型要麼因為局內點太少而被捨棄,要麼因為比現有的模型更好而被選用。

優缺點:
A. RANSAC的優點是它能魯棒的估計模型引數。例如,它能從包含大量局外點的資料集中估計出高精度的引數。RANSAC的缺點是它計算引數的迭代次數沒有上限;如果設定迭代次數的上限,得到的結果可能不是最優的結果,甚至可能得到錯誤的結果。RANSAC只有一定的概率得到可信的模型,概率與迭代次數成正比。RANSAC的另一個缺點是它要求設定跟問題相關的閥值。
RANSAC只能從特定的資料集中估計出一個模型,如果存在兩個(或多個)模型,RANSAC不能找到別的模型。
B. 經典RANSAC有以下三個主要的侷限性:
(1) 效率:經典方法效率與子集大小、類內點比例以及資料集大小有關,因此在某些場景下效率較低。
(2) 精度:經典方法計算引數時選取最小子集是從效率的角度考慮,往往得到的是非最佳引數,在應用產引數 之前還需要再經過細化處理。
(3) 退化:經典方法的目標函式求取最大化的過程基於一個假設:“選取的最小子集中如果有類外點,那麼在這種情況下估計的引數獲得的目標函式(資料集中點的個數)往往較少“但這種情況在退化發生時有可能是不對的。

https://blog.csdn.net/darlingqiang/article/details/79457596

RANSAC演算法與最小二乘法的不同之處主要有以下兩點:

  1. 最小二乘法總是使用所有的資料點來估計引數,而RANSAC演算法僅使用局內點;
  2. 最小二乘法是一種確定性演算法,給定資料集,每一次所得到的模型引數都是相同的;而RANSAC演算法是一種隨機演算法,受迭代次數等的影響,每一次得到的引數一般都不相同。
  3. 一般而言,RANSAC演算法先根據一定的準則篩選出局內點和局外點,然後對得到的局內點進行擬合,擬合方法可以是最小二乘法,也可以是其他優化演算法,從這個角度來說,RANSAC演算法是最小二乘法的擴充套件。
    RANSAC的基本假設是:
    (1)資料由“局內點”組成,例如:資料的分佈可以用一些模型引數來解釋;
    (2)“局外點”是不能適應該模型的資料;
    (3)除此之外的資料屬於噪聲。
    局外點產生的原因有:噪聲的極值;錯誤的測量方法;對資料的錯誤假設。

(3)移動機器人的避障方法(四類主流感測器介紹)
https://www.rosclub.cn/post-1079.html

補充:深度相機簡介

https://blog.csdn.net/qq_37764129/article/details/81011221
https://blog.csdn.net/bingoplus/article/details/56667475