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

您所在的位置:网站首页 rotate函数matlab自带函数 matlab欧拉角,欧拉角转旋转矩阵(Matlab内部函数&公式实现)

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

2024-01-15 01:47| 来源: 网络整理| 查看: 265

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

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



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3