Autor Tema: Lectura errada de Magnetómetro HMC5883L  (Leído 11289 veces)

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

Desconectado elgarbe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2178
Re: Lectura errada de Magnetómetro HMC5883L
« Respuesta #15 en: 04 de Enero de 2014, 13:08:45 »
Ahi estudie tu código, entiendo perfectamente lo que haces.
Mi código (el que usan la mayoria de los que haces sistemas de estabilizacion casero) se basa en algunas simplificaciones. básicamente que para angulos pequeños el cos A = 1 y el sin A = A creo y que para pequeñas rotaciones no es importante el orden con que se aplican. Esas simplificaciones hacen que la DCM deje de ser orthonormal. Entonces lo que se hace es renormalizar en cada pasada.
Primero se calcula el error de perpendicularidad entre primera y segunda fila de la DCM y se reparte dicho error a cada fila:
    error=-dot(dcmEst(1,:),dcmEst(2,:))*0.5;
    x_est=[0 0 0];
    y_est=[0 0 0];
    x_est = dcmEst(2, :) * error;
    y_est = dcmEst(1, :) * error;
    dcmEst(1,:) = dcmEst(1,:) + x_est;
    dcmEst(2,:) = dcmEst(2,:) + y_est;
Luego la tercer fila fila debe ser perpendicular a las otras dos entonces se crea con un producto entre esas filas:
    dcmEst(3,:) = cross(dcmEst(1,:), dcmEst(2,:));
finalmente se renormaliza cada fila (se hace que la magnitud de cada vector sea 1)
    dcmEst(1,:)=dcmEst(1,:)/norm(dcmEst(1,:));
    dcmEst(2,:)=dcmEst(2,:)/norm(dcmEst(2,:));
    dcmEst(3,:)=dcmEst(3,:)/norm(dcmEst(3,:));

con eso se ahorra cálculo (para no resolver tantos senos y cosenos).

Mi código quedó así:
clear;
imu_interval=0.02;
dcmEst=[1 0 0; 0 1 0; 0 0 1];
gyro=[0 1*0.017453293 0] * imu_interval;
g=[1 -gyro(3) gyro(2); gyro(3) 1 -gyro(1); -gyro(2) gyro(1) 1];
graf(18000,2)=zeros;
for n = 1:18000
    dcmEst=dcmEst*g;
    error=-dot(dcmEst(1,:),dcmEst(2,:))*0.5;
    x_est=[0 0 0];
    y_est=[0 0 0];
    x_est = dcmEst(2, :) * error;
    y_est = dcmEst(1, :) * error;
    dcmEst(1,:) = dcmEst(1,:) + x_est;
    dcmEst(2,:) = dcmEst(2,:) + y_est;
    dcmEst(3,:) = cross(dcmEst(1,:), dcmEst(2,:));
    dcmEst(1,:)=dcmEst(1,:)/norm(dcmEst(1,:));
    dcmEst(2,:)=dcmEst(2,:)/norm(dcmEst(2,:));
    dcmEst(3,:)=dcmEst(3,:)/norm(dcmEst(3,:));
    graf(n,1)=n*imu_interval;
    graf(n,2)=dcmEst(1,1);
   
end
figure
plot(graf(:,1),graf(:,2));

Ahora si obtengo la variacion esperada en cada elemento de la DCM.
Tambien lo probe en mi IMU con mi uC y lo que obtengo es una deriva bajísima (imaginate que yo estaba metiendo los datos de mi gyro 57 veces más grandes de lo que eran!!!)

Por lo que veo has hecho mucho trabajo en este tema. Nunca leiste los trabajos de william premerlani de DIY Drone? (code.google.com/p/gentlenav/downloads/list) Ellos tienen un sistema de autopiloto para UAV (MatrixPilot) opensource muy pero muy bueno.

Si te parece abrimos un post nuevo en el foro técnico y vamos poniendo ahí los avances con los sensores y la implemetacion de la DCM...

Saludos y gracias por la ayuda!
-
Leonardo Garberoglio

Desconectado PCCM

  • PIC16
  • ***
  • Mensajes: 109
Re: Lectura errada de Magnetómetro HMC5883L
« Respuesta #16 en: 05 de Enero de 2014, 00:58:30 »
Interesante forma de simplificar la DCM, no he leido a william premerlani , gracias por el dato.  :mrgreen:
Y has calculado cuanto tiempo ahorras en el cálculo. También lo voy a probar.

Claro sería mejor tener un foro de discusión sea junto o separado(por sensor) profundizándose en el tema. Para realizar una orientación y posición lo más optima posible. Mi fin es eso pero sin GPS, solo con acelerómetro,magnetómetro, gyro y barometros.

Desconectado elgarbe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2178
Re: Lectura errada de Magnetómetro HMC5883L
« Respuesta #17 en: 05 de Enero de 2014, 11:39:45 »
no he echo el calculo del ahorro de tiempo. lo empecé a implementar a raiz de haber leido en los foros de diy drone que es lo que todos usan. con un buen micro (que usas vos?) consiguen frecuencias de 100 a 200Hz. aparte tienen software tipo estacion terrena, todo open source. es increible lo que hacen. hay proyectos como aeroquad que tmb es open source...
bueno, ahora habro un par de hilos en el foro técnico haver si se engancha alguien mas. yo voy a estar trabajando por un buen tiempo con este tema ya que quiero fabricarme un sistema de navegacion para mi planeador y despues para un quadcoptero...

Saludos!
-
Leonardo Garberoglio

Desconectado PCCM

  • PIC16
  • ***
  • Mensajes: 109
Re: Lectura errada de Magnetómetro HMC5883L
« Respuesta #18 en: 05 de Enero de 2014, 11:58:54 »
Utilizo el dspic33fj32mc204 es de 40Mhz, llega a aprox 250Hz junto con la DCM que usaba. pero separado con la comunicación. osea en un dspic usaba el gyro, acel y mag. y se comunicaba via spi con otro dspic para que realice comunicaciones seriales, gps, bluetooht, algoritmos de control osea dispositivos de velocidades más lentas, bueno y con barometros(pero estos si son rápidos).

Ok ahí te sigo, seguimos por el mismo camino, también estaré un buen tiempo en esto.

Desconectado elgarbe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2178
Re: Lectura errada de Magnetómetro HMC5883L
« Respuesta #19 en: 05 de Enero de 2014, 13:03:18 »
che, tenemos casa propia ahora http://www.todopic.com.ar/foros/index.php?board=65.0
yo voy con un arm a 120Mhz jejeje ya veremos lo que alcanzamos...
La seguimos por el otro lado, despues si puedo empiezo a poner lo que he hecho y algo de teoria basica para el que le interese...

Saludos!!
-
Leonardo Garberoglio

Desconectado oscman

  • PIC10
  • *
  • Mensajes: 1
Re: Lectura errada de Magnetómetro HMC5883L
« Respuesta #20 en: 16 de Enero de 2014, 19:45:57 »
che, tenemos casa propia ahora http://www.todopic.com.ar/foros/index.php?board=65.0
yo voy con un arm a 120Mhz jejeje ya veremos lo que alcanzamos...
La seguimos por el otro lado, despues si puedo empiezo a poner lo que he hecho y algo de teoria basica para el que le interese...

Saludos!!

Hola a todos, soy nuevo en el foro y tambien en programacion de pic, alguien me puede colaborar con un codigo en ccs c para este magnetometro HMC5883L

Gracias por adelantado

Desconectado elgarbe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2178
Re: Lectura errada de Magnetómetro HMC5883L
« Respuesta #21 en: 16 de Enero de 2014, 20:39:26 »
una simple busqueda en google arroja:

http://www.ccsinfo.com/forum/viewtopic.php?p=174329

http://www.ccsinfo.com/forum/viewtopic.php?p=179610

y muchos otros resultados... yo no uso PIC en este caso por lo que no tengo códigos en CCS, pero cualquier librería que ande dando vueltas la podrás portar sin problemas a CCS para pic.

Saludos!
-
Leonardo Garberoglio

Desconectado lalos

  • PIC10
  • *
  • Mensajes: 1
Re: Lectura errada de Magnetómetro HMC5883L
« Respuesta #22 en: 28 de Noviembre de 2014, 20:11:51 »
Gera yo estoy tratando de comunicarme con con 9dof stick y el mismo  pic que vos...el 18f2550, me podrías pasar un código en c sencillo para probar la cominicación, porque tal vez el problema es el hardware. mi mail es alepastre33@hotmail.com