Construyendo un robot equilibrador con accionamiento diferencial

8

Ya he construido un robot de equilibrio de dos ruedas usando algunos servos de rotación continua y un acelerómetro / giroscopio. Actualicé los servos a algunos motores de CC con engranajes con codificadores de 8 bits con el objetivo de que el robot manejara mientras balanceaba.

Estoy atascado en cómo programarlo para conducir mientras sigo equilibrando. Creo que una forma sería simplemente hacer que la entrada de control a los motores actúe como empujándola. Entonces el robot estaría momentáneamente desequilibrado en la dirección en que quiero que viaje. Sin embargo, eso me parece un poco torpe. Debe haber una mejor manera de hacerlo? Creo que necesito combinar el modelo dinámico para el equilibrador con el accionamiento diferencial, pero esto está un poco más allá de la teoría de control que conozco.

Actualización De la respuesta de Anorton Tengo una buena matriz de estado ahora.

Ahora sobre la colocación del polo: la matriz A tendrá que ser 4x4 según el nuevo vector de estado. Y B tendrá que ser una matriz de 4x2 ya que solo puedo controlar el par de la rueda izquierda / derecha (u = vector 2x1).

Es posible que necesite leer más sobre esto, pero ¿hay alguna forma sistemática de determinar la matriz A por la colocación del polo? Me parece que para este ejemplo y ejemplos aún más complicados, determinar A por adivinar y verificar sería muy difícil.

Actualización n. ° 2 Después de leer un poco, creo que lo entiendo ahora. Todavía necesito la dinámica del robot para determinar la matriz A. Una vez que tengo eso, puedo hacer la colocación del poste usando matlab u octava.

JDD
fuente
1
¿Qué tipo de enfoque estás usando / qué teoría de control conoces? Puedo escribir un enfoque, pero podría ser súper básico o súper avanzado, dependiendo de sus antecedentes ... :)
apnorton
¡Gracias! para el diseño anterior con los servos estaba calculando el ángulo de inclinación usando datos del giroscopio / acelerómetro. Enviando eso a un filtro Kalman y luego a un PID para la posición del servo. Soy bueno con las ecuaciones diferenciales y de acuerdo con el álgebra lineal. Todavía soy bastante nuevo en los controles, ¿quizás el básico? O ambos si estás dispuesto. Siempre estoy interesado en aprender más :)
JDD
1
Solo tengo un enfoque, por lo que mi comentario anterior realmente decía que podría tomarse en ambos sentidos (ya sea súper avanzado si recién comenzaba con robots o súper básico si tiene algún conocimiento de los controles) ... Basado en su previo comentario, tengo la sensación de que estoy superado. :) Mi conocimiento de controles es muy escaso, pero
arrojaré
Bienvenido a Robotics JDD, es mejor editar información adicional en su pregunta en lugar de agregarla como un comentario, de esa manera los comentarios se pueden ordenar (eliminar) más adelante y dejarán de distraer a los lectores de la pregunta en sí.
Mark Booth

Respuestas:

8

Descargo de responsabilidad: nunca lo he hecho yo mismo, pero solo he visto una descripción de esto a través del "Control de la robótica móvil" de Georgia Tech en Coursera. Mi conocimiento de los controles también es irregular. Por lo tanto ... tome esto con un grano de sal.:)

Para mantener el robot en posición vertical (e inmóvil), está intentando estabilizarse (enviar a 0 0) el estado X, dónde:

X=[leftVelocityrightVelocityángulo desde vertical]

Sin embargo, cuando este sistema es estable, las velocidades de las ruedas izquierda y derecha serán 0 0. Entonces, queremos un desplazamiento para la velocidad objetivo:

Xnortemiw=[leftVelocity-δLrightVelocity-δRángulo desde vertical]
Dónde δ es la velocidad objetivo para cualquier lado.

Cuando este sistema se estabilice, el robot estará en posición vertical y hará que cada rueda gire a la velocidad deseada.

Este es el enfoque / esquema básico. Editaré esto con más detalles mañana (y matemáticas reales, etc.), pero quería al menos publicar la idea general ahora. (Es tarde en mi zona horaria, y tengo una clase temprana para llegar).

EDITADO: Oh Dios. Entonces, acabo de mirar las diapositivas relacionadas con esto en el curso Coursera (Sección 4, diapositiva 29). Es posible que desee ir e inscribirse en esa clase solo para descargar ese conjunto de diapositivas ...:)

La parte difícil es calcular el UNA y simatrices (es un gran desastre de linealización). De todos modos, desea hacer su matriz de estado de la siguiente manera (no como arriba, mi memoria no era exactamente la correcta):

X=[vωϕϕ˙]

Dónde v es la velocidad del segway ω es la velocidad de rotación (qué tan rápido gira el robot) y ϕ Es el ángulo de la vertical.

Queremos tener una velocidad deseada, así que definamos un nuevo vector de estado:

X~=X-[vreωre0 00 0]=X-δ

Dónde δ es la velocidad deseada y la cantidad rotacional (como se ve arriba).

Diferenciando:

X~˙=X˙-δ˙=δ es constanteX˙

Por lo tanto, tenemos

X~˙=UNAX+situ

Dónde UNA es la matriz de coeff estándar si es la matriz de entrada y tues el vector de control Entonces podemos decir:

X~˙=UNA(X-δ)+situ+UNAδ
Pero, basado en la solución para UNA (de Coursera), UNAδ=0 0. Así:
X~˙=UNAX~+situ

Ahora puede usar la colocación de postes para determinar los valores propios correctos, etc.

Apnorton
fuente
¡Genial gracias! También hice la misma clase de Coursera, probablemente no estamos muy lejos en el conocimiento de los controles. Esto está resultando ser un proyecto mucho más difícil de lo que pensé que iba a ser. Sin embargo, me gusta su matriz de estado hasta ahora.
JDD
Eek! ¡Parece que no voy a responder esto esta noche! Estuve en vacaciones de primavera la semana pasada y me olvidé de algo que debía, así que eso me mantuvo ocupado hoy. Lo
editaré
No hay problema. Ayer exploté mi último puente h tratando de armarlo, así que tendré que esperar un reemplazo.
JDD
Muchas gracias Anorton por la ayuda. Creo que ahora entiendo cómo hacer esto mucho más. Actualicé mi pregunta original. Sin embargo, cómo determinar las matrices A y B todavía me confunde.
JDD