欧拉角与四元数之间的相互转换

欧拉角到四元数

将旋转分为三次,方向分别为[1, 0, 0],[0, 1, 0]与[0, 0, 1],角度为α,β与γ,则相对应的四元数分别如下所示

将三个四元数相乘可得到坐标经过三次旋转之后所得到的位置四元数表示形式,具体如下

则从欧拉角到四元数转换所对应形式如上所示。

MATLAB实现代码如下

function quat = euler2quat(phi, theta, psi)
    quat = [cos(psi/2) * cos(theta/2) * cos(phi/2) + sin(psi/2) * sin(theta/2) * sin(phi/2);
           (cos(psi/2) * cos(theta/2) * sin(phi/2) - sin(psi/2) * sin(theta/2) * cos(phi/2)) * 1i;
           (cos(psi/2) * sin(theta/2) * cos(phi/2) + sin(psi/2) * cos(theta/2) * sin(phi/2)) * 1i;
           (sin(psi/2) * cos(theta/2) * cos(phi/2) - cos(psi/2) * sin(theta/2) * sin(phi/2)) * 1i];
end

 四元数到欧拉角

欧拉角形式下坐标旋转矩阵如下

四元数形式下坐标旋转矩阵如下

将两个形式进行对应,可得到

MATLAB代码实现如下

function [phi, theta, psi] = quat2euler(quat)
    Ita = quat(1);
    eps1 = imag(quat(2));
    eps2 = imag(quat(3));
    eps3 = imag(quat(4));
    
    phi = atan2(2 * (eps2 * eps3 + Ita * eps1), 1 - 2 * (eps1.^2 + eps2.^2));
%     phi = atan(2 * (eps2 * eps3 - Ita * eps1) / (1 - 2 * (eps1.^2 + eps2.^2)));
    theta = asin(2 * (Ita * eps2 - eps1 * eps3));
    psi = atan2(2 * (eps1 * eps2 + Ita * eps3), 1 - 2 * (eps2.^2 + eps3.^2));
%     psi = atan(2 * (eps1 * eps2 - Ita * eps3) / (1 - 2 * (eps2.^2 + eps3.^2)));
end

测试

先将指定四元数转换为欧拉角

quat = [0.9437; 0.1277i; -0.1449i; 0.2685i];

[phi, theta, psi] = quat2euler(quat);

结果如下

再将所生成欧拉角转换为四元数

quat1 = euler2quat(phi, theta, psi)

结果如下

 初始化四元数与转换生成四元数对比一致

 

  • 9
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值