SLAM十四講 學習

2021-08-28 11:25:27 字數 3014 閱讀 4719

最近在看高翔博士的 視覺slam十四講,這本書對於入門來卻是非常的直接,有著很多可以學習借鑑的知識。但是只是看一遍並沒有多大的收穫,因此在這裡稍微的記錄,方便自己之後的回顧學習。

首先是對自己學到的東西進行的反思,除了基本的概念之外,我還逐個把書上的**寫了一遍,並在ubuntu 18.04之上執行。這些過程雖然繁瑣,而且花費了非常長的時間,但是這對於入門來說,還是必須的。通過親自把**實現,學習了常用的cmake,

各種常用庫包括opencv,pcl,ceres,g2o,egien等等,對於之類的操作也會變得得心應手。此外,對於cmakelists.txt的表達也有了一定的認識(找別人寫好的啊)。

在ubuntu上也嘗試了新出的編輯軟體visual studio code,對於計算機的處理編譯過程,有了新的更深的認識。

這些認識也都只是自己的體會,是否準確還得進一步的學習驗證啊。不求甚解的學習態度,就是打不好地基的建築,走不了太遠的。

首先是cmake的學習。cmake在ubuntu之中可以直接利用terminal呼叫,經過一系列的慣常操作(可以寫成執行文件直接執行的)。

常用過程如下:

//在當前包含cmakelists.txt文件下,開啟終端

mkdir build

cd build

//這兩步可以將編譯中生成的臨時檔案儲存在build資料夾之中

//從而不汙染原本資料夾中的資料,可以將build直接刪除

cmake .. //.代表當前目錄, ..代表上一級目錄

make

到了這一步,基本上程式已經編譯完全了,make後會在當前資料夾生成可執行檔案,檔名也是在cmakelists.txt之中已經定義過的,之後就用name.out進行代替。在terminal之中可以直接執行 ./name.out 執行,檢視最終的執行成果。

在windows下習慣了雙擊安裝,然而現在網上各種庫都是提供原始碼,讓自己編譯安裝,剛開始實在是有點頭疼。不過仔細的學習之後,發現也並沒有什麼太難的地方。庫的安裝其實在**上已經寫得很清楚,或者是大同小異,熟悉之後也都是常見的操作了。

在**上提供資源包的時候,ubuntu下的安裝就很簡單,只需要使用下面的程式就行

sudo apt-get install 程式資源包
但是有一點沒有搞明白,如何知道安裝庫的時候,需要先預先安裝什麼相關的依賴項。目前就是在網上搜尋,看看別人發的各種部落格,跟著安裝。其實我想這些資訊,提供庫原始檔的**上應該也都會提供,但是目前我也沒有仔細的看過,也就這樣把問題放了過去。

在使用 sudo apt-get install 的時候,其實在沒新增其餘庫鏈結位址的時候,系統預設在

之上搜尋對應的安裝包。因此,如果我們找到的教程中,安裝的依賴項因為版本問題對不上的時候,可以先在

**上搜一下,找到對應版本號下的依賴項名稱,在進行安裝。詳細的介紹在這裡:

安裝好依賴項之後,接下來是對只提供原始碼的庫進行編譯安裝。過程也比較固定,就是在包含庫檔案的第一級目錄下,開啟terminal利用cmake進行編譯,過程和之前的cmake編譯過程一致。對只包含標頭檔案的庫,比如說eigen庫,make之後,就已經是成功的安裝了。安裝位置預設是在/usr/include/eigen3下,使用的時候需要在cmakelists.txt中寫入eigen的安裝位置(還是挺麻煩的啊,不過在乙個計算機上安裝之後位置基本就不會變了,而且還能安裝多個版本的),

對於有庫檔案的庫,需要在make之後,在進行安裝的操作,其實一步指令就能做到,

sudo make install
呼叫的時候,需要利用cmake找到檔案的位置,再進行配置,常用的操作以opencv為例,如下所示:

find_package(opencv)

include_directories($)

# 其餘操作

# 最後

target_link_libraries(result $)

這些命名方法都是固定的,最好在安裝的時候不要更改,這樣在網上就會有許多相關的教程,也都可以直接用別人寫好的cmakelists.txt,從而簡便操作過程。

在ubuntu中想用乙個比較好用的ide,最終還是因為偷懶選了vscode,主要是最近發展比較迅速,聽的也比較多。在安裝之後,進行了各種嘗試,最終也摸索出乙個比較模式化的使用方式。

vscode使用的時候,需要自己配置task.json和launch.json,相當於原本visual studio新建工程的步驟全交給自己去完成了。基本能夠配置好這兩個檔案就可以正常的執行了。

之後要安裝對應檔案,我這裡是使用c++語言環境,因此選擇安裝microsoft出品的 c/c++ ,ctrl+p調出命令列輸入 ext install [關鍵字或者名稱(比如c++)],找到作者是microsoft的那個進行安裝

在所有需要的都安裝好之後,就先進行首次執行嘗試。可以隨便寫乙個cpp檔案,比如是hello world。之後按 ctrl + shift + b 進行編譯,這是系統會讓你選擇對應的task.json,因為現在沒有設定,所以選擇新增,選擇others,自動生成新的 task.json。修改

旋轉矩陣r:兩組基之間的內積組成,刻畫旋轉前後同乙個向量的座標變換關係。

旋轉矩陣具有一些特殊的性質:是乙個行列式為1的正交矩陣(行列式為1的正交矩陣也是乙個旋轉矩陣),可以定義旋轉矩陣集合為 3維空間的特殊正交矩陣

旋轉向量:用乙個三維向量表示旋轉,定義為 旋轉軸n與旋轉角度theta的乘積。(相較於旋轉矩陣,只有三個變數,更為緊湊)

尤拉角:物體座標系,描述物體的旋轉。包括偏航角yaw,俯仰角pitch,滾轉角roll(r,p,y分別對應旋轉軸為 x,y,z)。但是該描述存在萬向鎖的問題。

四元數:緊湊並且沒有奇異性(找不到不帶奇異性的三維向量的描述方式)

旋轉向量和旋轉矩陣之間的變換關係:羅德里格斯公式描述

旋轉矩陣與四元數之間的變換關係

尤拉角與旋轉矩陣之間的變換關係

\in∈

高翔視覺SLAM十四講學習筆記1

分割槽 boot邏輯分割槽,空間起始位置,200m 交換空間邏輯分割槽,空間起始位置,2倍記憶體 我是4g,所以421024 8192m 主分割槽邏輯分割槽,空間起始位置,盡可能大一些 至少20g home邏輯分割槽,空間起始位置,盡可能大 20g ubuntu16.04換清華源 備份 cd etc...

《視覺SLAM十四講》學習日誌 一 預備知識

slam簡介 我們眼中的世界在計算機中是乙個個由數字排列而成的矩陣 matrix 就像電影 黑客帝國 中的場景。我們要解決的就是讓計算機通過這種方式 理解 我們現在的世界。第一講習題 1.有線性方程ax b,若已知a,b,需要求解x,該如何求解?這對a和b有哪些要求?解 首先考慮非齊次線性方程的情況...

無人駕駛之《slam十四講》學習指南

無人駕駛之 slam十四講 學習指南 因為slam十四講這本書比較讓剛學習的人難以適應,本人剛培訓完這本書,深感很多概念你可能自動懂了,也覺得自己已經講得讓幼兒園都能聽懂了,還是很多人聽不懂,所以本篇目的就是給大家劃重點,也是我們培訓最後的考試內容。一 預備知識 1.了解視覺slam的概念,和雷射s...