首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Matlab angle2dcm不同定义

Matlab angle2dcm不同定义
EN

Stack Overflow用户
提问于 2015-03-28 18:20:46
回答 2查看 2.2K关注 0票数 2

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

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

代码语言:javascript
复制
%     [          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/

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-29 18:38:40

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

代码语言:javascript
复制
 dcm = angle2dcm( -r1, -r2, -r3,'xyz');       *EDITED*

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

代码语言:javascript
复制
         [          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]

如果这让您感到困惑,您甚至可以将所有内容都封装在一个帮助函数中,该函数为您进行符号和顺序反转,如下所示

代码语言:javascript
复制
 function dcm = angle2dcm_mines( r1, r2, r3);
 dcm = angle2dcm( -r1, -r2, -r3,'xyz');

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

票数 0
EN

Stack Overflow用户

发布于 2016-09-14 11:43:21

我已经和这件事斗争了一段时间了,多亏了这样的帖子,我已经(差不多)把我的头绕过去了。这是我的两便士价值,我希望能有所帮助,并给予一些回报。

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

需要注意的是,XYZ的旋转(也称方向余弦)矩阵等价于(内禀) zyx,这是一个共同的规则(即切换第一轮和最后一轮)。在旋转矩阵方面,这表现为它的转置和转换sin函数的符号。MATLAB采用了内禀旋转方法。注意,就单个旋转而言,它们是以预乘的方式应用的,第一个旋转是最右边的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29320856

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档