eigen

PCD地图转换

旧街凉风 提交于 2020-02-27 14:56:14
为了得到合适的地图(与GNSS数据融合、地图拼接等),有时需要对生成的三维地图进行转换:平移、翻转等等 void transform_(const std::string& pcd_path) { Eigen::Matrix4d transformation_; Eigen::Matrix4d trans; Eigen::Vector3d v1(axis_x1,axis_y1,axis_z1); Eigen::Vector3d v2(axis_x2,axis_y2,axis_z2); double angle = M_PI*(axis_angle/180.0); rotate_arbitrary_line(trans,v1,v2,angle); transformation_ = trans.transpose(); Eigen::Matrix4d transform_1 = Eigen::Matrix4d::Identity(); transform_1 (0,3) = t_x; transform_1 (1,3) = t_y; transform_1 (2,3) = t_z; transformation_ = transformation_*transform_1; pcl::PointCloud<pcl::PointXYZ>::Ptr source_cloud (new

使用Eigen犯的一个神奇错误:C2244 无法将函数与现有的声明匹配

前提是你 提交于 2020-02-26 15:16:01
记录一个错误: VS编译一个含有Eigen和openCV的程序时,出现如下错误 : “Eigen::TriangularViewImpl<_MatrixType,_Mode,Eigen::Dense>::_assignProduct: 无法将函数与现有的声明匹配 找问题过程: 1. 查看报错Eigen文件,声明和匹配没有问题。 2. 通过多次注释不同程序段,发现含Eigen的程序头文件和含有OpenCV程序的头文件同时编译时,出现该错误 3. 出现该错误的情况是: 在头文件中,同时包含Eigen头文件和使用命名空间cv,才会出现以上错误。 Eigen头文件和OpenCV头文件并不冲突。 解决办法: 程序中, 不要在h文件中using namespace xx,而在其对应cpp文件中使用。头文件中要使用命名空间,尽量都使用类似cv:: 可能原因: 原因可能就是C++命名空间的一些规则,使得Eigen和cv某些情况不相容,导致离奇的报错。保持良好的C++编程习惯非常重要,因为上述错误可能在使用其它库的时候也会发生 来源: CSDN 作者: 盐巴会腐烂 链接: https://blog.csdn.net/CUSTESC/article/details/104516521

Reshaping flat array to complex Eigen type

泄露秘密 提交于 2020-02-23 08:32:34
问题 How can I reshape data of size 1×2N to a complex form in Eigen to a form a P×Q complex matrix, with N complex numbers, P×Q=N ? In data , the real and imaginary parts are right next to each other. I would like to dynamically reshape data as the data can have different sizes. I am trying to prevent copying and just map the data to complex type. int N = 9; int P = 3; int Q = 6; float *data = new float[2*N]; for(int i = 0; i < 2*N; i++) data[i] = i + 1; // data = {1, 2, 3, 4, ..., 17, 18}; Eigen:

Eigen入门之密集矩阵 3 - Array操作

最后都变了- 提交于 2020-02-20 08:16:24
简介 在Eigen内,有Matrix,vector进行线性代数的相关运算,但也需要执行对矩阵内的系数的相关操作时,这是正常的功能需求。Eigen中的Array类就是满足此需求的。 Array 定义 和前面介绍的Matrix和Vector类似,Array类也是一个模板类 /** \class Array * \ingroup Core_Module * * \brief General-purpose arrays with easy API for coefficient-wise operations * * The %Array class is very similar to the Matrix class. It provides * general-purpose one- and two-dimensional arrays. The difference between the * %Array and the %Matrix class is primarily in the API: the API for the * %Array class provides easy access to coefficient-wise operations, while the * API for the %Matrix class provides easy

Roll pitch and yaw from Rotation matrix with Eigen Library

你。 提交于 2020-02-20 07:44:31
问题 I need to extract the roll pitch yaw angles from a rotation matrix and I want to be sure that what I do is correct. Eigen::Matrix< simFloat, 3, 1> rpy = orientation.toRotationMatrix().eulerAngles(0,1,2); const double r = ((double)rpy(0)); const double p = ((double)rpy(1)); const double y = ((double)rpy(2)); Is that correct? Because I was reading here: http://eigen.tuxfamily.org/dox/group__Geometry__Module.html#gad118fececd448d7485ffea4858775e5a And I was a bit confused when it says, at the

ubuntu16.04+eigen3安装

◇◆丶佛笑我妖孽 提交于 2020-02-17 13:58:14
                  Eigen库安装指南(两种方式) 1、apt-get方式(假设默认安装到/usr/local/include里(可在终端中输入locate eigen3查看位置),若实际中默认安装到了/usr/include的话,可以对应替换下面命令的相应部分) 运行命令: sudo apt-get install libeigen3-dev 运行命令:(参考第二种方法的最下面的说明) sudo cp -r /usr/local/include/eigen3/Eigen /usr/local/include 执行复制命令,将Eigen文件夹及其内容放在/usr/include 2、源码安装(复杂些) 安装包下载网址: http://eigen.tuxfamily.org/index.php?title=Main_Page 在该网站中,可以下载任意版本对应的文件,本例下载了Eigen 3.3.4. : tar.gz 格式压缩文件。 文件名:eigen-eigen-5a0156e40feb.tar.g 运行命令: sudo tar -xzvf eigen-eigen-5a0156e40feb.tar.gz -C /usr/local/include 注意:/usr/local/include 也可以换成/usr/include 但是上面对应的位置也要匹配修改,该命令

Eigen 简明教程

∥☆過路亽.° 提交于 2020-02-14 13:34:10
Eigen Quick Reference 一个 Eigen 的参考手册,包含 Python(Numpy) 与 Eigen 的对应用法,以及一些练习题。持续更新中。 Eigen array, matrix and vector types 在 Eigen 中,Matrix 用来表示数学意义上的矩阵和向量,Array 用来表示 1D 和 2D 的数组,你可以这样定义它们: typedef Matrix<Scalar, RowsAtCompileTime, ColsAtCompileTime, Options> MyMatrixType; typedef Array<Scalar, RowsAtCompileTime, ColsAtCompileTime, Options> MyArrayType; Scalar 表示系数的类型(例如float, double, boll, int 等等)。 RowsAtCompileTime 和 ColsAtCompileTime 表示矩阵行数和列数(必须在编译时期给定),或者使用 Dynamic 表示其行数或者列数在运行时期给定。 Options 可以是 ColMajor 或者 RowMajor ,它们表示存储数据的顺序,默认是 ColMajor 。( 这里 有存储顺序的更多介绍) 你可以随意的组合上面的参数来创建 Matrix,例如 Matrix

关于eigen头文件引用的报错

筅森魡賤 提交于 2020-02-12 12:24:35
关于#include<Eigen/Core>的报错。 g2o和ceres中有很多头文件包含以下类似内容: #include<Eigen/Core> 然而,安装Eigen的时候,其保存的位置是/usr/local/include/eigen3, 所以,在调用g2o和ceres的头文件时会出现由于找不到Eigen/Core之类引起的报错。 解决方法: sudo cp -r /usr/local/include/eigen3/Eigen /usr/local/include 将其复制到这个位置,g2o和ceres就可以找到了。 来源: CSDN 作者: 脚踏实地,学无止境 链接: https://blog.csdn.net/qq_41904635/article/details/104275373

Eigen库学习---Map类

早过忘川 提交于 2020-02-11 19:31:50
Eigen 中定义了一系列的 vector 和 matrix ,相比 copy 数据,更一般的方式是复用数据的内存,将它们转变为 Eigen 类型。 Map 类很好地实现了这个功能。 Map定义 Map(PointerArgType dataPtr, Index rows, Index cols, const StrideType& stride = StrideType()) 可以看出,构建map变量,需要三个信息:指向数据的指针,构造矩阵的行数和列数 map相当于引用普通的c++数组,进行矩阵操作,而不用copy数据 Eigen::MatrixXf 动态矩阵和静态矩阵 :动态矩阵是指其大小在运行时确定,静态矩阵是指其大小在编译时确定。 MatrixXd:表示任意大小的元素类型为double的矩阵变量,其大小只有在运行时被赋值之后才能知道。 Matrix3d:表示元素类型为double大小为3*3的矩阵变量,其大小在编译时就知道。 如何选择动态矩阵和静态矩阵 :对于小矩阵(一般大小小于16)使用固定大小的静态矩阵,它可以带来比较高的效率;对于大矩阵(一般大小大于32)建议使用动态矩阵。注意:如果特别大的矩阵使用了固定大小的静态矩阵则可能会造成栈溢出的问题。 矩阵元素的访问 :在矩阵的访问中,行索引总是作为第一个参数,Eigen中矩阵、数组、向量的下标都是从0开始

C++ 与OpenCV 学习笔记

♀尐吖头ヾ 提交于 2020-02-11 02:12:03
依赖:指针是一个变量,指向本体;引用只是一个别名(本体的另一个名字),绑定在主体上 可变:引用只能在定义时被初始化一次,且“从一而终”;指针可以修改,“见异思迁”; 可空:引用不能为空;指针可以为空; 大小:sizeof 引用,得到的是所指向变量的大小;sizeof 指针,得到的是指针的大小; 自增:指针 ++,是指指针的地址自增;引用++是指所指变量自增; 类型:引用是类型安全的,引用过程会进行类型检查;指针不会进行安全检查; 联合体:当多个数据需要共享内存或者多个数据每次只取其一时,可以利用联合体(union) 1. 联合体是一种结构; 2. 他的所有成员相对于基地址的偏移量均为0; 3. 此结构空间要大到足够容纳最“宽”的成员;   //但是其大小不仅仅由最宽的成员决定,还需要考虑每个成员的自身对齐方式! 4. 其对齐方式要适合其中所有的成员。 const作用: c++编译器会在编译时,把常量优化成立即数,减少内存访问。因此,能够使用const的变量(在运行过程中不会发生变化的变量),尽量使用const去修饰。 特别是处理矩阵以及图像指针运算时。 inline function 内联函数: 函数调用的开销是很大的,如果有一段短小而需要频繁调用的函数,可以写为内联函数。 也就是建议编译器在函数调用点上展开代码后再进行编译。 这里的建议意思是,如果函数较复杂,编译器是不会内联的