Eigen中Quaternion的一些小细节

参考: http://eigen.tuxfamily.org/dox/classEigen_1_1Quaternion.html

针对一个刚体的旋转,我们可以用欧拉角,旋转矩阵,旋转向量,四元数等等方式来表达. 四元数是一种抽象的, 但是数学表达效果较好的一种旋转表达方式, 因为它相比与欧拉角,不存在奇异性;相比于旋转矩阵也更加紧凑,冗余性较低. 不过四元数也有缺点,就是太过于抽象,运算比较复杂. 不过,在平常的使用中,我们可以借助Eigen这类的开源矩阵运算库来简化我们对这类复杂数据类型的计算和使用.

Eigen中四元数可以用Eigen::Quaterniond(double类型)或者Eigen::Quaternionf(float类型)表示. 在Eigen中的四元数可以通过如下方式构造:

    Quaternion (const Scalar &w, const Scalar &x, const Scalar &y, const Scalar &z)
w是四元数的实部, x,y,z 分别是四元数的虚部( PS : 构造的时候w在前面 ). 但是,这里有一个坑--------虽然构造的时候w在前面, 但是 在实际的内存中, 四元数四个元素的顺序却是 x, y, z, w . 可以通过下面的代码去提取四元数的元素验证:

    Eigen::Vector4d q = q_AB.coeffs();


所以,当我们使用 Eigen::Map 去对某个数组操作的时候, 就需要去留意这个四元数在内存中的具体位置了.







你可能感兴趣的:(计算机视觉)