2013-03-18 4 views
1

저는 가속도계, 자이로 미터 및 자력계의 출력을 기록한 Android 앱에서 Matlab 정보를 추출하려고합니다. 선형 가속도를 찾아야하므로 가속도계에서 중력을 고려하여 계산할 수 있다고 가정했습니다. 자력계 출력 (지구 자기장)에 따라 전화 방향을 확인하여 찾을 수 있어야한다고 생각했습니다. 그러나 어떤 공식으로도 정확한 결과를 얻을 수는 없습니다. 자력계 덕분에 중력 벡터를 찾는 것이 가능합니까? 그렇다면 센서 판독 값을 어떻게 해석해야합니까?스마트 폰의 후가공 센서 판독 - 중력계에서 계산 한 중력

+0

나는 교정 시간이 필요하다고 생각합니다. 예 : 전화가 정지 된 것으로 인식되는 기간. 그런 다음 중력에 의한 가속과 자기장으로 인한 자력 계의 두 벡터를 얻습니다. – Ifor

+0

하지만 실제로 선형 가속을 측정하는 앱이 있는데 교정 없이는 정확 해 보입니다. 어떻게 그럴 수 있습니까? – Danio

답변

0

아니요, 자력계에서 중력을 찾을 수 없습니다.


당신이 찾고있는 것은 센서 융합입니다.

Direction Cosine Matrix IMU: Theory

내가보기 엔 Sensor fusion on Android devices.

그런데 왜 당신은 스스로를하고있는 것입니다 추천 또 다른 자원 : 나는이 원고에 따라 Shimmer platform을위한 센서 융합을 구현 한, 그것은 기본적으로 튜토리얼입니까? SensorManager은 이미 원하는 것을 제공합니다.

0

가속도계 값에 로우 패스 필터를 적용하여 중력을 얻은 다음 가속도계 값을 중력에서 빼면 선형 가속도를 얻을 수 있습니다. 아래 코드는 http://developer.android.com/reference/android/hardware/SensorEvent.html입니다.

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