Android感應器—Motion Sensor(二)

來源:互聯網
上載者:User

Android開源項目的感應器

Android開源項目(AOSP)提供了三個基於軟體的移動感應器:重力感應器、線性加速度感應器和旋轉向量感應器。這三個感應器在Android4.0中被更新,並且都使用陀螺儀(其它感應器除外)來改善穩定性和效能。如果你想嘗試這些感應器,可以通過使用getVendor()方法和getVersion()方法來識別它們(供應商是:Google Inc;版本號碼是:3)。通過供應商和版本號碼來識別這些感應器是必須的,因為Android系統認為這些感應器是第二感應器。例如,如果裝置製造商提供了他們自己的重力感應器,那麼AOSP的重力感應器會作為第二重力感應器。這三個感應器都依賴陀螺儀:如果裝置上沒有陀螺儀,這些感應器不會顯示,並不可使用。

使用加速度感應器

加速度感應器測量作用於裝置的加速度,包括重力作用。下列代碼顯示了如何獲得預設的加速度感應器的一個執行個體:

private SensorManager mSensorManager;

private Sensor mSensor;

 
...

mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);

mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

從概念上,加速度感應器通過測試作用於感應器本身的作用力(Fs),並使用下列公式來判斷作用於裝置的(Ad)加速度:

Ad = - ∑Fs / mass

但是,重力作用始終會影響下列公式的測量結果:

Ad = -g - ∑F / mass

由於這個原因,當裝置位於案頭(並沒有加速度)時,加速度感應器的讀取結果時g = 9.81 m/s2。同樣,當裝置自由落體運動時,因為快速向下的加速度是:9.81
m/s2,所以加速度感應器讀取的結果是:g = 0 m/s2。因此要測量裝置的實際加速度,重力作用的影響必須要從加速度感應器資料中刪除。這種問題可以通過高通濾波來實現。相反,低通濾波能夠被用來隔離重力作用。下面的樣本示範了如何做這件事情:

public void onSensorChanged(SensorEvent event){

 
// In this example, alpha is calculated as t / (t + dT),

 
// where t is the low-pass filter's time-constant and

 
// dT is the event delivery rate.

 

 
final float alpha = 0.8;

 

 
// Isolate the force of gravity with the low-pass filter.

 
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];

 

 
// Remove the gravity contribution with the high-pass filter.

 
linear_acceleration[0] = event.values[0] - gravity[0];

 
linear_acceleration[1] = event.values[1] - gravity[1];

 
linear_acceleration[2] = event.values[2] - gravity[2];

}

注意:你能夠使用不同的技術來過濾感應器資料。上述的程式碼範例使用了一個簡單的過濾器常量(alpha)來建立一個低通濾波器。該濾波器常量源自時間常量(t),它粗略的表述了過濾器添加給感應器事件的延遲和感應器事件發送頻率(dt)。為了示範,範例程式碼使用一個0.8的alpha值。如果你要使用這種濾波方法,你需要根據實際情況選擇不同的alpha值。

加速度感應器使用標準的感應器器座標系統。在實踐中,當裝置以它自然的方向被平方在案頭時,下列條件是適用的:

1. 如果在左邊推動裝置(讓它向右移動),那麼X軸的加速度值就是正值;

2. 如果在底部推動裝置(讓它向上移動),那麼Y軸的加速度值就是正值;

3. 如果向著天空,用A
m/s2 的加速度來推動裝置,那麼Z軸的加速度值就是A+9.81,它對應了裝置的加速度(+A
m/s2)減去重力作用(-9.81 m/s2)。

4. 靜止的裝置的有一個+9.81的加速度值,它對應裝置的加速度(0 m/s2減去重力作用,也就是-9.81 m/s2)。

通常,加速度感應器是一種用於監視裝置移動的比較好的感應器。幾乎每種Android手持功能和平板電腦都有加速度感應器,而且它的能耗要比其他的移動感應器要低10倍。唯一的缺點是,你要實現低通和高通濾波來消除重力作用和減少噪音的影響。

Android SDK提供了一個如何使用加速度感應器的樣本程式(Accelerometer Play)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.