2014-07-09 2 views
0

나는 안드로이드 전화 축을 세계 좌표 축으로 변환하려는 프로젝트를 진행하고 있습니다. 나는 3 축 (x, y, z)을 따라 가속도를 가지며 3 개의 각도는 방위각, 피치 및 롤입니다. 어떻게하면 사실상 내 휴대폰 축을 세계 좌표 축 (Trueenorth, trueeast)으로 변환 할 수 있습니까? 내가하는 한 나에게 잘못된 결과를주고있다. 내 접근 방식입니다.전화 축에서 세계 좌표 축으로의 변환

는 라디안 세 각도가 -0.030029837 -0.008528218 -0.199289320 전화의 X, Y, Z 축과 0.01618620 0.48581530 0.19617330 따라 가속도라고 방위각, 피치 및 롤되고 있습니다.

"진실"을 따라 가속도를 얻으려면 간단히 Y 축을 따라 가속도를 가져 와서 세 가지 각도 즉 cos을 곱하면됩니다. -0.008528218 * COS (0.19617330) * COS (0.48581530) * COS (0.01618620) = - 0.00739584

는 "trueeast"함께 가속도를 얻으려면 단순히 X 축 방향의 가속도를 복용하고 모든 왜냐하면 그것을 곱입니다 세 가지 각도 즉. -0.030029837 * COS (0.19617330) * COS (0.48581530) * COS (0.01618620) = - 0.026042471

는 "수직 위쪽"을 따라 가속도를 얻으려면 단순히 Z 축 방향의 가속도를 가지고 그리고 COS와 승산하고 2 개의 각 ie. -0.199289320 * cos (0.19617330) * cos (0.48581530) = - 0.172850298

이제 내가 잘못했는지 여부를 확인하십시오. 나는 일관성 테스트를했다. 휴대 전화의 X, Y, Z 축을 따라 가속하는 정도는 진실을 따라 가속하는 진폭과 같아야하며, 진실과 수직 위로 향해야합니다. 그러나 이것은 평등하지 않게 될 것입니다.

0.20은 0.17과 같지 않습니다.

어디로 가고 있습니까? 누군가 나를 도와 줄 수 있다면 큰 도움이 될 것입니다.

미리 감사드립니다.

답변

0

귀하의 방위각, 피치 및 롤 각도가 휴대 전화 축이 월드 축에 대해 얼마나 벗어나는 각도를 나타내는 것으로 가정합니다. 내 가정이 맞다면 다음 코드 줄이 여러분의 필요를 채울 것입니다.

float yaw = (float) Math.toDegrees(0.01618620); 
    float pitch = (float) Math.toDegrees(0.48581530); 
    float roll = (float) Math.toDegrees(0.19617330); 
    float acc[] = { -0.030029837f, -0.008528218f, -0.199289320f, 1 }; 

    float[] matrix = new float[16]; 
    Matrix.setIdentityM(matrix, 0); 
    Matrix.rotateM(matrix, 0, yaw, 0, 0, 1); 
    Matrix.rotateM(matrix, 0, pitch, 0, 1, 0); 
    Matrix.rotateM(matrix, 0, roll, 1, 0, 0); 

    float accT[] = new float[4]; 
    Matrix.multiplyMV(accT, 0, matrix, 0, acc, 0); 

    float rawMagnitude = Matrix.length(acc[0], acc[1], acc[2]); 
    System.out.println(rawMagnitude); 
    float transformedMagnitude = Matrix.length(accT[0], accT[1], accT[2]); 
    System.out.println(transformedMagnitude); 

콘솔 인쇄 크기는

0.2017195 
    0.20171948 

내가 android.opengl.Matrix을 사용합니다. 여기에 사용 된 정적 메소드는 자 세한 내용으로 API 문서를 참조하십시오.

내 가정이 정확히 반대 인 경우, 즉 방위각, 피치 및 롤 각이 월드 축이 전화 축에 대해 얼마나 벗어난 각도인지 나타내는 경우 방위각, 피치 및 롤 각도를 음수로 지정하십시오.