我正在嘗試爲我正在處理的項目製作一個指南針應用程序,該應用程序可以在崎嶇地形上工作。我已經使用標準TYPE_ACCELEROMETER
和TYPE_MAGNETIC_FIELD
傳感器,它似乎給出了相當準確的讀數。但是,當我圍繞其y軸和z軸傾斜手機時,即使手機指向相同方向(恆定z軸),標題讀數也會改變。Android傾斜補償指南針
有誰知道如何彌補這個?示例代碼將不勝感激。
這是我目前使用的代碼:
private void updateDirection() {
float[] R = new float[16];
float[] orientationValues = new float[3];
if(SensorManager.getRotationMatrix (R, null, accelerometerValues, magneticValues)){
SensorManager.getOrientation (R, orientationValues);
orientationValues[0] = (float)Math.toDegrees (orientationValues[0]);
orientationValues[1] = (float)Math.toDegrees (orientationValues[1]);
orientationValues[2] = (float)Math.toDegrees (orientationValues[2]);
if(orientationValues[0] < 0){
orientationValues[0] = 360 + orientationValues[0];
}
final int trueNorthHeading = NavigationUtils.getTrueNorthBearing(currentLocation, orientationValues[0]);
if(trueNorthHeading == currentHeading) {
return;
}
int accuracy = 3;
if(NavigationUtils.isSignificantHeadingChange(currentHeading, trueNorthHeading, accuracy, SIGNIFICANT_CHANGE_LIMIT)){
int headingChangeDegrees = NavigationUtils.getStearageDegree(currentHeading, trueNorthHeading);
currentHeading = trueNorthHeading;
navigationManager.headingUpdate(trueNorthHeading, Math.round(orientationValues[0]), headingChangeDegrees);
Log.d("COMPASS", "North: values[0]: " + (int)orientationValues[0]);
}
}
}
感謝您的幫助,
亞當
您的意思是說,它在旋轉時被某種設備固定在適當位置時會稍微變化?或者它比微小的漂移更明顯? – 2013-04-30 18:21:44
當圍繞y軸旋轉時,即使手機指向相同方向,返回的值也會從160 *到200 *。除了輕微的漂移,Defo更重要。 – 2013-04-30 18:32:03
手機是平躺還是垂直? – 2013-04-30 19:59:54