Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


La brújula android parece poco fiable

He estado trabajando en una pequeña aplicación de la brújula el pasado par de días, y han conseguido el código para arriba y funcionando, pero parece que la lectura de la brújula no es exacta. Después de calibrar ambos teléfonos, mi primera prueba que encontré esto en lo que simplemente sostuve el teléfono contra y la superficie plana miró a la lectura, luego volteado horizontalmente y lo puso contra la misma superficie plana (un 180 * turno) y el valor lo hizo No cambiar 180 * estaba más cerca de 240 *.

Entonces probé la lectura vs una brújula, a veces la lectura parecía estar cerca, pero en otros puntos era más de 50 * off. Incluso traté de poner mi teléfono y la brújula en el suelo para mantener las brújulas lejos de cualquier interferencia magnética con los mismos resultados (nota que también mantener la brújula y el teléfono aparte manteniéndolos en la misma dirección haciendo cola con los bordes de un libro) .

  • ¿Cómo detectar la presencia del usuario en android?
  • GetSystemServices es indefinido cuando se llama en un fragmento?
  • Gesto MultiSelect como la aplicación Google Fotos
  • Inconsistencia de SensorEvent.timestamp
  • SCREEN_ORIENTATION_LANDSCAPE al revés - ¿Por qué?
  • ¿Qué ocurre con mi técnica de monitorización de sensores?
  • A continuación, poner la aplicación de muestra en otro teléfono (primero fue nexo S, en segundo lugar fue Motorola droid 1). Entre los dos teléfonos la diferencia varía de ser igual en algunos puntos pero en la mayoría de los puntos que están entre 50 y 15 grados apagado.

    He mirado a través de la documentación y también he mirado a través de muchos mensajes diferentes del foro y no veo a nadie con los mismos resultados. Puede haber algún pequeño error en mi código que esté causando que mi lectura salga incorrectamente, o algún error documentado que no esté viendo.

    ¡Cualquier penetración o sugerencias sería apreciada grandemente !!

    Heres my en el sensor de código cambiado en mi clase SensorEventListener

    public void onSensorChanged(SensorEvent event) { // If the sensor data is unreliable return if (event.accuracy == SensorManager.SENSOR_STATUS_UNRELIABLE) { Toast.makeText(main.this, "Sensor Status Unreliable",Toast.LENGTH_SHORT).show(); } // Gets the value of the sensor that has been changed switch (event.sensor.getType()) { case Sensor.TYPE_ACCELEROMETER: m_vfgravity = event.values.clone(); break; case Sensor.TYPE_MAGNETIC_FIELD: m_vfgeomag = event.values.clone(); break; } if (m_vfgravity != null && m_vfgeomag != null) { if(SensorManager.getRotationMatrix(m_vfinR, m_vfI, m_vfgravity, m_vfgeomag)) { SensorManager.getOrientation(m_vfinR, m_vforientVals); m_fCompBearing = (float) Math.round((Math.toDegrees(m_vforientVals[0])) *2)/2; //convert to 0-360 from -180-180 if(m_fCompBearing < 0.0) { m_fCompBearing = 360 + m_fCompBearing; } mCompHead.setText("" + (int)m_fCompBearing); } calcOffset(); rotateCmp(); } } 

    Y el código de la creación de mi actividad

      mSMngr = (SensorManager) getSystemService(Context.SENSOR_SERVICE); mSListener = new cSensorListener(); mSMngr.registerListener(mSListener, mSMngr.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD), SensorManager.SENSOR_DELAY_UI); mSMngr.registerListener(mSListener, mSMngr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_UI); 

    ¡Gracias por adelantado!

    Edit: también lo intentó con el droide X con los peores resultados aún … Cuando el teléfono se enrolla alrededor de 45 grados (girado alrededor del eje z un sistema de coordenadas de la computadora) el rumbo de la brújula devuelto puede cambiar más de 180 grados, de hecho el valor del título Va en la dirección opuesta de los otros teléfonos cuando se hace girar en la misma dirección. Este es el único teléfono que produce este resultado incluso después de calibrar en los ajustes. También es una brújula en vivo de fondo de pantalla de prueba que no tiene el mismo problema. Por lo tanto, asumiría que habría algo que puedo hacer en el software para evitar esto.

  • Cómo usar la función "Seleccionar depuración de la aplicación" y "esperar a que el depurador" nueva característica en jelly bean?
  • Función nativa no se ha encontrado ninguna implementación
  • Carga perezosa de imágenes en ListView
  • SimpleXML Constructor Exception - No se puede crear Inner Class
  • AS obligar a utilizar android SDK Build Tools 25.0.0 SDK herramientas de compilación revisión (23.0.3) es demasiado bajo para el proyecto
  • Agregar barra de herramientas de búsqueda sobre google map como en la aplicación nativa de Android
  • 3 Solutions collect form web for “La brújula android parece poco fiable”

    A pesar de que el autor respondió a su propia pregunta que tengo que chime aquí sólo para reforzar la casi total inutilidad de cualquier tipo de brújula funcionalidad en la plataforma Android.

    He llegado a la conclusión de que cualquier persona que depende de una aplicación de brújula de Android está pidiendo problemas, ninguno de ellos funciona de manera fiable y no es culpa del desarrollador.

    Google y el mfg simplemente no han proporcionado una manera de obtener una precisión fiable de estos dispositivos, o incluso para determinar si la precisión es confiable, que es aún peor porque a veces son y muchas veces no lo son y si alguien confía en estos dispositivos para la orientación real Que Dios los ayude.

    La razón por la que el autor probablemente piensa que está obteniendo mejores resultados es que utilizan un filtro de ruido bastante bueno en el sensor de orientación obsoleto (por qué no podían hacer esto en el método más reciente está más allá de mí) y en pruebas limitadas en un solo dispositivo después de la calibración Esto parecerá trabajar, pero en el campo que usa muchos dispositivos he encontrado que para la mayor parte la confiabilidad está siempre en la pregunta.

    En primer lugar, el ruido generado por los sensores magnéticos y de orientación son horribles, sí, esto puede superarse con las técnicas adecuadas de DSP, y con los teléfonos 2.3 y gyro habilitado se mejorará en general, pero la vergüenza de Google y Mfg por perder tanto tiempo desarrollador con Malas implementaciones de salidas de hardware y software.

    En segundo lugar, he probado por lo menos 18 teléfonos con el filtro adecuado DSP en su lugar y mientras que limpia el ruido que no ayuda con la precisión, incluso el mismo modelo de teléfonos tienen salidas diferentes (aunque algunos modelos parecen mejores que otros)

    En tercer lugar usted tiene poco en la forma de determinar si los sensores están calibrados, incluso haciendo la figura espástica 8 movimiento puede o no calibrar el teléfono y el usuario nunca sabe realmente si está funcionando o no, a menos que tenga una brújula para verificar, que Tipo de derrotas el punto ¿no?

    NOTA: puede multiplicar y sumar los sensores magnéticos entre sí y tomar la raíz cuadrada de ese sqrt (x * x + y * y + z * z) y asegurarse de que está entre 25 y 65 o así, este es un indicador que Puede utilizar para detectar campos anómalos, pero no es completamente fiable, mejor que nada, supongo.

    En cuarto lugar, muchos teléfonos son completamente confiables, calibrados o no, que no se limita a los tipos de modelo, pero posiblemente QA de mala calidad por parte de la mfg, realmente no sé por qué, pero puedo decir que 3 HTC ARIA produjo resultados tremendamente diferentes Uno 30 grados apagado, los otros 50, y un tercero casi el punto encendido) lo mismo con el nexo increíble, etc.

    He probado 18 teléfonos y muchos fueron muy cerca de la precisión si se puede calibrar correctamente, pero muchos de los que tomó 2-10 try (verificamos después de cada intento de calibración con una brújula de alta precisión) y más de unas pocas veces simplemente no calibrar en absoluto.

    NOTA: usted tiene que dar cuenta de la declinación de un verdadero norte de compensación, que se puede hacer con la API en android si tiene acceso a las coordenadas GPS actuales, altitud, hora del día, etc el problema no fue la declinación y si usted es Comparando con una brújula que no es un problema de todos modos ya que también será afectada por los campos magnéticos locales.

    Fith, los arranques en frío siempre requieren el paso de calibración en cada teléfono que probamos, que incluye el X, el increíble, el Aria, el Nexus y el Thunderbolt. En otras palabras, la primera vez que inicie el sensor de escuchar el 95% del tiempo que se requiere un paso de calibración (incluso un reloj roto es el derecho dos veces al día) por lo que si usted insiste en añadir esta funcionalidad me gustaría decirle a su usuario a hacerlo en El inicio de cada evento de escucha.

    Si deja a los senors funcionando (malo para la batería) entonces usted puede o no puede tener que recalibrar dependiendo de los campos que se encuentre) el método antedicho funciona bien para eso.

    La conclusión es que cuando funcionan se ven bien, pero nunca se puede estar seguro de la exactitud del azimut, lo que los hace bastante poco fiable e inútil para cualquier trabajo real.

    Personalmente, yo usaría un GPS teniendo en movimiento y luego un método de vector de rotación, si es posible, puede que no sea perfecto, pero sería un diablo mucho mejor que la implementación craptacular que tiene en la línea actual de teléfonos para el acimut.

    Lo siento por la larga respuesta sin fin, pero he perdido casi un mes en tratar de conseguir que funcione con la ayuda de un experto ingeniero DSP y tenemos bastante escrito de la plataforma androide como útil en este sentido.

    A "A veces esto funciona, otras veces no lo hará, nunca se puede estar seguro a menos que tenga una brújula real" se debe poner la exención de responsabilidad en cada aplicación de brújula en mi opinión.

    Bueno después de muchas pruebas y depuración. Llegué a la conclusión de que sí, como algunos de ustedes mencionaron las diferencias de mi droid 1 y Nexus S fueron puramente la diferencia de hardware y la interferencia magnética.

    Sin embargo, el Droid X era un problema diferente, lo que intenté no pude obtener las lecturas correctas de la manera recomendada con getRotationMatrix y getOrientation, incluso cuando se agrega la función de coordenadas de re-mapa. Así que después de algunos ajustes sin éxito me di cuenta de id dar la forma de sensor de orientación un tiro.

    Google dice que esta manera es obsoleta y recomiendan hacerlo de la manera que empecé con, sin embargo he intentado todos los tipos de combinaciones con esa manera sin éxito. Así que seguí adelante e ignoré su advertencia y usé el sensor de orientación … y funcionó. Por qué ? No tengo ni idea, el droide x es más reciente que mi droide 1 por lo que no debería tener que ver con el uso de código heredado. Sin embargo tiene sentido por qué las aplicaciones de la brújula escribieron a la meta 1.6 funcionaría mientras mi aplicación haciendo la "forma recomendada" no funcionaba.

    Si alguien tiene alguna forma mejor de hacer esto, házmelo saber, o si sabes una manera de hacerlo funcionar con getRotationMatrix y getOrientation también lo dices.

    De lo contrario para cualquier otra persona que golpea esta pared de ladrillo tan duro como lo hice aquí el código que terminó trabajando para mí.

    Mi sensor de encendido cambió

      switch (event.sensor.getType()) { case Sensor.TYPE_ORIENTATION: m_vforientVals = event.values.clone(); break; } if(m_vforientVals != null) { m_fCompBearing = m_vforientVals[0]; mCompHead.setText("" + (int)m_fCompBearing); calcOffset(); rotateCmp(); } 

    E inicializar el detector de sensores

      mSMngr.registerListener(mSListener,mSMngr.getDefaultSensor(Sensor.TYPE_ORIENTATION), SensorManager.SENSOR_DELAY_NORMAL); 

    Su código me parece bien, si hubiera un error en su código, estoy bastante seguro de que ambos dispositivos sufrirán de eso. Creo que es el hardware en los dispositivos que está causando las diferencias. ¿Ha "calibrado" los dos compases moviendo el teléfono en la figura ocho formas? Muchas aplicaciones de brújula sugieren que, incluyendo el software de mapas que viene con dispositivos symbian. Eso podría funcionar

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.