¿Qué algoritmo debo usar para equilibrar un robot de dos ruedas con un giroscopio?

25

¿Existe un algoritmo bueno, popular y confiable que pueda usar tomando datos de un giroscopio y usándolo para controlar dos ruedas independientes para mantener un robot tan equilibrado en posición vertical? Estoy buscando un algoritmo que me permita usarlo para conducir un robot y mantenerlo en posición vertical cuando esté parado. La capacidad de lidiar con pendientes y personas que lo empujan también sería una ventaja, pero no esencial.

berry120
fuente
Voy a estar trabajando en esto también. Tiene que usar un filtro Kalman para filtrar sus datos sin procesar. Y use un algoritmo PID para ajustarlo.
Huzo

Respuestas:

16

El controlador más simple es un controlador de retroalimentación de estado lineal. Esencialmente hay 4 estados diferentes para los que necesita una ganancia. Estos son ángulo de inclinación, velocidad de inclinación, velocidad y posición.


LQR (regulador cuadrático lineal) es un método para diseñar estas ganancias (después de obtener una representación lineal de espacio de estado de su sistema). Si no tiene una representación de espacio de estado (probablemente no la tenga), puede obtener ecuaciones de movimiento y medir los parámetros. Si no tiene una representación de espacio de estado, solo debe ajustar las ganancias manualmente (sin LQR u otros métodos como la colocación de postes ).


Ajuste de ganancias manualmente:

Suponiendo que el ángulo de inclinación, la posición / velocidad y los pares de ruedas se dirigen hacia adelante (si es positivo), desea una ganancia positiva en su ángulo de inclinación y velocidad de inclinación, así como una ganancia positiva en la posición y la velocidad.

Comience con una ganancia en el ángulo de inclinación y la tasa de inclinación. Esto hará que se equilibre inicialmente. Una vez que se mantiene equilibrado, puede controlar la posición y la velocidad añadiéndoles una ganancia. Si es inestable, aumente la ganancia en la tasa de inclinación (lo que ayuda a humedecer el sistema).

El control de posición / velocidad controlará ambos estados a cero. Para controlar algún otro valor, solo necesita un controlador de seguimiento de referencia, reemplazando los estados con sus errores antes de alimentarlo a su controlador (por ejemplo, velocidad actual - referencia de velocidad).

El control de guiñada se puede hacer de forma independiente (con las diferencias en los pares de ruedas añadidas al controlador principal de equilibrio / velocidad / posición).

ronalchn
fuente
9

Creo que la solución más popular para este problema es un controlador LQR . El problema que está tratando de resolver es el problema del péndulo invertido . Con esas palabras clave, debe poder buscar en Google el código de fuente abierta de alguien. El siguiente problema será mapear la mayoría de las cantidades físicas relevantes para su aplicación (peso, par motor, etc.)

Chris Mansley
fuente
5

Como no conozco tus habilidades en ingeniería / teoría de control, te recomiendo que comiences con un controlador PID . Es un controlador simple y encontrará muchas implementaciones de código. El inconveniente del PID es que probablemente terminarás pasando algún tiempo ajustando los parámetros a mano.

Hace algunos años lo usé para controlar un robot Lego Mindstorm de dos ruedas basado en su odometría y funcionó lo suficientemente bien. Para que se mueva, deberás jugar con los puntos establecidos.

Por supuesto, más adelante puede mejorar la calidad de su controlador (estabilidad, robustez, etc.) utilizando leyes de control más avanzadas como el LQR mencionado anteriormente.

¡Buena suerte!

pirata
fuente