조금 이상한 상황이 있습니다. 현재 내가 가지고있는 상황은 일반적으로 좋은 것입니다. 자이로 드리프트가 전혀 없습니다. 그러나 이것이 왜 그런지 전혀 알지 못합니다. 나는 자이로 스코프가 어디에서나보고되는 것처럼 많이 표류 할 것으로 예상했다. 따라서이 질문은 내가 왜 어떤 표류도 보지 않는 이유를 찾는다.자이로 스코프에 드리프트가 표시되지 않습니다.
저는 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도입니다. 만약 내가 위의 스크린 샷과 같은 것을 얻기 위해 장치를 움직이면 드리프트는 전혀 관찰 될 수 없습니다 ...
나는 무엇을 잘못하고 있습니까?
어떤 조언을 주셔서 감사합니다!
나는 그것을 이해할 때까지 3 번 첫 문장을 읽어야했다.) – MrTJ
미안하지만, 나는 그것을 조금 더 분명하게하기 위해 그것을 재구성했다 ... – fkerber