2014-09-29 487 views
4

我有一个Android智能手机,其中包含油门传感器,指南针传感器和陀螺仪传感器我想用这个传感器来计算位移的距离。
如何在android智能手机中使用加速计传感器查找位移距离?

我已经尝试过的基本方法,即,

 
final velocity = initial velocity + (acceleration * time taken) 
distance = time taken * speed 

,但我无法得到正确的位移。每当我尝试相同的位移,我gettng不同的结果。

+2

它实际上不可能使用手机传感器进行位移计算。 这里是一个相关的问题:http://stackoverflow.com/questions/7829097/android-accelerometer-accuracy-inertial-navigation – JiTHiN 2014-09-29 04:32:59

+0

是否有任何其他具体的传感器有计算的距离。 @rIHaN JiTHiN – 2014-09-29 08:49:27

+0

您是否尝试过使用“Step Counter API”。它不完全是位移测量。但检查它是否有用。 – JiTHiN 2014-09-29 09:15:56

回答

4

你可能会寻找寻找的公式为:

这个等式(公制)正确的使用单位将

​​

例如,如果您从收集的数据加速度计的所有3个轴,您将执行以下操作以获得3D空间的加速度波形(原始值):

inputArray[i] = sqrt(X*X + Y*Y + Z*Z); 

收集数据后,只使用波形中将采集的采样数量(如果数值之间的延迟为1ms,则只使用1000个值)。

将这些值相加并除以样本数量以获得平均值(如果加速度计数据具有负值,您可能需要使所有值都为正),则可以在找到平均值之前使用此算法执行此操作。

for(i = 0; i < 1000; i++){ 
    if(inputArray[i] < 0){ 
     inputArray[i] = inputArray[i] - (inputArray[i]*2); 
    } 
} 

一旦你有加速平均输出,你需要执行上面的公式。

static double PI = 3.1415926535897932384626433832795; 
static double gravity = 9806.65; 

double Accel2mms(double accel, double freq){ 
    double result = 0; 
    result = (gravity*accel)/(2*PI*freq); 
    return result; 
} 

一个例子可以是,平均加速度是3 GS超过1秒在摆动:

注:此计算是基于正弦的波形,因此频率将是代表加速度计的物理移动的采样率

Accel2mms(3, 1); 

3 GS在1秒与1(在一个方向上摆动1)=4682.330468毫米/秒或4.7米的频率的不频率。

希望这是你想要的东西。

请记住,此计算基于正弦波形,但正在根据单个移动(频率1)进行调整,因此可能不太准确。但理论上应该工作。

+0

如果频率为0.5,该方法是否仍返回mm/s? – Ajay 2016-07-01 16:13:43

+0

我试图做更多的计算,尽管它会不太准确。 – Ajay 2016-07-01 16:19:17

+1

就像在帖子中说的那样,这个计算的结果在理论上是正确的,但频率为1,输入数据的准确性必须准确,以使结果准确。这个方程最初用于分析来自加速度计的波形,因此作为输入的频率为0.5会产生无用的结果,因为在该时间帧或距离内经历的总加速度可能不是线性的,所以加速周期不能减半。 – sp10acnFIFO 2016-07-01 16:26:08

0

作为@rIHaNJiTHiN在评论中提到,没有可靠的方法从二阶和三阶传感器(测量位移的衍生物,如速度和加速度)获得位移。

GPS是测量绝对位移的唯一方法,虽然它的精度和精度在短距离和短时间段内(在某些信号不好的地方)不是很高。

相关问题