我正在使用MATLAB函数angle2dcm,这给了我不同的结果,我所期望的。通过深入研究代码(angle2dcm.m),我发现形成旋转矩阵的定义不同于标准的。
例如,旋转Rx_Ry_Rz (即“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]通常情况下,它应该是(请参阅链接):home/gmurray/ArbitraryAxisRotation/
方向余弦矩阵和旋转矩阵的定义不同吗?谢谢!
发布于 2015-03-29 18:38:40
这是一个符号约定的问题,因为这两种情况(MATLAB相对于您发布的链接)指的是相反的旋转顺序。如果您想使用MATLAB函数并继续使用您发布的链接中的约定,作为一种可能的解决办法,您可以使用“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');还有其他方法可以解决这个问题,但这应该是可行的。
发布于 2016-09-14 11:43:21
我已经和这件事斗争了一段时间了,多亏了这样的帖子,我已经(差不多)把我的头绕过去了。这是我的两便士价值,我希望能有所帮助,并给予一些回报。
这是一个痛苦,因为有24套选择应用欧拉角(一般术语,但有各种变体,包括泰特-布莱恩特,俯仰偏航滚等等)。取决于应用旋转的顺序,最后一次旋转是否与第一次旋转为同一轴,以及它们是否是固有的(即框架旋转和随后的旋转适用于新框架)或外部(所有旋转都适用于原始的、固定的/世界框架)。还有一些更常见的集合,如(外部) XYZ和ZXZ。
需要注意的是,XYZ的旋转(也称方向余弦)矩阵等价于(内禀) zyx,这是一个共同的规则(即切换第一轮和最后一轮)。在旋转矩阵方面,这表现为它的转置和转换sin函数的符号。MATLAB采用了内禀旋转方法。注意,就单个旋转而言,它们是以预乘的方式应用的,第一个旋转是最右边的。
https://stackoverflow.com/questions/29320856
复制相似问题