2017-04-14 82 views
0

我希望這不是一個重複的,因爲我看到了Android的約加速度計一些相關的職位,但他們都不是對我很有幫助,不正確速度計算。安卓:使用加速計

我需要讓我的移動設備的X軸速度(只)。

的問題是,當我移動設備在一條直線上(初速= 0),第一次加速,然後減速(直至完全停止)計算出的速度,我得到不符合實際速度。

問題的主要症狀是,該裝置停止後,我的計算的速度不爲0

我可以第一,然後負加速度在結果的加速度和減速度(加速度正值值),但我認爲他們不夠準確。

這發生在什麼方向移動我的設備不管(左/右)。

我想這就是我要問的是一種方法,或許會讓其可以提高結果的準確性一個更聰明的方式計算..

這裏是我的onSensorChanged代碼:

public void onSensorChanged(SensorEvent sensorEvent) { 
    if((!isCancelled()) && (this.isConnected)) { 
     if(mode.equals("ac")) { 

      // Getting X acceleration 
      currentAccelX = sensorEvent.values[0]; 

      // Getting current sample timestamp 
      currentTimeStamp = sensorEvent.timestamp; 

      // if first sample then interval = 0 
      if(prevTimeStamp == 0) prevTimeStamp = currentTimeStamp; 

      // calculating interval (in seconds) 
      interval = (currentTimeStamp - prevTimeStamp) * NS2S; 

      // updating prevTimeStamp for next sample.. 
      prevTimeStamp = currentTimeStamp; 

      // My device shows acceleration of about 0.22 when isn't moving at all 
      // so for ignoring this offset: 
      if(Math.abs(currentAccelX) < 0.3) currentAccelX = 0; 


      // Updating the X-axis velocity 
      currentVelocityX += currentAccelX * interval; 

      Log.d(TAG, "ACCEL X IS: " + currentAccelX + " INTERVAL IS: " + interval + " VELOCITY X IS: " + currentVelocityX); }}} 

下面是結果(從日誌):

ACCEL X IS: 0.0 INTERVAL IS: 0.008392334 VELOCITY X IS: -0.17563461 
ACCEL X IS: 0.5072479 INTERVAL IS: 0.008392334 VELOCITY X IS: -0.17137761 
ACCEL X IS: 1.8605042 INTERVAL IS: 0.008392334 VELOCITY X IS: -0.15576364 
ACCEL X IS: 2.970047 INTERVAL IS: 0.008392334 VELOCITY X IS: -0.130838 
ACCEL X IS: 3.1661987 INTERVAL IS: 0.008392334 VELOCITY X IS: -0.10426621 
ACCEL X IS: 2.5031128 INTERVAL IS: 0.008392334 VELOCITY X IS: -0.083259255 
ACCEL X IS: 1.4252472 INTERVAL IS: 0.008392334 VELOCITY X IS: -0.07129811 
ACCEL X IS: 0.66192627 INTERVAL IS: 0.008392334 VELOCITY X IS: -0.065743 
ACCEL X IS: 0.8834839 INTERVAL IS: 0.008392334 VELOCITY X IS: -0.05832851 
ACCEL X IS: 1.476593 INTERVAL IS: 0.008392334 VELOCITY X IS: -0.045936447 
ACCEL X IS: 2.1182098 INTERVAL IS: 0.008392334 VELOCITY X IS: -0.028159723 
ACCEL X IS: 2.5206451 INTERVAL IS: 0.008392334 VELOCITY X IS: -0.0070056263 
ACCEL X IS: 2.5039368 INTERVAL IS: 0.008392334 VELOCITY X IS: 0.014008248 
ACCEL X IS: 2.0747833 INTERVAL IS: 0.008392334 VELOCITY X IS: 0.03142052 
ACCEL X IS: 1.6359253 INTERVAL IS: 0.008392334 VELOCITY X IS: 0.04514975 
ACCEL X IS: 1.9437103 INTERVAL IS: 0.008392334 VELOCITY X IS: 0.061462015 
ACCEL X IS: 2.5153046 INTERVAL IS: 0.008392334 VELOCITY X IS: 0.08257129 
ACCEL X IS: 2.7262726 INTERVAL IS: 0.008392334 VELOCITY X IS: 0.10545108 
ACCEL X IS: 2.6504364 INTERVAL IS: 0.008392334 VELOCITY X IS: 0.12769443 
ACCEL X IS: 2.7267609 INTERVAL IS: 0.008392334 VELOCITY X IS: 0.15057832 
ACCEL X IS: 3.2504425 INTERVAL IS: 0.008392334 VELOCITY X IS: 0.17785712 
ACCEL X IS: 2.66333 INTERVAL IS: 0.008392334 VELOCITY X IS: 0.20020866 
ACCEL X IS: 1.2032013 INTERVAL IS: 0.008392334 VELOCITY X IS: 0.21030633 
ACCEL X IS: 0.0 INTERVAL IS: 0.008392334 VELOCITY X IS: 0.21030633 
ACCEL X IS: -0.82492065 INTERVAL IS: 0.008392334 VELOCITY X IS: 0.20338333 
ACCEL X IS: -1.1881866 INTERVAL IS: 0.008392334 VELOCITY X IS: 0.19341166 
ACCEL X IS: -1.234375 INTERVAL IS: 0.008392334 VELOCITY X IS: 0.18305238 
ACCEL X IS: -1.1171875 INTERVAL IS: 0.008392334 VELOCITY X IS: 0.17367657 
ACCEL X IS: -0.66615295 INTERVAL IS: 0.008392334 VELOCITY X IS: 0.16808599 
ACCEL X IS: 0.6031494 INTERVAL IS: 0.008392334 VELOCITY X IS: 0.17314783 
ACCEL X IS: 1.6951294 INTERVAL IS: 0.008392334 VELOCITY X IS: 0.18737392 
ACCEL X IS: 2.1244202 INTERVAL IS: 0.008392334 VELOCITY X IS: 0.20520276 
ACCEL X IS: 2.0012054 INTERVAL IS: 0.008392334 VELOCITY X IS: 0.22199754 
ACCEL X IS: 1.7078094 INTERVAL IS: 0.008392334 VELOCITY X IS: 0.23633005 
ACCEL X IS: 1.6888428 INTERVAL IS: 0.008392334 VELOCITY X IS: 0.2505034 
ACCEL X IS: 1.7953186 INTERVAL IS: 0.008392334 VELOCITY X IS: 0.2655703 
ACCEL X IS: 2.3388367 INTERVAL IS: 0.008392334 VELOCITY X IS: 0.2851986 
ACCEL X IS: 3.2739716 INTERVAL IS: 0.008392334 VELOCITY X IS: 0.31267485 
ACCEL X IS: 4.067398 INTERVAL IS: 0.008392334 VELOCITY X IS: 0.3468098 
ACCEL X IS: 4.221344 INTERVAL IS: 0.008392334 VELOCITY X IS: 0.38223672 
ACCEL X IS: 4.281769 INTERVAL IS: 0.008392334 VELOCITY X IS: 0.41817075 
ACCEL X IS: 3.0664673 INTERVAL IS: 0.008392334 VELOCITY X IS: 0.44390556 
ACCEL X IS: 1.0762634 INTERVAL IS: 0.008392333 VELOCITY X IS: 0.45293793 
ACCEL X IS: -0.5091095 INTERVAL IS: 0.008392334 VELOCITY X IS: 0.44866532 
ACCEL X IS: -0.82073975 INTERVAL IS: 0.008392334 VELOCITY X IS: 0.4417774 
ACCEL X IS: 0.5644531 INTERVAL IS: 0.008392334 VELOCITY X IS: 0.4465145 
ACCEL X IS: 3.284546 INTERVAL IS: 0.008392334 VELOCITY X IS: 0.4740795 
ACCEL X IS: 4.3601074 INTERVAL IS: 0.008392334 VELOCITY X IS: 0.51067096 
ACCEL X IS: 4.3199615 INTERVAL IS: 0.008392334 VELOCITY X IS: 0.54692554 
ACCEL X IS: 3.0349426 INTERVAL IS: 0.008392334 VELOCITY X IS: 0.5723958 
ACCEL X IS: 1.763977 INTERVAL IS: 0.008392334 VELOCITY X IS: 0.5871997 
ACCEL X IS: 1.4712982 INTERVAL IS: 0.008392334 VELOCITY X IS: 0.5995473 
ACCEL X IS: 2.1172028 INTERVAL IS: 0.008392334 VELOCITY X IS: 0.6173156 
ACCEL X IS: 2.1423798 INTERVAL IS: 0.008392334 VELOCITY X IS: 0.63529515 
ACCEL X IS: 1.6801605 INTERVAL IS: 0.008392334 VELOCITY X IS: 0.64939564 
ACCEL X IS: 1.8257599 INTERVAL IS: 0.008392334 VELOCITY X IS: 0.66471803 
ACCEL X IS: 1.8712311 INTERVAL IS: 0.008392334 VELOCITY X IS: 0.680422 
ACCEL X IS: 2.1062775 INTERVAL IS: 0.008392334 VELOCITY X IS: 0.6980986 
ACCEL X IS: 2.054016 INTERVAL IS: 0.008392334 VELOCITY X IS: 0.71533656 
ACCEL X IS: 0.0 INTERVAL IS: 0.008392334 VELOCITY X IS: 0.71533656 
ACCEL X IS: -2.2228088 INTERVAL IS: 0.008392334 VELOCITY X IS: 0.696682 
ACCEL X IS: -2.936676 INTERVAL IS: 0.008392334 VELOCITY X IS: 0.6720364 
ACCEL X IS: -3.1568298 INTERVAL IS: 0.008392334 VELOCITY X IS: 0.6455432 
ACCEL X IS: -2.484604 INTERVAL IS: 0.008392334 VELOCITY X IS: 0.6246916 
ACCEL X IS: -2.213089 INTERVAL IS: 0.008392334 VELOCITY X IS: 0.6061186 
ACCEL X IS: -1.923996 INTERVAL IS: 0.008392334 VELOCITY X IS: 0.5899718 
ACCEL X IS: -2.902832 INTERVAL IS: 0.008392334 VELOCITY X IS: 0.56561023 
ACCEL X IS: -5.460327 INTERVAL IS: 0.008392334 VELOCITY X IS: 0.51978534 
ACCEL X IS: -7.1407623 INTERVAL IS: 0.008392334 VELOCITY X IS: 0.45985767 
ACCEL X IS: -8.03479 INTERVAL IS: 0.008392334 VELOCITY X IS: 0.39242703 
ACCEL X IS: -8.921448 INTERVAL IS: 0.008392334 VELOCITY X IS: 0.31755525 
ACCEL X IS: -10.293076 INTERVAL IS: 0.008392334 VELOCITY X IS: 0.23117232 
ACCEL X IS: -11.660858 INTERVAL IS: 0.008392334 VELOCITY X IS: 0.1333105 
ACCEL X IS: -12.821564 INTERVAL IS: 0.008392334 VELOCITY X IS: 0.025707655 
ACCEL X IS: -12.108749 INTERVAL IS: 0.008392334 VELOCITY X IS: -0.07591301 
ACCEL X IS: -9.302032 INTERVAL IS: 0.008392334 VELOCITY X IS: -0.15397877 
ACCEL X IS: -5.889694 INTERVAL IS: 0.008392334 VELOCITY X IS: -0.20340705 
ACCEL X IS: -3.0645447 INTERVAL IS: 0.008392334 VELOCITY X IS: -0.22912574 
ACCEL X IS: -1.2965088 INTERVAL IS: 0.008392334 VELOCITY X IS: -0.24000648 
ACCEL X IS: -0.36557007 INTERVAL IS: 0.008392334 VELOCITY X IS: -0.24307446 
ACCEL X IS: 0.0 INTERVAL IS: 0.008392334 VELOCITY X IS: -0.24307446 

*請注意,在日誌中的初始速度不爲0(但-0.17563461),因爲造成「假」的一些傳感器錯誤手機不移動時的加速度值。

非常感謝。

+0

@creativecreatorormaybenot問題:計算速度=實際速度。 – Noam

回答

1

我認爲你應該使用Android的API提供的線性加速度傳感器

https://developer.android.com/reference/android/hardware/Sensor.html#TYPE_LINEAR_ACCELERATION

這似乎完全適合您的需求

編輯:爲了解決精度問題,您可以嘗試執行手動校準(手機必須平放在桌子上,並且測量必須穩定)才能消除偏移。在這裏尋找更多的細節(特別是結束):https://electronics.stackexchange.com/a/33387

但是你也應該記住,傳感器並不是完美的,尤其是在手機,這就是爲什麼它可能不可能獲得一些手機的傳感器所需的精度。該解決方案是任一適應你的算法處理,以通過傳感器傳送的精確度,或者 執行傳感器融合(用陀螺儀例如)。

+0

你是對的,我切換到'TYPE_LINEAR_ACCELERATION',但結果仍然不夠準確。我認爲如果我可以修復手機完全沒有移動時存在的偏移量(大約0.2-0.3),那麼它可以解決我的問題......這樣做的任何方式?謝謝 – Noam

+0

我只是編輯你的準確性問題,希望它會有所幫助。 – Kerat

+0

謝謝,我會嘗試這種校準方法。無論如何,你能詳細說明這個傳感器融合的東西嗎? – Noam