Eigen 简单介绍
Eigen
库是一个开源的C++线性代数库,它提供了快速的有关矩阵的线性代数运算,还包括解方程等功能.Eigen
是一个用纯头文件搭建起来的库,这意味这你只要能找到它的头文件,就能使用它.
Eigen
头文件的默认位置是
/usr/include/eigen3
由于Eigen
库相较于OpenCV
中的Mat
等库而言更加高效,许多上层的软件库也使用Eigen
进行矩阵运算,比如SLAM中常用的g2o、Sophus
等.此外Eigen
库还被被用于Caffe、Tensorflow
等许多深度学习相关的框架中.
Eigen库中各种形式的表示如下
旋转矩阵(3X3):Eigen::Matrix3d
旋转向量(3X1):Eigen::AngleAxisd
四元数(4X1):Eigen::Quaterniond
平移向量(3X1):Eigen::Vector3d
变换矩阵(4X4):Eigen::Isometry3d
以下是具体的实现代码.
#include
#include
using namespace std;
using namespace Eigen;
int main(int argc, char **argv) {
//下面三个变量作为下面演示的中间变量
AngleAxisd t_V(M_PI / 4, Vector3d(0, 0, 1));
Matrix3d t_R = t_V.matrix();
Quaterniond t_Q(t_V);
//对旋转向量(轴角)赋值的三大种方法
//1.使用旋转的角度和旋转轴向量(此向量为单位向量)来初始化角轴
AngleAxisd V1(M_PI / 4, Vector3d(0, 0, 1));//以(0,0,1)为旋转轴,旋转45度
cout <"Rotation_vector1" <endl <endl;
//2.使用旋转矩阵转旋转向量的方式
//2.1 使用旋转向量的fromRotationMatrix()函数来对旋转向量赋值(注意此方法为旋转向量独有,四元数没有)
AngleAxisd V2;
V2.fromRotationMatrix(t_R);
cout <"Rotation_vector2" <endl <endl;
//2.2 直接使用旋转矩阵来对旋转向量赋值
AngleAxisd V3;
V3 = t_R;
cout <"Rotation_vector3" <endl <endl;
//2.3 使用旋转矩阵来对旋转向量进行初始化
AngleAxisd