首页 > 其他分享 >Eigen中变换矩阵Eigen::Isometry3d T的使用方法(左乘和右乘)

Eigen中变换矩阵Eigen::Isometry3d T的使用方法(左乘和右乘)

时间:2024-02-11 21:55:40浏览次数:31  
标签:Eigen 左乘 矩阵 lidar imu enu delta Isometry3d

https://zhuanlan.zhihu.com/p/610439768?utm_id=0

 

一、基本定义

Eigen::Isometry3d T_imu_to_lidar = Eigen::Isometry3d::Identity()

转换矩阵本质是一个4*4的矩阵

二、操作方法

.translation():无参数,返回当前变换平移部分的向量表示(可修改),可以索引[]获取各分量
.rotation():无参数,返回(只读的)当前变换的旋转部分,以旋转矩阵表示;
.matrix():返回变换对应的矩阵(可修改),包括平移部分和旋转部分;
.linear():返回变换的线性部分,对于Isometry而言就是旋转对应的旋转矩阵,Eigen::Block类型;
.Identity()函数的作用:在定义变量时使用
Eigen::Matrix4f x = Eigen::Matrix4f::Identity();即用单位矩阵对x变量进行了初始化
.inverse():求变换矩阵的逆

三、与四元素和平移向量的转换

Eigen::Matrix4d M_lidar_to_imu;
Eigen::Isometry3d T_lidar_to_imu(M_lidar_to_imu); 
Eigen::Vector3d enu_position = T_lidar_to_imu.translation();
Eigen::Quaterniond enu_attitude =Eigen::Quaterniond(T_lidar_to_imu.rotation());//rotion()的结果是3*3的Matrix3d矩阵
Eigen::Quaterniond q_delta; 
Eigen::Vector3d p_delta;  
Eigen::Isometry3d T_delta;
T_delta.linear() = q_delta.toRotationMatrix();
T_delta.translation() = p_delta;

四、左乘与右乘

旋转矩阵左乘是相对固定坐标系,右乘是相对当前坐标系

1、求取变换矩阵的相对关系
Eigen::Isometry3d T_lidar_to_enu = T_imu_to_enu * system_config.T_lidar_to_imu;//求取雷达坐标系到enu世界坐标系的转换矩阵,以enu坐标系为基准
2、求取点的坐标从坐标系A转到坐标系B
 Eigen::Vector3d position_ecef;
 position_ecef = system_config.T_enu_to_ecef * position_enu;  // 得到当前时刻雷达在地心地固坐标系的位置

标签:Eigen,左乘,矩阵,lidar,imu,enu,delta,Isometry3d
From: https://www.cnblogs.com/xiaochouk/p/18013559

相关文章

  • Eigen库
    前言  最近在学习计算机图形学的一些知识,里面要大量运用像矩阵运算这样的线性代数知识,而Eigen库就是一个支持我们用c++语言进行线性代数、矩阵和矢量运算的第三方库。想着后续真正开始写代码后这个库用的应该挺多的,于是就先来简单学习一下这个库。另外学习这个之前最好还是先了......
  • PCA(Principal Components Analysis)主成分分析: 一维列向量坐标的变换是左乘变换矩阵
    总结:一维列向量的坐标变换是左乘变换矩阵;一维行向量的坐标系基元变换是右乘变换矩阵;坐标变换坐标变换定义:把一个向量(或一个点)从一个高维(或3D)坐标系,转换到另一个高维(或3D)坐标系去。举个栗子:东北天坐标系上的点A坐标为(1,2,3),通过坐标变换到北西天坐标系,点A......
  • 旋转矩阵的左乘和右乘
    旋转变换左乘为坐标系变换由body坐标系转换到world坐标系\[R_wc=R_wb*R_bc\]右乘为坐标系下的变换world坐标系下i的位置变换到j的位置\[R_wj=R_wi*R_ij\]......
  • Eigen
     http://eigen.tuxfamily.org/index.php?title=Main_Page EigenisaC++templatelibraryforlinearalgebra:matrices,vectors,numericalsolvers,andrelatedalgorithms. wgethttp://bitbucket.org/eigen/eigen/get/3.3.7.tar.bz2tar-jxvf3.3.7.tar.bz2Howto&q......
  • [转]By not providing "FindEigen3.cmake" in CMAKE_MODULE_PATH this project has
    在编译安装的时候出现如下问题,是Eigen3的Cmake依赖问题,已经安装eigen3,但在项目的find_package(Eigen3QUERIED)中,无法找到FindEigen3.Cmake. CMakeErroratloam_velodyne/CMakeLists.txt:13(find_package):Bynotproviding"FindEigen3.cmake"inCMAKE_MODULE_......
  • Ubuntu18.04 安装Opencv3.4.15、PCL1.8.1、VTK7.1.0、Eigen3.4、Pangolin0.6、Sophus
    Eigen3.4安装方法mkdirbuild&&cdbuildcmake..sudomakeinstall安装后头文件安装在/usr/local/include/eigen3/,可以打开看一看安装的库Pangolin0.6安装方法+安装依赖项目sudoapt-getinstalllibglew-devsudoapt-getinstalllibboost-devli......
  • Eigen库操作
    #include<iostream>#include<eigen3/Eigen/Dense>usingnamespacestd;usingnamespaceEigen;intmain(){Matrix2fss;ss<<2.3f,3.2f,3.4f,3.1f;cout<<ss<<endl;cout<<"======="<<endl;......
  • Eigen::Tensor实现permute方法
    需求使用C++处理Eigen::Tensor希望交换指定维度的位置注意是交换(改变内存顺序)而不是reshape实现torch.tensor中内置了permute方法实现快速交换Eigen::Tensor中实现相同操作需要一点技巧例如,将一个1x2x3的tensor排列为3x1x2那么对应t1[0,1,1]==t2[1,0,1]则排列生效代码如......
  • eigen库稀疏矩阵
    使用Eigen的稀疏矩阵库可以有效地处理具有大量零元素的矩阵,以节省内存和计算资源。eigen库稀疏矩阵:SparseMatrix<double>Hsta=SparseMatrix<double>(4,4);//定义一个大小为4*4名字为Hsta的稀疏矩阵。插入数据 Hsta.insert(0,0)=1;//向Hsta的1行1列插入数字1。......
  • 安装eigen
    1安装eigensudoapt-getinstallgdb查看版本pkg-config--modversioneigen33.4.0查看安装的路径dpkg-Llibeigen3-dev/./usr/usr/include/usr/include/eigen3/usr/include/eigen3/Eigen/usr/include/eigen3/Eigen/Cholesky/usr/include/eigen3/Eigen/Cholmod......