将旋转向量转换为旋转矩阵的罗德里格斯公式

问题描述

我正在尝试理解 3D 旋转向量到旋转矩阵的转换。 假设我有一个 3D 旋转向量 [a b g]。从 Trucco 等人的“3D 计算机视觉介绍技术”中,我相信我可以将其表示为每个轴 x、y、z 的旋转矩阵的乘积。

enter image description here

但我更经常看到使用罗德里格斯公式将旋转向量转换为矩阵,该公式在下图中给出了 A.17

enter image description here

我正在 Matlab 中测试这些(我在执行 Rodrigues 的 Matlab 图像处理工具箱中使用内置的 rotationVectorToMatrix 函数),并且我获得的小旋转结果彼此非常接近,例如

alpha = 1 * (pi/180);
beta = 2 * (pi/180);
gamma = 3 * (pi/180); 
R = [(cos(beta) * cos(gamma)) (-cos(beta)*sin(gamma)) sin(beta);
 sin(alpha) * sin(beta) * cos(gamma) + cos(alpha)*sin(gamma) ...
  -sin(alpha) * sin(beta) * sin(gamma) + cos(alpha) * cos(gamma) ...
  -sin(alpha) * cos(beta); ...
  -cos(alpha)*sin(beta)*cos(gamma) + sin(alpha)*sin(gamma) ...
  cos(alpha) * sin(beta) * sin(gamma) + sin(alpha) * cos(gamma) ...
  cos(alpha) * cos(gamma)]

 Rm = rotationVectorToMatrix([alpha beta gamma])'

我明白

R =

    0.9980   -0.0523    0.0349
    0.0529    0.9984   -0.0174
   -0.0339    0.0193    0.9985
Rm = 
    0.9980   -0.0520    0.0353
    0.0526    0.9985   -0.0165
   -0.0344    0.0184    0.9992

但是随着我的角度变大,它们有点发散,例如如果我这样做

alpha = 10 * (pi/180);
beta = 20 * (pi/180);
gamma = 30 * (pi/180);

我明白

R =

    0.8138   -0.4698    0.3420
    0.5438    0.8232   -0.1632
   -0.2049    0.3188    0.8529


Rm =

    0.8089   -0.4578    0.3689
    0.5166    0.8530   -0.0742
   -0.2807    0.2506    0.9265

我真的只是想在这里更好地理解,这些从旋转向量转换为矩阵的方法是否等效?我应该一直使用罗德里格斯方法吗?如果是为什么?感谢您的帮助。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)