====== 三次元ベクトルと座標系 ====== ===== ベクトルとは ===== 「ベクトル」とは何かというと,一般的には方向と大きさを持つ量として 捉えることができるが,その用語が使われる分野によって 微妙に異なる意味合いを持っている. ここではロボットの動作やそれが働く環境を記述するために用いる 三次元空間における幾何的ベクトル(空間ベクトル)を扱う. [{{ articles:vector_01.png?200| 図1 ベクトル}}] ベクトルはたとえば $ \boldsymbol{v} $ といった太字のイタリック体で表す(図1). ベクトルは平行移動しても同じ方向,同じ大きさなので同じベクトルとなる. 三次元ベクトルは3つ組の数値で表現することができる(成分表示).以下のように本稿では縦ベクトルで表現する. $$ \boldsymbol{v} = \left( \begin{array}{c} v_x \\ v_y \\ v_z \end{array} \right) \tag{1} $$ この3つ組の数値は図1に示されているような[[articles:frame|三次元直交座標系]]((この場合原点はどこであろうと関係ない))へのx,y,z各軸方向の単位ベクトル$ \boldsymbol{x}, \boldsymbol{y}, \boldsymbol{z} $への射影の大きさとなっている. すなわち $$ \boldsymbol{v} = v_x \boldsymbol{x} + v_y \boldsymbol{y} + v_z \boldsymbol{z} \tag{2} $$ 上記2つの式のうち式(1)はベクトルを成分表示したものであり,式(2)は基底ベクトルの和として表現している. これらは似て非なるものとなっており,かなり混乱を招く表現なので注意が必要である((概念的な説明の場合を除いて,基本的には成分表示を用いる.)). なぜなら式(2)の基底ベクトル(座標軸ベクトル)も成分表示することが可能であり,式(2)を数値として計算するときに, それら基底ベクトルがどのように成分表示されているかで計算の結果が異なるからである. しかし,その成分表示された数値は次節で述べるように基底ベクトル自身を射影し数値化する座標系に依存する. 基底ベクトルを基底ベクトルが表す座標系自身で表現した場合,すなわち基底ベクトルが以下のように表現された場合のみ 式(2)を計算した値は式(1)の成分表示と一致する. $$ \boldsymbol{x} = \left( \begin{array}{c} 1 \\ 0 \\ 0 \end{array} \right) , \boldsymbol{y} = \left( \begin{array}{c} 0 \\ 1 \\ 0 \end{array} \right) , \boldsymbol{z} = \left( \begin{array}{c} 0 \\ 0 \\ 1 \end{array} \right) \tag{3}$$ $ \boldsymbol{x}, \boldsymbol{y}, \boldsymbol{z} $ と書いた場合は,ことわりがない限り それらの成分表示は式(3)であるとするといろいろと都合が良い. ===== 参照座標系(wrt座標系) ===== [{{ articles:vector_02.png?200| 図2 ベクトルの参照座標系}}] 一般に高校レベルで習うベクトルはそれを記述する座標系は固定されているため, どの座標系から見たベクトルの成分表示なのかが問題になることはない. しかし,実際はベクトルの成分表示は参照する座標系(with respect to, wrt座標系)に依存する. ロボットの分野((ロボットの分野に限らず,コンピュータグラフィックスやコンピュータビジョンの分野でも同様である))では 動作や環境を記述するために多数の座標系が存在するため,この参照座標系の区別がとても重要となる. 参照座標系を明示する場合は,たとえば $ ^{1} \boldsymbol{v} $ や $ ^{2} \boldsymbol{v} $ のようにその座標系の右下付き文字(suffix)をベクトルの左上の前付き文字(preindex)で表現する. 図2ではそれらは同じベクトルを指しているが,それらを成分表示すると, $$ ^1\boldsymbol{v} = \left( \begin{array}{c} ^1v_x \\ ^1v_y \\ ^1v_z \end{array} \right) \tag{4} $$ $$ ^2\boldsymbol{v} = \left( \begin{array}{c} ^2v_x \\ ^2v_y \\ ^2v_z \end{array} \right) \tag{5} $$ となり異なる成分表示となる. これらは座標系$ \Sigma_i $の各軸方向の単位ベクトル$ \boldsymbol{e}_{ix}, \boldsymbol{e}_{iy}, \boldsymbol{e}_{iz} $への射影の大きさとなっている. すなわち $$ ^1\boldsymbol{v} = {^1v_x} \boldsymbol{e}_{1x} + {^1v_y} \boldsymbol{e}_{1y} + {^1v_z} \boldsymbol{e}_{iz} \tag{6}$$ $$ ^2\boldsymbol{v} = {^2v_x} \boldsymbol{e}_{2x} + {^2v_y} \boldsymbol{e}_{2y} + {^2v_z} \boldsymbol{e}_{2z} \tag{7}$$ 前節でも述べたが,式(4),(5)と式(6),(7)は異なるものとなっている.つまり式(6),(7)を条件を付さずに計算しても 式(4),(5)と同じにならない. 逆に,式(6),(7)は本来同じベクトルを指しているのであるから, それぞれの基底ベクトルを共通の参照座標系$ \Sigma_i $を用いて 成分表示すると互いに等しくなる.つまり $$ {^1v_x} {^i\boldsymbol{e}_{1x}} + {^1v_y} {^i\boldsymbol{e}_{1y}} + {^1v_z} {^i\boldsymbol{e}_{1z}} = {^2v_x} {^i\boldsymbol{e}_{2x}} + {^2v_y} {^i\boldsymbol{e}_{2y}} + {^2v_z} {^i\boldsymbol{e}_{2z}} \tag{8} $$ 式(8)は,[[articles:matrix#直交行列による参照座標系の変換|直交行列による参照座標系の変換]](または回転行列とベクトルの演算)を考える上で重要な式となっている. 余談になるが,基底ベクトルを基底ベクトルが表す座標系自身で表現した場合ということで,成分表示すると $ ^i\boldsymbol{e}_{ix} = \boldsymbol{x} $ , $ ^i\boldsymbol{e}_{iy} = \boldsymbol{y} $ , $ ^i\boldsymbol{e}_{iz} = \boldsymbol{z} $ となる. 参照座標系によらずそれぞれの座標系で同じ成分表示されるベクトルを表す場合には参照座標系を明示しない. また参照座標系をいちいち明示するのが煩わしい場合には省略することも多い. ===== 位置ベクトル ===== 始点を座標系の原点とするベクトルで空間中の位置(たとえば点P)を指し示すことができる.これを位置ベクトルと呼ぶ(図3). [{{ articles:p-vector_01.png?200| 図3 位置ベクトル}}] [{{ articles:p-vector_02.png?200| 図4 位置ベクトルと参照座標系}}] 位置ベクトルの成分表示はその座標系での位置座標となる. $$ \boldsymbol{p} = \left( \begin{array}{c} p_x \\ p_y \\ p_z \end{array} \right) \tag{9} $$ ベクトルと位置ベクトルの大きな違いは位置ベクトルは始点が座標系の原点に固定されるということである. 位置ベクトルを単に座標と捉えるとベクトルに関する演算が何を意味しているのか分からなくなる. たとえば「2つの位置の和」を考えることが何を意味するのか分からないということである. しかし,ベクトルとして扱うことでいろいろと便利に演算を行うことができる. たとえば位置ベクトルの差を取ることでそれぞれの点を結ぶベクトルを得ることができるし, 位置ベクトルに移動ベクトル(速度ベクトルx時間)を加えることで新たな位置ベクトルを得ることができる. 位置ベクトルは始点が座標系の原点に固定されているため空間中の同じ点Pを指し示す位置ベクトルであっても参照座標系の原点位置が異なると成分表示が異なるだけでなくベクトルとしても異なるものになる(図4). 原点の移動を考慮した座標変換行列による位置ベクトルの変換については[[articles:frame|三次元直交座標系]]で述べる. ===== プログラムと練習問題 ===== [[articles:geo_basic#VECTOR|ベクトル演算のプログラム]] [[articles:geo_manual#ベクトル|練習問題]]