2017-04-14 1 views
0

안드로이드의 가속도계에 관한 몇 가지 관련 게시물을 보았지만이 중 어떤 것도 나에게 도움이되지 않았기 때문에 이것이 중복되지 않기를 바랍니다.Android : 가속도계를 사용한 잘못된 속도 계산

휴대 기기의 X 축 속도 만 알아야합니다.

문제는 내가 장치를 직선 (초기 속도 = 0)으로 움직일 때, 먼저 가속 한 다음 감속 (최대 정지까지)하면 계산 된 속도가 실제 속도와 일치하지 않는다는 것입니다.

문제의 주요 증상은 장치가 정지 한 후에, 제 계산 속도가 아니라고 0.

I 먼저하고 네거티브 가속에서 감속 결과에 (긍정적 가속 값을 볼 수

가치) 그러나 나는 그들이 충분히 정확하지 않다고 생각한다.

이 작업은 장치를 어떤 방향으로 움직여도 상관 없습니다 (왼쪽/오른쪽).

나는 내가 무엇을 요구하고있어 아마 결과의 정확성을 향상시킬 수있는 스마트 한 방법으로 계산을 만들 수있는 방법이라고 생각 .. 여기

내 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

난 당신이 안드로이드 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