gpt4 book ai didi

c++ - 罗德里格斯转换为欧拉角,反之亦然

转载 作者:可可西里 更新时间:2023-11-01 18:00:26 47 4
gpt4 key购买 nike

我正在使用 solvePnP,我正在获取一个翻译 vector 。现在我需要将一些欧拉角与 solvePnP 的结果进行比较。我想/需要将欧拉角转换为“rodrigues”;

solvePnP 的平移 vector 是否等于欧拉角。翻译矩阵是唯一与罗德里格斯有关的东西吗?或者是否有与 3 个欧拉角完全不同的特殊罗德里格斯角?两者之间的数学如何?有没有我找不到的 OpenCV 函数?

最佳答案

首先,忘记平移 vector ,因为它与旋转无关:平移移动物体,旋转改变它们的方向。

罗德里格斯参数也称为axis-angle rotation .它们由 4 个数字 [theta, x, y, z] 组成,这意味着您必须围绕单位 vector v=[x, y, z]。看着cv::Rodrigues函数引用,OpenCV 似乎使用 Rodrigues 符号的“紧凑”表示作为具有 3 个元素的 vector rod2=[a, b, c],其中:

  • 要旋转的角度 theta 是输入 vector 的模 theta = sqrt(a^2 + b^2 + c^2)
  • 旋转轴 v 是归一化输入 vector :v = rod2/theta = [a/theta, b/theta, c/theta]

因此,solvePnP 的 Rodrigues vector 与 Euler angles 甚至没有一点关系。 符号,表示围绕 X、Y 和 Z 轴的组合的三个连续旋转。

如何比较两个旋转?这是一个很好的问题。 Euler- 和 Rodrigues- 表示都有奇点和其他问题。例如,如果您比较两个 Euler tern 或两个 Rodrigues 参数,它们可能看起来完全不同,但实际上代表几乎相同的旋转。如果您只需要检查两个旋转是否相同(或近似),您可以采用下一种方法:

  1. 将两个旋转转换为矩阵表示法(四元数也有效)
    • 可以使用 cv::Rodrigues 将 OpenCV Rodrigues vector 转换为矩阵功能
    • 关于将欧拉转换为矩阵,我建议你看看 conversions section来自 euclideanspace.com
  2. 从另一个旋转中“减去”一个旋转,即将一个与另一个的倒数连接起来
    • 使用旋转矩阵,将一个乘以另一个的转置(反向旋转)。零旋转是单位矩阵。
    • 使用四元数,将一个乘以另一个的复共轭(取反最后三个分量)。
  3. 检查结果是否接近零旋转:
    • 零旋转矩阵是恒等式。
    • 空四元数的第一个分量为 1 或 -1

关于c++ - 罗德里格斯转换为欧拉角,反之亦然,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12933284/

47 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com