この記事はSSSRC Advent calender 2023 12日目の記事として書かれています.

 

お久しぶりです.B4の鳴海です.

アメブロを書くのは,去年のアドカレ以来です.

今年は書く予定はなかったのですが,バーベキューで皆々様にご迷惑をお掛けしたということで書くことになりました.

 

 

悪いのはこの人↓(涼しげに書いてますね(#°Д°))

 

 

 

 

まあそんなことは置いておいて...

僕は姿勢を表すクォータニオンについて書こうかなと.

オイラーパラメータという言い方もありますが,ここではクォータニオンということにします.

 

衛星の姿勢系はもちろん,熱系,COLOURSの電装系,飛翔シミュレーションでクォータニオンを使うとのことで,そうした人たちのお勉強のきっかけになればなと.

あんまり厳密なことは言っていないので,この記事を入り口にお勉強してもらえれば嬉しいです.

 

 

 

 

 

本記事は↓の二番煎じです

 

 

  姿勢ってなんだ?

 

姿勢って何ですか?」 意外と難しいこの質問.皆さんは答えられますでしょうか?

 

簡単に言えば,姿勢とは物体の向いている方向のことです.
ただ方向というには何かしら2つの基準が必要で,「基準Aから基準Bがこうなってる」と言わないといけません.


卑近な例(スマホのコンパス):磁北とスマホの基準軸から,自分が向いている方向がわかる

 

その基準Aとなるのが慣性座標で,動かない,絶対的な座標系です.
基準Bとして物体に引っ付いた座標系(機体軸)を用意しておけば,慣性軸(基準A)に対して機体軸(基準B)がどうなってるかはわかりそうです.

基準Aに対して基準Bがどこを向いているかを表すには,座標の変換(回転)を使えば良さげです.

「慣性軸をこうこう回転させたら,機体軸に一致するぜ!」っていうので,物体の方向表せるよねってことです.


 つまり姿勢は「慣性系を機体軸に一致させるための座標変換」ということができます.

これをもって,物体の向いている方向を定量的に表すことができます.

姿勢:慣性軸をどう座標変換したら機体軸になるか?
(飛行機の制御屋さんに怒られそうな図っすね...(;´Д`)ゴメン)

 

「姿勢=座標変換」と先ほどは一口に言いました.

ただ!

慣性座標を機体座標に一致させるような座標変換って1通りじゃないんですよね〜ここが面白い.

なかでもよく使われるのが,「オイラー角」と,今回の主役の「クォータニオン」です.

 

  姿勢表現 〜オイラー角〜

まずはオイラー角から.

オイラー角の気持ちは,「軸まわりの回転で姿勢表現しようぜ!」です.

オイラー角:軸周りに3回回して姿勢表現

 

「z軸周りにΨ回して,y軸周りにΘ回して,x軸周りにΦ回して」と3回回して姿勢表現しているっていうのが上図の意味です.この3つの角をまとめて,オイラー角と言います.

(「Φ:ロール角,Θ:ピッチ角,Ψ:ヨー角」という言葉,一度は聞いたことがある人も多いのでは?)

 

このオイラー角,物理的なイメージがしやすいことが利点ですが,気を付けるべきことも多く...

  • 回転変換は可換でないので,回す順番を気にしないと\(^o^)/オワル
     上の説明ではz-y-xの順に回していますが,オイラー角を表記するときは,
     

    のように(ベクトルじゃないけど)ベクトル表現で書かれます.
    こう書かれると回転の順番の情報は消えるのでちゃんと,回す順番を頭の中に叩き込んでおかないといけません.回転の順番をミスると,姿勢も\(^o^)/になります.
    (回す順番を数えたら,オイラー角は12通りもある)
     
  • ジンバルロックが起りうる

         オイラー角を用いる場合,数学的な性質上ジンバルロックが起こる可能性があります.

  ジンバルロックとは特定の状況で,回転の自由度が3から2に落ちてしまう現象のことです.

  これが大問題で,これが起こると\(^o^)/になります.
    

 


    オイラー角のこうした問題を解決してくれるのが,クォータニオンです.

(航空機は,オイラー角のわかりやすさ&ジンバルロックが起こる状況はまずないことから,オイラー角が主流です)

 

  姿勢表現 〜クォータニオン〜

本命のクォータニオンを.

クォータニオンの気持ちは,「任意軸回転で姿勢表現しようぜ!」です.

     

クォータニオン:回転軸周りに1回回して姿勢表現

 

 

 クォータニオンの定義と計算

    オイラー角では各軸まわりに回転させることで姿勢を表現しましたが,ある軸(単位ベクトル)まわりに1回回わすだけでも,姿勢を表現できます.クォータニオンをつかった姿勢表現はこの変換をベースとしています.  として,クォータニオン  は,
 
 
と虚数単位(i,j,k)を使って表せます.クォータニオンを使って,回転の軸と角度を指定してあげれるので姿勢表現としては一件落着ってわけです.
なんで角度が半分なんや!!!!」と言う人はとりあえず認めてあげてください.数学的にそういうもんです...
 
さて,クォータニオンは虚数部分が3つもあってうぅ...という人もいそうですが,多くの場合
 
 
のように(ベクトル部)+ (スカラー部)だったり,ほとんどベクトルのように表したりすることが多いです.ベクトルのように表しちゃうことで,線形代数の知識が使えて便利になるんですよね〜
 
 
次に,クォータニオンの計算について計算結果だけまとめておきます.
<計算の中身とかもうちょっとちゃんと知りたかったら,これ.三電さんの資料.https://www.mesw.co.jp/business/report/pdf/mss_18_07.pdf>
 
  • クォータニオンのノルム
    姿勢を表すクォータニオンは定義からわかるようにノルムは1になります.
    (一般的なクォータニオンにはノルムの条件はないです)

    この式をいい感じに使って整理されてる式もあります.見た目に騙されないでください.

 

  • 共役クォータニオン
    共役クォータニオンは,複素数と同じノリでベクトル部の符号を変えるだけです.
     
     
    またまた,複素数と同じノリで次の式が成り立ちます.カンタンだね.

  • クォータニオン同士の積
    クォータニオン(q)と(p)の積は次のようになります.回転の合成とかで使います.
 

  • クォータニオンとベクトルの積
    クォータニオン(q)とベクトル(a)の積は次のようになります.これは,後々紹介するキネマティクス方程式でよく使います.

  • 回転の表現
     

     

    ベクトルの回転(左図) 座標軸の回転(右図)

     
    • ベクトルの回転
      ベクトル(r)を軸nの周りにθだけ回転させて,r'にするとき,r'は次のように表せます.


       
    • 座標の回転
      座標系を軸n周りにθだけ回転させたとき,旧座標系でのrを新座標系で表したr'は次のように表せます.




      ベクトルの回転と座標軸の回転,ごっちゃにしないでくださいね.
      ベクトルの回転はベクトルそのものが変わりますが,座標軸の回転はベクトルそのものは変わっていません.
      転置の関係になってるだけなんで,お気をつけて〜
      実体となるベクトルは変わってないけど,「座標を回転させる=視点を変える」と見え方,表現が変わるよねっていうのが座標の回転.この映画タイトルと一緒だね〜〜

       

 クォータニオンのすごいところ(計算誤差,球面線形補間)

クォータニオンの計算結果,見た目変な部分(特に回転)もありますね.

ただ,オイラー角と違ってジンバルロックを起こさないという利点があります.

クォータニオンを使うメリットはそれだけにとどまらず,計算誤差,補間の点でも利点があるそうです.

 

 3-2-1 オイラー角への変換

ここまで散々クォータニオンをプッシュしてきたわけですが,クォータニオンにも悪いところはあます.なんつったって

わかりにくい

これに尽きるでしょう.

 

例えば,次のクォータニオンが与えられたとして「ああ,こういう姿勢ね」ってすぐわかる人はいないでしょう.いたら変態.


そうしたときは,クォータニオンではなくオイラー角を使って,

 


と書いた方が姿勢はパッとわかります.

なので,姿勢データをわかりやすくするために,オイラー角で書きたい!と思うこともあるでしょう.

クォータニオンを3-2-1オイラー角に変換する式をまとめておきます.(ジンバルロック無視)

 


↓回転行列,クォータニオン,オイラー角間の関係がまとめてあるサイト.3-2-1以外もある

 

 

 キネマティクス(運動学)方程式

運動のシミュレーションを組むとき,ダイナミクス(運動方程式)はもちろんキネマティクス(運動学)も必要です.具体的な流れは次の通り...

 

力,トルクから変位,姿勢を求めるためのブロック線図
 

↓上の図はここに書いてあるやつをパク参考にした

 

並進運動のキネマティクスはここでは無視して(というか意識しなくてもわかるはず),回転運動のみ考えます.

 

「キネマティクス = ωとqの関係」なので...

 

 

これがキネマティクス方程式というやつです.

 

ただ...先ほども述べたようにこれはノルムの条件を満たしません!!!

なので次のように正規化して,姿勢クォータニオンを逐次更新していきます.

 

 

 

  まとめ

(自分の研究ではクォータニオンを使わないんですが)COLOURSでロケットの飛翔シミュレーションをつくるためにクォータニオンを勉強しました.

その共有ってことで今回,クォータニオンの紹介をしました.

 

(より詳しく知りたいならこのPDFを見てください.数学的側面からクォータニオンを眺めてたりして面白いです

http://www.jp.square-enix.com/tech/library/pdf/CEDEC2021_SQEX_IMI_Quaternion_20210827_public.pdf)

 

 

シミュレーションで使うネオアームストロングサイロケットの運動の図

 

(もちろん,シミュレーションはMatlab/Simulinkで書きました!!Mathworkさん,ありがとう!!!)

 

くだくだとクォータニオンについて説明してきましたが,2点ほど気がついたとこが,

  • アメブロでクォータニオンなんて説明するもんじゃねえな〜(#クォータニオンなんてねえし)
  • クォータニオンなんぞ姿勢を表す「道具」なんで,シミュレーションとか組んでみんと使えるようにならんな〜
ってことですね.まあ,ガンバッテ
 
明日はゲボりんず3人目,最後ですね.
 
(これでバーベキューのやらかしの贖罪になっただろうか...)