2013-04-30 96 views
3

我正在尝试为我正在处理的项目制作一个指南针应用程序,该应用程序可以在崎岖地形上工作。我已经使用标准TYPE_ACCELEROMETERTYPE_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]); 
     } 
     } 
} 

感谢您的帮助,

亚当

+0

您的意思是说,它在旋转时被某种设备固定在适当位置时会稍微变化?或者它比微小的漂移更明显? – 2013-04-30 18:21:44

+0

当围绕y轴旋转时,即使手机指向相同方向,返回的值也会从160 *到200 *。除了轻微的漂移,Defo更重要。 – 2013-04-30 18:32:03

+0

手机是平躺还是垂直? – 2013-04-30 19:59:54

回答

2

使用TYPE_GRAVITY代替或在未使用过滤器的低通滤波器的加速度计或卡尔曼滤波器。 TYPE_GRAVITY提高了低通滤波器的精度,最高可达10度。

+0

没有工作。事实上它使情况更糟。你会认为Google的聪明人会为做这种事情做一个简单的API,考虑他们在增强现实中付出了多少努力。 – 2013-04-30 20:50:05

+0

我不太明白你帖子中的问题。有关方位角的错误?你的手机的位置是什么? – 2013-04-30 20:52:19

+0

手机的位置平放在桌子上,远离所有的磁场干扰。假设我围绕y轴旋转它的方向[0]为150 *,例如向左或向右旋转约60 *,则方向[0]的读数变化多达40 *,即使围绕z轴。 – 2013-04-30 21:07:26