如何在Android智能手机中使用加速计传感器找到位移距离?

时间:2014-09-29 04:28:18

标签: android accelerometer distance gyroscope compass

我有一个包含加速度传感器,指南针传感器和陀螺仪传感器的智能手机。我想用这个传感器计算位移距离。

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

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

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

2 个答案:

答案 0 :(得分:4)

您可能正在寻找的等式是:

Velocity = (Gravity*Acceleration)/(2*PI*freq)

正确使用此等式(公制)的单位

Gravity = mm/s squared = 9806.65
Acceleration = average acceleration over 1 second
Frequency = Hz (of the acceleration waveform over 1 second)

例如,如果您从加速度计的所有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;
}

一个例子可能是平均加速度在1秒内超过1 gs

注意:此计算基于正弦波形,因此频率代表加速度计的物理运动而非采样率的频率

Accel2mms(3, 1);

3秒超过1秒,频率为1(一个方向摆动1次)= 4682.330468 mm / s或4.7米。

希望这就像你正在寻找的东西。

请记住,此计算基于正弦波形,但适用于基于单个运动(频率1)进行计算,因此可能不是非常准确。但理论上应该有效。

答案 1 :(得分:0)

正如评论中提到的@rIHaNJiTHiN,没有可靠的方法来获得二阶和三阶传感器的位移(测量位移导数的传感器,如速度和加速度)。

GPS是测量绝对位移的唯一方法,尽管它的精度和准确度在短距离和短时间内都不是那么高(在某些地方信号不好)。