如何将偏航,俯仰,滚转和加速度值转换为笛卡尔系统?

时间:2012-02-29 10:28:13

标签: math

我正在阅读偏航,俯仰,滚转,旋转矩阵,四元数和加速度。这些读数的频率为20(每秒)。它们是从移动设备收集的,移动设备在3D空间中从一个位置移动到另一个位置。

我通过将逆矩阵乘以起始位置来设置参考平面。其余的读数是通过将第一个作为参考读数来考虑的。现在我想将这些读数转换为3D笛卡尔系统。

如何转换它?有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

好吧,基本上偏航,俯仰和滚动都是euler angles,你已经得到了你的旋转矩阵。 四元数与此相符,用它们你也可以计算出你需要的旋转矩阵。

如果R_i间隔内的每个时刻i都有旋转矩阵l=20secs。这些旋转相对于R_(i-1)处应用的旋转,您可以计算相对于第一个位置的旋转。所以A_i = R_1*...*R_i但毕竟你也可以安全地保护新的旅行方向(保险箱计算)。

首先,假设行进方向为d_0 = (1,0,0)。您可以按d_i = R_i*d_(i-1)计算下一个(始终为d_(i-1),因为它可能因错误而变得更小或更大)。第一个位置为p,您的起始速度为v_0 = (0,0,0),最后加速度为a_i。您需要计算每时刻的矢量速度v_i

v_i = v_(i-1) + l*a_i*A_i*d_0 = v_(i-1) + l*a_i*d_i

现在你基本上知道你在哪里移动,以及你使用什么样的速度,所以你p_i的位置i由下式给出:

`p_i = p_0 + l * ( v_1 + v_2 + ... + v_i)`

单位:

a_i = [m/s^2]^3
v_i = [m/s]^3
p_i = [m]^3  

精密

现在有些人指出你的位置计算的精确度(如果你想知道它有多好用)。假设您有错误e>= ||R_i*v-w||(其中w是正确的向量)。在数据中,您可以计算旋转矩阵。您的错误正在倍增,因此i时刻的错误为e_i <= e^i 然后,因为您将la_i应用于它,它变为:

f_i <= l*a_i*e^i

但是当你加快速度时,你也在加错,所以现在是g_i <= f_1+...+f_i。是的,你也加起来的位置(两个总和超过i):

h_i <= g_1+...+g_i = ΣΣ (l*a_i*e^i) = l* ΣΣ (a_i*e^i)

所以这基本上是从您的位置p_i到正确位置w||p_i - w|| <= h_i)的最大差异。
这仍然没有考虑到你没有从你的设备获得正确的加速度(我不知道它们通常如何做到这一点),因为正确的是:

a_i = ||∫a_i(t) dt||  (where a_i(t) is vectorial now)

你需要计算方向上的差异(你的旋转矩阵):

 Δd_i = (∫a_i(t) dt)/a_i   (again a_i(t) is vectorial)

除了你从你的设备(以及浮点运算)轮换中的错误中得到的错误之外,你的加速错误,我现在不会计算,但你会替换{{1} }。

所以我很确定它与实际位置相差甚远。你甚至不得不考虑到它应该是速度可能不是零!

但是那个说法,我真的很想知道你实现它后所获得的精确度,这就是我一直在尝试它的原因。