Matlab angle2dcm不同的定义

Matlab angle2dcm different definition

我正在使用 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]

而正常情况下应该是(请参考link): http://inside.mines.edu/fs_home/gmurray/ArbitraryAxisRotation/

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

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

 dcm = angle2dcm( -r1, -r2, -r3,'xyz');       *EDITED*

它使用以下旋转矩阵(参见 matlab 文档)

         [          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]

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

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

还有其他方法可以解决此问题,但应该可行。

我已经为此苦苦挣扎了一段时间,多亏了这样的帖子,我(差不多)设法解决了这个问题。这是我的两便士价值,我希望能有所帮助并回馈一些东西。

这很痛苦,因为有 24 组欧拉角应用选项(通用术语,但有各种变体,包括 tait-bryant、pitch-yaw-roll 等),具体取决于旋转的顺序被应用,无论最后一个旋转是否与第一个相同的轴以及它们是否是固有的(即框架旋转并且随后的旋转应用于新框架)或外部的(所有旋转都应用于原始, fixed/world 帧)。还有一些更常见的集合,例如(外部)XYZ 和 ZXZ。

重要的是要注意 XYZ 的旋转(又名方向余弦)矩阵等同于(固有)zyx,这是一个常见的规则(即交换第一个和最后一个旋转)。就旋转矩阵而言,这通过对其进行转置并切换 sin 函数的符号来体现。 MATLAB 使用固有旋转方法。请注意,就各个旋转而言,它们是通过预乘法应用的,第一个旋转在最右边。