書籍転載:KINECT for Windows SDKプログラミング Kinect for Windows v2センサー対応版(9)

書籍転載:KINECT for Windows SDKプログラミング Kinect for Windows v2センサー対応版(9)

ロール・ピッチ・ヨー ― Kinectで学ぶ数学
― Chapter 8 ― 8.4 ―

2015年12月15日

3Dオブジェクトを回転させるときに用いられる概念「ロール・ピッチ・ヨー」について説明する。これを使用する際の注意点にも言及する。

高田 智広
  • このエントリーをはてなブックマークに追加

 Kinectで必要となる数学を説明します。前回はベクトルの回転についての数学を解説しました。本稿はその続きとして、ロール・ピッチ・ヨーについて説明します。

書籍転載について

 本コーナーは、秀和システム発行の書籍『KINECT for Windows SDKプログラミング Kinect for Windows v2センサー対応版』の中から、特にBuild Insiderの読者に有用だと考えられる項目を編集部が選び、同社の許可を得て転載したものです。

 

 『KINECT for Windows SDKプログラミング Kinect for Windows v2センサー対応版』の詳細や購入は秀和システムのサイト目次ページをご覧ください。プログラムのダウンロードも、秀和システムのサイトから行えます。

ご注意

本記事は、書籍の内容を改変することなく、そのまま転載したものです。このため用字用語の統一ルールなどはBuild Insiderのそれとは一致しません。あらかじめご了承ください。

8.4 ロール・ピッチ・ヨー

 3Dモデリングのときなど、ある3Dオブジェクトを直観通りに回転させたいときしばしば用いられるのがロール・ピッチ・ヨーという概念です。後に説明しますが混乱や誤解を生みやすい概念なのでできることならば使用は避けた方が良いでしょう。

 まず回転させたいオブジェクトにロール軸ピッチ軸ヨー軸という3つの直交軸を右手系になるように定義します。

ヨー軸/ピッチ軸/ロール軸

これらの軸を中心に回転させることをそれぞれロールピッチヨー(またはローリングピッチングヨーイング)といい、その角度をロール角ピッチ角ヨー角といいます。また、通常これらの軸は回転させるオブジェクトに固定されており、オブジェクトの回転とともに回転します。ここでは、ロール軸、ピッチ軸、ヨー軸の方向ベクトルをそれぞれ (r1,r2,r3), (p1,p2,p3), (y1,y2,y3) とし、ロール軸、ピッチ軸、ヨー軸の順でそれぞれ θ,φ,ψ だけ回転させたときオブジェクトはどのような回転行列で回転することになるかを調べます。

 ある方向ベクトルを軸とする回転を表す行列は前節で得ましたが、その軸がオブジェクトの回転とともに動いてしまうためにそのまま順にかけるわけにはいきません。前節で学んだ座標変換の考え方を用いて整理してみます。基本ベクトルを基底としたときの、方向ベクトル (r1,r2,r3), (p1,p2,p3), (y1,y2,y3) を中心とした回転行列を Rr(θ),Rp(φ),Ry(ψ) とします。これらは前節で求めたとおり

などと求めることができます。まず最初のロール軸による回転は他の回転に影響を受けませんから、Rr のままで構いません。次にピッチ軸による回転は基底を

(■(e_1&e_2&e_3))R_r

としたときの回転行列が Rp となる回転ですから、基本ベクトルを基底としたときの回転行列は

R_r R_p R_r^-1

です。さらにヨー軸による回転は基底を

(■(e_1&e_2&e_3))R_r R_p R_r^-1 R_r

としたときの回転行列が Ry となる回転ですから基本ベクトルを基底としたときの回転行列は

(R_r R_p)R_y (R_r R_p)^-1

ということになります。したがって、ロール軸、ピッチ軸、ヨー軸の順で回転させたときの回転行列はこれらをすべてかけて

(R_r R_p)R_y (R_r R_p)^-1×R_r R_p R_r^-1×Rr=(R_r R_p)R_y (〖R_p〗^-1 〖R_r〗^-1)R_r R_p=R_r R_p R_y

という非常に簡単な形になります。ここで行列に関して一般的に成り立つ公式 (RrRp) を用いました。ベクトルをロール軸、ピッチ軸、ヨー軸の順に回転させるにもかかわらず、計算としてはベクトルにヨー軸、ピッチ軸、ロール軸の順に回転行列がかけられることになります。結局

R_r (θ) R_p (φ) R_y (ψ)

が求めるべき行列です。特に、ロール軸、ピッチ軸、ヨー軸をそれぞれ x 軸、y 軸、z 軸そのままに取ると、この行列は

となります。

 まず「ロール軸、ピッチ軸、ヨー軸をどう取っているか」、「それらの軸を中心にどのような順番で回転させるか」を決めなければ、ロール角、ピッチ角、ヨー角が与えられてもどのような回転であるかは分かりませんし、回転行列(や後に扱うクォータニオン)をロール角、ピッチ角、ヨー角に変換するようなこともできません。ですからロールピッチヨーを使うときには必ずそれらを明確にしてください。また、場合によってはロールピッチヨー軸をオブジェクトではなくワールドに固定することもあります(その場合はちょうどかけ算の順序が逆になって Ry(θ) Rp(φ) Rr(ψ) という行列をかけることになります)ので、ロールピッチヨーを使ったドキュメントを読んだりプログラムのコードをコピーしたりするときにはかなりの注意が必要です。

 次回は、クォータニオンについて説明します。

※以下では、本稿の前後を合わせて5回分(第6回~第10回)のみ表示しています。
 連載の全タイトルを参照するには、[この記事の連載 INDEX]を参照してください。

6. 平面上のベクトル ― Kinectで学ぶ数学

Kinectではプレイヤーの関節の3次元座標を取得できる。これに関する数学を説明するための基礎として、まずは2次元平面上のベクトルを解説する。

7. 空間内のベクトル ― Kinectで学ぶ数学

Kinectではプレイヤーの関節の3次元座標を取得できる。2次元の数学を理解したら、次に3次元空間の数学を理解しよう。

8. ベクトルの回転 ― Kinectで学ぶ数学

Kinectではプレイヤーの関節の3次元座標を取得できる。前2回の説明を踏まえて、2次元ベクトル/3次元ベクトルの回転を理解しよう。

9. 【現在、表示中】≫ ロール・ピッチ・ヨー ― Kinectで学ぶ数学

3Dオブジェクトを回転させるときに用いられる概念「ロール・ピッチ・ヨー」について説明する。これを使用する際の注意点にも言及する。

10. クォータニオン ― Kinectで学ぶ数学

全5回にわたる、Kinectで必要となる数学の解説は、今回で完結。最終回では、Kinect SDKでも関節の回転角度として採用されているクォータニオンについて説明する。

イベント情報(メディアスポンサーです)

Twitterでつぶやこう!


Build Insider賛同企業・団体

Build Insiderは、以下の企業・団体の支援を受けて活動しています(募集概要)。

ゴールドレベル

  • グレープシティ株式会社
  • 日本マイクロソフト株式会社