1. 常用头文件
2. 使用问题汇总
2.1. 求逆
在有的环境下,有的版本的Eigen,使用Eigen的inverse()求逆,和正确值差一个负号,这是Eigen中存在的bug,修改为矩阵分解后该问题就能解决
Eigen::Matrix4d I = Eigen::Matrix4d::Identity(4, 4);matrix = matrix.colPivHouseholderQr().solve(I);
2.2. 与容器共同使用时崩溃
有时下面的代码会发生崩溃
vector<Eigen::Isometry3d> poses;
Eigen::Isometry3d T1 = Eigen::Isometry3d::Identity();for (int i = 0; i < 5; ++i) {poses.push_back(T1);
}
解决方法是把
vector<Eigen::Isometry3d>;
写成如下形式
vector<Eigen::Isometry3d, Eigen::aligned_allocator<Eigen::Isometry3d>>;
二者是等价的,并不影响编译
类似地,也可以采用宏定义的方式解决类似问题
typedef std::vector<Eigen::Vector3f, Eigen::aligned_allocator<Eigen::Vector3f>> vector_Vector3f;
typedef std::vector<Eigen::Vector3d, Eigen::aligned_allocator<Eigen::Vector3d>> vector_Vector3d;
typedef std::vector<Eigen::Vector4f, Eigen::aligned_allocator<Eigen::Vector4f>> vector_Vector4f;
typedef std::vector<Eigen::Vector4d, Eigen::aligned_allocator<Eigen::Vector4d>> vector_Vector4d;
typedef std::vector<Eigen::Affine3f, Eigen::aligned_allocator<Eigen::Affine3f>> vector_Affine3f;
typedef std::vector<Eigen::Affine3d, Eigen::aligned_allocator<Eigen::Affine3d>> vector_Affine3d;
typedef std::vector<Eigen::Isometry3f, Eigen::aligned_allocator<Eigen::Isometry3f>> vector_Isometry3f;
typedef std::vector<Eigen::Isometry3d, Eigen::aligned_allocator<Eigen::Isometry3d>> vector_Isometry3d;
参考文献
Eigen(2) 模块与头文件_csdn_1HAO的博客-CSDN博客_eigen头文件
vslam 14 讲ch5 编译joinMap会出现由于vector使用eigen会导致core dump_胡白白的博客-程序员ITS401 - 程序员ITS401Eigen库数据结构内存对齐问题_一颗小小的螺丝钉的博客-CSDN博客
eigen_stl_containers/eigen_stl_vector_container.h at master · ros/eigen_stl_containers · GitHub