持之以恒(一)位姿转换:姿态 / 四元数 / 旋转矩阵 / 欧拉角 及 位姿矩阵

2023-05-16

文章目录

  • 1. 简介
    • 1.1 位姿的几种表示形式
    • 1.2 姿态转换在线工具
  • 2. 位姿转换接口
    • 2.1 旋转向量 转 四元数
    • 2.2 四元数 转 旋转向量
    • 2.3 四元数 与 旋转矩阵
  • 3. 机器人相关应用
    • 3.1 不同厂家协作机器人的位姿表示形式

1. 简介

1.1 位姿的几种表示形式

姿态的几种表示形式,旋转向量四元数欧拉角旋转矩阵位姿矩阵

姿态表示形式Eigen
旋转向量rx,ry,rzEigen::Vector3f(Degrees)
四元数w,x,y,zEigen::Quaternionf
欧拉角ex,ey,ez,sequence
旋转矩阵3×3Eigen::Matrix3f
位姿矩阵4×4Eigen::Matrix4f

注意:Eigen 内部的计算均为弧度值。

1.2 姿态转换在线工具

  1. 3D Rotation Converter:https://www.andre-gaschler.com/rotationconverter/
  2. Rotation Conversion Tool: https://danceswithcode.net/engineeringnotes/quaternions/conversion_tool.html
  3. 四元数在线可视化转换网站: https://quaternions.online/

2. 位姿转换接口

2.1 旋转向量 转 四元数

  • 旋转向量转四元数公式
/* rx,ry,rz 分别转化为弧度值
 * w_abs = sqrt(rx^2 + ry^2 + rz^2);
 * qw = cos(w_abs / 2)
 * qx = sin(w_abs / 2) * rx / w_abs
 * qy = sin(w_abs / 2) * ry / w_abs
 * qz = sin(w_abs / 2) * rz / w_abs
 */ 

法1:使用Eigen库

Eigen::Quaternionf RotateVectortoQuaternionf(const Eigen::Vector3f& rotateVec) {
    Eigen::Vector3f vecfDegree = Eigen::Vector3f(rotateVec[0] * PI / 180, 
    											 rotateVec[1] * PI / 180, 
    											 rotateVec[2] * PI / 180);
    float w_abs = sqrt(vecfDegree[0] * vecfDegree[0] + 
    				   vecfDegree[1] * vecfDegree[1] + 
    				   vecfDegree[2] * vecfDegree[2]);
    return Eigen::Quaternionf(cos(w_abs / 2),
                      		  sin(w_abs / 2) * vecfDegree[0] / w_abs,
                       	      sin(w_abs / 2) * vecfDegree[1] / w_abs,
                              sin(w_abs / 2) * vecfDegree[2] / w_abs);
}

法2:使用公式

Eigen::Quaternionf RotateVectortoQuaternionf(const float rx, const float ry, const float rz) {
    float rxx = rx * PI / 180;
    float ryy = ry * PI / 180;
    float rzz = rz * PI / 180;

    float w_abs = sqrt(rxx * rxx + ryy * ryy + rzz * rzz);
    return Eigen::Quaternionf(cos(w_abs / 2),
                       	      sin(w_abs / 2) * rxx / w_abs,
                              sin(w_abs / 2) * ryy / w_abs,
                              sin(w_abs / 2) * rzz / w_abs);
}

2.2 四元数 转 旋转向量

  • 四元数转旋转向量公式
/* qx,qy,qz,qw 
 * angle = acos(qw) * 2
 * rx = qx / sin(angle /2) * angle * 180 / PI
 * ry = qy / sin(angle /2) * angle * 180 / PI
 * rz = qz / sin(angle /2) * angle * 180 / PI
 */ 

法1:使用Eigen库

Eigen::Vector3f Posture::toRotateVector(const Eigen::Quaternionf&  quaternion) {
    float angle = acos(quaternion.w()) * 2;
    float x = quaternion.x() / sin(angle / 2);
    float y = quaternion.y() / sin(angle / 2);
    float z = quaternion.z() / sin(angle / 2);
    return Eigen::Vector3f(angle * x  * 180 / PI, angle * y * 180 / PI, angle * z  * 180 / PI);
}

法2:使用公式

Eigen::Vector3f Posture::toRotateVector(const float qx, const float qy, 
									    const float qz, const float qw) {
    float angle = acos(qw) * 2;
    float x = qx / sin(angle / 2);
    float y = qy / sin(angle / 2);
    float z = qz / sin(angle / 2);
    return Eigen::Vector3f(angle * x  * 180 / PI, angle * y * 180 / PI, angle * z  * 180 / PI);
}

2.3 四元数 与 旋转矩阵

3. 机器人相关应用

3.1 不同厂家协作机器人的位姿表示形式

厂家位姿形式Eigen
ABB四元数Eigen::Quaternionf
FANUC欧拉角 ZYXEigen::Matrix3f(Eigen::AngleAxisf(rx, Eigen::Vector3f::UnitX()),
       Eigen::AngleAxisf(ry, Eigen::Vector3f::UnitY()),
       Eigen::AngleAxisf(rz, Eigen::Vector3f::UnitZ()))
UR旋转向量Eigen::Vector3f(Degrees)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

持之以恒(一)位姿转换:姿态 / 四元数 / 旋转矩阵 / 欧拉角 及 位姿矩阵 的相关文章

  • QT数据库:在QT中多线程访问mysql数据库的问题(已解决)

    一 可以便捷的使用多线程并发类QtConcurrent解决 关于类的使用请参考博客 便捷的使用多线程并发类QtConcurrent解决Qt在槽函数中执行耗时操作导致界面卡住的问题 吻等离子的博客 CSDN博客 二 出现问题 QT使用全局db
  • RS485、RS232、TTL的电平以及数据的收发

    目录 一 RS232 1 RS232标准接口定义 2 RS232串口线颜色定义 3 RS232串口接线方法 4 RS232的电平 二 RS485 xff08 基于MAX85的收发介绍 xff09 1 RS485标准接口定义 2 RS485串
  • 软件使用:如何彻底把VMware卸载干净

    1 禁用VM虚拟机服务 首先 xff0c 需要停止虚拟机VMware相关服务 按下快捷键WIN 43 R xff0c 打开windows运行对话框 xff0c 输入services msc 点击确定 在服务管理中 xff0c 找到VM开头的
  • Qt编译器MinGW和MSVC的区别

    一 两者的区别 1 MSVC 即Microsoft Visual C Compiler 即微软自己的编译器 我们下载Windows下的OpenCV时 解压后里面有两个文件夹 一个是build 一个是source build这个文件夹实际上是
  • Visual Studio快捷键(超全)

    目录 常用 xff1a 一 文件相关 二 编辑搜索相关 三 导航视图相关 四 项目相关 五 生成相关 六 调试相关 七 调试相关 八 分析相关 九 工具相关 十 扩展相关 十一 窗口相关 十二 帮助相关 常用 xff1a ctrl 43 x
  • 【软件使用】MarkText下载安装与汉化设置 (markdown快捷键收藏)

    一 安装与汉化 对版本没要求的可以直接选择 3 免安装的汉化包 1 下载安装MarkText MaxText win64 https github com marktext marktext releases download v0 17
  • 嵌入式【协议篇】CAN协议原理

    nbsp 一 CAN协议介绍 1 简介 CAN是控制器局域网络 Controller Area Network CAN 的简称 是一种能够实现分布式实时控制的串行通信网络 其实可以简单把CAN通信理解成开一场电话会议 当一个人讲话时其他人就
  • 曲阜师范大学831学姐高分背诵笔记(完整版)

    导论部分 1 微格教学 18 名词解释 答 微格教学称为 微型教学 xff0c 也称为 小型教学 所谓 微格教学 xff0c 就是将复杂的教学过程分解成许多容易掌握的具体的单一的技能 xff0c 如 导读技能 34 讲授技能 提问技能 等
  • STM32 【FreeRTOS HAL库】创建任务

    任务也不是很复杂的东西 简单得说 创建一个任务 你得提供它的执行函数 你得提供它的栈的大小 函数的执行空间 函数的优先级等重要的条件 因为任务在运行中 任务函数有调用关系 有局部变量 这些都保存在任务的栈里面 任务有可能被切换 有可能被暂停
  • 函数实现是否应该放在头文件

  • Microsoft Visual Studio C++2022 Windows 11 SDK环境

    Microsoft Visual Studio C 43 43 2022 Windows 11 SDK环境 1 安装2 环境变量本文为作者 难拳 原创 xff0c 转载请注明出处 1 安装 Visual Studio 2022适用于Wind
  • 【原创】浅谈指针(十)链表的写法

    Python微信订餐小程序课程视频 https edu csdn net course detail 36074 Python实战量化交易理财系统 https edu csdn net course detail 35475 前言 最近我又
  • AB实现双方通信

    题目要求 xff1a 通过C语言编写一个程序 xff0c 程序中需要有两个进程 xff0c 假设这两个进程是A和B xff0c 通过这两个进程模拟一个类似QQ聊天的情景 xff0c A进程和B进程分别代表通话一方 xff0c A进程能够发消
  • 串口传图显示

    串口传图 使用串口通信协议传输一张图像到SDRAM存储后VGA协议显示到屏幕 工程设计 图片生成 使用小梅哥资源中的Picture2Hex软件生成任意分辨率的图片 xff08 我这里选择640 480 xff09 matlab将得到合适分辨
  • Intel Realsense L515 ros节点时间戳不同步解决方法

    问题描述 在使用Intel Realsense L515的ros程序的时候 xff0c 会出现 frame 39 s span class token function time span domain is HARDWARE CLOCK
  • 宏定义(无参宏定义和带参宏定义)

    宏定义是比较常用的预处理指令 xff0c 即使用 标识符 来表示 替换列表 中的内容 标识符称为宏名 xff0c 在预处理过程中 xff0c 预处理器会把源程序中所有宏名 xff0c 替换成宏定义中替换列表中的内容 常见的宏定义有两种 xf
  • B6(B6AC)充电器中文简要说明书

    B6 xff08 B6AC xff09 充电器中文简要说明书 首先 xff0c 感谢模友们使用深圳比优德的B6充电器 深圳比优德动力产品技术有限公司致力于为全国模友提供最高性价比的动力产品 xff0c 公司所有产品均自主研发与自主生产 ww
  • c++STL库详细用法

    目录 1 什么是STL xff1f 2 STL内容介绍 2 1 容器 2 2 STL迭代器 2 3 算法 2 4 仿函数 2 4 1 概述 2 4 2 仿函数 functor 在编程语言中的应用 2 4 3 仿函数在STL中的定义 2 5
  • C语言之结构体对齐

    本次让我们来一起学习一下C语言中我们该如何将结构体内存对齐呢 xff1f 什么是结构体 xff1f span class token keyword struct span span class token class name A spa
  • STM32串口中断接收

    本次是结合项目 xff0c 来总结下在stm32CubeIDE开发环境下关于串口接收数据问题 xff1b 项目背景 xff1a 利用MODBUS通讯协议 串口中断的流程为 xff1a 1 在main c文件中对串口进行初始化操作 MX US

随机推荐

  • ORB-SLAM 学习笔记

    ORB SLAM 基本介绍 ORB SLAM 是西班牙 Zaragoza 大学的 Ra l Mur Arta 编写的视觉 SLAM 系统 它是一个完整的 SLAM 系统 xff0c 包括视觉里程计 跟踪 回环检测 xff0c 是一种完全基于
  • OCR(Optical Character Recognition,光学字符识别)问题

    应用场景 xff1a 在这个过程中由于场景的不确定性 xff0c 比如 xff1a 图片背景极其丰富 亮度不均衡 光照不均衡 残缺遮挡 文字扭曲 字体多样等等问题 xff0c 会带来极大的挑战 自然场景中文本具有多样性 xff1a 文本检测
  • OCR-文本检测方法

    基于回归的文本检测 基于回归文本检测方法和目标检测算法的方法相似 xff0c 文本检测方法只有两个类别 xff0c 图像中的文本视为待检测的目标 xff0c 其余部分视为背景 水平文本检测 早期基于深度学习的文本检测算法是从目标检测的方法改
  • C++中使用__FUNCTION__ ,__TIME__ ,__LINE__ ,__FILE__这几个宏的解释

    FUNCTION xff0c 34 TIME 34 xff0c LINE xff0c FILE 这几个宏是编译器自带的 xff0c 不是那个头文件定义的 FUNCION xff1a 函数名 TIME xff1a 文件运行的时间 LINE x
  • UART串口通信协议详解

    UART xff1a 通信异步收发器 xff0c 串行 异步通信总线 xff0c 两条数据线 xff08 收发 xff09 xff0c 全双工 xff08 可以同时接收和发送 xff09 一 UART帧格式 xff08 UART协议 xff
  • 基于FPGA的DDS信号发生器

    之前的博客讲到了DDS的基本原理 xff0c 现在用Verilog代码实现DDS 能够产生四种波形 xff0c 方波 xff0c 三角波 xff0c 正弦波 xff0c 锯齿波 xff0c 用按键来控制频率和选择波形 其中按键消抖模块来自小
  • C++的命名空间详解

    c 43 43 命名空间详解 命名空间的意义命名空间的定义命名空间的使用 命名空间的意义 在C C 43 43 中 xff0c 变量 函数和后面要学到的类都是大量存在的 xff0c 这些变量 函数和类的名称将都存在于全局作用域中 xff0c
  • 基于Verilog的32位并行进位加法器设计

    1 功能概述 xff1a 先行进位加法器是对普通的全加器进行改良而设计成的并行加法器 xff0c 主要是针对普通全加器串联时互相进位产生的延迟进行了改良 超前进位加法器是通过增加了一个不是十分复杂的逻辑电路来做到这点的 设二进制加法器第i位
  • 基于verilog的处理器设计之寄存器堆

    该寄存器堆是CPU中多个寄存器组成的阵列 xff0c 由32个32位的寄存器构成 xff0c 两个读数据口 Ra gt BusA Rb gt BusB 一个写数据口 Rw gt BusW 写数据受使能信号Wen控制 xff0c 在时钟的下降
  • 使用结构体方式访问寄存器的实践

    朱老师单片机课程学习记录 span class token macro property span class token directive keyword ifndef span GPIO H span span class token
  • MIM,MOM和MOS电容的区别

    ic layout经常会遇到这三种电容 xff1a MOS xff0c MOM xff0c MIM MOS 电容 xff1a 两端结构的mos管 xff0c 电容值不精确 xff0c 可以实现随控制电压变化而变 化的容值 xff0c 上下极
  • 折叠共源共栅放大器Cadence仿真

    仿真原理图如下 xff0c 图中M4的宽长比应该和M5一样 xff0c 为4u 150n m nf为1 2 M8和M9的宽长比为4u 500n 完整的电路图如下 xff1a cascode晶体管的L给小一点 xff0c 电流镜晶体管L给大一
  • 二级运放的Cadence仿真

    基于之前做的折叠共源共栅cascode xff0c 在后面加两个管子 xff0c 变成一个简单的二级运放 二级运放的通带内的增益大于80dB xff0c GBW为大于50M xff0c 相位裕度大于60 为了保证运放的相位裕度 xff0c
  • 射频接收机的参数计算

  • 户外系统原理方框图

  • bandgap中简并点理解与仿真

    综合EETOP论坛上的解答以及自己的仿真 xff0c 一般来说一个电路有可能存在一个以上满足KCL KVL电路方程的解 工作点 这些解中有的是稳定解 有的可能是非稳定解 其区别在于 如果电路目前工作在稳定解 当出现扰动时 比如实际电路中的噪
  • GPS卫星定位基本原理

    GPS定位基本原理 GPS测量定位方法分类 定位模式 xff1a 绝对定位 xff08 单点定位 xff09 相对定位 差分定位 定位时接收机天线的运动状态 xff1a 静态定位 xff0d 天线相对于地固坐标系静止 动态定位 xff0d
  • c++缺省参数,函数重载详解

    c 43 43 缺省参数 xff0c 函数重载详解 缺省参数什么是缺省参数 xff1f 缺省参数的分类 1 全缺省参数 2 半缺省参数 规则 xff1a 缺省参数只能从右往左 xff0c 依次给出 xff08 这是规定 xff09 函数重载
  • 和小白一起学数据结构三之c与结构及联合

    和小白一起学数据结构 xff08 三 xff09 今天博主动笔有些晚了哈 xff0c 所以不讲太多废话了 xff0c 直接上干货 xff01 今天我们来复习c语言提供的两种聚合数据类型 xff08 aggregate data type 数
  • 持之以恒(一)位姿转换:姿态 / 四元数 / 旋转矩阵 / 欧拉角 及 位姿矩阵

    文章目录 1 简介1 1 位姿的几种表示形式1 2 姿态转换在线工具 2 位姿转换接口2 1 旋转向量 转 四元数2 2 四元数 转 旋转向量2 3 四元数 与 旋转矩阵 3 机器人相关应用3 1 不同厂家协作机器人的位姿表示形式 1 简介