Representations
eigen中quaternion的构造函数为Quaternion (const Scalar &w, const Scalar &x, const Scalar &y, const Scalar &z)
,注意w在前。然而在内部存储时eigen将四元数的w放在最后,例如通过Eigen::Vector4d q = q_AB.coeffs();
访问时,q中的最后一个元素才是w。
在论文中,比较常见的四元数分为两种hamilton quaternion
和JPL quaternion
。主要的区别在于前者是右手系 ij=k ,后者是左手系 ij=−k ,eigen中的四元数为hamilton quaternion
,然而有点不一样的是四元数内的顺序定义不一样,即w在最后。
Q=pw+pxi+pyj+pzk⟺Q=pw+pv
q=[pxpypzpw]T
Product
四元数的乘积具有以下形式,在eigen中直接调用*
即可。
p⊗q=⎡⎣⎢⎢⎢⎢⎢pwqx+pxqw+pyqz−pzqypwqy−pxqz+pyqw+pzqxpwqz+pxqy−pyqx+pzqwpwqw−pxqx−pyqy−pzqz⎤⎦⎥⎥⎥⎥⎥
同时也可以将四元数的乘法写成矩阵的乘法,这里定义四元数的左乘矩阵 []L 和右乘矩阵 []R 。
p⊗q=[p]Lq=[q]Rp
[q]L