重要说明:本文从网上资料整理而来,仅记录博主学习相关知识点的过程,侵删。
Eigen官网
Eigen库学习笔记
Eigen 部分功能介绍
eigen 中四元数、欧拉角、旋转矩阵、旋转向量
Eigen中三维位姿表示方式以及相互转换
SLAM本质剖析-Eigen
Eigen库是一个开源的C++线性代数库,它提供了快速的有关矩阵的线性代数运算,矩阵和矢量运算,数值分析及其相关的算法,还包括解方程等功能。
向量点乘与叉乘的概念及几何意义
Matrix
// 定义一个3x3的float型的矩阵a
Matrix a;
// 定义列向量,3行1列,float类型
typedef Matrix Vector3f;
// 定义行向量,1行2列,int类型
typedef Matrix RowVector2i;
在Eigen中的矩阵,可以不在编译阶段指定矩阵大小(row
和col
),可以使用 Dynamic
来指定矩阵大小。
// 定义一个未知大小的动态矩阵,元素类型为 `float`
typedef Matrix MatrixXf;
// 定义一个未知大小的动态矩阵,元素类型为 `double`
typedef Matrix MatrixXd;
// 定义一个行数未知的动态向量,元素类型为 `int`
typedef Matrix VectorXi;
// 定义一个行数未知的动态向量,元素类型为 `float`
typedef Matrix VectorXf;
// 定义一个行数为3,列数未知的动态矩阵,元素类型为 `float`
Matrix a;
构建动态矩阵/向量
// 构建一个3x3的矩阵,元素类型为 `float`
Matrix3f a;
// 构建一个3x3的动态矩阵,大小为0x0,元素类型为 `float`
MatrixXf b;
// 构建一个10x15的动态矩阵
MatrixXf c(10, 15);
// 构建一个长度为30的动态列向量,元素类型为 `float`
VectorXf d(30);
构建固定矩阵/向量
// 构建一个长度为2的列向量,元素类型为 `double`
Vector2d e(5.0, 6.0);
// 构建一个长度为3的列向量,元素类型为 `double`
Vector3d f(5.0, 6.0, 7.0);
// 构建一个长度为4的列向量,元素类型为 `double`
Vector4d g(5.0, 6.0, 7.0, 8.0);
Array
array可以表示一维数组和二维数组。
Array ArrayXf;
Array Array3f;
Array ArrayXXd;
Array Array33d;
ArrayXXf m(2, 2);
m << 1.0, 2.0,
3.0, 4.0;
m(0, 0) = 1.0; m(0, 1) = 2.0;
m(1, 0;) = 3.0; m(1, 1) = m(0, 1)+m(1, 0);
如果需要线性代数相关的运算,就使用矩阵类;如果只是需要元素级别的操作,就使用数组类。
.array()
;.matrix()
。Eigen
# 安装eigen
sudo apt-get install libeigen3-dev
CMakeList.txt
文件find_package(……Eigen3 REQUIRED)
#include
// 创建了一个 3*3的矩阵
MatrixXd m = MatrixXd::Random(3, 3);
// 矩阵数据的获取
m.rows();//获取行数
m.cols();//获取列数
m.size();//获取系数
// 改变resize
m.resize(4, 4);