我正在读取偏航、俯仰、翻滚、旋转矩阵、四元数和加速度。这些读数的频率为20次/秒。它们是从移动设备收集的,该设备在3D空间中从一个位置移动到另一个位置。
我通过将逆矩阵乘以起始位置来设置参考平面。其余的读数是通过将第一个读数视为参考读数来获取的。现在我想将这些读数转换为3D笛卡尔系统。
如何转换?有人可以帮忙吗?
我通过将逆矩阵乘以起始位置来设置参考平面。其余的读数是通过将第一个读数视为参考读数来获取的。现在我想将这些读数转换为3D笛卡尔系统。
如何转换?有人可以帮忙吗?
基本上,偏航角、俯仰角和翻滚角是欧拉角,它们可以帮助你获得旋转矩阵。四元数与之等效,使用它们也可以计算所需的旋转矩阵。
如果你有每个时刻i在l=20秒
间隔内的旋转矩阵R_i
。那么这些旋转是相对于应用在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
可以表示为:`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|| <= 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)
a_i = a_i + b_i
。