n軸周りの回転と変換行列の関係

当記事では、n軸周りの回転と変換行列の関係について紹介します。

スポンサーリンク

n軸周りの回転行列

回転軸nまわりに角度θだけ回転させる変換行列はつぎのように表せます。

(1)   \begin{eqnarray*} \begin{bmatrix} C_{\theta}+n_x^2(1-C_{\theta}) & n_xn_y(1-C_{\theta})-n_zS_{\theta} & n_xn_z(1-C_{\theta})+n_yS_{\theta}\\ n_yn_x(1-C_{\theta})+n_zS_{\theta} & C_{\theta}+n_y^2(1-C_{\theta}) &n_yn_z(1-C_{\theta})-n_xS_{\theta} \\ n_zn_x(1-C_{\theta})-n_yS_{\theta} & n_zn_y(1-C_{\theta})+n_xS_{\theta} &C_{\theta}+n_z^2(1-C_{\theta}) \\ \end{bmatrix} \end{eqnarray*}

ここで,n=[nx, ny, nz]は単位ベクトルである.

スポンサーリンク

例題

a=[1,1,0]を回転させ, b=[1,0,1]に一致させるための回転軸n(x軸以外)を1つ定め,その周り
の回転角度を計算してみます。
(解答1)

ベクトルa, bの外積cは

(2)   \begin{eqnarray*} c=a \times b= \begin{bmatrix}1 \\ 1 \\ 0 \\ \end{bmatrix} \times \begin{bmatrix} 1 \\ 0 \\ 1 \\ \end{bmatrix} = \begin{bmatrix} 1 \\ -1 \\ -1 \\ \end{bmatrix} \end{eqnarray*}

となる. ここで,cの単位ベクトルを回転軸nと定める.

(3)   \begin{eqnarray*} n= \begin{bmatrix} n_x \\ n_y \\ n_z \end{bmatrix} = \begin{bmatrix} \frac{1}{\sqrt{3}} \\ -\frac{1}{\sqrt{3}} \\ -\frac{1}{\sqrt{3}} \end{bmatrix} \end{eqnarray*}

すると,(1)式より回転行列Aは

(4)   \begin{eqnarray*} A= \begin{bmatrix} \frac{1}{3}-\frac{2}{3}C_{\theta} & \frac{1}{3}C_{\theta}-\frac{1}{3}+\frac{1}{\sqrt{3}}S_{\theta} & \frac{1}{3}C_{\theta}-\frac{1}{3}-\frac{1}{\sqrt{3}}S_{\theta}\\ \frac{1}{3}C_{\theta}-\frac{1}{3} -\frac{1}{\sqrt{3}}S_{\theta} & \frac{1}{3}-\frac{2}{3}C_{\theta} & \frac{1}{3} -\frac{1}{3}C_{\theta} -\frac{1}{\sqrt{3}}S_{\theta} \\ \frac{1}{3}C_{\theta}-\frac{1}{3} +\frac{1}{\sqrt{3}}S_{\theta}& \frac{1}{3} -\frac{1}{3}C_{\theta} +\frac{1}{\sqrt{3}}S_{\theta} & \frac{1}{3}-\frac{2}{3}C_{\theta} \end{bmatrix} \end{eqnarray*}

となる. ここで,b=A・aより

(5)   \begin{eqnarray*} \frac{1}{3}-\frac{2}{3}C_{\theta}+\frac{1}{3}C_{\theta}-\frac{1}{3}+\frac{1}{\sqrt{3}}S_{\theta}=1\\ \frac{1}{3}C_{\theta}-\frac{1}{3} -\frac{1}{\sqrt{3}}S_{\theta}+\frac{1}{3}-\frac{2}{3}C_{\theta}=0\\ \frac{1}{3}C_{\theta}-\frac{1}{3} +\frac{1}{\sqrt{3}}S_{\theta}+\frac{1}{3} -\frac{1}{3}C_{\theta} +\frac{1}{\sqrt{3}}S_{\theta}=1 \\ \end{eqnarray*}

整理すると

(6)   \begin{eqnarray*} -\frac{1}{3}C_{\theta}+\frac{1}{\sqrt{3}}S_{\theta}=1\\ -\frac{1}{3}C_{\theta}-\frac{1}{\sqrt{3}}S_{\theta}=0\\ \frac{2}{\sqrt{3}}S_{\theta}=1 \\ \end{eqnarray*}

となり,求めたい回転角度θ=60となる.

<

h3>回転行列(n軸周りの)から回転角の計算

n軸周りの回転行列Aが既知のとき,つぎの式から回転角θを求めることができる.

(7)   \begin{eqnarray*} C_{\theta}=\frac{a_{xx}+a_{yy}+a_{zz}-1}{2} \end{eqnarray*}

ただし,

(8)   \begin{eqnarray*} A= \begin{bmatrix} a_{xx} & a_{xy} & a_{xz} \\ a_{yx} &  a_{yy} & a_{yz} \\ a_{zx} & a_{zy} & a_{zz} \\ \end{bmatrix} \end{eqnarray*}

関連ページ
1 Pythonでロボットシミュレーション
2 ロボット工学入門 基礎編
3 Python入門 サンプル集
4 NumPy入門 サンプル集
ロボット
スポンサーリンク

コメント