c++ 四元数转欧拉角

2023-11-05

c++ 四元数转欧拉角

两种方法,供你选择;

方法1;



/*
输入:x,y,z,w 为四元数
输出:roll,pitch,yaw欧拉角
**/
static void toEulerAngle(const double x,const double y,const double z,const double w, double& roll, double& pitch, double& yaw)
{
// roll (x-axis rotation)
    double sinr_cosp = +2.0 * (w * x + y * z);
    double cosr_cosp = +1.0 - 2.0 * (x * x + y * y);
    roll = atan2(sinr_cosp, cosr_cosp);

// pitch (y-axis rotation)
    double sinp = +2.0 * (w * y - z * x);
    if (fabs(sinp) >= 1)
        pitch = copysign(M_PI / 2, sinp); // use 90 degrees if out of range
    else
        pitch = asin(sinp);

// yaw (z-axis rotation)
    double siny_cosp = +2.0 * (w * z + x * y);
    double cosy_cosp = +1.0 - 2.0 * (y * y + z * z);
    yaw = atan2(siny_cosp, cosy_cosp);
//    return yaw;
}


调用

            cv::Vec3d euler;
            toEulerAngle(theta[0],theta[1],theta[2],theta[3],euler[0],euler[1],euler[2]);
            cout <<"euler "<< euler << endl;

方法二-依赖库Eigen;

eigen安装;有就跳过;

sudo apt install libeigen3-dev
#include <Eigen/Dense>
#include <Eigen/Geometry>
#include <Eigen/StdVector>
#include <Eigen/Core>

Vector3d Quaterniond2Euler(const double x,const double y,const double z,const double w)
{
    Eigen::Quaterniond q;
    q.x() = x;
    q.y() = y;
    q.z() = z;
    q.w() = w;

    Eigen::Vector3d euler = q.toRotationMatrix().eulerAngles(2, 1, 0);
    cout << "Quaterniond2Euler result is:" <<endl;
    cout << "x = "<< euler[2] << endl ;
    cout << "y = "<< euler[1] << endl ;
    cout << "z = "<< euler[0] << endl << endl;
    return euler;
}

调用;theta是四元数;返回 Eigen::Vector3d euler

 Eigen::Vector3d euler = Quaterniond2Euler(theta[0],theta[1],theta[2],theta[3] );
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c++ 四元数转欧拉角 的相关文章

随机推荐

  • mysql安装图解 mysql图文安装教程(详细说明)

    下面的是MySQL安装的图解 用的可执行文件安装的 详细说明了一下 打开下载的mysql安装文件mysql 5 0 27 win32 zip 双击解压缩 运行 setup exe 出现如下界面 mysql安装图文教程1 mysql安装向导启
  • Linux——信号的发送,自己实现结束进程的kill命令

    信号的发送 Linux提供了一种系统调用 2 不是kill命令 kill 可以向指定的进程发送指定的信号 int kill pid t pid int signType signType是要发送的信号 kill方法的pid参数有四种不同的情
  • PID 控制保姆级培训教程下-全国大学生电子设计大赛赛前必备

    紧接上回 PID 控制保姆级培训教程上 全国大学生电子设计大赛赛前必备 http t csdn cn TY4eB 上回介绍到 书接上回 实操设计 干货满满 3 数字控制器的模拟化设计 3 1 数字PID 3 1 1 DDC系统的组成原理 D
  • FastAPI从入门到实战(6)——请求体与嵌套模型

    前面记录的是路径参数和查询参数的内容 那两种形式的数据都不算的发送的数据 都是存在路径中的数据 请求体是客户端发给接口的参数 不存在于路径中 本文就主要记录FastAPI中的请求体应用内容 一个发送请求体的接口 创建一个数据模型 class
  • Linux 使用rpm方式安装最新mysql(5.7.16)步骤以及常见问题解决

    前几天在阿里云买了个服务器 准备自己玩玩 现将最新版mysql 5 7 16 安装步骤 以及遇到问题及解决过程分享如下 第一步 下载rpm包 mysql官网下载 http dev mysql com downloads mysql 但如果你
  • 2021年网络安全省赛--web隐藏信息探索解析(中职组)

    2021年省赛web隐藏信息探索 解析 任务环境说明 Web20200529 服务器场景操作系统 未知 关闭连接 1 通过本地PC中渗透测试平台Kali对服务器场景Web20200529中的网站进行访问 找到登录界面中的FLAG 并将FLA
  • 专属于程序员的知识仓库:开发者导航

    一个专属于开发者的导航网站 收录丰富 内容详实 更新频繁 废话不多说 先上几张图吧 网站还收录了很多惊喜类目 比如最近很火的ChatGPT和AI绘画 开发者导航网至少收录了20多个 大部分都是免魔法 国内直接可以访问的 娱乐区还包括很多影视
  • 金蝶显示服务器异常,金蝶连接云服务器异常怎么回事

    金蝶连接云服务器异常怎么回事 内容精选 换一换 华为云帮助中心 为用户提供产品简介 价格说明 购买指南 用户指南 API参考 最佳实践 常见问题 视频帮助等技术文档 帮助您快速上手使用华为云服务 ELB的常见异常返回码有400 403 50
  • 派查查 :一个WearOS智能手表系统上的快递查询应用

    目录 前言 项目概述 设计背景 系统架构 接口介绍 即时查询请求 即时查询回复 前言 在学习面向对象程序设计课程的时候 收获颇多 最后的课程报告选题选择了 Android开发 但是安卓手机上好的应用数不胜数 自己不想重蹈覆辙做别人做过不知道
  • 前端常用工具库整理

    功能库 lt lt lt Axios 一个基于 promise 的 HTTP 库 可以用在浏览器和 node js 中 http www axios js com Lodash 一个一致性 模块化 高性能的 JavaScript 实用工具库
  • 小程序使用 svg

    封装组件 components下新建svgIcon文件 wxml
  • node内置模块——Buffer模块(缓冲区)

    文章目录 Buffer 缓冲区 创建Buffer 利用字符串创建buffer Buffer from 使用Buffer方法创建buffer Buffer alloc Buffer allocUnsafe size Buffer元素的操作 B
  • CSS选择器(nth-child)

    nth child 这个选择符括号内可以写 an b a b均为整数 或者关键字 因为工作中有遇到要隐藏列表第三个子元素之后的所有子元素 所以有用到这个选择器 记录一下 1 nth child a 当括号里只写一个数字 比如 list li
  • OSI七层参考模型和数据封装

    OSI七层参考模型和数据封装 一 网络基础原理 1 分层思想 二 OSI七层参考模型 三 TCP IP协议簇和OSI参考模型 1 TCP IP五层模型常见协议 2 ARP是地址解析协议 3 RARP是反地址解析协议 四 PDU协议数据单元数
  • Flash概念简述

    1 Flash全名叫做Flash Memory Flash存储芯片的一种 通过特定的程序可以修改里面的数据 Flash属于非易失性存储设备 Non volatile Memory Device 与此相对应的是易失性存储设备 Volatile
  • RK3568 HDMI EDID处理过程

    一 简介 EDID是什么 EDID的全称是Extended Display Identification Data 扩展显示标识数据 VGA DVI的EDID由主块128字节组成 HDMI的EDID增加扩展块 128字节 扩展块的内容主要是
  • Jupyter notebook 如何设定默认的保存目录?

    前言 做智能车的时候 Jupter Notebook的默认保存在可怜的C盘 本来就很紧张的C肯定受不了 要改到别的地方 网上找了一些参考 说变更一下配置地址就可以了 照着做 99 的博客说 设置完了 关闭重启就好了 试了几次 根本不是关闭重
  • Proxmox VE 使用ACME 自动获取证书(DNSPOD)

    前言 PVE中自带了ACME 的支持 但是在国内对DNSPOD的支持似乎不是很好 所以只能采取手动的方式 一 使用步骤 以下步骤均在pve 的管理界面中 打开节点的shell 窗口中执行 安装ACME wget O acme1 sh htt
  • 页面访问量和网站访问量的统计

    网页点击计数器 以下是实现一个简单的基于 Servlet 生命周期的网页点击计数器需要采取的步骤 在 init 方法中初始化一个全局变量 每次调用 doGet 或 doPost 方法时 都增加全局变量 如果需要 您可以使用一个数据库表来存储
  • c++ 四元数转欧拉角

    c 四元数转欧拉角 两种方法 供你选择 方法 输入 x y z w 为四元数 输出 roll pitch yaw欧拉角 static void toEulerAngle const double x const double y const