1. 程式人生 > >慣性導航之認識四元數(四)

慣性導航之認識四元數(四)

之前說到,使用尤拉角積分和方向餘弦積分求得角度並不合適,而比較合適的是四元數。

在討論「四元數」之前,我們來想想對三維直角座標而言,在物體旋轉會有何影響,可以擴充三維直角座標系統的旋轉為三角度系統(Three-angle system),在Game Programming Gems中有提供這麼一段:

  • Quaternions do not suffer from gimbal lock. With a three-angle(roll, pitch, yaw) system, there are always certain orientations in which there is no simple change to the trhee values to represent a simple local roation. You often see this rotation having “pitched up” 90 degree when you are trying to specify a local yaw for right.

簡單地說,三角度系統無法表現任意軸的旋轉,只要一開始旋轉,物體本身即失去對任意軸的自由性。(引自四元數與旋轉

工具:

  • 複數、四元數
  • 尤拉公式

開始正文

一、什麼是四元數?

四元數是簡單的超複數。 複數是由實數加上虛數單位 i 組成,其中i^2 = -1。 相似地,四元數都是由實數加上三個虛數單位 i、j、k 組成,而且它們有如下的關係: i2=j2=k2=1i0=j0=k0=1, 每個四元數都是 1、i、j 和 k 的線性組合,即是四元數一般可表示q=a+bk+cj+di,其中a、b、c 、d是實數。(引自百度百科:四元數)

四元數的表示式:

  • q=a+bi+cj+dk

虛數單位滿足:

  • i2=j2=k2=ijk=1

我們可以從複數來認識四元數,順便說一下四元數的來歷。在二維空間中,複數可以和複平面中的點一一對應,並且可以表示二維空間中的旋轉。但是到了三維空間中呢?愛爾蘭數學家哈密頓在將複數延伸到三維空間中時,想使用q=a+bi+cj來表示和三維空間中的點對應,但是遇到了一個問題,這個‘三元數’的乘法和除法該怎麼計算呢?例如,i*j應該等於多少?而最終,哈密頓犧牲了乘法交換律創造了四元數,虛數單位可以得到完整的乘法表:

1 i j k
1 1 i j k
i
i -1 k -j
j j -k -1 i
k k j -i -1

這樣,相應的加減乘除也得到了解決。

四元數的運算:
設有兩個四元數:

  • q1=w1+x1i+y1j+z1k
  • q2=w2+x2i+y2j+z2k

加法定義為:

  • q1+q2=(w1+w2)+(x1+x2)i+(y1+y2)j+(z1+z2)k

乘法遵循分配律:

  • q1q2=(w1w2x1x2y1y2z1z2)+(w1x2+x1w2+y1z2z1y2)i+(w1y2x1z2+y1w2+z1x2)j+(w1z2+x1y2y1x2+z1w2)k

單位四元數,範數(模長)為1:

  • N(q)=|q|=x2+y2+z2+w2=1

定義四元數q=w1+x1i+y1j+z1k共軛為:

  • q=w1x1iy1j

    相關推薦

    慣性導航認識

    之前說到,使用尤拉角積分和方向餘弦積分求得角度並不合適,而比較合適的是四元數。 在討論「四元數」之前,我們來想想對三維直角座標而言,在物體旋轉會有何影響,可以擴充三維直角座標系統的旋轉為三角度系統(Three-angle system),在Game Pr

    Introduction to 3D Game Programming with DirectX 12 學習筆記 --- 第二十二章:QUATERNIONS

    directx height ebe beginning ++ tip osi 通過 假設 原文:Introduction to 3D Game Programming with DirectX 12 學習筆記之 --- 第二十二章:四元數(QUATERNIONS)

    【Unity技巧】Quaternion和旋轉

    四元數介紹旋轉,應該是三種座標變換——縮放、旋轉和平移,中最複雜的一種了。大家應該都聽過,有一種旋轉的表示方法叫四元數。按照我們的習慣,我們更加熟悉的是另外兩種旋轉的表示方法——矩陣旋轉和尤拉旋轉。矩陣

    C遞歸函十一

    C語言 遞歸 我們今天來講下遞歸,遞歸是一種數學上分而自治的思想。遞歸是需要邊界條件的,當邊界條件不滿足時,遞歸將繼續進行;當邊界條件滿足時,遞歸停止。遞歸是將大型復雜問題轉化為與原問題相同但規模較小的問題進行處理。 函數體內部可以調用自己,它的函數體中存在自我調用的函數

    python基礎一列表和容器

            學習程式設計的童鞋,剛開始都會接觸一個詞:資料結構。對於資料結構每個人的定義可能不同。但基本可以總結為:資料結構是以某種方式(如:通過編號)組合起來的資料元素(如:數字、字元或者其他資料結構)的集合。 在python中,最基本的資料

    慣性導航——擴充套件卡爾曼濾波

    對於無人機的慣性導航系統,系統的狀態方程是非線性的,根據擴充套件卡爾曼濾波方程: Predict x^k|k−1Pk|k−1=f(x^k−1|k−1,uk−1)=Fk−1Pk−1|k−1FT

    OSG 尤拉角 轉 導航俯仰,偏航,橫滾 互轉

    osg:: Quat的心得:      先介紹四元數:Q = [w,(x,y,z)]被定義為一個四元數,w為一個實數,(x,y,z)是一個三維向量,四元數的基底為(1,i,j,k),則 Q = w + xi + yj + zk;四元數是複數在四維空間的推廣,於是可以認為i,j,k是四元數的虛單位。      

    3D數學基礎和歐拉角

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

    三維空間旋轉歐拉角、、旋轉矩陣

    轉換 當我 隨著 www href bsp out 組合 相同   姿態角(歐拉角)     姿態角即RPY(roll, pitch,yaw)又叫歐拉角,是由三個角組成的。   俯仰角(pitch)      翻滾角(roll)      偏航角(yaw)      其中最

    相機IMU融合四部曲:誤差狀態詳細解讀

    center 討論 組合 計算 運算 white 成了 mes 操作 相機IMU融合四部曲(二):誤差狀態四元數詳細解讀 極品巧克力 前言 上一篇文章,《D-LG-EKF詳細解讀》中,講了理論上的SE3上相機和IMU融合的思想。但是,還沒有涉及到實際的操作,以及實際操作

    [SLAM]3-4的定義與計算

    結合 高翔老師的著作《視覺SLAM十四講:從理論到實踐》,加上小白的工程經驗共同完成。 1.四元數的定義         旋轉矩陣用九個量描述三自由度的旋轉,具有冗餘性:尤拉角與旋轉向量是緊湊的,但是具有奇異性。事實上,我們找不到不帶奇異

    與尤拉角RPY角的相互轉換

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

    matlab練習程序對應點集配準的

    amd 練習 size blank sigma 特征值 分享 lam dia 這個算是ICP算法中的一個關鍵步驟,單獨拿出來看一下。 算法流程如下: 1.首先得到同名點集P和X。 2.計算P和X的均值up和ux。 3.由P和X構造協方差矩陣sigma。 4.由協方

    matlab練習程式對應點集配準的

    這個算是ICP演算法中的一個關鍵步驟,單獨拿出來看一下。 演算法流程如下: 1.首先得到同名點集P和X。 2.計算P和X的均值up和ux。 3.由P和X構造協方差矩陣sigma。 4.由協方差矩陣sigma構造4*4對稱矩陣Q。 5.計算Q的特徵值與特徵向量。其中Q最大特徵值對應的特徵向量即為最佳

    cartographer輸出姿態角ROS中轉尤拉角

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

    Unity3D

    四元數,對於我以前的經歷來說,是一個新的數學概念,即不同於以前的演算法。 **先介紹一下一些概念:** 超複數:簡單的說,就是在以前複數的基礎上又發現了新的資料表示方式或者說是新的空間表示,例如a+bj就是實數與複數的組合,但是隻有一個複數(所以沒有超),有了兩個以上類似於複數的表示就是

    互補濾波與演算法簡單分析

    有人問我關於四元數姿態解算演算法的分析,每次都解釋好久,今日空閒,特發一帖,供大家參考。本分析將結合程式,分析姿態解算思路,由於能力有限,難免有錯誤之處請諒解,同時希望能夠拋磚引玉,得到大神指點。感謝圓點博士提供資料參考。為尊重原創,轉載請註明原出處,謝謝。http://bl

    剛體在三維空間轉動的姿態確定

          最近做三維空間的機器人直立控制,遇到如何根據三軸加速度計和三軸陀螺儀各自三軸測得的分量值確定機器人姿態的問題。          經過幾天的查閱文獻和思考,姑且將機器人直立控制分為姿態確定和運動控制兩部分。運動控制可以細分為直立控制、速度控制和方向控制。目前速度

    Eigen庫使用教程旋轉矩陣,旋轉向量和的初始化和相互轉換的實現

    本系列文章為原創,轉載請註明出處。 作者:Dongdong Bai 郵箱: [email protected] 若您覺得本博文對您有幫助,請您為我點贊並關注我,以鼓勵我寫出更優秀的博文。謝謝! Eigen: C++開源矩陣計算工具——Eige

    Unity學習筆記10——旋轉和尤拉角

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