首页 > 其他分享 >在 Visual Studio 中使用 Eigen 库

在 Visual Studio 中使用 Eigen 库

时间:2024-10-31 09:42:41浏览次数:4  
标签:Eigen double 点击 Visual Studio 3.4 deg eigen

在 Visual Studio 中使用 Eigen 库

参考教程:

在 Visual Studio 中配置 Eigen库_vs调用eigen-CSDN博客

Eigen 是一个开源的 C++ 库,主要用来支持线性代数,矩阵和矢量运算,数值分析及其相关的算法。Eigen 除了需要 C++ 标准库以外,不需要任何其他的依赖包。

1. 下载

Eigen 库的下载地址为:

https://gitlab.com/libeigen/eigen/-/archive/3.4.0/eigen-3.4.0.zip

D 盘创建 thirdparty 文件夹

eigen-3.4.0.zip 移动至 D:\thirdparty

点击 eigen-3.4.0.zip ,解压,选择”提取到当前位置

eigen-3.4.0 文件夹重命名为Eigen3

Eigen3中的文件内容如下所示:

2. 测试

2.1 创建项目

打开 visual studio,点击”创建新项目

选择”控制台应用“,点击”下一步

项目名称为:EigenTest,位置为:D:\,点击”创建

EigenTest.cpp中添加如下代码:

#include <iostream>
#include <Eigen/Core>
#include <Eigen/Geometry>
 
using namespace std;
 
Eigen::Matrix3d eulerAnglesToRotationMatrix(Eigen::Vector3d& theta);
bool isRotationMatirx(Eigen::Matrix3d R);
Eigen::Vector3d rotationMatrixToEulerAngles(Eigen::Matrix3d& R);
 
const double ARC_TO_DEG = 57.29577951308238;
const double DEG_TO_ARC = 0.0174532925199433;
 
int main()
{
    // 设定车体欧拉角(角度),绕固定轴
    double roll_deg = 0.5;      // 绕X轴
    double pitch_deg = 0.8;     // 绕Y轴
    double yaw_deg = 108.5;     // 绕Z轴
 
    // 转化为弧度
    double roll_arc = roll_deg * DEG_TO_ARC;    // 绕X轴
    double pitch_arc = pitch_deg * DEG_TO_ARC;  // 绕Y轴
    double yaw_arc = yaw_deg * DEG_TO_ARC;      // 绕Z轴
 
    cout << endl;
    cout << "roll_arc = " << roll_arc << endl;
    cout << "pitch_arc = " << pitch_arc << endl;
    cout << "yaw_arc = " << yaw_arc << endl;
 
    // 初始化欧拉角(rpy),对应绕x轴,绕y轴,绕z轴的旋转角度
    Eigen::Vector3d euler_angle(roll_arc, pitch_arc, yaw_arc);
 
    // 使用Eigen库将欧拉角转换为旋转矩阵
    Eigen::Matrix3d rotation_matrix1, rotation_matrix2;
    rotation_matrix1 = Eigen::AngleAxisd(euler_angle[2], Eigen::Vector3d::UnitZ()) *
        Eigen::AngleAxisd(euler_angle[1], Eigen::Vector3d::UnitY()) *
        Eigen::AngleAxisd(euler_angle[0], Eigen::Vector3d::UnitX());
    cout << "nrotation matrix1 =n" << rotation_matrix1 << endl << endl;
 
    // 使用自定义函数将欧拉角转换为旋转矩阵
    rotation_matrix2 = eulerAnglesToRotationMatrix(euler_angle);
    cout << "rotation matrix2 =n" << rotation_matrix2 << endl << endl;
 
    // 使用Eigen将旋转矩阵转换为欧拉角
    Eigen::Vector3d eulerAngle1 = rotation_matrix1.eulerAngles(2, 1, 0); // ZYX顺序,yaw,pitch,roll
    cout << "roll_1 pitch_1 yaw_1 = " << eulerAngle1[2] << " " << eulerAngle1[1]
        << " " << eulerAngle1[0] << endl << endl;
 
    // 使用自定义函数将旋转矩阵转换为欧拉角
    Eigen::Vector3d eulerAngle2 = rotationMatrixToEulerAngles(rotation_matrix1); // roll,pitch,yaw
    cout << "roll_2 pitch_2 yaw_2 = " << eulerAngle2[0] << " " << eulerAngle2[1]
        << " " << eulerAngle2[2] << endl << endl;
 
    return 0;
}
 
Eigen::Matrix3d eulerAnglesToRotationMatrix(Eigen::Vector3d& theta)
{
    Eigen::Matrix3d R_x;    // 计算旋转矩阵的X分量
    R_x <<
        1, 0, 0,
        0, cos(theta[0]), -sin(theta[0]),
        0, sin(theta[0]), cos(theta[0]);
 
    Eigen::Matrix3d R_y;    // 计算旋转矩阵的Y分量
    R_y <<
        cos(theta[1]), 0, sin(theta[1]),
        0, 1, 0,
        -sin(theta[1]), 0, cos(theta[1]);
 
    Eigen::Matrix3d R_z;    // 计算旋转矩阵的Z分量
    R_z <<
        cos(theta[2]), -sin(theta[2]), 0,
        sin(theta[2]), cos(theta[2]), 0,
        0, 0, 1;
    Eigen::Matrix3d R = R_z * R_y * R_x;
    return R;
}
 
 
bool isRotationMatirx(Eigen::Matrix3d R)
{
    double err = 1e-6;
    Eigen::Matrix3d shouldIdenity;
    shouldIdenity = R * R.transpose();
    Eigen::Matrix3d I = Eigen::Matrix3d::Identity();
    return (shouldIdenity - I).norm() < err;
}
 
Eigen::Vector3d rotationMatrixToEulerAngles(Eigen::Matrix3d& R)
{
    assert(isRotationMatirx(R));
    double sy = sqrt(R(0, 0) * R(0, 0) + R(1, 0) * R(1, 0));
    bool singular = sy < 1e-6;
    double x, y, z;
    if (!singular)
    {
        x = atan2(R(2, 1), R(2, 2));
        y = atan2(-R(2, 0), sy);
        z = atan2(R(1, 0), R(0, 0));
    }
    else
    {
        x = atan2(-R(1, 2), R(1, 1));
        y = atan2(-R(2, 0), sy);
        z = 0;
    }
    return { x, y, z };
}

2.2 添加 Eigen 库

依次点击:视图 –> 其他窗口 –> 属性管理器

双击Debug | x64

选择 ”VC++目录“,选择” 包含目录“,点击”向下箭头按钮“,点击”编辑

添加路径:D:\thirdparty\Eigen3,并点击”确定“

即可看到包含目录中显示的D:\thirdparty\Eigen3,接着点击”确定

在工具栏设置:Debug、x64,即可使用Eigen库。

2.3 运行

点击界面上方的”本地Windows调试器

即可看到程序的输出。

标签:Eigen,double,点击,Visual,Studio,3.4,deg,eigen
From: https://www.cnblogs.com/windandchimes/p/18517048

相关文章

  • eigen3 编译报错
    错误信息:/usr/include/eigen3/unsupported/Eigen/CXX11/src/util/EmulateArray.h:254:30:error:redeclaredwith1templateparameter254|template<typenameT>structarray_size;/usr/include/eigen3/unsupported/Eigen/CXX11/src/util/EmulateArray.h:255:41......
  • 【GiraKoo】Visual Studio开启Asan提示“LINK fatal error LNK1104 cannot open file
    【解决】VisualStudio开启Asan提示“LINKfatalerrorLNK1104cannotopenfile'LIBVCASAN.lib'”环境VisualStudio2022现象VisualStudio2022提示:LINK:fatalerrorLNK1104:cannotopenfile'LIBVCASAN.lib'原因在VisualStudio的VC++Directories,加入......
  • HarmonyOS NEXT 组件市场在DevEco Studio,安装出现Fail to load plugin descriptor fro
     HarmonyOSNEXT开源组件市场  https://gitee.com/harmonyos-cases/cases  根据gitee的下载连接,下载了cases-master.zip。如果在devstudio-settings-plugins-设置按钮-installfromdisk,会报错,说明这个不是真正的插件包。解压这个zip,在plugin文件夹下有个case_plug......
  • QT creator中cmake管理项目,如何引入外部库(引入Eigen库为例)
    在Eigen的官网下载压缩包[点我进入]解压到当前项目的根目录(当然你也可以自己选择目录)在当前项目的CMakeLists.txt任意位置加入这句话include_directories(${CMAKE_SOURCE_DIR}/eigen)这时候就是测试是否引入成功,在main.cpp中加入#include<Eigen/Dense>,鼠标悬停如果出现路......
  • IC-GVINS: A Robust, Real-Time, INS-Centric GNSS-Visual-Inertial Navigation Syste
    IC-GVINS:ARobust,Real-Time,INS-CentricGNSS-Visual-InertialNavigationSystemIC-GVINS:一种稳健的实时以惯性导航系统为中心的全球导航卫星系统视觉惯性导航系统XiaojiNiu${}^{\circledR}$,HailiangTang${}^{\circledR}$,TishengZhang${}^{\circledR......
  • No.1 Rstudio初认识
    一、Rstudio的安装在安装Rstudio之前先安装R语言。可以同时安装多个R语言的版本。Rstudio是R语言专门的编译环境,目前也支持Python语言的执行。二、Rstudio的基本设置1.界面a:脚本文件区域b:控制台c:环境变量,历史记录d:文件系统、绘图、包,帮助 2.常规设置 代......
  • 自动化测试工具Ranorex Studio(十五)-自定义代码ACTION
    在Recorder提供的功能不能够满足的情况下,可以使用自定义代码。这里有一些例子,可以方便演示自定义代码Action。•   自定义验证•   访问测试用例相关的数据和参数•   扩展报告在项目视图窗口中,仔细看一个录制模块文件,你会看到有两个相关的代码文件。 图:录......
  • 【漏洞复现】时空智友ERP系统uploadStudioFile任意文件上传漏洞
    免责声明请勿使用本文中提到的技术进行非法测试或行为。使用本文中提供的信息或工具所造成的任何后果和损失由使用者自行承担,所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用。一、简介时空智友ERP系统是一款基于云计算和大数据的企业资源计划管理系统,旨在......
  • C++之OpenCV入门到提高001:使用 Visual Studio2022 配置 OpenCV 环境
    一、介绍从今天开始,我们又要开始一个新的系列了,这个系列就是《C++之Opencv入门到提高》。这个系列是有关如何使用C++语言,通过Opencv来实现图像处理、缺陷检测、视频处理、机器学习等功能。OpenCV我也是新接触的,一步一步的学习,一步一步提高。这个系列是以C++为基......
  • 使用LM Studio在ZBlog基于大模型原创文章上稿进行SEO优化
    在当今内容创作需求日益增长的背景下,如何高效地进行文章生成与发布,成为众多开发者关注的焦点。通过结合Python脚本与ZBlog平台,能够实现从分类与标签的自动化管理,到文章生成与发布的一整套流程。本文详细讲解了如何进行自动化文章生成与发布的基础配置、项目搭建与实际应用,......