在 Peter Corke 的 Robot Book 中,相同的函数 `rpy2r()` 会产生不同的结果?

问题描述 投票:0回答:1

enter image description here

但是matlab结果:

>> R2=rpy2r(0.1,0.2,0.3)

R2 =

    0.9363   -0.2751    0.2184
    0.2896    0.9564   -0.0370
   -0.1987    0.0978    0.9752

>> [theta,v]=tr2angvec(R)

theta =

    0.3655


v =

    0.1886    0.5834    0.7900

>> [v,lambda]=eig(R)

v =

   0.6944 + 0.0000i   0.6944 + 0.0000i   0.1886 + 0.0000i
  -0.0792 - 0.5688i  -0.0792 + 0.5688i   0.5834 + 0.0000i
  -0.1073 + 0.4200i  -0.1073 - 0.4200i   0.7900 + 0.0000i


lambda =

   0.9339 + 0.3574i   0.0000 + 0.0000i   0.0000 + 0.0000i
   0.0000 + 0.0000i   0.9339 - 0.3574i   0.0000 + 0.0000i
   0.0000 + 0.0000i   0.0000 + 0.0000i   1.0000 + 0.0000i

如图所示,相同的函数给出不同的输出,有其他人发现同样的问题吗?

matlab robotics
1个回答
0
投票

我看不懂中文,但显然函数

tr2angvec
只返回一个旋转角度及其对应的向量。 Matlab 的
eig
返回特征向量的完整矩阵和具有特征值的对角矩阵。

因此,

eig
给出的最后一列是
tr2angvec
提供的向量。请注意,
theta=0.3655
而实特征值是 1(因为旋转不会改变长度)。然后请注意,虚部特征值的实部是
0.9339
,以及
acos(0.9339)=0.365626358 rad

然后回想一下旋转矩阵的虚部特征值是

cos(theta) + i sin(theta)
cos(theta) - i sin(theta)

© www.soinside.com 2019 - 2024. All rights reserved.