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.
:)
Mi conocimiento de controles es muy escaso, peroRespuestas:
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 a0 0 ) el estado X , dónde:
Sin embargo, cuando este sistema es estable, las velocidades de las ruedas izquierda y derecha serán0 0 . Entonces, queremos un desplazamiento para la velocidad objetivo:
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 elUNA y si matrices (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):
Dóndev 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:
Dóndeδ es la velocidad deseada y la cantidad rotacional (como se ve arriba).
Diferenciando:
Por lo tanto, tenemos
DóndeUNA es la matriz de coeff estándar si es la matriz de entrada y tu es el vector de control Entonces podemos decir:
Ahora puede usar la colocación de postes para determinar los valores propios correctos, etc.
fuente