Matlab angle2dcm不同定义

Matlab angle2dcm不同定义,matlab,rotation,rotational-matrices,euler-angles,Matlab,Rotation,Rotational Matrices,Euler Angles,我使用的是MATLAB函数angle2dcm,它给了我与预期不同的结果。通过深入研究代码(angle2dcm.m),我发现形成旋转矩阵的定义与标准定义不同 例如,旋转RxRyRz(即“xyz”顺序)定义为: % [ cy*cz, sz*cx+sy*sx*cz, sz*sx-sy*cx*cz] % [ -cy*sz, cz*cx-sy*sx*sz, cz*sx+sy*cx*sz] % [ sy, -c

我使用的是MATLAB函数angle2dcm,它给了我与预期不同的结果。通过深入研究代码(angle2dcm.m),我发现形成旋转矩阵的定义与标准定义不同

例如,旋转RxRyRz(即“xyz”顺序)定义为:

%     [          cy*cz, sz*cx+sy*sx*cz, sz*sx-sy*cx*cz]
%     [         -cy*sz, cz*cx-sy*sx*sz, cz*sx+sy*cx*sz]
%     [             sy,         -cy*sx,          cy*cx]
正常情况下应该是(请参考链接):

方向余弦矩阵和旋转矩阵的定义不同吗?
谢谢

这是符号约定的问题,因为这两种情况(MATLAB与您发布的链接)指的是相反的旋转顺序。如果您想使用MATLAB函数并继续使用您发布的链接中的约定,作为一种可能的解决方法,您可以使用“zyx”调用函数并反转所有角度的符号,即

 dcm = angle2dcm( -r1, -r2, -r3,'xyz');       *EDITED*
使用以下旋转矩阵(参见matlab文档)

如果这让人困惑,您甚至可以将所有内容包装在一个助手函数中,该函数为您执行符号和顺序反转,例如

 function dcm = angle2dcm_mines( r1, r2, r3);
 dcm = angle2dcm( -r1, -r2, -r3,'xyz');

有其他方法可以解决这个问题,但这应该是可行的

我已经为此奋斗了一段时间,多亏了这样的帖子,我(几乎)已经设法解决了这个问题。这是我的两便士,希望能有所帮助,有所回报

这是一种痛苦,因为有24套欧拉角应用选项(一般术语,但有各种变体,包括tait bryant、俯仰-偏航-滚转等),这取决于应用旋转的顺序、最后一次旋转是否与第一次旋转的轴相同以及它们是否是固有的(即帧旋转,随后围绕新帧应用旋转)或外部(所有旋转都围绕原始、固定/世界帧应用)。还有一些更常见的集合,如(外部)XYZ和ZXZ


需要注意的是,XYZ的旋转(也称为方向余弦)矩阵等效于(固有)zyx,这是一个常见规则(即切换第一个和最后一个旋转)。对于旋转矩阵,这通过转置和切换正弦函数的符号来体现。MATLAB使用内在旋转方法。注意,对于单个旋转,它们通过预乘法应用,第一个旋转是最右边。

快速注释:默认顺序对于Matlab angle2dcm函数为“zyx”。若要反转顺序,可以使用“xyz”。@linzhang.robot谢谢您的评论,我进行了编辑。希望现在一切正常。您好@TryHard,您能帮我解决dcm的此问题吗?
 function dcm = angle2dcm_mines( r1, r2, r3);
 dcm = angle2dcm( -r1, -r2, -r3,'xyz');