我有一个Android智能手机,其中包含油门传感器,指南针传感器和陀螺仪传感器。 我想用这个传感器来计算位移的距离。
如何在android智能手机中使用加速计传感器查找位移距离?
我已经尝试过的基本方法,即,
final velocity = initial velocity + (acceleration * time taken) distance = time taken * speed
,但我无法得到正确的位移。每当我尝试相同的位移,我gettng不同的结果。
我有一个Android智能手机,其中包含油门传感器,指南针传感器和陀螺仪传感器。 我想用这个传感器来计算位移的距离。
如何在android智能手机中使用加速计传感器查找位移距离?
我已经尝试过的基本方法,即,
final velocity = initial velocity + (acceleration * time taken) distance = time taken * speed
,但我无法得到正确的位移。每当我尝试相同的位移,我gettng不同的结果。
你可能会寻找寻找的公式为:
这个等式(公制)正确的使用单位将
例如,如果您从收集的数据加速度计的所有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.5,该方法是否仍返回mm/s? – Ajay 2016-07-01 16:13:43
我试图做更多的计算,尽管它会不太准确。 – Ajay 2016-07-01 16:19:17
就像在帖子中说的那样,这个计算的结果在理论上是正确的,但频率为1,输入数据的准确性必须准确,以使结果准确。这个方程最初用于分析来自加速度计的波形,因此作为输入的频率为0.5会产生无用的结果,因为在该时间帧或距离内经历的总加速度可能不是线性的,所以加速周期不能减半。 – sp10acnFIFO 2016-07-01 16:26:08
作为@rIHaNJiTHiN在评论中提到,没有可靠的方法从二阶和三阶传感器(测量位移的衍生物,如速度和加速度)获得位移。
GPS是测量绝对位移的唯一方法,虽然它的精度和精度在短距离和短时间段内(在某些信号不好的地方)不是很高。
它实际上不可能使用手机传感器进行位移计算。 这里是一个相关的问题:http://stackoverflow.com/questions/7829097/android-accelerometer-accuracy-inertial-navigation – JiTHiN 2014-09-29 04:32:59
是否有任何其他具体的传感器有计算的距离。 @rIHaN JiTHiN – 2014-09-29 08:49:27
您是否尝试过使用“Step Counter API”。它不完全是位移测量。但检查它是否有用。 – JiTHiN 2014-09-29 09:15:56