2012-03-22 3 views
1

조금 이상한 상황이 있습니다. 현재 내가 가지고있는 상황은 일반적으로 좋은 것입니다. 자이로 드리프트가 전혀 없습니다. 그러나 이것이 왜 그런지 전혀 알지 못합니다. 나는 자이로 스코프가 어디에서나보고되는 것처럼 많이 표류 할 것으로 예상했다. 따라서이 질문은 내가 왜 어떤 표류도 보지 않는 이유를 찾는다.자이로 스코프에 드리프트가 표시되지 않습니다.

저는 Galaxy Nexus (Android 4.0.3)와 자이로 스코프를 사용하여 끝에 방향 변경 감지 기능을 사용합니다. 처음에는 센서 판독 값을 기록하기를 원했고 큰 드리프트 값을 예를 들어 here과 같이 볼 것으로 예상했습니다. 또한 다른 웹 사이트에서 초당 약 1도 정도의 표류 또는 비슷한 측정 값을 읽었습니다.

센서 데이터를 기록하려면 코드

매우 기본적인 :

@Override 
public void onSensorChanged(SensorEvent event) { 

    final float dT = (event.timestamp - mTimestamp)/1000000000.f; 
    if (dT < 1) { // just a fix for the first step 

     mRelZ += event.values[2] * dT; 
     list.add(mRelZ); 
     list2.add(event.timestamp); 
    } 
    mTimestamp = event.timestamp; 

mRelZ 처음에 0으로 설정되고, 두 개의리스트 :

SensorManager sm = (SensorManager) getSystemService(SENSOR_SERVICE); 
LogSensorEventListener listener = new LogSensorEventListener(
     SensorLoggerActivity.this, Sensor.TYPE_GYROSCOPE); 
sm.registerListener(listener, sm.getDefaultSensor(Sensor.TYPE_GYROSCOPE), 
     SensorManager.SENSOR_DELAY_FASTEST); 

LogSensorEventListener 또한 SensorEventListenerInterface 매우 기본적인 구현 시간과 측정 된 값을 추적해야합니다.

try { 

     for (int i = 0; i < list.size(); i++) { 

      long time = list2.get(i); 

      if (mStartTime < 0) { 
       mStartTime = time; 
       time = 0; 
      } else { 
       time = time - mStartTime; 
      } 

      float timef = time/1000000000.0f; 
      sb.append(timef); 
      sb.append(";"); 
      sb.append(Math.toDegrees(list.get(i))); 
      sb.append("\n"); 
     } 

     mOutFileStream.write(sb.toString().getBytes()); 

     mOutFileStream.flush(); 
     mOutFileStream.close(); 
    } catch (IOException e) { 
    } 

모든 것이 잘 작동하지만 유일한 드리프트 내가하자에 대한 테이블 및 로깅 값에 누워 장치를 구비 한 경우 (예를 들어 볼 수 있습니다 (버튼을 클릭) 내 측정이 완료되면 값은 파일에 기록됩니다 60 초)는 약 0.2도입니다. 만약 내가 위의 스크린 샷과 같은 것을 얻기 위해 장치를 움직이면 드리프트는 전혀 관찰 될 수 없습니다 ...

나는 무엇을 잘못하고 있습니까?

어떤 조언을 주셔서 감사합니다!

+0

나는 그것을 이해할 때까지 3 번 첫 문장을 읽어야했다.) – MrTJ

+0

미안하지만, 나는 그것을 조금 더 분명하게하기 위해 그것을 재구성했다 ... – fkerber

답변

2

당신이 가지고있는 자이로 필터가 걸린 것일 수도 있습니다. 일부 I9100 장치에서 발견되었습니다. 그들은 인벤 센스 CORP에 의해 생산 자이로를 사용합니다.

편집 2014년 12월 10일을 렌코 카스트로 @ 주석에 대한 렌코 카스트로에 대한 옳았다 @ 내가 믿는 ' 공장 드리프트 '(또는 제로 드리프트)와'축적 된 드리프트 '; 안드로이드 상보/칼만 필터에 관한

, 상기 6DOF (ACC + GYRO) IMPL. 잘 작동합니다. 가속도계 보정으로 인해 자이로 스코프의 공장 및 축적 된 편차를 제거 할 수 있습니다.

그러나 9dof impl.을 고려하거나 자력계 센서를 추가하면 원하는 상태로 필터가 실행됩니다. 나의 테스트에 따르면, 그것은 융합 전에 제거하기 위해 전화를 흔들어 (8 '드로잉으로 알려진) 흔들 필요가 자력계의 uncalibed 상태로 인해 발생합니다.

9dof는 전체 회전 추정을 제공하지만 6dof는 y 축을 중심으로 회전하는 누적 된 드리프트를 처리 할 수 ​​없습니다 (축 정의에 대한 안드로이드 참조). 그리고 나는 애플 리케이션을 시작하기 전에 '흔들기 및 그리기 - 숫자 - 8'이 좋은 UE라고 생각하지 않으므로 6dof 메소드로 돌아가서 y 방향으로 회전의 공장 드리프트를 제거하는 방법을 찾아야한다. 중심선.

는 (보완/칼만 필터에 대한 지루하지만 놀라운 내용이 많이 여기에 있어야한다.하지만 난 사람들은 이미 여기에 온 알고 같아요.)

당신은 360 파노라마 응용 프로그램은 Google 카메라에 포함 시도 할 수 있습니다 될 수있는 시장에서 다운로드. 이 앱은 캡처를 실제로 시작하기 전에 센서를 보정하기 위해 시각적 보조 (이미지 처리 기반의 모션 추정)를 사용하므로 쉽게 확인할 수 있습니다. 그리고 자력계는 사용하지 않았을 것입니다.

안드로이드에서 sensor-fusion을 사용할 때의 나의 충고는 : 입니다. 1. 자력계 없음; (하드웨어 문제인지 또는 소프트웨어로 해결할 수 있는지는 알 수 없습니다.) 2. 가속도계 + 자이로 스코프는 부드럽고 안정된 6dof 모션 추정을 제공합니다. 3. y 축을 기준으로 드리프트를 풀려고하면 주로 시각적 방법을 추가해야합니다. 4. 3을 시도하고 3을 시도하십시오 ...

어쩌면 누군가가이 질문에 부딪 힐 것이고 나는 위의 모든 것이 도움이되기를 바랍니다. StackOverflow에서이 질문과 관련된 게시물 덕분에 에게 감사드립니다. 나는 당신의 이름을 정확하게 기억하지 못한다. 그러나 당신 모두는 나를 많이 도왔다. :)

+0

답장을 보내 주셔서 감사합니다. Invensense 또는 다른 것 중 하나를 가지고 있는지 어떻게 알 수 있습니까? 필터링 방법에 대한 추가 정보가 있습니까? – fkerber

+0

Sensor.getType() Sensor.getVendor() 도움이 될 수 있습니다. 당신은 센서의 유형을 발견 할 것이다. 출력이 가속도계와 나침반을 사용하는 융합 알고리즘으로 필터링 된 경우 유형을 확인하십시오. – iicodec

+0

좋아, 지금 공급 업체를 확인해 보았습니다. 실제로 Invensense입니다. 그래서 당신의 추측은 맞을 수도 있습니다. 다시 한번 감사드립니다. – fkerber

0

나는이 주제를 찾아보고 있었지만 이전 질문 이었지만 받아 들인 대답이 맞다고 생각하지 않습니다. "모든 곳에서보고 된"드리프트는 단순히 센서 데이터를 출력하는 것이 아니라 잡음이있는 자이로 스코프 데이터 (O.P.가 제공하는 링크에서 볼 수 있음)의 통합으로 인해 발생합니다. 시간 경과에 따른 방향 변경을 계산하려면이 통합이 필요합니다.

더 긴 통합 기간에는 더 큰 잡음이 포함되어 드리프트가 상당히 빠르게 축적됩니다. Invensense 하드웨어에서 발생하는 신호의 내부 필터링은 자이로 스코프의 자체 처리로 인한 드리프트를 제거하는 데 사용됩니다.

Android의 경우 API 18 (Jelly Bean MR2)에 GYROSCOPE_UNCALIBRATED 센서가 추가되어이 공장 보정 편차를 확인할 수 있습니다. 어쨌든, 캘리브레이션 된 센서 이벤트와 캘리브레이션되지 않은 센서 이벤트를 통합하려고하면 두 가지 모두 시끄 럽기 때문에 드리프트가 발생합니다. 이 문제를 줄이려면 complementary 또는 Kalman 개의 필터를 조사해야합니다.

(자세한 정보 링크는 게시하지 않으므로 평판이 충분하지 않습니다.)

희망 사항은 향후 사용자에게 도움이되기를 바랍니다.