
慣性センサーなど制御系で個人的に使用する式だけ抜き出したたんなる覚書です。
まずクォーターニオン q を次のようにします。
q=qω+qxi+qyj+qzk=[qωqxqyqz]i2=j2=k2=ijk=−1表現がq=[qxqyqzqw]Tとなっていたり、q=[q1q2q3q4]Tとかq=[q0q1q2q3]Tとなっていたりいろいろあり紛らわしいので明記しておきます。
クォーターニオンの積
クォーターニオン同士の積です。
q1q2=(ω1+x1i+y1j+z1k)(ω2+x2i+y2j+z2k)=(ω1ω2–x1x2−y1y2−z1z2)+(ω1x2+ω2x1+y1z2–z1y2)i+(ω1y2+ω2y1+z1x2–x1z2)j+(ω1z2+ω2z1+x1y2–y1x2)k▲展開して各項でまとめるとこのようになります。
ベクトル表記すると▼
q1q2=(ω1ω2–→v1⋅→v2,ω1→v2+ω2→v1+→v1×→v2)内積:→v1⋅→v2=x1x2+y1y2+z1z2外積:(y1z2−z1y2,z1x2−x1z2,x1y2−y1x2)内積と外積で実部、虚部に分けてすっきり表現できます。
オイラー角からクォーターニオン
任意の軸(単位ベクトル)→n=(nx,ny,nz)でθ回転させるときのクォーターニオンは
q=[cosθ2nxsinθ2nysinθ2nzsinθ2]で表現されます。
xyzの各軸廻りはそれぞれ
qx=[cosθx2nxsinθx200]qy=[cosθy20nysinθy20]qz=[cosθz200nzsinθz2]で表現され、クォーターニオンの積より、オイラー角(3軸回転xyz順)からクォーターニオンへの変換は、
qxqyqz=[−sinθx2sinθy2sinθz2+cosθx2cosθy2cosθz2cosθx2sinθy2sinθz2+sinθx2cosθy2cosθz2−sinθx2cosθy2sinθz2+cosθx2sinθy2cosθz2cosθx2cosθy2sinθz2+sinθx2sinθy2cosθz2]このように展開されます。
クォーターニオンから回転行列
クォーターニオンから回転行列への変換です。ベクトル→r=(rx,ry,rz)をクォーターニオンqで回転させると
→r′=q→rq∗=(qω+qxi+qyj+qzk)(rxi+ryj+rzk)(qω−qxi−qyj−qzk)で表現されます。で頑張って展開して、対応するi,j,k成分で行列式の形でまとめ直すと
[r′xr′yr′z]=[q2ω+q2x−q2y−q2z2(qxqy−qωqz)2(qωqy+qxqz)2(qωqz+qxqy)q2ω−q2x+q2y−q2z2(qyqz−qωqx)2(qxqz−qωqy)2(qyqz+qωqx)q2ω−q2x−q2y+q2z][rxryrz]となります。
よく使いそうな式の単なる個人的な覚書です。
コメント