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

标签 android accelerometer distance gyroscope compass

我有一部包含加速器传感器、 compass 传感器和陀螺仪传感器的安卓智能手机。 我想用这个传感器计算位移的距离。

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

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

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

最佳答案

您可能正在寻找的方程式是:

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);

收集数据后,仅使用本应收集的波形中的样本量(如果值之间有 1 毫秒的延迟,则仅使用 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 秒内的平均加速度为 3 gs:

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

Accel2mms(3, 1);

1 秒内 3 gs,频率为 1(在一个方向上摆动 1 次)= 4682.330468 毫米/秒或 4.7 米。

希望这是您正在寻找的东西。

请记住,此计算基于正弦波形,但正在调整为基于单个运动(频率 1)进行计算,因此它可能不是很准确。但理论上应该可行。

关于android - 如何在 Android 智能手机中使用加速度计传感器查找位移距离?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26092570/

相关文章:

JavaScript addEventListener 延迟

android - 使用 Android 检测人的跌倒

mysql按距离搜索顺序很慢

java - 让一个 View 覆盖android中的所有其他 View ?

Android 关闭键盘 "naturally"

android - 如何使用GreenDAO生成Content Provider?

android - Kony - Ant 构建错误

android - 屏幕关闭时是否可以检测到运动?

python - 有没有办法在python中测量多维空间中两个分布之间的距离?

string - 比较字符串的相似性?