1. 程式人生 > >四元數與尤拉角(RPY角)的相互轉換

四元數與尤拉角(RPY角)的相互轉換

  • RPY角與Z-Y-X尤拉角

  描述座標系{B}相對於參考座標系{A}的姿態有兩種方式。第一種是繞固定(參考)座標軸旋轉:假設開始兩個座標系重合,先將{B}繞{A}的X軸旋轉γγ,然後繞{A}的Y軸旋轉ββ,最後繞{A}的Z軸旋轉αα,就能旋轉到當前姿態。可以稱其為X-Y-Z fixed angles或RPY角(Roll, Pitch, Yaw)。

  Roll:橫滾

  Pitch: 俯仰

Yaw: 偏航(航向)

  由於是繞固定座標系旋轉,則旋轉矩陣為(cαcα is shorthand for cosαcos⁡α, sαsα is shorthand for sinαsin⁡α,and so on.)

RXYZ(γ,β,α)=RZ(α)RY(β)RX(γ)=⎡⎣⎢cαcβsαcβsβcαsβsγsαcγsαsβsγ+cαcγcβsγcαsβcγ+sαsγsαsβcγcαsγcβcγ⎤⎦⎥RXYZ(γ,β,α)=RZ(α)RY(β)RX(γ)=[cαcβcαsβsγ−sαcγcαsβcγ+sαsγsαcβsαsβsγ+cαcγsαsβcγ−cαsγ−sβcβsγcβcγ]

  另一種姿態描述方式是繞自身座標軸旋轉:假設開始兩個座標系重合,先將{B}繞自身的Z軸旋轉αα,然後繞Y軸旋轉ββ,最後繞X軸旋轉γγ,就能旋轉到當前姿態。稱其為Z-Y-X尤拉角,由於是繞自身座標軸進行旋轉,則旋轉矩陣為:

RZYX(α,β,γ)=RZ(α)RY(β)RX(γ)=⎡⎣⎢cαcβsαcβsβcαsβsγsαcγsαsβsγ+cαcγcβsγcαsβcγ+sαsγsαsβcγcαsγcβcγ⎤⎦⎥RZ′Y′X′(α,β,γ)=RZ(α)RY(β)RX(γ)=[cαcβcαsβsγ−sαcγcαsβcγ+sαsγsαcβsαsβsγ+cαcγsαsβcγ−cαsγ−sβcβsγcβcγ]

  可以發現這兩種描述方式得到的旋轉矩陣是一樣的,即繞固定座標軸X-Y-Z旋轉(γ,β,α)(γ,β,α)和繞自身座標軸Z-Y-X旋轉(α,β,γ)(α,β,γ)的最終結果一樣,只是描述的方法有差別而已。In gerenal: three rotations taken about fixed axes yield the same final orientation as the same three rotations taken in opposite order about the axes of the moving frame.

  • Axis-Angle與四元數

  繞座標軸的多次旋轉可以等效為繞某一轉軸旋轉一定的角度。假設等效旋轉軸方向向量為K=[kx,ky,kz]TK→=[kx,ky,kz]T,等效旋轉角為θθ,則四元數q=(x,y,z,w)q=(x,y,z,w),其中:

xyzw=kxsinθ2=kysinθ2=kzsinθ2=cosθ2x=kx⋅sinθ2y=ky⋅sinθ2z=kz⋅sinθ2w=cosθ2

  且有x2+y2+z2+w2=1x2+y2+z2+w2=1

  即四元數儲存了旋轉軸和旋轉角的資訊,它能方便的描述剛體繞任意軸的旋轉。

  四元數轉換為旋轉矩陣:

R=⎡⎣⎢12y22z22(xy+zw)2(xzyw)2(xyzw)12x22z22(yz+xw)2(xz+yw)2(yzxw)12x22y2⎤⎦⎥R=[1−2y2−2z22(xy−zw)2(xz+yw)2(xy+zw)1−2x2−2z22(yz−xw)2(xz−yw)2(yz+xw)1−2x2−2y2]

   已知旋轉矩陣為:

  則對應的四元數為:

  • 四元數與尤拉角的相互轉換

  定義兩個四元數:

        其中 表示向量     ;而     表示向量   

四元數加法:

  跟複數、向量和矩陣一樣,兩個四元數之和需要將不同的元素加起來。   加法遵循實數和複數的所有交換律和結合律。

四元數乘法:

  四元數的乘法的意義類似於矩陣的乘法,可以表示旋轉的合成。當有多次旋轉操作時,使用四元數可以獲得更高的計算效率。

  由於四元數乘法的非可換性,pq並不等於qp,qp乘積的向量部分是:   Mathematica中有四元數相關的程式包Quaternions Package,需要先匯入才能使用。下面計算了三個四元數的乘積:

  計算結果為:Quaternion[-12, 4, 14, 2]

  那麼將Z-Y-X尤拉角(或RPY角:繞固定座標系的X-Y-Z依次旋轉αα,ββ,γγ角)轉換為四元數: q=⎡⎣⎢⎢⎢⎢⎢cosγ200sinγ2⎤⎦⎥⎥⎥⎥⎥⎡⎣⎢⎢⎢⎢⎢cosβ20sinβ20⎤⎦⎥⎥⎥⎥⎥⎡⎣⎢⎢⎢⎢cosα2sinα200⎤⎦⎥⎥⎥⎥=⎡⎣⎢⎢⎢⎢⎢⎢⎢cosα2cosβ2cosγ2+sinα2sinβ2sinγ2sinα2cosβ2cosγ2cosα2sinβ2sinγ2cosα2sinβ2cosγ2+sinα2cos

相關推薦

RPY相互轉換

RPY角與Z-Y-X尤拉角   描述座標系{B}相對於參考座標系{A}的姿態有兩種方式。第一種是繞固定(參考)座標軸旋轉:假設開始兩個座標系重合,先將{B}繞{A}的X軸旋轉γγ,然後繞{A}的Y軸旋轉ββ,最後繞{A}的Z軸旋轉αα,就能旋轉到當前姿態。可以稱其為X-Y-Z fixed angles或

roll,pitch,yaw轉換

在3D圖形學中,最常用的旋轉表示方法便是四元數和尤拉角,比起矩陣來具有節省儲存空間和方便插值的優點。本文主要歸納了兩種表達方式的轉換,計算公式採用3D笛卡爾座標系: 定義分別為繞Z軸、Y軸、X軸的旋轉角度,如果用Tait-Bryan angle表示,分別為Yaw、Pit

math: RPY相互轉換

1 四元數 1.1 理論基礎 在我們能夠完全理解四元數之前,我們必須先知道四元數是怎麼來的。四元數的根源其實是複數。 四元數的概念是由愛爾蘭數學家Sir William Rowan Hamilton發明的, 公式是: i2=j2=k2=ijk=−1

物體旋轉:Quaternion/eulerAngles u3d學習總結筆記本

目錄 1.獲取兩個物體的向量/角度 2.指定旋轉到角度 3.指向某個位置 4.自軸旋轉 5.繞軸旋轉 6.無旋轉  (這個物體完全對齊於世界或父軸) //========================================= 1.獲

之間的轉換

今天準備學習和研究下unity3d的四元數 Quaternion 四元數在電腦圖形學中用於表示物體的旋轉,在unity中由x,y,z,w 表示四個值。 四元數是最簡單的超複數。 複數是由實數加上元素 i 組成,其中i^2 = -1 ,。 相似地,四元數都是由實數加上三個元素 i、j、

Eigen相互轉化函式

1、原始碼 #include <iostream> #include <Eigen/Eigen> #include <stdlib.h> #include <Eigen/Geometry> #inclu

教的轉換權威材料

  在3D圖形學中,最常用的旋轉表示方法便是四元數和尤拉角,比起矩陣來具有節省儲存空間和方便插值的優點。本文主要歸納了兩種表達方式的轉換,計算公式採用3D笛卡爾座標系: 圖1 3D Cartesian coordinate System (from wikipedia)     定義分別為繞Z軸、Y軸、X軸

相機座標系轉換

今天,專案中利用aruco來識別二維碼來確定相機姿態,我就詳細研究了一下相機座標系。 (一)相機座標系 (二)如何在ROS中進行四元數和尤拉角轉化 將geometry_msgs::Quaternion轉化為tf::Quaternion型別 tf

cartographer輸出姿態ROS中

目的: 將cartographer輸出位姿(/tf)中四元數轉換成尤拉角(姿態角)輸出(C++語言) 實現如下: 首先在cartographer_ros/node.h中添加發布器宣告 ::ros::Publisher rpy_publisher; cartog

Unity學習筆記10——旋轉

        在Unity中,所有物體即使是空物體,也至少繫結Transform這個元件,這個元件有三個屬性:position、rotation、scale,它們分別用於控制物體的平移、旋轉和縮放三

轉載自 【Unity程式設計】Unity中關於四元數的API詳解 - CSDN部落格 ,有簡單刪改 Quaternion類 Quaternion(四元數)用於計算Unity旋轉。它們計算緊湊高效,不受萬向節鎖的困擾,並且可以很方便快速地進行球面插值。 Unity內部使用四元數來表示所有的旋轉。

、方向餘弦矩陣

尤拉角轉換成方向餘弦矩陣 尤拉角有12中旋轉順序分別為 1 X-Y-Z 2 X-Z-Y 3 X-Y-X 4 X-Z-X ….. 每種旋轉順序可以分解為3次旋轉,每次旋轉或者圍繞X軸,或者繞Y軸,或者繞Z軸(每次旋轉都是繞著空間固定不變的座標系的軸旋轉,稱

以及方向餘弦的區別

尤拉角定義的是三次基本旋轉的三個角度,旋轉順序和旋轉參考軸隨不同領域有不同,在飛機上常用的是Z-X-Y規則,三次順序旋轉角度是偏航,俯仰,橫滾,具體還要指明是旋轉的 參考系還是旋轉的體座標系通過這三個基本旋轉角度可以得到座標變換矩陣,也叫姿態矩陣,一個3*3矩陣 尤拉角法是直接迭代尤拉角微分方程,但是當轉

3D圖形:矩陣、方位的故事

概述 又研究了將近兩個星期的3D圖形到了我最想研究的地方了,因為尤拉角與四元數的原因導致OpenGL ES的研究進度變緩,研究完這一塊,我將教大家如何使用OpenGL ES做一個自轉加公轉的正立方體.效果如下. 方向、方位與角位移的區別 在說矩陣、尤拉角與四元數

旋轉的數學表達:、軸向矩陣

  本文釋出於遊戲程式設計師劉宇的個人部落格,長期更新,轉載請註明源地址https://www.cnblogs.com/xiaohutu/p/10979936.html   數學,是人類對客觀世界中數量關係和空間形式本質特徵進行研究的科學。對同樣的某一特徵或者關係,可以根據需求用不同的數學符號、定義和過程來

3D數學基礎和歐

transform 推薦 中間 應該 它的 轉變 編輯器 最簡 組件 一、四元數   四元數本質上是個高階復數,可視為復數的擴展,表達式為y=a+bi+cj+dk。在說矩陣旋轉的時候提到了它,當然四元數在Unity裏面主要作用也在於此。在Unity編輯器中的Transfor

和歐

基於 進行 概念 erp 執行 axis 右值 完全 答案 轉載自 【Unity編程】Unity中關於四元數的API詳解 - CSDN博客 ,有簡單刪改 Quaternion類 Quaternion(四元數)用於計算Unity旋轉。它們計算緊湊高效,不受萬向節鎖的困擾,

3D圖形學在遊戲開發中的,矩陣,,歐之間的底層轉換算法。

else if 圖形學 type ces 通用 格式 threshold eps strong 在遊戲開發的過程中難免會遇到歐拉角和四元數直接的轉換問題,如果有些過shader的朋友,肯定也遇到過四元數,歐拉角和矩陣直接的轉換問題,這裏我把這幾種格式直接的轉換算法寫在這裏有

旋轉矩陣——SLAM

1. 用四元數表示旋轉時,都是單位四元數。 2. 用四元數表示旋轉時,三維空間的點p(x,y,z)需要表示成虛四元數,即。 3. 四元數導數與角速度之間的關係      :表示local座標系到global座標系的旋轉;     &n

複數之間的關係

今晚看了《有控飛行力學與計算機模擬》,看到Chapter 2-四元數及其在飛行力學中的應用,然後仔細compare四元數與複數,竟然發現這裡面有好多之前沒有意識到的東西。我覺得比較有意思,就記錄下來,作為我在CSDN上的first article。 複數的表達形式是 a+b