视觉SLAM十四讲(ch3) 学习笔记

视觉SLAM十四讲(ch3) 学习笔记

一、踩坑记录

我一开始看的是第一版的书,看到后面ch4,发现 sophus库安装等一系列的问题,有第二版、第一版书的混搭网络教程的原因,然后就裂开了,编译报错之类的。现在重新翻一便第二版的书,顺便总结以下教训。
Eigen的安装
最好不要按照书上写的直接sudo apt-get install libeigen3-dev上述安装版本可能不支持后续的sophus的库(ch4中有用到)

具体操作如下:
1.在官网(http://eigen.tuxfamily.org/index.php?title=Main_Page)下载源码的压缩包,右击>>提取到此处。
2.在解压后的文件内打开终端输入编译安装

安装pangolin
参考以下

mkdir build
cd build
cmake ..
sudo make install

3.复制到/usr/include目录下,因为直接sudo apt-get install安装的都在这个目录下

sudo cp -r /usr/local/include/eigen3 /usr/include 

二、知识点

理论的知识我在学校的专业课上基本都了解了,哈哈,就不总结了
3.2
eigen的函数调用与功能

//************************************3.2******************************
//声明2*3的float矩阵
Matrix<float, 2, 3> matrix_23;   
//实质是 Matrix
Vector3d v_3d; 
//实质上 Matrix
Matrix3d matrix_33; 
//定义动态大小的矩阵
Matrix<double, Dynamic, Dynamic> matrix_dynamic;
//i行,j列的元素
cout<<matrix_23(i,j);
//相乘要数据类型相同 duble float 要注意维度
//显式类型转换
matrix_23.cast<double>();
//初始化为0
matrix_33 = Matrix3d::Zero();
//随即矩阵
matrix_33 = Matrix3d::Random();
//转置
matrix_33.trnaspose();
//各元素和
matrix_33.sum();
//迹
matrix_33.trace()//逆
matrix_33.inverse();
//行列式
matrix_33.determinant();
//特征值、特征向量
// 实对称矩阵可以保证对角化成功
SelfAdjointEigenSolver<Matrix3d> eigen_solver(matrix_33.transpose() * matrix_33);
cout << "Eigen values = \n" << eigen_solver.eigenvalues() << endl;
cout << "Eigen vectors = \n" << eigen_solver.eigenvectors() << endl;

cmake

#*************************************3.2*************************************************
# 添加Eigen头文件
include_directories("/usr/include/eigen3")

3.6.1
eigen的函数调用与功能

//************************************3.6*************************************************
//旋转矩阵 3*3 即R
Martrix3d rotation_matrix = Matrix3d::Identity();
//旋转向量 3*1 即v
AngleAxisd rotation_vector(M_PI / 4, Vector3d(0, 0, 1));     //沿 Z 轴旋转 45 度
//欧拉角  3*1 即(yaw,pitch, row)
Vector3d euler_angles;
//四元数 4*1 即q
Quaterniond q;
//欧式变换矩阵 4*4 即T
Isometry3d T = Isometry3d::Identity(); 
//仿射变换 4*4
Affine3d x;
//射影变换 4*4
Projective3d x;
//旋转矩阵 可以 由旋转向量 获得 即 v>>R
rotation_matrix = rotation_vector.toRotationMatrix()
//欧式变换阵 可由 旋转向量、平移向量获得 即v,t>>T
T.rotate(rotation_vector);
T.pretranslate(Vector3d(1, 3, 4)); 
//四元数 可由 旋转向量 获得 即 v>>q ;也可由 旋转矩阵 获得 即R>>q
q = Quaterniond(rotation_vector);//v>>q
q = Quaterniond(rotation_matrix);//R>>q

3.6、3.7第一版的书都没有写QAQ、我这边先看的第一版真的是好麻烦哦!没办法在重新翻一下,就当是找不同了。
3.6.2
eigen的函数调用与功能

//四元数要归一化
q.normalize();

3.7
这个注释好少阿,看不懂

string trajectory_file = "./examples/trajectory.txt";//可执行文件放在ch3文件夹下
//*************pangolin*****************
pangolin::CreateWindowAndBind("Trajectory Viewer", 1024, 768);//定义窗口名称、大小

你可能感兴趣的:(SLAM,slam)