我正在阅读偏航,俯仰,滚转,旋转矩阵,四元数和加速度。这些读数的频率为20(每秒)。它们是从移动设备收集的,移动设备在3D空间中从一个位置移动到另一个位置。
我通过将逆矩阵乘以起始位置来设置参考平面。其余的读数是通过将第一个作为参考读数来考虑的。现在我想将这些读数转换为3D笛卡尔系统。
如何转换它?有人可以帮忙吗?
答案 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
然后,因为您将l
和a_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} }。
所以我很确定它与实际位置相差甚远。你甚至不得不考虑到它应该是速度可能不是零!
但是那个说法,我真的很想知道你实现它后所获得的精确度,这就是我一直在尝试它的原因。