如果您有加速度计坐标中的样本值列表。
accel[0]= {accelX0, accelY0, accelZ0}
...
accel[t]= {accelXt, accelYt, accelZt}
...
accel[tMax] = {accelXmax, accelYmax, accelZmax}
其中t是时间戳。 如果用户朝着某个方向进行短暂而快速的移动,是否有办法了解他所采取的方向以及0和tMax之间的距离是多少? 我是否必须沿每个轴集成两次并选择最大结果? 我不需要特别的精度和准确度,只需要在现实生活中进行测试的通用值。我不会使用GPS。 我没有使用特定的语言或操作系统,我只是对算法感兴趣。
答案 0 :(得分:2)
将加速度矢量积分一次将为您提供速度,第二次积分将为您提供距离(更好地使用Runge-Kutta方法或类似方法)。
如果你步行10米,停下来,顺时针转90度,再走10米,加速度计就不能说你偏航了。通过手机陀螺仪传感器的测量结果,最好用磁力计的测量值来获得传感器融合*加速度计测量所需的方向。
请注意,这些传感器非常不准确,不适合导航,结果会很快漂移。
*搜索IMU sensor fusion
(惯性测量单位),6 DOF sensor fusion
(不使用磁力计或使用9)。
答案 1 :(得分:1)
你必须将加速度矢量(3D)与“时间”相比进行两次整合。
对于每个测量计算:
速度:= acc * delta_t
距离:=速度* delta_t
和所有距离。这样可以移动整个距离。
delta_t是两次测量之间的时间间隔。如果您的测量数据未在时间上等距采样(即不是在常规时间间隔),您可以采用“下一次测量的时间”和“先前测量的时间”的平均间隔
所有计算均以3D方式完成(即对于并行的x,y,z分量)
答案 2 :(得分:1)
您的问题的解决方案涉及两个必须处理的单独部分:
补偿数字加速度计的局限性。
Acceleration to distance
:这很简单 - 只需按时间整合两次:
选择一个间隔(如10ms,20ms等)并每隔一段时间从加速度计收集一次数据;这是你的DT。
做数学运算:
示例代码:
while(1)
{
start = getTimeinMS();
velocity += acceleration *DT;
displacement += velocity *DT;
stop = getTimeinMS()
While (stop-start < DT)
{
usleep(100)
}
}
处理数字加速度计:第二部分有点棘手。你必须理解并补偿两件事:
加速度计是非常嘈杂的设备
惯性不是你的朋友;让我解释一下 - 如果你绘制加速度计输出,你会注意到从左到右的运动将是一个正弦波。左右左移也是一个正弦波。而且你没有简单的方法知道你何时停止左右移动并从右开始。我假设你不想要那个并且正在寻找左右移动的简单位移(或左右相同的逻辑)。
如果您理解并接受我到目前为止所说的内容,您只需处理加速度计噪音 - 这不是一项非常艰巨的任务,因为您可以找到有关数字滤波器的大量信息和示例。你可以从rolling average filter开始,如果需要,可以在以后更实用。
希望这有帮助。