Buenas! Paso a contarles las ultimas noticias. Resulta que le escribi al compadre que hizo el
zigroller y me ayudo bastante.
Resulta q cometi muchisimos errores (como yo sospechaba, en la lectura de los sensores). Vamos por partes como dijo jack el destripador:
1- Yo calibre el gyro experimentalmente, integrando su lectura para obtener el angulo, y comparando este con el calculado por el acelerometro. Pero resulta que cuando el robot esta en modo debug (graficando), el periodo de muestreo sube a unos 30ms (probablemente por el printf). Entonces el calculo del angulo era correcto solo cuando estaba graficando, de otro modo era erroneo. Esto pude comprobarlo cambiando el estado de un pin cada vez que tomaba las muestras y mirando en el osciloscopio.
2- La frecuencia de muestreo que yo estaba utilizando era de 50Hz, esto se debe a que una version mas vieja del robot usaba como gyro el LY530ALH que tenia un ancho de banda de 140Hz. Pero el gyro que uso ahora (IDG-500) es de 1KHz y tiene un filtro pasabajo con frecuencia de corte de 140Hz. Por lo tanto la frecuencia de muestreo tiene q ser al menos el doble de eso (por el teorema de Nyquist, para evitar aliasing). Lo ideal serian 400Hz.
3- Tambien estaba utilizando la salida amplificada del gyro que tiene un rango dinamico de +-110º/s. Es demasiado sensible, y cuando el robot da uno de esos golpes, puede que se sature. Asique ahora voy a utilizar la salida normal que tiene un rango de +-500º/s.
4- Mi codigo es muy complejo, para calcular el angulo utilizo el arcotangente, mas la linea de comando, el modo grafico etc... pierdo valiosos milisegundos. Por lo tanto pienso simplificar el codigo al maximo eliminando todas esas cosas inutiles.
Bueno, eso es todo. Dispongo de muy poco tiempo, por lo tanto no pude hacer esas correcciones, pero de a poco.
Saludos y espero q a alguno le sirvan mis errores para no cometerlos jeje.