2017-02-15 1 views
0

현재 휴대 전화에서 방향 데이터를 받아서 속도계를 구현 중입니다. 나는 장치가 테이블이나 뭔가에 배치하는 동안이 잘 작동, 어쨌든 나는 그런 방위각 등으로, 내 휴대 전화에서 회전 데이터를 수신 할 수 있어요이와상수 회전 장치 - 올바른 방향 데이터를받는 방법?

SensorManager.getRotationMatrix(R, I, gravity, geomagnetic); 
float orientation[] = new float[3]; 
SensorManager.getOrientation(R, orientation); 
float azimuth = orientation[0]; 
double azimuthD = Math.toDegrees(azimuth); 
if(azimuthD < 0) azimuthD = 360 + azimuthD; 

.. 을 사용하고 있습니다. 그러나 특정 지점을 중심으로 회전 할 때 (내 경우 장치가 바퀴에 고정되어 특정 속도로 회전하는 경우) 값이 정확하지 않게됩니다. 나는 중력과 지자기 센서를 사용하고 있기 때문에, 회전하면서이 센서에 영향을 미치는 힘과 충돌 할 수 있다고 생각합니다. As the wheel turns, the rotation changes relative to a point, but the local device rotation stays the same.

잡음이 많은 데이터를 사용하지 않고 기기를 돌리는 동안 기기의 방향에 어떻게 액세스 할 수 있습니까? 'Sensor.TYPE_ROTATION_VECTOR '속성에 대한 내용을 읽었지만 제대로 작동하는지 알 수 없습니다. 또한 조정 시스템을 재구성 할 수있는 가능성에 대해 읽었지 만, 그게 어떻게 도움이 될까요? 내 전화가 바닥에 수직이 아니며 5 ° -10 °의 각도와 더 비슷하지 않기 때문입니다. 도움을 주시면 감사하겠습니다.

건배, viehlieb

답변

0

나는 내가 내 대답을 찾을 것 같아요. 해결책은 위에 게시 한 코드를 모두 버리고 자이로 스코프를 사용하는 것입니다. 자이로 스코프 값은 장치의 회전 각속도를 측정합니다. 사용 된 좌표계는 장치 자체의 좌표계입니다. 필자의 경우 관련 값은 z 축을 중심으로 한 회전이었습니다. 값은 초당 복사율로 표시되며 바퀴의 둘레를 곱하면 수치가 m/s로 매핑됩니다. 그래서 트릭은 OnSensorChanged 방법에 있었다 : 당신이 정확한 값을 가지고 싶습니다

if(sensorEvent.sensor.getType() == Sensor.TYPE_GYROSCOPE){ 
gyroscope = sensorEvent.values; 
double rotZ = gyroscope[2]; 
double degrees = Math.toDegrees(gyroscope[2]); 
//calculate the speed with circumference = 2.23m 
float speed = (float) degrees/ 360.0f * 2.23f * 3.6f; 
} 

지금, 당신은 배열에 저장하고 평균을 계산할 수 있습니다. onSensorChanged 메서드가 호출 될 때마다 배열을 20 번 (또는 그 이상)마다 지우는 것을 잊지 마십시오. SENSOR_DELAY_GAME을 (를) 등록하면 평균을 구축 할 수있는 충분한 데이터가 있습니다.