了解角速度及其应用

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

我最近不得不将欧拉旋转速率转换为矢量角速度。据我了解,在局部参考中,我们可以通过以下方式表达矢量角速度:

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°/时间单位的偏航率相结合后,我最终遇到了这些俯仰和偏航角,为什么我仍然有侧倾(我原以为它们会以[0°,90°,90°]结尾。

我对四元数的轴+角度以及四元数与欧拉公式都非常有信心,因为我已经对它们进行了广泛的测试(通过单元测试和现场测试),但是我不确定欧拉旋转到角速度“转换”的比率。

[我的第一个赌注是我不了解欧拉旋转速率轴如何相互相互作用,我的第二个赌注是,欧拉旋转速率和角速度矢量之间的这种“转换”是不正确的。

math 3d rotation quaternions euler-angles
1个回答
0
投票

欧拉角不是表示任意角度运动的好方法。它只是用于图形,游戏和机器人的简化。它们受到一些相当严格的限制,例如您的旋转仅由N空间中的ND个垂直轴组成。在现实世界中,旋转并不是这样工作的。在此球形端点的球形表示之上,它创建了许多奇点(您知道何时越过极点...)。

旋转运动类似于翻译:

position       speed                    acceleration
pos = Integral(vel) = Integral(Integral(acc))
ang = Integral(omg) = Integral(Integral(eps))

在某些更新计时器中可以重写为:

vel+=acc*dt; pos+=vel*dt;
omg+=eps*dt; ang+=omg*dt;

dt是经过的时间(定时器间隔)。

旋转的问题是您不能像平移一样叠加它。由于每个旋转都有自己的轴(并且不必对齐轴或居中),并且每个旋转也影响其他所有轴的方向,因此它们的顺序非常重要。最重要的是,还有陀螺力矩,使任何两个不平行轴的旋转产生第三次旋转。将所有这些放在一起,您突然会发现欧拉角与旋转的实际几何/物理不匹配。他们可以描述方向并在一定程度上伪造其旋转方向,但是一旦用于物理模拟,就不会期望具有真正的意义。

实际的仿真将需要由轴描述的旋转列表(不仅是方向,还包括原点),角速度(及其变化),并且在每个模拟步骤中,随着轴的变化,将重新计算轴(除非仅旋转一次)当下)。

这可以通过使用累积性homogenous transform matrices和增量旋转来完成。

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