2013-07-31 121 views
2

我想要動態檢測手部的動作並相應地修改聲音。手機處於固定的方向,不會改變。例如,我將手機放在伸直的手中,當它向右或向左移動時,我的音樂音量會動態變化;如果我上下移動播放變化的速度,並在某個中間角度移動,則會相應地改變速度和音量。我在做這些動作時繪製了加速度計數據,似乎有一些模式,但我不知道如何過濾這些數據。我看了很多帖子 - 高通/低通濾波器,卡爾曼濾波器,手勢識別器,但很難理解什麼是合適的方法。大多數帖子似乎都沒有動態檢測 - 但只有當某個手勢完成時纔會發現。我只需要使用加速計而不是陀螺儀和任何其他傳感器。這裏的正確方法是什麼?有沒有現有的庫可以做到這一點?使用加速度計進行手部動作的動態檢測

回答

0

,如果你的活動實現

SensorEventListener 

並使用變量

private SensorManager sensorManager; 
private Sensor mAccelerometer; 
在你的OnCreate

()實例化他們,這樣註冊監聽器:

sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); 
mAccelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); 
sensorManager.registerListener(this, mAccelerometer, 
       SensorManager.SENSOR_DELAY_FASTEST); 

和然後用這個方法得到加速度計數據

public void onSensorChanged(SensorEvent event) { 

     double x = event.values[0]; 
     double y = event.values[1]; 
     double z = event.values[2]; 
} 

,你可以把它從那裏取決於你從加速度計獲取的值,使更改音量或任何

+1

最重要的是,你必須在應用帶通濾波器傳感器數據,計算三個軸的合成矢量並確定運動方向。如果你需要精確的姿態估計,你應該選擇卡爾曼濾波器,否則只需要在x,y,z讀數上應用一個濾波器即可。 – metsburg

+0

謝謝!您能否詳細說明一下 - 爲什麼我需要帶通濾波器 - 看起來低通濾波器會消除較小的變化(噪聲)並使我保持平滑的趨勢。 – abhishek

+0

你可能想檢查這個鏈接,我不太瞭解過濾,我開始看它,因爲我想我讀錯了問題,我以爲你只是得到的數據,並從那裏,我從來沒有聽說過濾,http: //www.researchgate.net/post/Using_a_Kalman_filter_to_filter_noise_out_of_accelerometer_data – JRowan

相關問題