Eigen_四元数笔记

引言

参考链接

1.构造函数

常用的四元数格式有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 )

2.常用函数

罗列一些比较常用的:

  • 输出系数

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<<q.w()<<" “<<q.x()<<” “<<q.y()<<” "<<q.z()<<endl;

展开阅读全文

没有更多推荐了,返回首页