Python(机器人模块):转换齐次变换(旋转)矩阵和欧拉或RPY角
我在使用Python的机器人工具箱(具体来说是机器人模块)时,感到非常困惑,不知道该如何理解以下的转换结果(我以前做过类似的事情,通常都能搞明白……)。
我对x轴进行简单的phi=PI/10旋转,得到了以下的(3x3)旋转矩阵:
R =
[ 1. 0. 0. ]
[ 0. 0.99609879 -0.08824514]
[-0. 0.08824514 0.99609879]]
(其中0.996..是cos(phi),0.0882..是sin(phi))
对应的(4x4)齐次变换矩阵是:
T = | R 0 | =
| 0 1 |
[[ 1. 0. 0. 0. ]
[ 0. 0.99609879 -0.08824514 0. ]
[-0. 0.08824514 0.99609879 0. ]
[ 0. 0. 0. 1. ]]
将T转换为角度表示后,得到了以下结果:
RPY(滚转、俯仰、偏航)角(分别围绕z、y和x轴旋转,我猜是这样,……):
print robot.tr2rpy(T)
[[ 0. 0. 0.08836007]]
问题是:为什么x轴的旋转会是最后一个元素(而不是第一个)……?
进一步:
欧拉角(分别围绕x、y和z轴旋转,我猜是这样,……):
print robot.tr2eul(T)
[[-1.57079633 0.08836007 1.57079633]]
(= [[ -PI/4, sin(phi), PI/4 ]] )
问题是:我的理解(依次围绕x、y、z轴旋转)告诉我结果完全错误……?
我错过了什么?谢谢。
-- Henk
1 个回答
0
解决方案:
对于连续的角度,a[0], a[1], a[2],
1) 对于欧拉角来说,这些是围绕Z-Y-Z轴的连续旋转;
2) 对于RPY角度来说,这些是围绕Y(偏航)-P(俯仰)-R(滚转)轴的连续旋转(也就是围绕Z-Y-X轴的旋转)。