Autor Tema: Magnetometro - UAV's  (Leído 41753 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado chavaroon

  • PIC10
  • *
  • Mensajes: 4
Re: Magnetometro - UAV's
« Respuesta #15 en: 25 de Marzo de 2015, 14:46:48 »
Oye elgarbe, ¿al obtener los datos en Excel (Que no sé cómo lo haces), lo haces moviendo de algún modo al Magnetómetro? ¿O dejas al sensor estático? Tengo esa curiosidad, pues estoy tratando de calibrar el mío. Para calibrarlo en realidad solo hago múltiples mediciones y obtengo los mínimos y máximos de los ejes X y Y. Tomo esa diferencia en los ejes y se la resto a las nuevas mediciones. Pero no logro obtener buenos resultados. Supongo pues que es en la calibración.

para calibrar tenes que rotar 360º el sensor en un solo eje y almacenar lo obtenido, luego en otro eje y luego en otro. Luego se grafica en excel y se obtiene el offset en cada eje.
No debe haber objetos metálicos serca ni campos magneticos ni electricos potentes.

sds.

Gracias por el dato, oye y aprovechando ¿Cómo haces las gráficas X y Y? ¿Qué software utilizas o qué onda?
Ah, por cierto. En tu opinión: ¿Qué objetos afectan la calibración del Magnetómetro? Porque tengo en mi escritorio Bocinas, Celulares, un RadioControl, una Batería y motores DC y Brushless Jaja


Ya supe como graficar en tiempo real directamente en Excel, si alguien está interesado haga clic en la liga siguiente: https://www.parallax.com/downloads/plx-daq
Es bastante sencillo de integrar.

Ahora, sobre el magnetómetro. ¿Es correcto decir que esta calibración que se hizo (ajustar el offset para centrar el origen en 0,0 ) es el llamado soft-iron?

Desconectado cyberian

  • PIC10
  • *
  • Mensajes: 14
Re: Magnetometro - UAV's
« Respuesta #16 en: 22 de Junio de 2015, 03:21:08 »
Hola, quería saber si voy bien orientado, soy nuevo en esto de las IMU. Tengo una IMU GY-87, ya logré acceder a los datos RAW del acelerómetro, giróscopo que están en la IMU6050 y mediante baypass configurar el magentómetro HMC5883L, que una vez configurado, accedo a él mediante la IMU6050 en modo master. Todo por ahora en un PIC18F45K20, después tengo que pasar a un dsPIC y un Cortex M4 de Texas. La idea es hacer fusión sensorial sin usar el módulo DMP de la IMU6050 (según el datasheet, tiene soporte integrado completo de fusión de datos de acelerómetro, giróscopo y acelerómetro conectado al puerto I2C auxiliar) pero según estuve investigando, es mentira, no hay soporte completo, la fuente de esto es la página de I2Cdev, donde ellos aseguran que esto lo han dicho los empleados de IvenSense. Usando Kalman, quiero fusionar el acelerómetro y giróscopo para obtener roll, pitch y sus derivadas (velocidades angulares) y mediante fusión del giróscopo y magnetómetro, obtener el yaw y su derivada.
Por ahora logré importar todos los datos en modo RAW a Wolfram Mathematica 10.1 en tiempo real (mediante RS232 y Dynamic), ahí en tiempo real aplico Kalman para fusión de sensores y visualización. Una vez que todo funcione, esto se resolverá dentro del dsPIC y el Cortex M4 de texas (TM4C123GH6PM).
Leí que hay que obtener el offset del magnetómetro en 3D, y se me ocurrió utilizar los datos obtenidos en tiempo real, almacenarlos en una lista y realizar un ajuste implícito no lineal para estimar un elipsoide y obtener los semiejes (que representarían en gauss el campo magnético terrestre) y el centro, que representaría el offset en los tres ejes. Unos puntos se me salieron del elipsoide porque pasé muy cerca de los cables de la fuente, y se notó el desvío, ahora estoy poniendo cablés más largos para hacer nuevas pruebas, y ajustar un elipsoide que incluya rotaciones (la ecuación de la superficie cuádrica completa en 3D y así el ajuste sea mejor).
Con respecto a cómo tomé los datos, es simple, moviendo libremente el magnetómetro todo lo que se pueda, sin restricciones -salvo pasarlo cerca de los cables- (porque una corriente genera campos que causan desvíos en las mediciones). Miestras más giros completos en toda dirección y sentido se dé, mejor para el ajuste. Saludos a todos.
« Última modificación: 22 de Junio de 2015, 03:29:45 por cyberian »

Desconectado elgarbe

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2178
Re: Magnetometro - UAV's
« Respuesta #17 en: 22 de Junio de 2015, 09:21:32 »
vas perfecto y estoy muy interesado en tu trabajo. Si quieres abrir un post nuevo aquí para mostrar losavances serían muy bien venidos!!
Cuando pases al TM4C contá conmigo para trabajar en el código.

Yo estoy metido en el proyecto MatrixPilot, para portar ese autopilot a un STM32F4 y como consejo te puedo decir que busques trabajar con sensores SPI. Yo tengo conectado el MPU6000 con SPI y usando DMA el micro ni se entera de la lectura de los datos. Podes tener un refresh rate grandísimo.

Saludos!
-
Leonardo Garberoglio

Desconectado cyberian

  • PIC10
  • *
  • Mensajes: 14
Re: Magnetometro - UAV's
« Respuesta #18 en: 22 de Junio de 2015, 09:36:37 »
Muchas gracias!!!, sí, con la comunicación I2C estoy muy limitado en cuanto a la fracuencia de muestreo, no puedo superar por mucho los 200 Hz, pero esta IMU ya viene así. Acabo de comprar esta IMU, http://www.aliexpress.com/snapshot/6736509118.html?orderId=67829496724044
estoy esperando a que llegue.
No sé si con esa frecuencia de muestreo que estoy logrando pueda hacer una caracterización del sistema para obtener la función de transferencia con MATLAB. Unos compañeros están teniendo problemas para estabilizar el cuadcóptero, pero están unsando el módulo DMP para fusionar los datos, yo quiero hacerlo con Kalman y poder comparar.
¿Qué opinión tienen respecto a la MPU-9250 9-eje actitud + giroscopio + acelerador + magnetómetro? es SPI, por eso la compré, tarda 39 días en llegar a Argentina, mientras tanto experimento con la que tengo, para adquirir experiencia.
Hace poco terminé el curso que dictó la Universidad de Texas en Austin sobre Sistemas Embebidos, ahí conocí la TIVA launchpad, compré algunas en TI y pedí varias muestras del CORTEX, así que tengo para entretenerme.
Ahora que nombrás los DMA, voy a intentar usarlos en el dsPIC -ya que en el curso no vimos el uso del DMA en el Cortex-, que también tengo en todos los colores, jajaja. Por ahora estoy pasando el código al dsPIC33FJ128MC804 que trabaja a 40MIP, pero tengo otros más fuertes que llegan a 70MIPS, pero tengo que hacer las placas. Saludos y gracias por la orientación. Apenas tenga la fusión hecha en Mathematica, comparto el archivo, además necesito estimar las matrices de covarianza de los sensores, para que Kalman funcione mejor. Mathematica hace el trabajo, ya lo hice para el acelerómetro y giróscopo, ahora trabajaré sobre el magnetómetro. Abrazos!!!

Desconectado elgarbe

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2178
Re: Magnetometro - UAV's
« Respuesta #19 en: 22 de Junio de 2015, 10:50:00 »
Muchas gracias!!!, sí, con la comunicación I2C estoy muy limitado en cuanto a la fracuencia de muestreo, no puedo superar por mucho los 200 Hz, pero esta IMU ya viene así. Acabo de comprar esta IMU, http://www.aliexpress.com/snapshot/6736509118.html?orderId=67829496724044
estoy esperando a que llegue.
No sé si con esa frecuencia de muestreo que estoy logrando pueda hacer una caracterización del sistema para obtener la función de transferencia con MATLAB. Unos compañeros están teniendo problemas para estabilizar el cuadcóptero, pero están unsando el módulo DMP para fusionar los datos, yo quiero hacerlo con Kalman y poder comparar.
¿Qué opinión tienen respecto a la MPU-9250 9-eje actitud + giroscopio + acelerador + magnetómetro? es SPI, por eso la compré, tarda 39 días en llegar a Argentina, mientras tanto experimento con la que tengo, para adquirir experiencia.
Hace poco terminé el curso que dictó la Universidad de Texas en Austin sobre Sistemas Embebidos, ahí conocí la TIVA launchpad, compré algunas en TI y pedí varias muestras del CORTEX, así que tengo para entretenerme.
Ahora que nombrás los DMA, voy a intentar usarlos en el dsPIC -ya que en el curso no vimos el uso del DMA en el Cortex-, que también tengo en todos los colores, jajaja. Por ahora estoy pasando el código al dsPIC33FJ128MC804 que trabaja a 40MIP, pero tengo otros más fuertes que llegan a 70MIPS, pero tengo que hacer las placas. Saludos y gracias por la orientación. Apenas tenga la fusión hecha en Mathematica, comparto el archivo, además necesito estimar las matrices de covarianza de los sensores, para que Kalman funcione mejor. Mathematica hace el trabajo, ya lo hice para el acelerómetro y giróscopo, ahora trabajaré sobre el magnetómetro. Abrazos!!!

Tengo 2 de esas imu, me llegaron hace unas semanas y no tuve tiempo de probarlas. Tambien tengo 2 MPU9250 (el integradito suelto).
El curso de texas lo inicie dos veces, una el año pasado y otra este año y nunca me pude hacer tiempo para terminarlo. Tambien tengo la lunch pad y varias muestras del 123  :D
Mi consejo es, deja de lado el dsPIC. A no ser que necesites usarlo para otra cosa, pasate directamente a ARM, el que quieras, TI, ST, NXP, pero alejate cuanto antes de microchip!!!  :D
Yo estoy trabajando con una Núcleo de ST, la STM32F411, por USD10 tenes un M4F a 100MHz. Le hice un shield con el MPU6000, sd card, entrada para Rx, 6 salidas para servos o ESC y otras cositas más:


Si te interesa: http://www.todopic.com.ar/foros/index.php?topic=41978.0

Por cierto, a 200Hz tenes que poder estabilizar el quad. Ahora, a 1KHz como leo yo... podes mejorar bastante!

Me interesa la parte de levantar los datos en mathematica con 232. Podrías explicar un poco eso?

saludos!
-
Leonardo Garberoglio

Desconectado cyberian

  • PIC10
  • *
  • Mensajes: 14
Re: Magnetometro - UAV's
« Respuesta #20 en: 22 de Junio de 2015, 11:30:18 »
Sí, mi idea de comenzar a migrar de Microchip, en la Universidad de la Matanza dieron un curso de Sistemas Embebidos (uEA2015), fui desde Neuquén y fue desastroso el curso. Usamos la STM32 Discovery. Estoy con el dsPIC porque lo sé usar, y como tiene 2 módulos QEI, lo usé para hacer mis péndulos invertidos, y ahora que aprendí Kalman, estoy rehaciéndolos aplicando lo nuevo aprendido  :D. El proyecto de fusión de datos es para una materia de la facu, Introducción a los Vehículos Inteligentes, estuvo muy buena, y sumada a los tres cursos https://www.edx.org/course/autonomous-mobile-robots-ethx-amrx-0 https://www.edx.org/course/flight-vehicle-aerodynamics-mitx-16-110x https://www.edx.org/course/autonomous-navigation-flying-robots-tumx-autonavx-0 estoy muy motivado,  :-/
Te dejo un archivo que hice con Mathematica, para levantar los datos RAW enviados sólo por el acelerómetro, aplicarle Kalman en tiempo real y graficar en tiempo real el vector aceleración, con y sín filtro de Kalman. El algoritmo de Kalman recursivo lo hice yo, no usé las funciones build-in de Mathematica, pero ya las he comparado y dan exactamente lo mismo. Los datos los envío en formato little-endian, uno tras otro, sólo 6 datos enteros sin signo provenientes del acelerómetro. Después los convierto a enteros con signo de 16 bits en Mathematica, ahí está la función.
Saludos

Desconectado cyberian

  • PIC10
  • *
  • Mensajes: 14
Re: Magnetometro - UAV's
« Respuesta #21 en: 22 de Junio de 2015, 11:59:46 »
Listo, acá dejo el archivo de Mathematica para estimar el offset 3D del magnetómetro -esta vez tomé datos lejos de campos magnéticos-  :P. Dejo una comparativa antes y después de aplicar el ajuste. El color de los ejes es como la convención de programas CAD (Red-X, Green-Y, Blue-Z). Saludos.
« Última modificación: 22 de Junio de 2015, 14:12:39 por cyberian »

Desconectado Ranculche

  • PIC12
  • **
  • Mensajes: 74
Re: Magnetometro - UAV's
« Respuesta #22 en: 18 de Agosto de 2015, 16:03:14 »
Hola a todos. Escribo para preguntarles si alguno utilizo este magnetómetro como detector de metales? o tiene conocimiento de ello. Estoy probando uno para eso, pero no encuentro mucha info para dicha aplicación. Gracias!

Saludos.-

Desconectado Alfrematico

  • PIC10
  • *
  • Mensajes: 9
Re: Magnetometro - UAV's
« Respuesta #23 en: 07 de Octubre de 2015, 14:12:37 »
Saludos

estoy tratando de leer un Magnetometro HMC5883L via i2c usando una targeta C2000 piccolo launchpad de texas instruments, exactamente la C28027

estoy usando Simulink, libreria Embedded Coder, compilando el programa usando CCS 3.3 de texas intruments

he logrado leer los valores en bruto del magnetometro, pero necesito convertirlos a valores que me sirvan para determinar la orientacion de un cuadricoptero...es decir, que me indique el norte magnetico como si fuera una brujula normal, o que vaya de 0 a 360 grados y que se reinicie en 0 cuando llege a 360

mi pregunta es

¿como proceso los datos en bruto del magnetometro?

al leerlos en una GUI no tienen sentido, he leido que multiplican esos valores por la escala escogida, usan una arcotangente, etc...¿podrian explicarme esto mejor?

exactamente cual es el procedimiento matematico para formar angulos de orientacion y poder tomar una referencia?

no importa si es en codigo este procedimiento matematico, solo debo implementarlo en bloques de simulink

PD: ya logre determinar el eje X y Y de inclinacion usando la MPU6050, por si alguien le interesa mi modelo en simulink... converti los valores del acelerometro en grados, siendo 0 grados cuando está horizontal tanto en el eje X como el eje Y.

el magnetometro es para determinar la orientacion o el eje Z del cuadricoptero

Gracias




Desconectado elgarbe

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2178
Re: Magnetometro - UAV's
« Respuesta #24 en: 07 de Octubre de 2015, 14:44:55 »
En este post hago el cálculo del heading. Lo leiste?

la parte del código que hace ese cálculo es esta:

Código: [Seleccionar]
HMC5883L_read_data();

gaus_X = (float)mag_X * 0.92/1000 - 0.18305; //Resto el offset obtenido en el Excel
gaus_Y = (float)mag_Y * 0.92/1000 + 0.3271;
gaus_Z = (float)mag_Z * 0.92/1000;

heading = atan2(gaus_Y, gaus_X); //Calculo el ángulo respecto al Norte Magnético
if(heading < 0.0){ //Si el valor es negativo
heading += (2.0 * PI); //sumamos 2*Pi para que no queden cortes en transiciones
} // de 179° a -180°
if(heading > (2.0 * PI)){ // Por si el valor es mayor a 2 PI
heading -= (2.0 * PI);
}
heading *= (180.0 / PI); //Paso a °

como puedes ver, primero leemos los datos, luego los escalamos según la sensibilidad elegida y a la vez le aplicamos una correccion de offset. Esos coeficientes los obtenemos haciendo una calibracion soft iron. Algo de la teoría de eso esta en lospost anteriores.

Luego, esas componentes son los catetos adyacentes y opuestos de un triángulo rectángulo, cuya hipotenusa es la línea NORTE-SUR. Por eso, se utiliza la tangente del ángulo y para calcular el ángulo se utiliza el arco tangente.
Luego hay unas conversiones ya que, si no me equivoco atan2 devuelve un valor entre -180 y 180º entonces para transformarlo a 0-360º se utilizan las condiciones de abajo.

Para el quad, lo recomendable es usar el eje Z del giróscopo, integrando constantemente la velocidad angular para obtener el ángulo y luego, debido a que el giróscopo tiene drift, pues usar el dato de la brújula para acomodar los datos.

Saludos
-
Leonardo Garberoglio

Desconectado Alfrematico

  • PIC10
  • *
  • Mensajes: 9
Re:Magnetometro - UAV's
« Respuesta #25 en: 13 de Octubre de 2015, 12:07:45 »
Saludos

Gracias por la información de como calcular el heading, acabo de hacer un modelo en simulink y pronto les comentare los resultados. unas preguntas

ustedes calculan en angulo pitch y roll usando una fusion entre en gyroscopio y el acelerometro. Dandole mayor prioridad a lo que mide el giroscopio verdad? (cerca de un 98%)

¿es muy necesaria la fusion sensorial entre los 2 sensores?

el acelerometro por si solo me da unos angulos bastante aproximados a lo real, es bastante sensible a cualquier vibracion. por el momento estoy redondeando el angulo que mide. Esto lo hago debido a que estoy teniendo problemas de memoria en la targeta que estoy utilizando y hacer dicha fusion sensorial me llena la memoria ram de momento.

¿alguien ha utilizado una c2000 de texas instruments?

tiene una memoria flash bastante grande, de momento no se como compilar en ella. xD

igualmente para el eje Z, medirlo con el giroscopio y arreglarlo con el heading del magnetometro es lo que ustedes comentan.

¿que es el offset del magnetometro y como se calcula?

Gracias por la ayuda.

Desconectado elgarbe

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2178
Re:Magnetometro - UAV's
« Respuesta #26 en: 13 de Octubre de 2015, 13:39:49 »
ustedes calculan en angulo pitch y roll usando una fusion entre en gyroscopio y el acelerometro. Dandole mayor prioridad a lo que mide el giroscopio verdad? (cerca de un 98%)

Si

¿es muy necesaria la fusion sensorial entre los 2 sensores?

Indispensable. El acelerómetro tiene mucho ruido y el giróscopo tiene deriva. sueltos no sirven para estabilizar.

el acelerometro por si solo me da unos angulos bastante aproximados a lo real, es bastante sensible a cualquier vibracion. por el momento estoy redondeando el angulo que mide. Esto lo hago debido a que estoy teniendo problemas de memoria en la targeta que estoy utilizando y hacer dicha fusion sensorial me llena la memoria ram de momento.

¿alguien ha utilizado una c2000 de texas instruments?

Nop

tiene una memoria flash bastante grande, de momento no se como compilar en ella. xD

igualmente para el eje Z, medirlo con el giroscopio y arreglarlo con el heading del magnetometro es lo que ustedes comentan.

¿que es el offset del magnetometro y como se calcula?

Gracias por la ayuda.

leiste el post completo? http://www.todopic.com.ar/foros/index.php?topic=41981.msg349880#msg349880

saludos y ya nos comentas como te va con este tema!
-
Leonardo Garberoglio

Desconectado Alfrematico

  • PIC10
  • *
  • Mensajes: 9
Re:Magnetometro - UAV's
« Respuesta #27 en: 18 de Octubre de 2015, 00:05:47 »
Saludos

gracias a la fusion sensorial del acelerometro y el giroscopio obtengo unos angulos X y Y mas estables... pero aun no logro cuadrar el angulo z usando el magnetometro

he aqui parte mi modelo para procesar los datos del magnetometro HMC5883L en simulink, por ahora trato de obtener el heading y que este vaya de 0 a 360 grados... pero cuando se acerca a 280, baja a 40.


PD: en la imagen se ven los valores del offset con signo negativo, ya corregi esto

- recibe 6 bytes de 8 bits que corresponden a los valores H y L

siendo:
X_H
X_L
Z_H
Z_L
Y_H
Y_L

-fusiona los valores H y L

con esto obtengo los valores raw del magnetometro

a partir de aqui, el bloque arctan hace la siguiente operacion: atan2(B,A)

que seria lo que anteriormente publico elgarbe

                gaus_X = (float)mag_X * 0.92/1000 - 0.18305;   //Resto el offset obtenido en el Excel
      gaus_Y = (float)mag_Y * 0.92/1000 + 0.3271;
      gaus_Z = (float)mag_Z * 0.92/1000;

      heading = atan2(gaus_Y, gaus_X);   //Calculo el ángulo respecto al Norte Magnético
      if(heading < 0.0){               //Si el valor es negativo
         heading += (2.0 * PI);         //sumamos 2*Pi para que no queden cortes en transiciones
      }                           // de 179° a -180°
      if(heading > (2.0 * PI)){         // Por si el valor es mayor a 2 PI
         heading -= (2.0 * PI);
      }
      heading *= (180.0 / PI);         //Paso a °


los if están, si es mayor a 2*pi, si es menor que 0 y si el valor es mayor a 0

me falta algo en el calculo del heading?

para fusionarlo despues con el giroscopio traté de usar este ejemplo, de este saque la fusion sensorial para los angulos X Y y me funcionó muy bien... pero el YAW... no me funciona del todo bien...los valores cambian entre 200-260, a veces ni varia por mucho que gire el sensor

http://jujomaruiit.blogspot.com.co/2015/10/fusion-del-magnetometro-y-giroscopio.html?view=mosaic

posee una formula muy larga para calculo del yaw... a mi no funcionó

 roll = Roll * pi / 180;
pitch = Pitch * pi / 180;
 
sinroll = sin(roll);
cosroll = cos(roll);
sinpitch = sin(pitch);
cospitch = cos(pitch);

menosbfy = (bz * sinroll) - (by * cosroll);
bfx = (bx * cospitch) + (by * (sinpitch * sinroll)) + (bz * (sinpitch * cosroll));


yaw = (atan2(menosbfy , bfx) * 180/pi);

este angulo yaw es el que se mezclaria con el heading....

por ahora ¿el heading está bien?
¿como fusionan el heading del magnetometro con el giroscopio?
Gracias por la ayuda

Desconectado elgarbe

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2178
Re:Magnetometro - UAV's
« Respuesta #28 en: 19 de Octubre de 2015, 08:28:25 »
Ten en cuenta que esos Offset del magnetómetro me dio en mi calibracion. Tu tienes que hacer tu calibracion y obtener esos valores para tu caso. En esta misma serie de posts esta explicado como calcular el ofset de calibracion.

Un problema típico es saber si las funciones trigonométricas esperan º sexagesimales o si esperan radianes. A veces los calculos no dan bien por no pasar el parámetro en la unidad correcta.
El if despues del ATAN2 es por la discontinuidad de la funcion en pi radianes:

https://en.wikipedia.org/wiki/File:Atan2-discontinuity.svg

se usa atan2 porque va de 0 a 2pi (0º hasta 360º) (la arctan esta bien definida para -pi/2 y pi/2)

otra cosa que se me ocurre es como tenes configura el HMC, porque dependiendo la sensivilidad elegida es el resultado (y el producto que debes hacer, ese 0.92 que tenes por ahí) que te da. en mi caso la inicializacion es esta:

Código: C
  1. void HMC5883L_init(){
  2.    HMC5883L_write(Config_Reg_A, 0x70);  //Configuramos el magnetómetro
  3.    HMC5883L_write(Config_Reg_B, 0xA0);
  4.    HMC5883L_write(Mode_Reg, 0x00);
  5. }

habría que ver en el datasheet a que corresponde esa configuracion.

Si se me ocurre algo más te aviso.

Saludos
-
Leonardo Garberoglio

Desconectado Alfrematico

  • PIC10
  • *
  • Mensajes: 9
Re:Magnetometro - UAV's
« Respuesta #29 en: 20 de Octubre de 2015, 11:28:45 »
Saludos

Revisando encontré que el heading en mi programa (justo despues del atan2) nunca llega a valores superiores a 2*pi, es posible que tengas razon en lo del tipo de dato que espera ese bloque de atan2

esos 0.92/1000 estaban mal. basandome en un programa de arduino, solo se multiplica los valores raw por la escala elegida, en mi caso seria 0.92 unicamente.

la configuracion es la siguiente:

1.Configuration Register A = 0x10 (configuración por defecto) (¿porque tienes este registro en 0x70?)

con la configuracion  de este registro en 0x10, segun el datasheet tendria:

-Typical Data Output Rate (Hz) = 15 (Default)

-Measurement Mode = Normal measurement configuration (Default). In normal measurement configuration the device follows normal measurement flow. The positive and negative pins of the resistive load are left floating and high impedance.

Configuracion Register B = 0x20 (configuracion por defecto)

Recommended Sensor Field Range = 1.3 gauss
Gain(LSb/Gauss) = 1092 (default)
Digital Resolution (mG/LSb) = 0.92 (esta es la escala por la que multiplico los valores raw)

Mode Register = 0x0 (Medicion continua)

Continuous-Measurement Mode. In continuous-measurement mode, the device continuously performs measurements and places the result in the data register. RDY goes high when new data is placed in all three registers. After a power-on or a write to the mode or configuration register, the first measurement set is available from all three data output registers after a period of 2/fDO and subsequent measurements are available at a frequency of fDO, where fDO is the frequency of data output.

Estoy seguro de que el problema que tengo está en el atan o en la medicion de los valores raw, pues en la salida de ese atan nunca llega a valores superiores a 6.28 (2*pi)

probe este programa en arduino y funciona perfectamente, da el giro de 0 a 360, por este descubri que mi heading nunca llega a valores superiores a 2*pi...creo que nisiquiera tiene calibración, solo agrega un angulo de inclinacion que corresponde a nuestra ubicacion geografica, en mi caso seria -0.105 rad

// Calculate heading when the magnetometer is level, then correct for signs of axis.
  float heading = atan2(scaled.YAxis, scaled.XAxis);

  // Once you have your heading, you must then add your 'Declination Angle', which is the 'Error' of the magnetic field in your location.
  // Find yours here: http://www.magnetic-declination.com/
  // Mine is: 2� 37' W, which is 2.617 Degrees, or (which we need) 0.0456752665 radians, I will use 0.0457
  // If you cannot find your Declination, comment out these two lines, your compass will be slightly off.
  float declinationAngle = 0.009 ;
  heading += declinationAngle;


http://arduikyo.blogspot.nl/2013/08/hmc5883l-compass-arduino-processing.html

Gracias por la ayuda, comentare si logro solucionar esto hoy


 

anything