Eigen 四元数和欧拉角相互转换

四元数转欧拉角

Eigen::Quaterniond q(w, x, y, z);
Eigen::Matrix3d rx = q.toRotationMatrix();
Eigen::Vector3d ea = rx.eulerAngles(2,1,0);

注意:

上面按照先旋转x轴(0),然后y轴(1),最后z轴得到的角度,并不是传统意义上,zyx旋转的欧拉角。

得到的ea向量,分别对应的是rz, ry, rx旋转角度,注意和下文的顺序对应

 

另外这里得到的角度,归一化的范围有些问题,代码中的说明是 

The returned angles are in the ranges [0:pi]x[-pi:pi]x[-pi:pi].

所以,这里的rz角范围可能有问题,需要注意

 

欧拉角转四元数

接上面的定义,先旋转x轴,然后旋转y轴,最后旋转z轴,对应的旋转角分别为rx, ry, rz,即ea[2] ea[1] ea[0]

q = Eigen::AngleAxisd(ea[0], ::Eigen::Vector3d::UnitZ()) *
Eigen::AngleAxisd(ea[1], ::Eigen::Vector3d::UnitY()) *
Eigen::AngleAxisd(ea[2], ::Eigen::Vector3d::UnitX());

 

 

  • 3
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值