Python(机器人模块):转换齐次变换(旋转)矩阵和欧拉或RPY角

1 投票
1 回答
1365 浏览
提问于 2025-04-17 00:20

我在使用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轴的旋转)。

撰写回答