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<<q.w()<<"  "<<q.x()<<"  "<<q.y()<<"  "<<q.z()<<endl;
  • 17
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
EIGEN库中,可以使用不同的方式初始化四元数Quaterniond。 第一种方式是使用四个实数w、x、y、z来初始化Quaterniond对象,例如: Eigen::Quaterniond q1(w, x, y, z) [1。 第二种方式是使用一个四维向量Vector4d来初始化Quaterniond对象,向量的顺序是x、y、z、w,例如: Eigen::Quaterniond q2(Vector4d(x, y, z, w)) [1。 第三种方式是使用一个旋转矩阵Matrix3d来初始化Quaterniond对象,例如: Eigen::Quaterniond q3(Matrix3d(R)) [1。 另外,在引用中,简单地声明一个Quaterniond对象,而未进行初始化。在需要时,可以通过赋值操作来初始化Quaterniond对象,例如: Eigen::Quaterniond quaternion; quaternion = rotation_vector; [3。 总结起来,EIGEN库中的Quaterniond对象可以通过四个实数、四维向量或旋转矩阵来进行初始化。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Eigen四元数Quaterniond的初始](https://blog.csdn.net/hjwang1/article/details/106752766)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [eigen 中旋转向量、旋转矩阵、欧拉角、四元数的初始化及相互转换](https://blog.csdn.net/xiaojinger_123/article/details/124376199)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值