Main Content

ロボティクスにおける座標変換

ロボティクス アプリケーションでは、さまざまな座標系を使用して、ロボット、センサーおよびその他のオブジェクトの場所を定義できます。一般に、3 次元空間内のオブジェクトの場所は、位置の値と向きの値で指定できます。これらの値には複数の表現方法が可能ですが、その一部は特定のアプリケーションに固有です。並進および回転は、位置と向きの別名です。Robotics System Toolbox™ では、ロボティクスで一般的に使用されている表現をサポートしており、表現間の変換を行うことができます。これらの表現を 3 次元の点に適用すると、座標系を変換できます。これらのサポートされている表現について、その使用方法と MATLAB® での等価な数値表現の簡単な説明を含めて、以下で説明します。表現の名前には、それぞれ省略形があります。これが、このツールボックスでサポートされている引数および変換関数の名前に使用されています。

この節の最後では、これらの表現間の変換用に提供されている変換関数について確認できます。

Robotics System Toolbox では、位置と向きは右手直交座標系で定義されると想定しています。

軸角度

省略形: axang

ベクトルで定義されている固定軸を中心としたスカラー回転によって表される 3 次元空間での回転です。

数値表現: 1 行 3 列の単位ベクトルとスカラー角度を 1 行 4 列のベクトルとして組み合わせたもの

たとえば、y 軸を中心として pi/2 ラジアン回転する場合は次のようになります。

axang = [0 1 0 pi/2]

オイラー角

省略形: eul

オイラー角は、剛体の向きを表す 3 つの角度です。角度はそれぞれ、指定された座標系の軸を中心とするスカラー回転です。Robotics System Toolbox は、2 つの回転順序をサポートします。ロボティクス アプリケーションでは、'ZYZ' の軸順序が一般的に使用されます。また、'ZYX' の軸順序もサポートされており、これは "ロール ピッチ ヨー (rpy)" としても示されます。どの軸順序を使用するかは、点に回転を適用する場合や、他の表現に変換する場合に重要です。

数値表現: 1 行 3 列のスカラー角のベクトル

たとえば、pi の y 軸を中心とした回転は次のように表現されます。

eul = [0 pi 0]

メモ: 軸順序は変換には保存されないため、どの回転順序を適用するかに注意しなければなりません。

同次変換行列

省略形: tform

同次変換行列は、並進と回転を組み合わせて 1 つの行列にします。

数値表現: 4 行 4 列の行列

たとえば、y 軸を中心とした角度 α の回転と、y 軸に沿った 4 単位分の並進は、次のように表現されます。

tform =
 cos α  0      sin α  0 
 0      1      0      4
-sin α  0      cos α  0
 0      0      0      1

変換行列と同次座標を左から掛ける必要があります。これは、行ベクトルの行列 (n 行 4 列の点の行列) として表現されます。行列を乗算するために、転置 (') を使用して点を回転します。次に例を示します。

points = rand(100,4);
tformPoints = (tform*points')';

四元数

省略形: quat

四元数とは、スカラー回転と 3 要素ベクトルを含む 4 要素ベクトルです。四元数には、他の表現に固有の特異点の問題を回避するというメリットがあります。最初の要素 w は、回転の軸を定義する他の 3 つの値 [x y z] でベクトルを正規化するスカラーです。

数値表現: 1 行 4 列のベクトル

たとえば、y 軸を中心とした pi/2 の回転は、次のように表現されます。

quat = [0.7071 0 0.7071 0]

回転行列

省略形: rotm

回転行列は、3 次元空間における回転を表します。1 の行列式をもつ、正方形の正規直交行列です。

数値表現: 3 行 3 列の行列

たとえば、x 軸を中心とした α 度の回転は次のようになります。

rotm =

     1     0         0
     0     cos α     -sin α
     0     sin α     cos α

回転行列と座標を左から掛ける必要があります。これは、行ベクトルの行列 (n 行 3 列の点の行列) として表現されます。行列を乗算するために、転置 (') を使用して点を回転します。次に例を示します。

points = rand(100,3);
rotPoints = (rotm*points')';

並進ベクトル

省略形: trvec

並進ベクトルは、3 次元ユークリッド空間で直交座標として表現されます。座標並進がすべての点に均等に適用されるだけです。回転は行われません。

数値表現: 1 行 3 列のベクトル

たとえば、x 軸に沿った 3 単位分の並進と z 軸に沿った 2.5 単位分の並進は次のように表現されます。

trvec = [3 0 2.5]

変換関数と変換

Robotics System Toolbox は、これまで説明した変換表現に対応する変換関数を提供します。すべての変換が専用の関数でサポートされているわけではありません。以下の表は、サポートされている変換 (青) を示しています。回転および並進の表現の省略形も示しています。

 変換先軸角度 (axang)オイラー角 (eul)四元数 (quat)四元数オブジェクト (quaternion)回転行列 (rotm)変換行列 (tform)並進ベクトル (trvec)
変換元 
軸角度 (axang)axang2quatquaternionaxang2rotmaxang2tform
オイラー角 (eul)eul2quatquaternioneul2rotmeul2tform 
四元数 (quat)quat2axangquat2eulquaternionquat2rotmquat2tform 
四元数オブジェクト (quaternion)eulercompact  
回転行列 (rotm)rotm2axangrotm2eulrotm2quatquaternionrotm2tform 
変換行列 (tform)tform2axangtform2eultform2quattform2rotmtform2trvec
並進ベクトル (trvec)trvec2tform

すべての変換関数の名前は標準形式に従っています。alpha2beta という形式に従っており、alpha は変換元の省略形、beta は変換先の省略形です。たとえば、オイラー角から四元数への変換は eul2quat となります。

すべての関数は有効な入力を想定しています。無効な入力を指定した場合、出力は未定義となります。

ラジアンと度、直交座標と同次座標の間の変換を行う変換関数や、ラップした角度差を計算する変換関数もあります。変換の完全なリストについては、座標の変換を参照してください。

関連するトピック