android sensortag azimut para la brújula no está funcionando (código java)

Estoy utilizando Sensortag cc2541 como un sensor conectado a un NEXUX 5 a través de bluetooth. Así que el código de abajo no tiene el típico onSensorChanged ya que no está utilizando los sensores del teléfono en sí. En su lugar, utiliza los métodos del sensortag cc2541.

Quiero hacer una brújula simple y hacer algunas investigaciones y se me ocurrió lo siguiente.

Por lo que he leído en Internet, Azimuth debe ser la dirección (alrededor de Z) de la brújula. Sin embargo, no obtengo la lectura correcta.

También he incluido imágenes que muestran la orientación del accelerometer y del magnetometer del sensor.

Orientación del acelerómetro

Acelerómetro

Orientación Magnetómetro

Magnetómetro

Código

 public class ManagerListener extends SensorTagLoggerListener implements SensorTagListener { private float[] gravityData = new float[3]; private float[] geomagneticData = new float[3]; private double azimuth,pitch,roll; @Override public void onUpdateAccelerometer(SensorTagManager mgr, Point3D acc) { super.onUpdateAccelerometer(mgr, acc); gravityData[0] = (float)acc.x; gravityData[1] = (float)acc.y; gravityData[2] = (float)acc.z; } @Override public void onUpdateMagnetometer(SensorTagManager mgr, Point3D b) { super.onUpdateMagnetometer(mgr, b); geomagneticData[0] = (float) -by; geomagneticData[1] = (float) bx; geomagneticData[2] = (float) -bz; float I[] = new float[9]; float R[] = new float[9]; boolean success = SensorManager.getRotationMatrix(R, I, gravityData, geomagneticData); if (success) { float orientationMatrix[] = new float[3]; SensorManager.getOrientation(R, orientationMatrix); azimuth = Math.toDegrees(orientationMatrix[0]); pitch = Math.toDegrees(orientationMatrix[1]); roll = Math.toDegrees(orientationMatrix[2]); } final float rotation = (float) azimuth; final String xyz = "Azimuth:\t" + String.valueOf(Math.round(azimuth)) + "\nPitch:\t" + String.valueOf(Math.round(pitch)) + "\nRoll:\t" + String.valueOf(Math.round(roll)); runOnUiThread(new Runnable() { @Override public void run() { degree.setText(xyz); pointer.setRotation(rotation); } }); } } 

Las funciones onUpdateAccelerometer y onUpdateMagnetometer son anulación de la biblioteca de etiquetas de sensor. Ese no es el problema. Es lo que dentro del problema.

Además, tanto el magnetómetro como el acelerómetro obtienen valores cada 100 ms.


Estoy tratando de hacer una brújula SIMPLE. La única diferencia entre mi aplicación y la brújula normal es que tengo que usar el SensorTag y su biblioteca. He puesto el código. Hay métodos como onUpdateAccelerometer etc … estos métodos son autoexplicativos. Point3D tiene x, y, z como campos. grado y puntero son sólo texto para mostrar y la imagen de la brújula para girar. Por favor, eche un vistazo a esta sencilla y corta aplicación que he encontrado en Internet https://www.sendspace.com/file/62ubk7 Quiero algo similar a esto, pero con las bibliotecas de mi sensorTag. He puesto lo que he hecho hasta ahora y he hecho mucha investigación. Si alguien me puede ayudar a encontrar dónde está mi error, yo les daría con mucho gusto las recompensas.

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