1.简介
Eigen是一个C++开源线性代数库。它提供快速的有关矩阵的线性代数运算,还包括解方程等功能。
主页
https://eigen.tuxfamily.org/dox/index.html
2.安装
sudo apt-get install libeigen3-dev
Eigen的头文件默认位置是在‘/usr/inclue/eigen3/’中,如果不确定可以通过下面的指令查找。
sudo updatedb
locate eigen3
编译时在CMakeLists.txt中指定头文件目录。
include_directories("/usr/include/eigen3/")
3.基本类型使用
3.1 声明
Eigen::Matrix<float, 2, 3> matrix_23;
Eigen::Vector3d
Eigen::Matrix<double, 3, 1>
Matrix3d
Eigen::Matrix<double, 3, 3>
3.2 矩阵运算
matrix_33.transpose() // 转置
matrix_33.sum() // 各元素和
matrix_33.trace() // 迹
10*matrix_33 // 数乘
matrix_33.inverse() // 逆
matrix_33.determinant() // 行列式
4.几何模块
4.1 旋转矩阵定义
Eigen::Matrix3d rotation_matrix = Eigen::Matrix3d::Identity();
4.2 旋转向量(Eigen::AngleAxisd)
Eigen::AngleAxisd rotation_vector ( M_PI/4, Eigen::Vector3d ( 0,0,1 ) ); //沿 Z 轴旋转 45 度
转换为矩阵
rotation_vector.matrix() 或
ratation_matrix = rotation_vector.toRotationMatrix();
4.3 欧拉角
//旋转矩阵转换为欧拉角
Eigen::Vector3d euler_angles = rotation_matrix.eulerAngles ( 2,1,0 ); // ZYX顺序,即roll pitch yaw顺序
4.5 欧式变换矩阵(Eigen::Isometry)
Eigen:Isometry3d T=Eigen::Isometry3d::Identity();
T.rotate ( rotation_vector );
T.pretranslate ( Eigen::Vector3d ( 1,3,4 ) ); //平移向量
4.6 四元数
// 可以直接把AngleAxis赋值给四元数,反之亦然
Eigen::Quaterniond q = Eigen::Quaterniond ( rotation_vector );
q = Eigen::Quaterniond ( rotation_matrix );