当前位置: 首页 > news >正文

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矩阵块操作

相关文章:

  • 论文算法学习实现(5):动态障碍物的检测和剔除2
  • ubuntu学习技巧2:Terminal命令学习
  • RobotSlamApplication(2): 视觉SLAM中常用的一些第三方库简介
  • C++11回顾学习(1): 语法简要回顾和通俗解释
  • 菜鸟专学:从头到尾创建自己的SLAM系统
  • 菜鸟专学:Eigen--Sophus--CV--三种不同库对矩阵的操作方式
  • ROS回顾学习(7):ubuntu下设置(ROS)程序开机自启动
  • RTAB-Map学习和测试详解
  • ROS回顾学习(8): 项目研究中遇到问题和难点记录
  • 菜鸟专学:明确自己编程习惯的变量命名法
  • OpenCV第一讲: 常规函数和类的使用 -- HighGui Core模块
  • kinect V2 驱动安装说明
  • C++11回顾学习(2): 一些常用的函数和小技巧
  • ROS回顾学习(9): 单通道深度图像转化为彩色图发布
  • C++11回顾学习(3): CPU多核与多线程、并行与并发
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • 2017年终总结、随想
  • AngularJS指令开发(1)——参数详解
  • Consul Config 使用Git做版本控制的实现
  • EOS是什么
  • go语言学习初探(一)
  • idea + plantuml 画流程图
  • input实现文字超出省略号功能
  • Intervention/image 图片处理扩展包的安装和使用
  • JavaScript 基本功--面试宝典
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • Node + FFmpeg 实现Canvas动画导出视频
  • PHP CLI应用的调试原理
  • underscore源码剖析之整体架构
  • Vue组件定义
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 反思总结然后整装待发
  • 近期前端发展计划
  • 前端攻城师
  • 日剧·日综资源集合(建议收藏)
  • 微信小程序设置上一页数据
  • HanLP分词命名实体提取详解
  • scrapy中间件源码分析及常用中间件大全
  • ​马来语翻译中文去哪比较好?
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • (02)Hive SQL编译成MapReduce任务的过程
  • (70min)字节暑假实习二面(已挂)
  • (pojstep1.3.1)1017(构造法模拟)
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (附源码)python房屋租赁管理系统 毕业设计 745613
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (剑指Offer)面试题34:丑数
  • (一)RocketMQ初步认识
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • .md即markdown文件的基本常用编写语法
  • .NET 设计一套高性能的弱事件机制