我一开始看的是第一版的书,看到后面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 install3.复制到/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<double, 3, 1> Vector3d v_3d; //实质上 Matrix<double, 3, 3> 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>>q3.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);//定义窗口名称、大小