C++之eigen安装与测试方式

目录
  • C++eigen安装与测试
    • 1、eigen库安装
    • 2、查看eigen的版本号
  • C++ eigen使用
    • eigen几何模块的使用方法
  • 总结

C++eigen安装与测试

1、eigen库安装

1)方法一:源码安装(推荐)

官网下载、或git下载eigen源码

cd eigen
mkdir build
cd build
cmake ..
sudo make install
#安装后,头文件安装在/usr/local/include/eigen3/
#移动头文件
sudo cp -r /usr/local/include/eigen3/Eigen /usr/local/include

2)方法二:直接安装(不推荐)

这种方法安装eigen库,比较简单,但是eigen不一定是最新版本。

sudo apt install libeigen3-dev
//若默认安装的是/usr/local/include/eigen3/Eigen 下,将Eigen文件夹拷贝一份到/usr/local/include 下
sudo cp -r /usr/local/include/eigen3/Eigen /usr/local/include 
sudo cp -r /usr/local/include/eigen3 /usr/include

2、查看eigen的版本号

pkg-config --modversion eigen3

如果可以正确查看版本号,一般说明eigen库安装成功

C++ eigen使用

eigen几何模块的使用方法

旋转向量 R

利用Eigen::AngleAxisd(参数:角度,轴)得到

//沿 Z 轴旋转 45 度
Eigen::AngleAxisd rotation_vector ( M_PI/4, Eigen::Vector3d ( 0,0,1 ) ); 
//由角轴得到旋转变量
Eigen::Matrix3d R = Eigen::AngleAxisd(M_PI/2, Eigen::Vector3d(0,0,1)).toRotationMatrix()

旋转矩阵 Eigen::Matrix3d

//在这里插入代码片`旋转向量转换到旋转矩阵
 rotation_vector.toRotationMatrix(); 

欧拉角

//( 2,1,0 )表示ZYX顺序,即roll pitch yaw顺序,将旋转矩阵转换到欧拉角
Eigen::Vector3d rotation_matrix.eulerAngles ( 2,1,0 )

四元数

//定义四元数
Eigen::Quaterniond q = Eigen::Quaterniond (rotation_vector);
//旋转矩阵定义四元素
q = Eigen::Quaterniond (rotation_matrix);

欧拉角与四元数相互转换

// 欧拉角转四元数 R-P-Y
Eigen::Vector3d eulerAngle(yaw,pitch,roll);
Eigen::AngleAxisd rollAngle(AngleAxisd(eulerAngle(2),Vector3d::UnitX()));
Eigen::AngleAxisd pitchAngle(AngleAxisd(eulerAngle(1),Vector3d::UnitY()));
Eigen::AngleAxisd yawAngle(AngleAxisd(eulerAngle(0),Vector3d::UnitZ()));
 
Eigen::Quaterniond quaternion;
quaternion=yawAngle*pitchAngle*rollAngle;

//四元数转欧拉角 R-P-Y
Eigen::Vector3d eulerAngle=quaternion.matrix().eulerAngles(2,1,0);

四元数、欧拉角转换实例。

以下代码在欧拉角出现pi/2时,以及大于pi时会出现问题。

#include <iostream>
#include <cmath>
#include <eigen3/Eigen/Core>
#include <eigen3/Eigen/Geometry>

using namespace std;
int main()
{
    Eigen::Vector3d eulerAngle(M_PI/3,M_PI/5,M_PI/4);
    cout<<"roll(X) pitch(Y) yaw(Z)=\n"<< eulerAngle.transpose()<<endl<<endl;

    Eigen::AngleAxisd rollAngle(Eigen::AngleAxisd(eulerAngle(0),Eigen::Vector3d::UnitX()));
    Eigen::AngleAxisd pitchAngle(Eigen::AngleAxisd(eulerAngle(1),Eigen::Vector3d::UnitY()));
    Eigen::AngleAxisd yawAngle(Eigen::AngleAxisd(eulerAngle(2),Eigen::Vector3d::UnitZ()));

    Eigen::Quaterniond quaternion;
    quaternion=rollAngle*pitchAngle*yawAngle;
    Eigen::Vector3d eulerAngle_1=quaternion.matrix().eulerAngles(0,1,2); 
    cout<<"roll(X) pitch(Y) yaw(Z)=\n"<< eulerAngle_1.transpose()<<endl<<endl; 

    //Eigen::Vector3d eulerAngle(roll,pitch,yaw);
    //Eigen::AngleAxisd rollAngle(AngleAxisd(eulerAngle(0),Vector3d::UnitX()));
    //Eigen::AngleAxisd pitchAngle(AngleAxisd(eulerAngle(1),Vector3d::UnitY()));
    //Eigen::AngleAxisd yawAngle(AngleAxisd(eulerAngle(2),Vector3d::UnitZ()));
    //Eigen::Quaterniond quaternion;
    //quaternion=yawAngle*pitchAngle*rollAngle;
    //Eigen::Vector3d eulerAngle=quaternion.matrix().eulerAngles(2,1,0);
    
    Eigen::Quaterniond quaternion2(-0.5,0,0,1); 
    Eigen::Vector3d eulerAngle_2=quaternion2.matrix().eulerAngles(2,1,0);
    cout<<"yaw(Z) pitch(Y) roll(Z)=\n"<< eulerAngle_2.transpose()<<endl<<endl;                                                                                                                   

    return 0;
}

g++ test.cpp

tf 实现四元数到欧拉角转换接口使用及测试

#include <iostream>
#include <tf/transform_datatypes.h>//转换函数头文件
#include <nav_msgs/Odometry.h>//里程计信息格式

using namespace std;
int main ()
{
    tf::Quaternion quat(0,0,1,-0.5);
    double roll, pitch, yaw;//定义存储r\p\y的容器

    tf::Matrix3x3(quat).getRPY(roll, pitch, yaw);//进行转换
    cout << "roll:" << roll << "\npitch:" << pitch << "\nyaw:" << yaw << endl;
    return 0;
}

直接编译命令:

g++ `pkg-config --libs --cflags tf` -ldl tf_test.cpp

欧式变换矩阵(其次坐标包含R,t)

//虽然称为3d(指3维空间的欧式坐标),实质上是4*4的矩阵, 旋转R + 平移T
Eigen::Isometry3d T=Eigen::Isometry3d::Identity();
//按照rotation_vector进行旋转
T.rotate (rotation_vector);
//按四元数表示的旋转
Eigen::Isometry3d T(q);
//把平移向量设成(1,3,4)
T.pretranslate (Eigen::Vector3d ( 1,3,4 )); 

Eigen::Map 数组、向量及矩阵的引用。

double parameters[7] = {0, 0, 0, 1, 0, 0, 0};
//quaterd为parameters的引用
Eigen::Map<const Quaterniond> quaterd(parameters[0]);
//同Eigen::Map<const Quaterniond> quaterd(parameters);
//quaterd为parameters[4]的引用,由于元素地址连续
Eigen::Map<const Eigen::Vector3d> trans(parameters[0] + 4);
//同Eigen::Map<const Eigen::Vector3d> trans(parameters + 4);

引用:类似于变量的别名,一旦指定,不可改变,与变量值绑定

指针:指针存放变量的地址。可更改

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • c++的glog与spdlog的性能对比测试分析

    目录 问题: 测试内容: 测试环境: glog测试代码如下: spdlog异步测试代码: 普通io流写入测试代码: 总结: 问题: 之前看到有的博文说glog性能很好,效率很高,当时第一反应是“这个结论是几几年的?”,可惜博文都是各种抄袭和转载,不容易找到结论出处,我一直很怀疑它的写入吞吐性能. 之前作为学习优秀的代码案例,略看过glog的源代码.它是线程同步的方式记录和写入,每次调用日志的地方都要创建和释放日志器,确实在每次创建对象时并没有创建额外缓存空间,而是复用第一次创建的内存空间,这相比

  • google c++程序测试框架googletest使用教程详解

    目录 什么是googletest? googletest简介 谁在使用 GoogleTest? 相关开源项目 googletest的下载与编译 cmake gui编译 在vs2019中使用googletest GTest的一些基本概念 GTest的断言 事件机制 参数化 什么是googletest? googletest简介 ​GoogleTest 是 Google 的 C++ 测试和模拟框架,可以帮助程序员测试C++程序的结果预期,GoogleTest 的代码用cmake管理,可以使用cmak

  • C++用函数对算法性能进行测试

    目录 前言 工具 模板 说明 测试 前言 “Algorithm+Data Structures=Programs”——瑞士计算机科学家尼古拉斯·沃斯 工具 C/C++库函数中的time.h/ctime库中的clock()函数 模板 #include<iostream> #include<ctime> using namespace std; clock_t start_time = clock(); { 算 法 代 码 块 }; clock_t end_time = clock()

  • C++ 测试框架GoogleTest入门介绍

    目录 引言 简单介绍 初体验 引言 开发者虽然主要负责工程里的开发任务,但是每个开发完毕的功能都是需要开发者自测通过的,所以经常会听到开发者提起单元测试的话题.那么今天我就带大伙一起来看看大名鼎鼎的谷歌 C++ 测试框架 GoogleTest. 简单介绍 来看看谷歌官方是怎么介绍这个框架的: Googletest 是由测试技术团队根据 Google 的特定要求和约束开发的测试框架.无论您是在 Linux,Windows 还是 Mac 上工作,如果您编写 C++ 代码,googletest 都可以

  • C/C++ 单元自动化测试解决方案总结

    目录 前言 一.动机 1.1 方法1:使用正则表达式 1.2 方法2:使用flex/bison 分析c/c++源码文件 1.3 方法3:利用编译已经生成的AST 来生成代码 二.效果展示 2.1 业务代码零修改, 直接使用TU生成边界用例 2.2 使用注解tu::case生成用户自定义用例 2.3 使用注解tu::mock 自动生成mock方法 三.TU实现方案 3.1 AST 是什么? 3.2 AST(Abstract syntax tree) 3.3 方案 四.TU 插件使用的简易程度对比

  • MySQL5.7压缩包安装Windows的方式

    压缩包解压到指定路径下 E:\mysql\mysql-5.7.18-winx64 准备my.ini配置文件 # MySQL Server Instance Configuration File # --------------------------------------------------------------- # Generated by the MySQL Server Instance Configuration Wizard #通过使用MySQL服务配置向导生成 # Inst

  • 在linux中安装mongodb的方式小结

    对于mongodb的安装,官方提供了多种安装方式,推荐使用deb或者rpm方式安装. 下面我们介绍在Ubuntu16.04环境下的安装,安装方式使用apt包管理工具进行安装. 1. Ubuntu16.04安装mongodb 1.1 概述 Ubuntu有其自己的MongoDB包,MongoDB官方提供的包与其相比更新.我们安装是MongoDB提供的.deb包 Note MongoDB只提供了64位LTS(Long Term Surpport) Ubuntu版本的支持. 1.2 包 MongoDB官

  • Linux下安装mysql的方式(yum和源码编译两种方式)

    这里介绍Linux下两种安装mysql的方式:yum安装和源码编译安装. 1. yum安装 (1)首先查看centos自带的mysql是否被安装: # yum list installed |grep mysql //若有自带安装的mysql,将其卸载 # yum -y remove mysql-libs.x86_64 (2)下载MySQL官网的yum仓库:https://dev.mysql.com/downloads/repo/yum/, # yum localinstall mysql57-

  • 详解redis desktop manager安装及连接方式

    1.下载安装包 官网下载地址:https://redisdesktop.com/pricing 官网下载需要付费使用 再此附上一个免费的破解版本,绿色安全可用 链接:https://pan.baidu.com/s/1K5Yd1OQ8nAofCl79Hp8r1A 提取码:528k 下载完后后直接打开exe 2.安装 直接下一步 同意协议 选择安装位置,我选择安装在F盘,点击下一步等待安装 点击运行 启动以后的界面 3.连接redis数据库 如果需求用集群方式链接的话,如下操作: 勾选集群完毕后,链

  • Visual Studio 2019安装、测试创建c语言项目(图文教程)

    一.安装 Visual Studio 2019是完全免费的,而且安装比较简单,不过还是想写一写,老规矩,先上下载地址 官网:https://visualstudio.microsoft.com/zh-hans/vs/ 本地下载:https://www.jb51.net/softs/618313.html 选择Community 2019下载 双击打开下载下来的应用程序 点击继续 看个人需要选择你要安装的工作负载,(工作负载后期还可以再装的,不用着急全部装完),修改安装路径 一般来说安装这三个就差

  • react基本安装与测试示例

    本文实例讲述了react基本安装与测试.分享给大家供大家参考,具体如下: 语法特点: 声明式编码:只在意结果不在意过程 组件化编码:html,css,js的集合 单向数据流:vue也是单向数据流,有一个双向绑定功能. 支持服务器端编写 高效:先生成一个虚拟DOM,然后在DOM中操作,再一次性返回到真实界面 首先安装好node.js和npm 安装 Webpack:npm install -g webpack 安装对应的 loader: npm install babel-loader --save

  • macOS上Redis的安装与测试操作

    Redis简介 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. Redis运行在内存中,同时支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用. Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储. Why Redis? 作为key-value型数据库,Redis: 性能极高 Redis能读的速度是110000次/s,写的速度是81000次/s 丰富的数据类型

  • CentOS系统中PHP安装扩展的方式汇总

    CentOS 下,PHP有多种方式来安装扩展, 主要有 包管理式 的 yum 安装 . pecl 安装 , 以及 源码编译安装 . 包管理式 的安装卸载尤为方便,而 源码编译式 的安装则方便参数调优. 一般搭建本机开发环境推荐 包管理式 的安装,节约时间.而 线上部署 环境则推荐 编译安装 , 方便调优. 本文以 MongoDB 扩展`安装举例. 工具 PHP版本 : 7.0.17 Nginx : 1.10.2 VMware版本号 : 12.0.0 CentOS版本 : 7.0 一.yum 安装

  • vue项目安装使用vconsole方式

    目录 vue安装使用vconsole vue总引入vconsole 第一种:使用import的方式 第二种:通过js的方式引入,我是在app.vue中引入的 vue安装使用vconsole 1.安装 npm install vconsole --save 如果安装不成功,可选择使用cnpm cnpm安装使用淘宝镜像: npm install -g cnpm --registry=https://registry.npm.taobao.org //cnpm -v 如果有出现版本号证明安装成功 2.

  • 安装MySQL常见的三种方式

    目录 安装MySQL的方式常见的有三种: rpm包形式 通用二进制形式 源码编译 1,rpm包形式 (1) 操作系统发行商提供的 (2) MySQL官方提供的(版本更新,修复了更多常见BUG)www.mysql.com/downloads 关于MySQL中rpm包类型的介绍: MySQL-client         客户端组件  MySQL-debuginfo      调试MySQL的组件  MySQL-devel          想针对于MySQL编译安装PHP等依赖于MySQL的组件包

随机推荐