2013-10-20 206 views
1
public void onSensorChanged(SensorEvent event) 
{ 
     // alpha is calculated as t/(t + dT) 
     // with t, the low-pass filter's time-constant 
     // and dT, the event delivery rate 

     final float alpha = 0.8; 

     gravity[0] = alpha * gravity[0] + (1 - alpha) * event.values[0]; 
     gravity[1] = alpha * gravity[1] + (1 - alpha) * event.values[1]; 
     gravity[2] = alpha * gravity[2] + (1 - alpha) * event.values[2]; 

     linear_acceleration[0] = event.values[0] - gravity[0]; 
     linear_acceleration[1] = event.values[1] - gravity[1]; 
     linear_acceleration[2] = event.values[2] - gravity[2]; 
} 

在上面的代碼中,什麼是重力?我該怎麼初始化它?從加速度計中去除重力...文檔代碼

回答

5

使用加速度計,您總是可以獲得大約1克的靜態加速度讀數,上面的代碼只是一個低通濾波器,可以隨時間消除這個靜態分量。每次讀取數據時,都會使用現有重力測量值的80%,再加上新讀數的20%來跟蹤測量值,以便靜態分量可以在以後刪除。

gravity數組初始化爲零值。但請注意,只有五個樣品被採集後,讀數纔會準確。您可能需要引入計數器,並在過濾器有機會穩定之前忽略讀數。

如果您的設備平放在桌子上,那麼沒有該代碼,您可以在Z軸上獲得恆定的1g讀數(用於最常見的加速度計安裝佈置)。使用代碼時,您應該讀取接近零的讀數,並在您讀取時只能看到讀數。

+0

太棒了!謝謝!!! –

相關問題