【问题标题】:Android: Compass too imprecise?Android:指南针太不精确?
【发布时间】:2010-12-06 10:31:28
【问题描述】:

我有一个应用程序,我想在其中访问磁力计。我从我的应用程序中获得了结果,但与 g1 的指南针应用程序的方向结果相比,我的应用程序与指南针应用程序的结果完全不同。例如:我的应用程序是 250°,指南针应用程序是 90°! 那不可能,这是我的代码。有没有什么区别才能变成更好的结果?

public class MySensorListener implements SensorListener{
  int orientation;
  public MySensorListener(){
     orientation = 0;
  }
    public void onAccuracyChanged(int sensor, int accuracy) {
  // TODO Auto-generated method stub

 }

    public void onSensorChanged(int sensor, float[] values) {
        orientation = (int)values[0];
    }
}

我像这样访问 Sensormanager:

private MySensorListener doCompass(){
 MySensorListener cl;
 SensorManager cm;
 compassListener = new MySensorListener();

  cm = (SensorManager) getSystemService(Context.SENSOR_SERVICE);

  cm.registerListener(
   cl, 
   SensorManager.SENSOR_ORIENTATION, 
   SensorManager.SENSOR_DELAY_UI); //updateRate
  return cl;
}

有人可以帮忙吗,拜托?! :)

谢谢

【问题讨论】:

    标签: android compass-geolocation


    【解决方案1】:

    您必须使用Math.toDegrees。因为 value[0] 返回弧度。

    编辑 我在其他帖子上看到,有人说 value[0] 返回弧度。 但是,在我尝试编码后,我不知道 value[0] 返回弧度或等级/gon。因为当我转换成度数时..值大于360.所以我尝试将它转换成等级。它看起来不错,没有问题。代码是这样的

    Double azimuth = value[0];
    azimuth = azimuth * 360 / 400;
    

    抱歉英语不好:)

    【讨论】:

      【解决方案2】:

      我不确定卡尔曼滤波器是否对方向传感器值有效,但这可能是您需要的。更多关于安卓卡尔曼滤波器的信息提到here

      如果您不想为学习和实现卡尔曼滤波器而头疼,请使用我在下面所做的。它对我来说效果很好。 :

      private boolean isMagneticFieldFine(float[] fieldValues){
          double value = Math.sqrt(fieldValues[0]*fieldValues[0] + fieldValues[1]*fieldValues[1] + fieldValues[2]*fieldValues[2]);        
          return value < 65.0 && value > 25.0;
      }
      

      另外,SensorListener 已被弃用,请尝试使用 SensorEventListener!

      【讨论】:

        【解决方案3】:

        校准方向的方法有很多,例如使用其他传感器数据进行校准(例如陀螺仪和加速度计),或使用统计模型(例如粒子滤波器和卡尔曼滤波器)。此演示文稿讨论了工业中用于校准运动传感器的一些最新技术:https://www.youtube.com/watch?v=C7JQ7Rpwn2k

        【讨论】:

          猜你喜欢
          • 2012-06-11
          • 2015-03-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-04-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多