簡體   English   中英

消除加速度計讀數中的重力影響

[英]Removing gravity effect from accelerometer readings

我正在開發一個應用程序,其中使用了Accelerometer來感測線性加速度 ,但是一段時間后,我知道Accelerometer不會顯示線性加速度( 也對其產生重力影響 )。

因此,為了消除重力,我嘗試了一些方法,並得出結論,必須設計一個過濾器。

為了設計過濾器,我嘗試了以下代碼。

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

摘自Android Developers

現在,我在上面的代碼中遇到了一些問題:

  1. 什么是alpha,t和dt?
  2. 如何獲得t和dt的值以及如何計算它們?
  3. 還讓我知道我用於獲得線性加速度的代碼是否有效?

這種方法可以“抑制”傳感器值的變化。 這就是所謂的“指數平滑” 在快速變化的變量中,您可以通過獲取最新值並將其計算為分數(alpha)來找到平均值的估計值。

該算法使用此過濾器來找到常數,“必須”為重力。 總加速度=重力+瞬時加速度,因此可以通過event.values - gravity計算瞬時加速度。

除非您不斷加速(火箭發射,在高速公路上加速...),否則此方法有效。 因子α告訴您“平均值”的變化速度,當您想測量變化更快的加速度時,該值需要更大。 這由術語dt反映:當相對於過濾器時間常數較小(較高的事件發生率)時,alpha會變大。 時間常數告訴您平均而言,紋波效應衰減的速度有多快。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM