RobotSlamApplication(1):第一个三方库--Eigen3库的使用
Eigen官网链接
一、CMakeList.txt 编译及头文件
"编译参数"
find_package(Eigen3 REQUIRED)
include_directories(${EIGEN3_INCLUDE_DIRS})
link_directories(${EIGEN3_LIBRARY_DIRS})
add_definitions(${EIGEN3_DEFINITIONS})
target_link_libraries(pclfrustumBinary ${EIGEN3_LIBRRIES} )
"常用的头文件"
#include <Eigen/Eigen>
#include <Eigen/Geometry>
#include <Eigen/Core>
#include <Eigen/Dense>
二、Eigen库常用函数使用方式
Eigen库有很多各种各样的函数定义和使用方式,网上也有各种各样的教程,在这里我给出一种最简单和快速使用的方式;
Eigen::MatrixXf XX(m,n) ## 这里就定义了一个m*n的矩阵XX,同时最后一个字母 "f",代表浮点型;可改为d--double型, i--int型.
"矩阵的块操作"
matrix.block(i,j,p,q); ## 从(i,j)开始,大小为(p, q)的矩阵块
Eigen::MatrixXf p(3,1);
p << 0.0,
0.0,
0.0;
Eigen::Matrix3f ag(3,3);
ag << 0.0,0.0,-1.0,
0.0,1.0, 0.0,
1.0,0.0, 0.0;
//Eigen::AngleAxisd ag(M_PI/2.0,Eigen::Vector3d::UnitY());
Eigen::MatrixXf t1f(1,4);
t1f << 0.0,0.0,0.0,1.0;
Eigen::Matrix4f camera_pose(4,4);
camera_pose.block(0,0,3,3) = ag;
camera_pose.block(0,3,3,1) = p;
camera_pose.block(3,0,1,4) = t1f;
总之,从以上例子可以看出,任何矩阵或者向量你都可以用MartixXf来定义,然后通过"矩阵块(block)"来进行组合拼接。
但是仅推荐急着用而不知道怎么用的同学,对这方面要用得比较多且比较大的项目可以按照官网慢慢学习。
三、矩阵相关的计算:旋转+平移+仿射矩阵
1). 旋转矩阵:Eigen::AngleAxisd Rota(M_PI/2.0,Eigen::Vector3d::UnitY());
----转换为矩阵:Eigen::Matrix3d RotaMatrix = Rota.toRotationMatrix();
2). 平移矩阵:Eigen::Translation3d trans(x,y,z); 或 Eigen::Vector3d(p2x,p2y, 0) == 代表列向量.
----
3). 仿射矩阵与矩阵的变换:
Eigen::Matrix4f a;
Eigen::Affine3f b;
b.matrix() = a;
4). .......(未完持续)
参考文献
[1]. Eigen::Matrix 详解
[2]. Eigen库的常规使用
[3]. Eigen在坐标转换下使用案例
[4]. Eigen中矩阵的基本操作
[5]. Eigen矩阵块操作