
書籍転載:KINECT for Windows SDKプログラミング Kinect for Windows v2センサー対応版(9)
ロール・ピッチ・ヨー ― Kinectで学ぶ数学
― Chapter 8 ― 8.4 ―
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 のままで構いません。次にピッチ軸による回転は基底を

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

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

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

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

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

が求めるべき行列です。特に、ロール軸、ピッチ軸、ヨー軸をそれぞれ x 軸、y 軸、z 軸そのままに取ると、この行列は
となります。
まず「ロール軸、ピッチ軸、ヨー軸をどう取っているか」、「それらの軸を中心にどのような順番で回転させるか」を決めなければ、ロール角、ピッチ角、ヨー角が与えられてもどのような回転であるかは分かりませんし、回転行列(や後に扱うクォータニオン)をロール角、ピッチ角、ヨー角に変換するようなこともできません。ですからロールピッチヨーを使うときには必ずそれらを明確にしてください。また、場合によってはロールピッチヨー軸をオブジェクトではなくワールドに固定することもあります(その場合はちょうどかけ算の順序が逆になって Ry(θ) Rp(φ) Rr(ψ) という行列をかけることになります)ので、ロールピッチヨーを使ったドキュメントを読んだりプログラムのコードをコピーしたりするときにはかなりの注意が必要です。
■
次回は、クォータニオンについて説明します。
※以下では、本稿の前後を合わせて5回分(第6回~第10回)のみ表示しています。
連載の全タイトルを参照するには、[この記事の連載 INDEX]を参照してください。

9. 【現在、表示中】≫ ロール・ピッチ・ヨー ― Kinectで学ぶ数学
3Dオブジェクトを回転させるときに用いられる概念「ロール・ピッチ・ヨー」について説明する。これを使用する際の注意点にも言及する。

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