电竞比分网-中国电竞赛事及体育赛事平台

分享

淺析機器人學位姿之單位四元數(shù),一文徹底了解四元數(shù),干貨

 taotao_2016 2022-05-07 發(fā)布于遼寧省

對于機器人姿態(tài)的轉換前面一直介紹歐拉角的方式,其實對于三維坐標的轉換四元數(shù)法和歐拉角用得都比較多,在內部算法里四元數(shù)法占比例更大,歐拉角多用于原理講解!

四元數(shù)是一個復數(shù),下面就一步一步講解下復數(shù)怎么和坐標系旋轉勾搭上的!

四元數(shù)顧名思義對于旋轉的變換只需要四個參數(shù),而歐拉角的旋轉矩陣則是3*3的矩陣,有9個元素,所以四元數(shù)法用來優(yōu)化程序,好處顯而易見!

在網(wǎng)上查了一些資料,對于四元數(shù)的講解基本上沒有讓我滿意的,可能是我水平不夠或者思路跟不上!所以我打算自己總結一篇淺顯易懂有不漏知識點的四元數(shù)淺析文章!

四元數(shù)是一個標量加一個向量,標量一個數(shù),向量三個數(shù)!

首先四元數(shù)是一個復數(shù),什么是復數(shù)?應該初中還是高中的數(shù)學肯定是學過的,估計大部分人都還給老師了!

復數(shù)

1、概述一下復數(shù)

任意一個復數(shù)z都可以表示為z=a+bi 的形式.我們將a稱之為這個復數(shù)的實部,b稱之為這個復數(shù)的虛部。 其中i的平方等于-1!怪不怪!我理解的復數(shù)的發(fā)明就是為了讓它的虛部也能參與運算,因為數(shù)學里有的地方會出現(xiàn)i平方等于-1的情況,如果沒發(fā)明復數(shù),那么就無法完成計算!

復數(shù)的模長|z|;

文章圖片1

模長

它的共(軛)是z1=a-bi;

z*z1=a*a+b*b也就是模長的平方;

加減乘除法則和正常運算一樣,如z1=a+bi,z2=c+di;z1+z2=a+b+bi+di; z1*z2=ac+adi+bci+bdi^2;

復數(shù)參與運算主要靠上面這幾個關系互相轉換,算到最后可以把虛數(shù)算沒了,就像個中間變量一樣;兔死狗烹,鳥盡弓藏!

2、復數(shù)怎么和旋轉矩陣勾搭上的?

推導

首先寫z1=a+bi,z2=c+di兩個復數(shù);

z1*z2=ac+adi+bci+bdi^2

由于i平方等于-1;進而化簡:

z1*z2=ac-bd+adi+bci;

再化簡:

z1*z2=ac-bd+(ad+bc)*i;

寫成矩陣形式

文章圖片2

右側的矩陣c d;就是用向量的形式表示z2;為啥呢?因為復數(shù)可以圖像化表示,復數(shù)z=a+bi可以用如下圖表示:

文章圖片3

既然右側的列矩陣c d 表示z2,那么復數(shù)z1就是左側的二維矩陣表示的!進而可以推斷出z2的二維矩陣形式;

最終得出,z1*z2就是兩個二維矩陣相乘,如下圖公式:

文章圖片4

上面的式子里面i不見了,我們就是當i=1;或者讓矩陣乘以一個二維矩陣,但是結果不變,那么這個矩陣就是如下形式,得出i的二維矩陣形式,后面會用到這個i矩陣:

文章圖片5

以上這些公式就可以和旋轉矩陣眉目傳情有點關系了;下面繼續(xù)推導,把復數(shù)z1的矩陣形式再變換一下,就徹底勾搭上了,如下:

文章圖片6

配合下面這個圖看一下,就知道為啥徹底勾搭上了:

文章圖片7

這不就是三角函數(shù)嗎!

那么上面的公式就可以寫成三角函數(shù)的形式了,加上求模的公式,再加上上面得出的i二維矩陣,最終可以把公式寫成如下形式:

文章圖片8

右邊的矩陣就是二維里面的旋轉矩陣了;

左邊的其實就是縮放矩陣;

驗證

實驗一下我們將一個點坐標 (1,0),旋轉θ角度,帶入上面這個公式,最終得到如下;

文章圖片9

就是對點(1,0)逆時針旋轉了θ角度,然后再縮放|z|倍;同理代入點(1,0)也是一樣的原理,如下圖顯示兩個點的旋轉圖;

文章圖片10

如果復數(shù)的模為1,那么就只剩旋轉矩陣了!

總結一下:

如果(模)等于1,復數(shù)z可以寫成如下矩陣形式:

文章圖片11

寫成復數(shù)形式就是:

Z=cosθ+sinθ*i;

對比下 :

Z=a+b*i;

如此,復數(shù)和旋轉矩陣的關系大家應該知曉了!

數(shù)學真好玩,把兩個不相關的東西硬是緊密的勾搭到了一起,佩服!

單位四元數(shù)(模為1)

概述

四元數(shù)的定義和復數(shù)非常類似,唯一的區(qū)別就是四元數(shù)一共有三個虛部,而復數(shù)只有一個。

四元數(shù)q寫成如下形式:

q=s+v1i+v2j+v3k;

根據(jù)復數(shù)的定義:i平方=j平方=k平方=ijk=-1;

使用的時候把虛部和實部分開,寫成:

q=s+v;

標準里我們把四元數(shù)表示為:

q=s<v1,v2,v3>;

應用

單位四元數(shù)的復數(shù)形式怎么和3D旋轉扯上關系,推理方法和上面復數(shù)推理2D旋轉矩陣一樣,就不詳細講了,下面我們直接使用它,用matlab寫程序案例,直接到應用層次!

直接調用函數(shù)UnitQuaternion,下面的0.1、0.2、0.3表示繞x繞y繞z旋轉;

>> q = UnitQuaternion( rpy2tr(0.1, 0.2, 0.3) )

q =

0.98335 < 0.034271, 0.10602, 0.14357 >

用q.R可以輸出旋轉矩陣:

>> q.R

ans =

0.7536 -0.4993 0.4275

0.5555 0.8315 -0.0081

-0.3514 0.2436 0.9040

輸出圖形如下:

>> q.plot()

文章圖片12

以上就是四元數(shù)的簡單介紹,第一部分主要讓大家搞懂四元數(shù)怎么能表示旋轉的,第二部分就是簡單的應用了,可以看出應用非常簡單,如果實際寫應用程序,四元數(shù)法會簡單明了,節(jié)省時間,也可以讓程序更流暢!

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多