从三维变换中提取滚俯仰偏航转角

125次观看(过去30天)
我正在寻找一种方法来提取旋转角度(滚,俯仰和偏航)从一个变换矩阵返回:
T = imregtform(移动的,固定的,仿射的,优化器,度量);
到目前为止,我已经尝试了这个功能
tform2eul (t.T)
但'ZYX'或'ZYZ'或'XYZ'(即像tform2eul(t.T,'ZY' x ')等)似乎都没有返回预期的结果。
是否有一个内置函数像'getRollPitchYaw'或类似的东西?如果没有,你有什么建议?
并不是说矩阵在齐次坐标中是4x4(不是3x3矩阵!)
1评论
大卫Goodmanson
大卫Goodmanson 2021年10月1日
你对旋转轴和旋转矩阵的乘法顺序有什么先验知识吗?(我认为是左上3x3子矩阵)

登录评论。

答案(3)


马特·J
马特·J 2021年10月1日
编辑:马特·J 2021年10月1日
quadricFit 类在这个文件交换包
有静态方法来做这件事。的例子。
Tyaw = quadricFit.R3d(45岁[0,0,1])%45度偏航变换
Tyaw = 3×3
0.7071 -0.7071 0 0.7071 0.7071 000 1.0000
Tpitch = quadricFit.R3d(20日[1 1 0])%20度螺距变换
Tpitch = 3×3
0.9698 -0.0302 0.2418 -0.0302 0.9698 0.2418 -0.2418 0.9397
ypr = quadricFit.rot2ypr (Tpitch * Tyaw)恢复偏航/俯仰/滚转角度
ypr = 1×3
45 20 0
4评论

登录评论。


大卫Goodmanson
大卫Goodmanson 2021年10月9日
编辑:大卫Goodmanson 2021年10月9日
你好,“在”
下面是从下面定义的三维旋转矩阵中找到三个旋转角度th1,th2,th3的一个版本。
角th1和角th3的角度范围从-180到180,但对于tait-bryan角th2限制在-90
当th2在其范围的末端时,代码不会直接处理奇异情况。我相信那是万向节锁定的情况(阿波罗13号!)然而,如果你用已知的角度构造一个矩阵R,看看答案有多一致,在任何角度上有分歧,那么th2必须在范围的一端或另一端,大约是10^-4度。
函数theta = anglesR(R,str)
%解一个三维旋转矩阵R,其形式为Ra(th1)*Rb(th2)*Rc(th3)
角th1,th2,th3的%;其中每一个a bc都是x y z中的一个。
STR是一个由三个字母组成的旋转轴字符串,例如'yzx'。
%不允许沿着同一轴连续旋转,例如'xxy'。
%第一次和第三次旋转沿不同的轴,如'yzx'是tait-bryan,
%沿同一轴,如'xzx'是欧拉。一共有12种可能。
输出为向量[th1 th2 th3],角度为角度,
%与-180<(th1,th3)<180;-90
%见下面的角度限制和矩阵Rx,Ry,Rz
= 0 (1,3);
%相似度变换矩阵
By = [0 0 1;0 -1 0;1 0 0];% x<——>z y(-th)——>y(-th)
Ry90 = [0 0 1;0 1 0;-1 0 0];% y旋转90度
C = [0 0 1;1 0 0;0 10 0;];% cycic, x—>y—>z—>x
Signy = 1;
%转化为RaRyRb
如果str (2) = =“x”
R = c *R/ c;
elseifstr (2) = =“z”
R = c \R* c;
结束
% tait-bryan,转换成RxRyRz
如果所有(str = =“xzy”) | (str = =“yxz”) | (str = =“zyx股票”
R = By*R/By;
Signy = -1;
结束
% euler,转换为RxRyRx
如果所有(str = =“xzx”) | (str = =“yxy”) | (str = =之一的zyz”
R = Ry90*R/Ry90;
结束
如果str (1) ~ = str (3)% tait-bryan
theta(2) = signy*asind(R(1,3));
theta(1) = atan2d(-R(2,3),R(3,3));
theta(3) = atan2d(-R(1,2),R(1,1));
其他的%欧拉
theta(2) = acosd(R(1,1));
theta(1) = atan2d(R(2,1),-R(3,1));
theta(3) = atan2d(R(1,2), R(1,3));
结束
结束
%物体坐标的旋转。逆时针方向
%旋转向下看旋转轴向上出页面。
% [1 0 0 [c 0 s [c -s 0 .
% Rx = 0 c -s Ry = 0 1 0 Rz = s c 0
% 0 s c] -s 0 c] 0 0 1]
% t-bryan
% [c2c3 -c2s3 s2 .
%。-s1c2
%。c1c2]
%欧拉RxRyRx
% [c2 s2s3 s2c3]
% s1s2 . .
% -c1s2 . .]

标签

s manbetx 845

社区寻宝

在MATLAB Central中找到宝藏,并发现社区如何帮助您!

开始狩猎!