【发布时间】:2020-04-20 19:08:37
【问题描述】:
我最近不得不将欧拉旋转速率转换为矢量角速度。 据我了解,在局部参考中,我们可以通过以下方式表达矢量角速度:
R = [rollRate, pitchRate, yawRate] (which is the correct order relative to the referential I want to use).
我也知道我们可以通过以下方式将角速度转换为给定时间步长的旋转(四元数):
alpha = |R| * ts
nR = R / |R| * sin(alpha) <-- normalize and multiply each element by sin(alpha)
Q = [nRx i, nRy j, nRz k, cos(alpha)]
当我为每个轴单独测试时,我发现了我完全期望的结果(即 1 个时间单位的 90° 俯仰/时间单位 => 90° 俯仰角)。
但是,当我使用两个轴作为旋转速率时,我并不完全理解结果:
例如,如果我使用 rollRate = 0, pitchRate = 90, yawRate = 90,对给定的时间步应用旋转并将得到的四元数转换回欧拉,我得到以下结果:
(ts = 0.1) Roll: 0.712676, Pitch: 8.96267, Yaw: 9.07438
(ts = 0.5) Roll: 21.058, Pitch: 39.3148, Yaw: 54.9771
(ts = 1.0) Roll: 76.2033, Pitch: 34.2386, Yaw: 137.111
我了解“平稳”连续旋转可能会在中途改变滚动组件。
但我不明白的是,在 90°/时间单位 pitchRate 加上 90°/时间单位 yawRate 的完整单位时间后,我最终得到了这些俯仰角和偏航角,为什么我仍然有滚动(我原以为它们会以 [0°, 90°, 90°] 结束。
我对我的轴 + 角度到四元数和我的四元数到欧拉公式都非常有信心,因为我已经对这些公式进行了广泛的测试(通过单元测试和现场测试),但是我不确定欧拉旋转速度到角速度的“转换”。
我的第一个赌注是我不明白欧拉旋转率轴如何相互作用,我的第二个赌注是欧拉旋转率和角速度矢量之间的这种“转换”是不正确的。
【问题讨论】:
标签: math 3d rotation quaternions euler-angles