如何用四元数表示姿态差

news2025/1/19 11:29:57

在机器人控制中,经常需要控制末端工具的姿态,如果用欧拉角表示姿态,会出现万向锁的问题,而使用四元数就不会有这个问题,此外四元数求出的姿态差为一个标量,更容易在RL算法中使用。


首先,假设末端工具的姿态为q_1 = [x_1,y_1,z_1,w_1]=[\boldsymbol{v}_1sin\alpha_1,cos\alpha_1 ],期望姿态为q_2 = [x_2,y_2,z_2,w_2]=[\boldsymbol{v}_2sin\alpha_2,cos\alpha_2 ]

其中,q_1,q_2均为单位四元数,即q.norm = x^2+y^2+z^2+w^2=1,单位四元数还具有以下特性,其中q^{-1}为单位四元数的逆,q^*为单位四元数的共轭。 

q^{-1}q = 1

q^{-1} = q^* = [-x, -y, -z, w]

\boldsymbol{v}_1,\boldsymbol{v}_2均为三维单位向量,即\boldsymbol{v}.norm=1.

为求末端当前姿态到期望姿态的差距distance,使用q_2*q_1^{-1}。解释如下:

\because q_1^{-1}q_1 = 1 \newline \therefore q_2=q_2*(q_1^{-1}q_1) \newline \therefore q_2 = (q_2*q_1^{-1})q_1

可见,q_2*q_1^{-1}构建了从q_1q_2的映射。由于一个四元数表示三维空间中的一个刚体的姿态,那么认为q_2*q_1^{-1}是从q_1q_2的旋转。

Q=q_2*q_1^{-1}=[\boldsymbol{v}sin\Omega , cos\Omega],认为 从q_1绕着向量\boldsymbol{v}转动了2\Omega角度到达了q_2 。

如果当前姿态就是期望姿态,那么旋转角度2\Omega =0Q=[\boldsymbol{v}sin\Omega,cos\Omega]=[0,0,0,1].

Q = [0,0,0,1]=[v,w],v=[0,0,0]q_1=[x_1,y_1,z_1,w_1]=[v_1,w_1],v_1=[x_1,y_1,z_1].

q_2=Q*q_1 \newline =[v,w]*[v_1,w_1] \newline \overset{def}{=}[v\times v_1+wv_1+w_1v,ww_1-vv_1] \newline =[v_1,w_1]=q_1

将Q转换为轴角形式:

Q_{aa} = \{\boldsymbol{v},2\Omega\}=[v_x*2\Omega,v_y*2\Omega,v_z*2\Omega]

Q_{aa}.norm=2\Omega.


总结以上,为求实际姿态q_1与期望姿态q_2的差距,分为以下步骤:

一、求距离四元数:Q=q_2*q_1^{-1}

二、将其转换为轴角形式:Q \Rightarrow Q_{aa}

 三、求Q_{aa}.norm,这个标量即可代表实际姿态q_1与期望姿态q_2的差距。


参考文献:

https://web.archive.org/web/20200503045740if_/http://www.cs.ucr.edu/~vbz/resources/quatut.pdf

https://www.astro.rug.nl/software/kapteyn-beta/_downloads/attitude.pdf

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/434903.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

初始化一个Vue3+TS项目

目录 一.创建基本的项目结构: 二. 项目搭建规范: 集成editorconfig配置: 使用prettier工具: 使用ESLint检测 : 项目目录结构划分: CSS样式的重置: 全家桶 – 路由配置: 全家桶 – 状态管理: 网络请求封装axios: 区分 development和production 环境: Element-Plus集成…

第1章、C++基础

第1章、C基础 1.1 命名空间 1.1.1 命名空间的含义 在使用C进行大规模程序设计时,开发过程往往是团队合作,各个程序员命名和各种C库,对标识符的命名可能发生冲突,从而引进命名空间(一种特殊的域)的概念&a…

MIPI D-PHYv2.5笔记(19) -- Fault Detection

声明:作者是做嵌入式软件开发的,并非专业的硬件设计人员,笔记内容根据自己的经验和对协议的理解输出,肯定存在有些理解和翻译不到位的地方,有疑问请参考原始规范看 检测链路的故障有三种不同的机制。总线冲突&#xff…

10.1 二重积分的概念与性质

学习目标: 学习二重积分,我会采取以下几个步骤: 了解基本概念:首先我会学习二重积分的定义及其意义,了解二重积分的性质和特点,以及二重积分的计算方法。 理解二重积分的几何意义:我会通过画图…

Window10 源码编译UE4-27

Window10 源码编译UE4-27 文章目录 Window10 源码编译UE4-27一、查看官方软件软件环境配置([https://docs.unrealengine.com/4.27/en-US/ProductionPipelines/DevelopmentSetup/VisualStudioSetup/](https://docs.unrealengine.com/4.27/en-US/ProductionPipelines/…

编写高质量代码:改善Java程序的151个建议(数组和集合)

集合中的元素必须做到compareTo和equals同步 实现了Comparable接口的元素就可以排序,compareTo方法是Comparable接口要求必须实现的,它与equals方法有关系吗?有关系,在compareTo的返回为0时,它表示的是 进行比较的两个元素时相等…

SRv6项目实践(三):P4Runtime基础以及交换机控制

在正式介绍P4runtime基础之前,先说一说P4的编译和实现的过程 bmv2.json:p4文件经过编译器编译以后会生成bmv2.json文件,此文件以JSON格式定义BMv2 simple_switch目标的配置。当simple_switch接收到新的数据包时,它使用此配置以与…

24.Spring练习(spring、springMVC)

目录 一、Spring练习环境搭建。 (1)设置服务器启动的展示页面。 (2)创建工程步骤。 (3)applicationContext.xml配置文件。 (4)spring-mvc.xml配置文件。 (5&…

新建论文三线表模板,一键格式刷

论文三线表模板 写在最前面①表设计,新建表格样式②三线表上下线③三线表标题线④设置表格居中⑤设置表头格式容易出错的步骤 写在最前面 论文写完啦,准备调整格式 之前建模也是三线表,但只能基于该文档模板,所以重新设置一下。 …

linux speedtest-cli工具测试网络带宽、测试网速(下载速度、上传速度和延迟等信息)

speedtest-cli是一个命令行工具,用于测试网络的带宽。它可以在Linux、macOS和Windows等操作系统上运行。下面是使用speedtest-cli测试网络带宽的步骤: 安装speedtest-cli。在Linux系统上,可以使用以下命令安装: sudo apt-get in…

cookies 和 Session

并且注意 meta complete改为“false”,不然不支持Servlet注解 Session会话 会话:用户打开一个浏览器,点击了很多超链接,访问了 有状态会话:一个同学曾今来过教室,下次再来教室,我们会知道这个同学&#…

verdaccio搭建npm私服

1 安装依赖 npm install verdaccio -g开机自启 npm install pm2 -g2启动服务 pm2 start verdaccio 进入页面 http://localhost:4873/ 其他 修改 config.yaml 源为淘宝源 uplinks:npmjs:url: https://registry.npm.taobao.org/

【花雕学AI】真是太多了:汇总国内免费在线使用ChatGPT的完整镜像站列表大全(1000+)

一、ChatGPT为什么火爆? 它是一个可以和你聊天的人工智能程序,它可以用文字回答你的问题,也可以根据你的提示写出文章、歌词、代码等内容。ChatGPT是由一个叫OpenAI的机构开发的,它使用了一种叫做GPT的技术,这种技术可…

[Android+JetPack] (Java实现) Retrofit2+RxJava3+Paging3+RecyclerView 实现加载网络数据例子 记录

文章目录 前言参考链接依赖库及版本Demo效果接口及数据展示各项模块Retrofit2Bean,对应上面的接口返回.Service API部分 Paging3PagingSource以及 RxPagingSourcePagingDataAdapter 适配器ViewModelPublicInfoPage /Activity 最后 前言 继续安卓学习之旅,本章的主要目标是: 1.完…

2023年mathorcup杯A题代码小技巧总结

写篇杂文,不属于我的任何一个栏目,没啥案例含义,主要是记录一下mathorcup杯期间写的代码技巧。 mathorcup杯大部分都是组合优化问题,这让我擅长的机器学习都深度学习毫无作用....... 还好这个A题是可以遍历求所有解的&#xff0c…

SAP MDG —— 使用DIF导入物料主数据 Part4 开发篇

文章目录 通过CSV文件创建物料主数据的一些建议在DIF中使用CSV文件文件转换器类型BAdIBAdI 示例代码测试 DIF全篇总结 通过CSV文件创建物料主数据的一些建议 在Staging Area中创建/修改小批量的物料主数据,推荐使用标准文件上载功能(USMD_FILE_UPLOAD&am…

计算机基础--Redis

参考文献 https://zhuanlan.zhihu.com/p/599663544 基础知识 1. Redis的数据类型及使用场景 Redis支持五种数据类型:string(字符串),hash(哈希),list(列表)&#xff…

使用assembly插件对boot项目打zip和war部署包

目录 一、maven-assembly-plugin插件的简单使用 1、什么是assembly? 2. 常见的maven插件 3、如何使用? 二、如何通过assembly打不同的包 三、boot项目如何转成war包部署 背景:之前项目上已经使用了assembly对多个boot项目分别打zip包且…

MATLAB应用笔记

其他 1、NaN值 MATLAB判断数据是否为NaN可以直接使用函数:isnan() 三、数据分析 1、相关性 均值、方差、协方差、标准差、相关系数 mean() %均值 nanmean()%去除NAN值求均值 var() %方差 cov() %协方差 std() %标准差 corrcoef(B,b) %R 相关系数plot()…

[ 云原生 | Docker ] 构建高可用性的 SQL Server:Docker 容器下的主从同步实现指南

文章目录 一、前言二、SQL Server 主从同步的原理介绍三、具体的搭建过程3.1 准备工作3.1.1 卸载旧版本(如果有,可选,非必须)3.1.2 安装 Docker3.1.3 验证本地 Docker 是否安装成功 3.2 创建 Docker 网络3.3 创建主从节点的 SQL S…