TH /TannoHubYOSHINOBU TANNOEN ↗
センサ・計測

9軸センサとクォータニオン:姿勢表示で確認すること

9軸センサの値を姿勢表示へつなぐ流れを、2015年の資料から解説。Madgwick AHRS、成分順、座標軸、共役と逆回転の混乱を整理します。

← 技術ノート一覧

元資料:2015-10 · 記事の編集日:

丹野嘉信が公開した資料をもとに、AIを補助に使って記事を構成し、説明を加えています。当時の制作内容と、記事化にあたって補足した内容を分けて記載しています。

元のスライドを読む:さるでも分かりたい9dofで作るクォータニオン姿勢

9軸センサから姿勢を表示するときは、「計測値を取る」「姿勢を推定する」「画面へ反映する」を分けると理解しやすくなります。クォータニオンを使うことと、モーターなどで姿勢を制御することも別です。ここでは姿勢推定と表示までを扱います。

9軸の値は何を表すか

2015年10月の資料では、加速度・角速度・磁気の各3軸を取得し、Madgwick AHRSでクォータニオンを更新して、回転行列へ変換する流れを紹介しています。AHRSはAttitude and Heading Reference Systemの略です。元資料:スライド3〜6

入力姿勢推定での役割
角速度姿勢の時間変化を追う。オフセットの影響が蓄積する
加速度静止に近い条件では重力方向が傾きの手掛かりになる
磁気方位の手掛かり。近くの磁石や金属などの影響を受ける

元資料が参照しているアルゴリズムの公開元には、原報告と実装へのリンクがあります。新しく利用するときは、古いサンプルと現在案内されている実装の違いを確認します。x-io Technologies:IMU・AHRSアルゴリズム

四つの値と並び順

この記事ではq = (w, x, y, z)とし、回転なしを(1, 0, 0, 0)と表します。使用するライブラリによっては(x, y, z, w)の順番です。同じ四つの数でも、渡す順番が違えば別の回転として解釈されます。例えばSciPyのRotation.from_quatは既定でスカラー成分wが最後です。SciPyの仕様

回転軸を表す単位ベクトルnと回転角θを使うと、w = cos(θ/2)(x,y,z) = n sin(θ/2)で表せます。右手系でベクトル自体を回す場合(能動回転)にZ軸周りに+90度回す例は、(√2/2, 0, 0, √2/2)です。この例では+X方向が+Y方向へ移ります。これは表示の規約を確認するための計算例です。

実装前にそろえる設定と表記

  1. センサのX・Y・Z軸と、画面の軸の向きを決める。
  2. 角速度の単位と、更新間隔の単位をそろえる。
  3. クォータニオンの成分順をライブラリと合わせる。
  4. 推定した姿勢を更新し、回転行列に変換して画面に反映する。
  5. 一軸だけを回し、向きと回転量を確認する。

逆向きに回るとき

元資料には共役を使う説明がありますが、「OpenGLだから常に共役」と一般化はできません。物体を回すのか、座標系を変えるのか、どちら向きの変換を渡すのかを確認します。単位クォータニオンでは共役が逆回転を表します。逆にする前に、成分順・軸・変換方向を一つずつ確認してください。

クォータニオンは回転を表す形式で、センサ誤差そのものを消す仕組みではありません。元資料では補正式の詳しい導出を省いており、この記事でも補正式の導出や実機での精度検証は扱っていません。

関連する記事・取り組み

共同研究、技術検証、教材開発に関するご相談はこちら