四元数共轭展开实验及文献纠错

首先说一下四元数的定义: P = ( q w , q x , q y , q z ) = ( p , q ) P = (q_{w},q_{x},q_{y},q_{z}) = (p,\mathbf{q}) P=(qw,qx,qy,qz)=(p,q)
四元数乘法:
(1) P 1 ∗ P 2 = ( p 1 p 2 − q 1 q 2 , p 1 q 2 + p 2 q 1 + q 1 × q 2 ) P_{1}*P_{2} = (p_{1}p_{2}-\mathbf{q_{1}q_{2}}, p_{1} \mathbf{q_{2}} + p_{2} \mathbf{q_{1}} + \mathbf{q_{1}} \times \mathbf{q_{2}} ) \tag{1} P1P2=(p1p2q1q2,p1q2+p2q1+q1×q2)(1)
共轭:
P ‾ = ( p , − q ) \overline{P} = (p,-\mathbf{q}) P=(p,q)
在文献[1]中,根据(1)有如下结果:
(2) P 1 ∗ P 2 ‾ = P 1 ‾ ∗ P 2 ‾ \overline{P_{1}*P_{2} } =\overline{P_{1}}*\overline{P_{2}} \tag{2} P1P2=P1P2(2)
笔者对(2)进行了推导,发现明显不成立,于是进行了如下实验.

编程实验计算共轭展开公式

首先建立两个表示不同旋转的四元数,然后进行计算.

#include <iostream>
#include <Eigen/Core>
#include "sophus/so3.h"
#include "sophus/se3.h"

int main(int argc, char *argv[])
{
    using namespace std;
    Eigen::AngleAxisd rotation_vector_z(M_PI / 4, Eigen::Vector3d(2, 2, 1));
    Eigen::AngleAxisd rotation_vector_x(M_PI /4, Eigen::Vector3d(1,-1,1));

    Eigen::Quaterniond q_z = Eigen::Quaterniond(rotation_vector_z);
    Eigen::Quaterniond q_x = Eigen::Quaterniond(rotation_vector_x);

    cout<<"quaternion z : \n"<<q_z.coeffs()<<endl;
    cout<<"quaternion x : \n"<<q_x.coeffs()<<endl;


    Eigen::Quaterniond qz_qx = q_z * q_x;
    Eigen::Quaterniond qz_qx_conjugate = qz_qx.conjugate();
    cout<<"qz_qx_conjugate : \n\t"<<qz_qx_conjugate.coeffs().transpose()<<endl;
    
    Eigen::Quaterniond qz_conjugate = q_z.conjugate();
    Eigen::Quaterniond qx_conjugate = q_x.conjugate();

    Eigen::Quaterniond qzc_qxc = qz_conjugate * qx_conjugate;
    cout<<"qzc * qxc : \n\t"<<qzc_qxc.coeffs().transpose()<<endl;
    return 0;
}

最后输出的结果为:

quaternion z : 
0.765367
0.765367
0.382683
 0.92388
quaternion x : 
 0.382683
-0.382683
 0.382683
  0.92388
qz_qx_conjugate : 
	     -1.5 -0.207107  -0.12132  0.707107
qzc * qxc : 
	-0.62132     -0.5 -1.29289 0.707107

可以看出来他们的实部是相等的,都是0.707107,但是虚部是不一样的,因为(1)中的叉乘项在分别取共轭后其实并没有改变.

参考文献

[1] B.Graf, Quaternions and dynamics ,2008

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值