MATLABで定義した回転行列を計算する関数を改造して逆回転を扱えるようにする

あるベクトル2つのベクトルの関係が回転行列によって次のように与えられているとする。

\begin{align}
\boldsymbol{y}= \boldsymbol{R} \boldsymbol{x}
\end{align}

この時逆問題は

\begin{align}
\boldsymbol{x}&= \boldsymbol{R}^{-1} \boldsymbol{y} = \boldsymbol{R}^{T} \boldsymbol{y}
\end{align}

となる。MATLABで書くと次のようになる。この関数はロール、ピッチ、ヨーを与えれば回転行列とその逆行列を返す。

function [R,invR]=Rpy_to_rot(rpy)
phi=rpy(1);
theta=rpy(2);
psi=rpy(3);

R=[...
    cos(psi)*cos(theta),   -sin(psi)*cos(phi)+cos(psi)*sin(theta)*sin(phi),    sin(psi)*sin(phi)+cos(psi)*cos(phi)*sin(theta);...
    sin(psi)*cos(theta),    cos(psi)*cos(phi)+sin(psi)*sin(theta)*sin(phi),   -cos(psi)*sin(phi)+sin(psi)*sin(theta)*cos(phi);...
    -sin(theta),            sin(phi)*cos(theta),                               cos(phi)*cos(theta);...
];
invR=[...
    cos(psi)*cos(theta),                                sin(psi)*cos(theta),                                -sin(theta);... 
    -sin(psi)*cos(phi)+cos(psi)*sin(theta)*sin(phi),    cos(psi)*cos(phi)+sin(psi)*sin(theta)*sin(phi),     sin(phi)*cos(theta);...  
    sin(psi)*sin(phi)+cos(psi)*cos(phi)*sin(theta),     -cos(psi)*sin(phi)+sin(psi)*sin(theta)*cos(phi),    cos(phi)*cos(theta);...
];                                     
end

コメント

タイトルとURLをコピーしました