Eigen——四元数笔记

参考资料

学习四元数的小demo:
Eigen_Quaternion_demo
主要的参考文档,Eigen官网中四元数部分:
QuaternionBase

构造函数

常用的四元数格式有Quaternionf(float)和Quaterniond(double),模板类中的Scalar决定数据类型。
官方介绍有七种构造方式,不过常用的一般有以下几种:

  • 直接赋值
Eigen::Quaternion< _Scalar, _Options >::Quaternion( const Scalar & w,const Scalar & x,const Scalar &y,const Scalar & z ) 	
//for example
Quaterniond q(1.0, 0.0, 0.0, 0.0);

要注意Eigen中四元数赋值的顺序,实数w在首;但是实际上它的内部存储顺序是[x y z w]。实际上后面输出系数的时候也是按内部存储顺序输出

Note the order of the arguments: the real w coefficient first, while internally the coefficients are stored in the following order: [x, y, z, w]
3。

  • 从旋转矩阵或向量构造

Eigen::Quaternion< _Scalar, _Options >::Quaternion(const MatrixBase< Derived > & other)	
//for example
Matrix3d mat;
Quaterniond q(mat);
VectorXd vq(4);
vq<<1.0, 0, 0, 0;
Quaterniond qv(vq);
  • 从数组构造
    数组的顺序应该是[w x y z]
Eigen::Quaternion< _Scalar, _Options >::Quaternion	(	const Scalar * 	data	)	

常用函数

罗列一些比较常用的:

  • 输出系数
q.coeffs();     //[x y z w]
  • 输出虚部
q.vec();    //[x y z]

以上两种输出都是以Eigen中的向量Vector形式输出

  • 输出旋转矩阵

要注意的是,只有单位四元数才表示旋转矩阵,所以要先对四元数做单位化

q.normalized();	//important
Matrix3d R=q.toRotationMatrix();
  • 共轭/即反向旋转

一般不用inverse,在表示旋转的时候(范数是1),共轭即可表示相反的的旋转。

//q.inverse();
q.conjugate();
  • 遍历元素
cout<

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