我有一部安卓智能手机,其中包含加速度传感器、指南针传感器和陀螺仪传感器。
我想使用这些传感器计算位移距离。
我已经尝试了基本方法,即:
最终速度 = 初始速度 + (加速度 × 时间) 距离 = 时间 × 速度
但是我无法得到正确的位移距离。每次尝试相同的位移距离时,我都会得到不同的结果。
我有一部安卓智能手机,其中包含加速度传感器、指南针传感器和陀螺仪传感器。
我想使用这些传感器计算位移距离。
我已经尝试了基本方法,即:
最终速度 = 初始速度 + (加速度 × 时间) 距离 = 时间 × 速度
但是我无法得到正确的位移距离。每次尝试相同的位移距离时,我都会得到不同的结果。
您可能正在寻找的方程式是:
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)
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;
}
注意:此计算基于正弦波形,因此频率代表的是加速器的物理运动而非采样率的频率。
Accel2mms(3, 1);
每秒3个1秒内的振荡,频率为1(一个方向上的一次摆动)= 4682.330468毫米/秒或4.7米。
希望这是你想要的内容。
请注意,此计算基于正弦波形,但正在适应根据单个运动(频率1)进行计算,因此可能不太准确。但理论上应该有效。