2019 0405視覺SLAM的學習第三講02

2021-09-16 21:35:08 字數 3519 閱讀 5558

今天就先到這裡,明天繼續!

1.把第三講的實踐部分單獨拿出來進行記錄。

1.安裝eigen庫

2.我們執行一遍這個eigen的cpp程式直接:

執行結果如下:

3.這裡我們需要詳細記錄一下其中執行時的乙個錯誤:fatal error: eigen/core: no such file or directory

解決方案如下:

先找到eigen3的目錄位置,然後進行軟鏈結。

這樣既可編譯通過,否則需要花費很長時間,具體的**如下,注釋的很清晰,大家親自敲一遍就很清楚了,不多廢話:

#include

using namespace std;

#include

// eigen 部分

#include

// 稠密矩陣的代數運算(逆,特徵值等)

#include

#define matrix_size 50

int main( int argc, char** ar** )

{// eigen 中所有向量和矩陣都是eigen::matrix,它是乙個模板類。它的前三個引數為:資料型別,行,列

// 宣告乙個2*3的float矩陣

eigen::matrixmatrix_23;

// 同時,eigen 通過 typedef 提供了許多內建型別,不過底層仍是eigen::matrix

// 例如 vector3d 實質上是 eigen::matrix,即三維向量

eigen::vector3d v_3d;

// 這是一樣的

eigen::matrixvd_3d;

// matrix3d 實質上是 eigen::matrixeigen::matrix3d matrix_33 = eigen::matrix3d::zero(); //初始化為零

// 如果不確定矩陣大小,可以使用動態大小的矩陣

eigen::matrix< double, eigen::dynamic, eigen::dynamic > matrix_dynamic;

// 更簡單的

eigen::matrixxd matrix_x;

// 這種型別還有很多,我們不一一枚舉

// 下面是對eigen陣的操作

// 輸入資料(初始化)

matrix_23 << 1, 2, 3, 4, 5, 6;

// 輸出

cout << matrix_23 << endl;

// 用()訪問矩陣中的元素

for (int i=0; i<2; i++) {

for (int j=0; j<3; j++)

cout

// 應該顯式轉換

eigen::matrixresult = matrix_23.cast() * v_3d;

cout << result << endl;

eigen::matrixresult2 = matrix_23 * vd_3d;

cout << result2 << endl;

// 同樣你不能搞錯矩陣的維度

// 試著取消下面的注釋,看看eigen會報什麼錯

// eigen::matrixresult_wrong_dimension = matrix_23.cast() * v_3d;

// 一些矩陣運算

// 四則運算就不演示了,直接用+-*/即可。

matrix_33 = eigen::matrix3d::random(); // 隨機數矩陣

cout << matrix_33 << endl << endl;

cout << matrix_33.transpose() << endl; // 轉置

cout << matrix_33.sum() << endl; // 各元素和

cout << matrix_33.trace() << endl; // 跡

cout << 10*matrix_33 << endl; // 數乘

cout << matrix_33.inverse() << endl; // 逆

cout << matrix_33.determinant() << endl; // 行列式

// 特徵值

// 實對稱矩陣可以保證對角化成功

eigen::selfadjointeigensolvereigen_solver ( matrix_33.transpose()*matrix_33 );

cout << "eigen values = \n" << eigen_solver.eigenvalues() << endl;

cout << "eigen vectors = \n" << eigen_solver.eigenvectors() << endl;

// 解方程

// 我們求解 matrix_nn * x = v_nd 這個方程

// n的大小在前邊的巨集裡定義,它由隨機數生成

// 直接求逆自然是最直接的,但是求逆運算量大

eigen::matrix< double, matrix_size, matrix_size > matrix_nn;

matrix_nn = eigen::matrixxd::random( matrix_size, matrix_size );

eigen::matrix< double, matrix_size, 1> v_nd;

v_nd = eigen::matrixxd::random( matrix_size,1 );

clock_t time_stt = clock(); // 計時

// 直接求逆

eigen::matrixx = matrix_nn.inverse()*v_nd;

cout <

// 通常用矩陣分解來求,例如qr分解,速度會快很多

time_stt = clock();

x = matrix_nn.colpivhouseholderqr().solve(v_nd);

cout <

return 0;

2019 0405視覺SLAM的學習第四講

指數與對數對映 李代數求導與擾動模型 實踐 sophus 總結及資源獲取 特殊正交群so 3 三維旋轉矩陣構成的集合 特殊歐式群se 3 三維變換矩陣構成的集合 由於他們之間的運算只支援乘法,準確點說,就是只有他們自身之間的乘積才仍然屬於這個so,或者se,即 我們把這種只有一種閉合運算的集合稱為群...

視覺SLAM(一) 視覺SLAM框架

主要參考書目是高翔博士的 視覺slam十四講 中間會記錄一些個人實踐經驗和思考。slam伴隨著機器視覺發展和機械人導航已經相對成熟,形成了合理高效的基本框架。主要包含 感測器資料 前端視覺里程計 後端優化 回環檢測 建圖。採集根據不同應用場景和需求進行選擇,主要有如下幾種感測器 也就是單獨乙個攝像機...

雷射slam 雷射SLAM與視覺SLAM的特點

雷射slam與視覺slam的特點 目前,slam技術被廣泛運用於機械人 無人機 無人駕駛 ar vr等領域,依靠感測器可實現機器的自主定位 建圖 路徑規劃等功能。由於感測器不同,slam的實現方式也有所不同,按感測器來分,slam主要包括雷射slam和視覺slam兩大類。其中,雷射slam比視覺sl...