2014-09-29 490 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是測量絕對位移的唯一方法,雖然它的精度和精度在短距離和短時間段內(在某些信號不好的地方)不是很高。

相關問題