matlab欧拉角,欧拉角转旋转矩阵(Matlab内部函数&公式实现)

一、根据公式,自己编写函数

4876027d5b6cc5165e25a6e8d4f530c5.png

S表示旋转顺序,我习惯上将‘XYZ’定义为“先旋转X,再旋转Y,最后旋转Z”,所以最后的R=Rz*Ry*Rx(特别注意这里!不同的地方表示的含义不一样,有些工具(比如Matlab)里面'XYZ',表示的是“先旋转Z,再旋转Y,最后旋转X”,所以最后的R=Rx*Ry*Rz)

9f80f10a837ec9ebb6b84d6a42cd96ac.png

注意:区分角度的单位是度还是弧度!deg2rad()是Matlab自带的角度转弧度的函数!

二、Matlab自带的函数eul2rotm()

官方文档:https://ww2.mathworks.cn/help/robotics/ref/eul2rotm.html

66470c19bf2d504a6e1880c77af4955a.png

特别注意红框里面的两处(之前想当然的认为Matlab里面的XYZ跟自己习惯的一样,然而并不是,英语好点的话也不会折腾这么久了......)

第一处:Matlab中S='XYZ'的意义是指“先旋转Z,再旋转Y,最后旋转X”;

第二处:调用函数的时候,参数1也就是eul(1*3的行向量)里面的三个数,顺序要跟S对应上,

S='XYZ'时,eul=[angleX angleY angleZ]

S='ZYX'时,eul=[angleZ angleY angleX]

......

三、关于Direction Cosine Matrix函数angle2dcm()

参考:https://en.wikiversity.org/wiki/PlanetPhysics/Direction_Cosine_Matrix

de0b26574edc33d9c51e07cf13b7f26e.png

R_dcm=angle2dcm(angleZ, angleY ,angleX,'ZYX');

R_rotm=eul2rotm(eul,'ZYX');(其中eul=[angleZ angleY angleX])

运行结果:

1bd62320b0fb8f9b4e37f52601e8a054.png

80cf24793ff06abebb70e7a0d6daf7ab.png

可以发现:二者是一个逆(正交单位阵,转置=逆)的关系,因此,如果eul2rotm结果描述的旋转是A->B的旋转,那么angle2dcm结果描述的是B->A的旋转!注意这一点即可!

参考:

[1]https://blog..net/zzcoming/article/details/52065276

[2]https://blog..net/u012423865/article/details/78219787

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值