Pregunta

Estoy construyendo un robot de equilibrio usando el sistema NXT de LEGO MindStorm. Estoy usando dos sensores de Hitechnic, el primero es un acelerómetro y el segundo es un giroscopio. He filtrado con éxito el ruido de ambos sensores y ángulos derivados para ambos en un rango entre -90 y 90 grados, con 0 grados perfectamente equilibrados.

Mi próximo desafío es combinar los dos valores del sensor para corregir la deriva del giroscopio con el tiempo. A continuación se muestra un gráfico de ejemplo que creé a partir de datos reales para demostrar la deriva del giroscopio:

enter image description here

El enfoque más utilizado que he visto para hacer la combinación de estos sensores sólidos de roca es mediante el uso de un filtro Kalman. Sin embargo, no soy un experto en cálculo y realmente no entiendo los símbolos matemáticos, sin embargo, entiendo las matemáticas en el código fuente.

Estoy usando robotc (que es como cualquier otro derivado de C) y realmente apreciaría si alguien puede darme ejemplos de cómo lograr esto en C.

¡Gracias por tu ayuda!

Resultados de la solución:

Muy bien, Kersny resolvió mi problema al presentarme a filtros complementarios. Este es un gráfico que ilustra mis resultados:

Resultado #1

enter image description here

Resultado #2

enter image description here

Como puede ver, el filtro corrige la deriva giroscópica y combina ambas señales en una sola señal suave.

Editar: Como estaba arreglando las imágenes rotas de todos modos, pensé que sería divertido mostrar la plataforma que usé para generar estos datos:

enter image description here

¿Fue útil?

Solución

Los filtros de Kalman son excelentes y todo, pero encuentro que el filtro complementario es mucho más fácil de implementar con resultados similares. Los mejores artículos que he encontrado para codificar un filtro complementario son esta wiki (junto con Este artículo sobre la conversión de sensores en unidades de ingeniería) y un PDF en el archivo zip en esta página (Bajo documentación técnica, creo que el nombre del archivo en el zip es filtro.pdf);

PD. Si estás atascado en un filtro Kalman, aquí es un código C-Syntax para el Arduino que lo implementa.

Otros consejos

Gamasutra.com corrió Un artículo sobre el uso de filtros de Kalman para el filtrado de wiimote.

Hay algunos enlaces al código fuente de C ++ al final del artículo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top