Problema de orientación del teléfono



  • He probado dos aplicaciones. Una de ellas es un nivel de burbuja y la otra una cámara de fotos y detecto que parece ser que el móvil no está bien calibrado, ya que con las dos aplicaciones detecto el mismo comportamiento:

    1. Si el móvil lo tengo en horizontal, tendido, comparando con un nivel, el nivel que se muestra en pantalla es el mismo
    2. Si pongo el móvil en vertical, la posición normal, comparando con un nivel, tengo que inclinarlo para que me diga que tiene cero grados de inclinación.

    La desviación es entre 3 y 4 grados.

    ¿le pasa a más gente?

    Las aplicaciones y algún comentario algo más técnico:
    En google play: https://play.google.com/store/apps/details?id=net.sourceforge.opencamera&hl=es
    Código fuente: https://sourceforge.net/projects/opencamera/files/

    En google play: https://play.google.com/store/apps/details?id=net.androgames.level&hl=es
    Código fuente: https://github.com/avianey/Level
    Echando un ojo al código fuente veo que utiliza:
    https://developer.android.com/reference/android/hardware/SensorManager.html#getRotationMatrix(float[], float[], float[], float[])
    y
    https://developer.android.com/reference/android/hardware/SensorManager.html#getOrientation(float[], float[])

    Que a su vez se basan en https://developer.android.com/reference/android/hardware/Sensor.html#TYPE_MAGNETIC_FIELD por lo cuál, entiendo que bien es un problema de descalibrado sotware o bien hardware relacionado con los sensores magnéticos.



  • Buenas tardes, 


    @naobq Te recomiendo contactar con soporte para que puedan ayudarte con esta incidencia. Contacta con nuestros compañeros desde aquí: https://www.bq.com/es/support/.

    Un saludo,



  • Gracias. Voy a contactar entonces.



  • Me ha llamado del servicio técnico. Me han dicho que lo comente aquí a ver si alguien ha tenido el mismo problema y si se ha resuelto. Les he comentado que es lo primero que he hecho a lo que al final me comentan, que si quiero espere a ver si alguien comenta algo y si no que me recogerían el teléfono para revisarlo y luego devolvérmelo.

    No me acordé de preguntar. Tanto la recogida como la devolución corre a cuenta de BQ, ¿no?


  • MVP

    He estado probando esta app y utiliza el sensor magnético y el giroscopio para realizar la medición. Lo primero que debes hacer es callibrar el sensor magnético. Se explica cómo hacerlo en este hilo:

    http://www.mibqyyo.com/comunidad/discussion/57072/brújula-invertida/p1

    Una vez calibrado bien, el sensor magnético, abrimos la app "nivel" y ponemos el móvil en una superficie nivelada y en la posición que queramos medir: vertical, horizontal o plana. A continuación le damos a calibar (escucharemos el pitido si no lo hemos desconectado). Ahora el giroscopio se habrá calibrado acorde a la posición del nivel y nos hará una correcta medición en esa posición del móvil.

    Si cambiamos la posición del móvil (por ejemplo de vertical a horizontal) debemos de dar a "calibrar" de nuevo, para que se adapte el giroscopio a la nueva posición y no se mueva. Si no hacemos esta práctica, el nivel no hará su medición de forma precisa y efectivamente variará unos grados su inclinación. Para eso está lo de calibrar.

    Haciendo lo que te he comentado, debería de funcionarte correctamente. 😉



  • valle2305 dijo:
    He estado probando esta app y utiliza el sensor magnético y el giroscopio para realizar la medición. Lo primero que debes hacer es callibrar el sensor magnético. Se explica cómo hacerlo en este hilo:

    http://www.mibqyyo.com/comunidad/discussion/57072/brújula-invertida/p1



    Cierto, usa esos dos sensores, por eso decía que podía ser software (al combinar las mediciones de ambos sensores) o bien hardware (al tomar la información del sensor). Voy a ver ese hilo a ver qué pone, gracias.

    valle2305 dijo:
    Si cambiamos la posición del móvil (por ejemplo de vertical a horizontal) debemos de dar a "calibrar" de nuevo, para que se adapte el giroscopio a la nueva posición y no se mueva. Si no hacemos esta práctica, el nivel no hará su medición de forma precisa y efectivamente variará unos grados su inclinación. Para eso está lo de calibrar.

    Haciendo lo que te he comentado, debería de funcionarte correctamente. 😉




    Sí, si hago ese calibrado funciona, eso sí lo había probado de principio, pero ese calibrado es para esa aplicación concreta y para ese posición que pongas. Lo que hace el la aplicación al calibrar es guardar esa posición como referencia para ella misma, por lo que para mi no está calibrado, está calibrada esa aplicación porque te permite hacer eso.

    Si ahora abro la aplicación de cámara (openCamera), que también tiene un nivel, los valores siguen siendo los mismos que al principio, si vuelvo a la aplicación del nivel, pues los calibrados con la aplicación anteriormente.

    He probado con un BQ X5 y tanto en la aplicación de la cámara como en la del nivel los valores son los esperados.

    Muchas gracias por hacer pruebas y comentar 🙂


  • MVP

    De nada. 😉

    Yo la app Open Camera no la utilizo y no sé los parámetros que mostrará. No quería meterme demasiado en el tema (por lo liado que puede ser). Realmente, el nivel utiliza el sensor de orientación que no es físico si no tan solo software. Está basado en los sensores: acelerómetro, magnetómetro y giroscopio que sí son físicos (hardware).

    El sensor magnético se calibra tal y como se explica en el hilo enlazado y es el que más influye en la mala medición de la orientación.

    En el nivel toroidal (posición plana) es en el que más se deja notar la orientación, pues nos mide tanto el cabeceo (pitch) como el alabeo o guiñado (roll). En el nivel tradicional, tan solo influyen el giroscopio y el acelerómetro. Si calibras en las 3 posiciones en una superficie plana "totalmente", tendrás calibrado el nivel para utilizarlo en cualquier posición. Lo puedes hacer, por ejemplo, en una mesa con una orientación perfecta a los 3 ejes (x,y, z).

    La sensibilidad de los 3 sensores (acelerómetro, magnético y giroscopio) al movimiento es bastante alta y por eso dan unos valores aproximados de la orientación.

    La calibración es fundamental para un correcto funcionamiento.

    No obstante, puedes comprobar si la orientación en tu terminal es correcta con una app específica para mirar los sensores. Comprueba los valores de cabeceo o pitch (x), de guiñado o roll (y) y de acimut (z).

    Con ésta lo puedes ver de forma gráfica:

    https://play.google.com/store/apps/details?id=com.fivasim.androsensor

    Pero los valores oscilan mucho (son muy sensibles) y a mí me gusta mirarlos en el apartado "sensores" con esta otra app, que está más optimizada para esta medición.

    https://play.google.com/store/apps/details?id=com.cpuid.cpu_z


  • MVP

    @naobq, has podido comprobar si tu terminal da de forma correcta la orientación ??

    Si no te aclaras, puedes enviarme una captura de CPU-Z donde se vea la medición de la orientación con el móvil apoyado en una mesa (que más o menos esté nivelada).

    Me interesan fundamentalmente los datos de cabeceo y guiñado (Pitch y roll). El acimut me da igual puesto que el valor que da es respecto al norte magnético, además me da igual el giro del móvil.

    PD: si algún día necesitas tomar el acimut real (respecto al norte geográfico) lo puedes hacer con la app que nombro, en el hilo enlazado para calibrar el sensor magnético. En ella, si tienes activa la ubicación te da la declinación magnética para el cálculo, en función de tus coordenadas locales y para la fecha actual. Es decir, de forma directa para ser aplicada. Aquí en Canarias es fundamental este dato pues estamos con una Declinación negativa, superior a 5° (OJO!! En grados sexagesimales y no en gradianes). 😉





  • Gracias @{valle2305} .

    valle2305 dijo:
    De nada. 😉

    Yo la app Open Camera no la utilizo y no sé los parámetros que mostrará. No quería meterme demasiado en el tema (por lo liado que puede ser). Realmente, el nivel utiliza el sensor de orientación que no es físico si no tan solo software. Está basado en los sensores: acelerómetro, magnetómetro y giroscopio que sí son físicos (hardware).


    Sí sí, ya, eso está claro, bueno, no me había dado cuenta del acelerómetro, pero sí, es un sensor ficticio, unos cálculos que se hacen en base a las lecturas de los sensores reales. Vamos, según lo que pone en la API de sensores de android.



    valle2305 dijo:

    Yo la app Open Camera no la utilizo y no sé los parámetros que mostrará. No quería meterme demasiado en el tema (por lo liado que puede ser). Realmente, el nivel utiliza el sensor de orientación que no es físico si no tan solo software. Está basado en los sensores: acelerómetro, magnetómetro y giroscopio que sí son físicos (hardware).

    El sensor magnético se calibra tal y como se explica en el hilo enlazado y es el que más influye en la mala medición de la orientación.


    He leído el hilo y lo he hecho, pero siguen saliendo los mismos valores al volver a probar las aplicaciones esas que comentaba.

    valle2305 dijo:

    En el nivel toroidal (posición plana) es en el que más se deja notar la orientación, pues nos mide tanto el cabeceo (pitch) como el alabeo o guiñado (roll). En el nivel tradicional, tan solo influyen el giroscopio y el acelerómetro. Si calibras en las 3 posiciones en una superficie plana "totalmente", tendrás calibrado el nivel para utilizarlo en cualquier posición. Lo puedes hacer, por ejemplo, en una mesa con una orientación perfecta a los 3 ejes (x,y, z).

    La sensibilidad de los 3 sensores (acelerómetro, magnético y giroscopio) al movimiento es bastante alta y por eso dan unos valores aproximados de la orientación.

    La calibración es fundamental para un correcto funcionamiento.

    No obstante, puedes comprobar si la orientación en tu terminal es correcta con una app específica para mirar los sensores. Comprueba los valores de cabeceo o pitch (x), de guiñado o roll (y) y de acimut (z).

    Con ésta lo puedes ver de forma gráfica:

    https://play.google.com/store/apps/details?id=com.fivasim.androsensor

    Pero los valores oscilan mucho (son muy sensibles) y a mí me gusta mirarlos en el apartado "sensores" con esta otra app, que está más optimizada para esta medición.

    https://play.google.com/store/apps/details?id=com.cpuid.cpu_z


    CPU_Z fue el primero que me instalé, pero no sabía bien cómo sacar los valores de ahí. Luego saco un ratillo y te comento todo lo que vea iy te mando capturas. De nuevo, muchas gracias! Probé aye con otro BQ M5,  y este, en vertigal daba una desviación de 7 u 8 grados (no recuedo bien) y en horizontal estaba bien.

    He probado también unas aplicaciones de brújula. Lo dicho, en cuanto saque luego un rato pongo capturas y las aplicaciones que he usado.


  • MVP

    Vale de acuerdo, cuando puedas. Tienes que mirar "BOSCH Orientation Sensor".

    En una mesa bien nivelada, Pitch y Roll tienen que dar próximos a cero. Entre 0 y 1.

    Para hacer estas mediciones debes haber calibrado la brújula tal y como indico en el hilo (esa app te ayudará a comprobarlo, para mí es la mejor). Después dejar reposar el móvil (5 minutos) porque lo que es bueno para la brújula es malo para el giroscopio ( no deja de variar y calcular el momento angular).

    A continuación compruebas con CPU-Z, si te da valores dispares (y la mesa está bien nivelada en los dos ejes, x e y, es decir totalmente plana), sal de CPU-Z y lentamente vete apoyando el móvil primero en vertical y luego en horizontal (en sus 4 caras). Seguidamente, lo vuelves a apoyar en plano, encima de la mesa y abres CPU-Z de nuevo para comprobar Pitch y Roll.

    Si tienes dudas, consulta lo que necesites. Una vez calibrados todos los sensores las mediciones serán muy precisas. La orientación del M5, funciaona realmente bien. 🙂