クワマイでもできる

クワマイでもわかる

回転行列の右手系左手系変換

f:id:kuwamai:20210130052241p:plain ROSの座標系は右手系、Unityの座標系は左手系と異なるためそれぞれ連携させるためには右手系左手系の変換が必要だった。要は対応する方向の要素を入れ替えればいいわけだけど、調べてもあまり出てこないのでメモ。

座標系について

f:id:kuwamai:20210131230801p:plain それぞれの座標系はこんな感じ。歴史的経緯で異なる座標系を使っている。ROSはx-y平面上を移動するロボットを基準に考えてるし、Unityはx-y平面上のカメラ画像を基準に考えてる。

右手(ROS)→左手系(Unity)変換

右手系であるROSの(x, y, z)は、左手系であるUnityの(-y, z, x)に対応している。一気に入れ替えるとややこしいので、行、列の2段階に分けて入れ替えてみる。


\begin{bmatrix} a & b & c \\ d & e & f \\ g & h & i \end{bmatrix}
\rightarrow
\begin{bmatrix} -b & c & a \\ -e & f & d \\ -h & i & g \end{bmatrix}
\rightarrow
\begin{bmatrix} e & -f & -d \\ -h & i & g \\ -b & c & a \end{bmatrix}

左手(Unity)→右手系(ROS)変換

左手系であるUnityの(x, y, z)は、右手系であるROSの(z, -x, y)に対応している。一気に入れ替えるとややこしいので、行、列の2段階に分けて入れ替えてみる。


\begin{bmatrix} a & b & c \\ d & e & f \\ g & h & i \end{bmatrix}
\rightarrow
\begin{bmatrix} c & -a & b \\ f & -d & e \\ i & -g & h \end{bmatrix}
\rightarrow
\begin{bmatrix} i & -g & h \\ -c & a & -b \\ f & -d & e \end{bmatrix}

参考

気づいたらお友達がほぼ同じ記事を書いてたのだけど僕も書いちゃった。こちらはクォータニオン

思うところ

本当は回転行列の各要素について説明して、回転行列の数値を見ただけで姿勢が想像できるから便利だよって話をしたかったんだけどそれはまた今度ね。