ロボットなどで自己位置を推定しながら目的地まで動かしたい場合、たとえばカメラの座標系から地図の座標系に変換する場合など、基準となるベクトル(基底)を別の基底に変換する必要があります。
このとき、行列による座標変換を行う必要があるのですが、オープンソースで簡単にできてしまうので、あまり仕組みを知らずに対応している人も多いように思います。
そこで今回は、基礎の基礎である「行列」による「座標変換」について簡単に紹介していきます。
「基底」とは?
簡単にいえば、基準となるベクトルのことです。たとえば、カメラの座標系と地図の座標系は別物ですよね。
このとき、それぞれの座標系の基準となるベクトルを基底と言います。
「座標変換」とは?
では次に、座標変換について紹介していきます。
たとえば、あるベクトル\(\vec{v}\)を2組の基底\((\vec{e_x},\vec{e_y})\)、\((\vec{e’_x},\vec{e’_y})\)を使ってあらわしたとき、
$$\vec{v}=x\vec{e_x}+y\vec{e_y}=x’\vec{e’_x}+y’\vec{e_y}$$
と表現できたとします。このとき、\((\vec{e_x},\vec{e_y})\)、\((\vec{e’_x},\vec{e’_y})\)の関係が、
$$\vec{e’_x}=3\vec{e_x}-2\vec{e_y}\\
\vec{e’_y}=-\vec{e_x}+\vec{e_y}$$
とすると、座標\(v=(x,y)^T\)と座標\({v’}=(x’,y’)^T\)の関係はどうなるでしょうか?
早速、計算していくと、
$$\vec{v}=x’\vec{e’_x}+y’\vec{e_y}=x'(3\vec{e_x}-2\vec{e_y})+y'(-\vec{e_x}+\vec{e_y})\\
=(3x’-y’)\vec{e_x}+(-2x’+y’)\vec{e_y}$$
この式と\(\vec{v}=x\vec{e_x}+y\vec{e_y}\)が等しくなるので、
$$x=3x’-y’\\
y=-2x’+y’$$
これを\(x’,y’\)について解くと、
$$x’=x+y\\
y’=2x+3y$$
と求めることができました。これが、\(v=(x,y)^T\)から\({v’}=(x’,y’)^T\)への座標変換です。
「座標変換」を行列で表す
では、先ほどの座標変換を行列を使って表してみましょう。
$$\begin{pmatrix}
\vec{e’_x} \\
\vec{e’_y} \\
\end{pmatrix}
=
\begin{pmatrix}
3 & -2 \\
-1 & 1 \\
\end{pmatrix}
\begin{pmatrix}
\vec{e_x} \\
\vec{e_y} \\
\end{pmatrix}
$$
$$\begin{pmatrix}
x \\
y \\
\end{pmatrix}
=
\begin{pmatrix}
3 & -1 \\
-2 & 1 \\
\end{pmatrix}
\begin{pmatrix}
x’ \\
y’ \\
\end{pmatrix}
$$
$$\begin{pmatrix}
x’ \\
y’ \\
\end{pmatrix}
=
\begin{pmatrix}
1 & 1 \\
2 & 3 \\
\end{pmatrix}
\begin{pmatrix}
x \\
y \\
\end{pmatrix}
$$
ここで、
$$A=
\begin{pmatrix}
3 & -1 \\
-2 & 1 \\
\end{pmatrix}$$
と置くと、
$$\begin{pmatrix}
\vec{e’_x} \\
\vec{e’_y} \\
\end{pmatrix}
=
A^T
\begin{pmatrix}
\vec{e_x} \\
\vec{e_y} \\
\end{pmatrix}
$$
$$\begin{pmatrix}
x \\
y \\
\end{pmatrix}
=
A
\begin{pmatrix}
x’ \\
y’ \\
\end{pmatrix}
$$
$$\begin{pmatrix}
x’ \\
y’ \\
\end{pmatrix}
=
A^{-1}
\begin{pmatrix}
x \\
y \\
\end{pmatrix}
$$
と、基底変換行列に対して、転置行列、さらにその逆行列を求めれば、座標変換できることがわかります。
実際、\(A\)と\(A^{-1}\)を計算すると、単位行列\(I\)になることがわかります。
$$
\begin{pmatrix}
3 & -1 \\
-2 & 1 \\
\end{pmatrix}
\begin{pmatrix}
1 & 1 \\
2 & 3 \\
\end{pmatrix}
=
\begin{pmatrix}
1 & 0 \\
0 & 1 \\
\end{pmatrix}
$$
このように、逆行列が存在する場合の座標変換は、転置行列とその逆行列を求めれば簡単に求まることがわかりました。
最後に
今回は、「行列」による「座標変換」のやり方について簡単に紹介してきました。
複雑な座標変換もこれが基礎になるので、ぜひ理解しておきましょう。
コメント