IMU学习系列(四)---四元数和旋转相关的约定表述

2023-12-01 21:40

本文主要是介绍IMU学习系列(四)---四元数和旋转相关的约定表述,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

      • 1.四元数的约定表述
        • 1.1 四元数表述的差异
        • 1.2 Hamilton vs JPL
          • 1.2.1元素的顺序
          • 1.2.2 左手系和右手系
          • 1.2.3 旋转操作的对象
          • 1.2.4 旋转操作的方向
        • 1.3 文章采用的表述
        • 1.4扰动和时间导数
          • 1.4.1右扰动和左扰动
          • 1.4.2 Hamilton表示下的(L-G)的四元数时间导数
          • 1.4.3 其他有用的表述方式
      • 2.旋转角速率表示旋转积分
        • 2.1零阶积分
        • 2.2一阶积分
        • 2.3归一化处理


1.四元数的约定表述

1.1 四元数表述的差异
  • 根据实部虚部的顺序,左手系和右手系(left-handed,right-handed),操作是旋转向量还是旋转坐标系(active or passive),操作方向(local to global or global to local),四元数有122中表述方法,其中Hamilton 和JPL是两种常见的表述方式,两者的对比如下表:

在这里插入图片描述

  • JPL 在航空上经常使用,Hamliton的表述在机器人领域更为常见,和ROS,Eigen,Ceres的程序库中使用的表示一致,和很多应用在IMU上的卡尔曼滤波文献也一致。
1.2 Hamilton vs JPL
  • 这里详细比较两者的差异
1.2.1元素的顺序
  • Hamilton将实部是第一元素,JPL实部是最后一个元素
1.2.2 左手系和右手系
  • 右手系和左手系定义的差别
    在这里插入图片描述
  • 两者定义下的四元数是共轭关系
    在这里插入图片描述
1.2.3 旋转操作的对象
  • 一种是假设坐标轴frame不变(active),向量在旋转,这种类似于相机不动,相机里观察的目标在动,或者说整个过程都是假定在一个坐标系下的。

在这里插入图片描述

  • 一种是假设向量不变(passive),坐标轴在变,类似于相机的视角在变,目标不动,这个和很多SLAM中的表述方式一致,因为SLAM中是假设路标是静止的。如barfoot书中,一个向量r可以由由不同坐标系下的坐标表示,即passive。Hamliton和JPL都是使用的passive的方式。
  • passive的表示中,向量r只有一种形式表示,不同时刻的坐标系是在变化的,即向量r在不同时刻有不一样的坐标表示。
    在这里插入图片描述
  • active 和passive其实就是相对运动关系:
    在这里插入图片描述
1.2.4 旋转操作的方向
  • 我的理解,Local和global是相对的概念,从旋转矩阵的推导我们知道,开始假设机体系b和导航系n是重合的,然后我们推导用空间某个向量r的初始坐标 r n {r_n} rn和旋转矩阵,表示r在旋转后的b系新的坐标 r b {r_b} rb.这里b即local,n系即global。
  • 或者说我们选择是将相机在新的视角看到的空间某个固定点的坐标转成开始相机视角下的坐标(local-global: r n = C n b r b {r_n=C_{nb}r_b} rn=Cnbrb,barfoot书中的 r 1 = C 12 r 2 {r_1=C_{12}r_2} r1=C12r2);
  • 还是旋转将相机在初始视角看到的空间固定点坐标转到相机新的视角下看到的坐标(global-local: r b = C b n r n {r_b=C_{bn}r_n} rb=Cbnrn,barfoot书中 r 2 = C 21 r 1 {r_2=C_{21}r_1} r2=C21r1
  • local to global,旋转矩阵下标第一个是旧坐标系,第二个是新坐标系,且下标表述满足链式原则,所以对于添加扰动,local to
    global 是右扰动,global to local是左扰动。后面会证明。
  • 两种方式其实也是相对运动的关系
    在这里插入图片描述
  • 可以证明,Hamilton和JPL的四元数表示在数值上是相等的。
    在这里插入图片描述
1.3 文章采用的表述
  • 文章采用local to global的表示,且简化以下表示:
    在这里插入图片描述
1.4扰动和时间导数
1.4.1右扰动和左扰动
  • 局部扰动(local perturbation)是右扰动形式;

local to global的形式下,局部扰动项表示为(下标第一个是旧坐标系G,第二个是新坐标系L)
Δ R L = Δ R L L ~ { \Delta R_L=\Delta R_{L \tilde{L} } } ΔRL=ΔRLL~
R ~ = R G L Δ R L L ~ { \tilde{R}=R_{GL}\Delta R_{L \tilde{L}} } R~=RGLΔRLL~

  • global 扰动是左扰动,证明和局部扰动是相似的:

在这里插入图片描述

1.4.2 Hamilton表示下的(L-G)的四元数时间导数
  • 所以局部扰动的表达式和一阶泰勒项为:
    在这里插入图片描述
  • 四元数时间导数,涉及到四元数运算时,三维角速度向量是用四元数方式表示的,相似的可以推导旋转矩阵的微分,相对于G-L的旋转微分,我们很容易发现L-G的优势,因为实际角速度是机体系b(local)下传感器获得的。
    在这里插入图片描述在这里插入图片描述
1.4.3 其他有用的表述方式
  • 通过以上推导而来
    在这里插入图片描述
    1.5 barfoot书中表述
  • 根据上述讨论,结合barfoot书中旋转相关公式的形式,可以得知barfoot书中的的表述是:四元数实部在后,使用右手系,passive方式,采用左扰动/全局扰动(global
    to local)。

2.旋转角速率表示旋转积分

  • 这里不采用文章中的推导,从笔记(2)中,四元数和旋转向量出发推导:
    q n + 1 = q n ⊗ e u = q n ⊗ e ω Δ t / 2 {q_{n+1}=q_n\otimes e^u=q_n\otimes e^{\omega \Delta t/2} } qn+1=qneu=qneωΔt/2
    泰勒展开得到:
    在这里插入图片描述
2.1零阶积分
  • 零阶积分是假设 ω ˙ = 0 {\dot \omega=0 } ω˙=0,这里零阶积分方法的不同主要在于参数 ω {\omega} ω值的选取时间的不同。去 ( ω n , ω n + 1 ) {(\omega_n,\omega_{n+1})} (ωn,ωn+1)的均值,有类似平滑的作用,是okvis采用的方法。
    在这里插入图片描述
2.2一阶积分

一阶积分是假设 ω {\omega} ω的二阶微分为0,一微分是常数,利用插值方法得到:
在这里插入图片描述

  • 代入2.1中的泰勒展开式,并利用叉乘性质简化:
    在这里插入图片描述
2.3归一化处理
  • 由于积分舍去了高阶项,使得积分后的四元数不再是单位四元数,需要从新归一化

在这里插入图片描述

这篇关于IMU学习系列(四)---四元数和旋转相关的约定表述的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/442789

相关文章

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

基于 HTML5 Canvas 实现图片旋转与下载功能(完整代码展示)

《基于HTML5Canvas实现图片旋转与下载功能(完整代码展示)》本文将深入剖析一段基于HTML5Canvas的代码,该代码实现了图片的旋转(90度和180度)以及旋转后图片的下载... 目录一、引言二、html 结构分析三、css 样式分析四、JavaScript 功能实现一、引言在 Web 开发中,

CSS3中的字体及相关属性详解

《CSS3中的字体及相关属性详解》:本文主要介绍了CSS3中的字体及相关属性,详细内容请阅读本文,希望能对你有所帮助... 字体网页字体的三个来源:用户机器上安装的字体,放心使用。保存在第三方网站上的字体,例如Typekit和Google,可以link标签链接到你的页面上。保存在你自己Web服务器上的字

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

使用animation.css库快速实现CSS3旋转动画效果

《使用animation.css库快速实现CSS3旋转动画效果》随着Web技术的不断发展,动画效果已经成为了网页设计中不可或缺的一部分,本文将深入探讨animation.css的工作原理,如何使用以及... 目录1. css3动画技术简介2. animation.css库介绍2.1 animation.cs

重新对Java的类加载器的学习方式

《重新对Java的类加载器的学习方式》:本文主要介绍重新对Java的类加载器的学习方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、简介1.2、符号引用和直接引用1、符号引用2、直接引用3、符号转直接的过程2、加载流程3、类加载的分类3.1、显示

解决tomcat启动时报Junit相关错误java.lang.ClassNotFoundException: org.junit.Test问题

《解决tomcat启动时报Junit相关错误java.lang.ClassNotFoundException:org.junit.Test问题》:本文主要介绍解决tomcat启动时报Junit相... 目录tomcat启动时报Junit相关错误Java.lang.ClassNotFoundException

Maven中引入 springboot 相关依赖的方式(最新推荐)

《Maven中引入springboot相关依赖的方式(最新推荐)》:本文主要介绍Maven中引入springboot相关依赖的方式(最新推荐),本文给大家介绍的非常详细,对大家的学习或工作具有... 目录Maven中引入 springboot 相关依赖的方式1. 不使用版本管理(不推荐)2、使用版本管理(推