Re: [請益] 四元數跟歐拉角 XYZ order 順序問題

作者: yshihyu (yshihyu)   2016-09-20 20:12:47
※ 引述《cjcat2266 (CJ Cat)》之銘言:
: ※ 引述《yshihyu (yshihyu)》之銘言:
: : 1. 為什麼一般順序是 ZYX? 還不是 XYZ
: 順序沒有公共標準,一切就是看函式庫怎麼設計
: 通常就是看哪個順序最多人習慣使用
: 飛航術語的pitch-roll-yaw是很常見的定義方式
: 在一些工具的座標系對應的軸向順序就是ZYX
: : 2. 這順序跟更換軸向存在什麼關係嘛?
: : 例如 XYZ 變成 YXZ // 對換XY軸
: 更換軸向順序並不是單純的改變角度順序
: 要先算出旋轉矩陣,然後再用想要的軸向順序逆推角度
: 推導方式可以參考這連結下面的best answer
: http://bit.ly/2cTVgKK
: : 3. 四元數在做一些物體呈現如果換軸或是某個軸轉90度
: 不清楚你所謂的"換軸"是什麼意思?
: 是說要物體沿著某個軸向選轉90度嗎?
: 如果是那樣的話就把物體的四元數和代表該旋轉的四元數相乘
: 四元數代表的是一個軸和一個角度
: 令: 單位四原數的分量各為(x, y, z, w)
: 旋轉軸單位向量為N = (Nx, Ny, Nz)
: 旋轉角度為A
: 則: x = Nx*sin(A/2)
: y = Ny*sin(A/2)
: z = Nz*sin(A/2)
: w = cos(A/2)
: 詳情可以參考我之前寫的這篇
: http://allenchou.net/2014/04/game-math-quaternion-basics/
_____________________________________________________________________
gyro and g-sensor 出來xyz raw data 經過 funsion algorithm
算出四元數 , 因為四元數不直觀所以我轉成尤拉角
那四元數跟尤拉角之間互相轉換過程發現有xyz順序問題 , 順序必須一致轉換才會正確
例如我下面完整程式碼
https://gist.github.com/anonymous/e33f55de45fb42fa7b7d20e4ccd0056a
Euler e(-45, -45, -5);
Euler2quaternion(e, q, zyx); // 尤拉轉四元數 order zyx
quaternion2Euler(q, res, zyx); // 四元數轉尤拉必須也要是 order zyx 才會算出
-45, -45 , -5 值
1. 因為我看網路上資料大家只提到 euler angle 有 rotation order 問題 ,
可是測試過程中發現 quaternion 好像也是存在 rotation order 問題, 像上面這樣程式
要相同 order 才能解出正確數值 , matlab quat2eul & eul2quat 兩個函數也有帶sequence 參數
所以是不是 quaternion 也有 rotation order 問題?
2. 上篇提到換軸是指經過 fusion algorithm 算出來四元數傳到 unity 後跟 unity 軸向不一致
例如我對 x 軸(pitch) 翻轉變成 y 軸 (roll) , 所以我想說能不能對四元數換XY軸,
讓 x pitch 跟 y roll 對換軸 , 所以就如前面所說不能直接換, 必需要轉成3x3 or 4x4 旋轉矩陣
後轉換在轉回四元數 or 尤拉角?
謝謝

Links booklink

Contact Us: admin [ a t ] ucptt.com