Con el magnetómetro estoy un poco trabado para hacer pruebas, porque tengo que sacar la IMU del protoboard y hacerle un PCB con el micro para que pueda moverlo libremente. En este momento, si logueo Mx y My y lo giro 360° obtengo cualquier cosa menos un circulo... pero es por la gran influencia de metales...
En cuanto a lo de la orientacion sigo trabajando en la DCM, pero o hay algo que no entiendo o hay algo mal en mi código.
te comento por si me podes ayudar.
me hice este script de matlab:
clear;
imu_interval=0.02;
dcmEst=[1 0 0; 0 1 0; 0 0 1];
gyro=[0 1 0] * imu_interval;
g=[1 -gyro(3) gyro(2); gyro(3) 1 -gyro(1); -gyro(2) gyro(1) 1];
graf(5000,2)=zeros;
for n = 1:5000
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));
Como ves puse que mi gyro me da solo señal en Y, 1°/seg. El tiempo de muestreo es de 20mseg. El lazo es por 10 seg. por lo que espero que al final de todo la matric DCM quede con un roll de 10°. Lo que hice fue almacenar la fila 1 columna 1 de la DCM
http://imageshack.us/a/img197/506/bj9i.jpgEl tema es que no entiendo porque con girar solo 10° ese item de la DCM varía muchas veces entre 1 - 0 - -1 0.... en teoria ese item de la DCM debería variar con el cos del ángulo puesto que solo roto en un eje...
http://upload.wikimedia.org/math/8/8/6/8867b40e7d7d69e2db9cba8a7b42d2db.pngEso es lo que no comprendo, no se si eso es normal o si mi código esta mal....
puse una pregunta en DIY Drone:
http://diydrones.com/xn/detail/705844:Comment:1517619y en esta página:
http://www.starlino.com/dcm_tutorial.htmlPero no estoy hallando respuestas.... sabes donde puedo consultar por este tema?
Saludos!