Entendiendo la bases detrás de las plataformas
¿Qué necesitamos para llevar un robot de un punto $A$ a un punto $B$?
display(IFrame("https://www.youtube.com/embed/Ro7T3q14uDY",width="100%",height="400px"))
Como no es natural pensar en velocidades de las ruedas entonces vamos a ir directamente a la velocidad traslacional y rotacional.
Usar Encoders genera un gran problema
Los robots necesitan saber a cerca de su mundo alrededor.
Los sesores más utilizados con una "falda" sobre el robot:
Otros sensores externos incluyen
En vez de preocuparnos por la resolución de los sensores, asumiremos que conocemos la distancia y dirección de todos los obtaculos al rededor de nosotros (que estén lo suficientemente cerca).
Si conocemos nuestra propia pose (posición y orientación), entonces
$$\cases{ x_1 = x + d_1 \cos(\phi_1+\phi) \\ y_1 = y + d_1 \sin(\phi_1+\phi) }$$display(IFrame("https://cap232.davinsony.com/babylon-robot-diferencial?robots=2&password=Z29hbC5kaXNwb3NlKCk7c3lzdGVtJTVCNiU1RD0xO3N5c3RlbSU1QjEwJTVEPTE7c3lzdGVtLmxvb3A9ZnVuY3Rpb24oKSU3QngxPXN5c3RlbSU1QiUyMkEwJTIyJTVEO3kxPXN5c3RlbSU1QiUyMkExJTIyJTVEOyVDRiU5NTE9c3lzdGVtJTVCJTIyQTIlMjIlNUQ7eDI9c3lzdGVtJTVCJTIyQTMlMjIlNUQ7eTI9c3lzdGVtJTVCJTIyQTQlMjIlNUQ7JUNGJTk1Mj1zeXN0ZW0lNUIlMjJBNSUyMiU1RDslQ0YlOTVkPU1hdGguYXRhbjIoKHkyLXkxKSwoeDIteDEpKTtlMT0lQ0YlOTVkLSVDRiU5NTE7ZTE9TWF0aC5hdGFuMihNYXRoLnNpbihlMSksTWF0aC5jb3MoZTEpKTslQ0YlOTVkPU1hdGguYXRhbjIoKHkxLXkyKSwoeDEteDIpKTtlMj0lQ0YlOTVkLSVDRiU5NTI7ZTI9TWF0aC5hdGFuMihNYXRoLnNpbihlMiksTWF0aC5jb3MoZTIpKTtzeXN0ZW0lNUI3JTVEPTUqZTE7c3lzdGVtJTVCMTElNUQ9NSplMjtpZihNYXRoLmFicyh5MS15MiklM0MwLjEmJk1hdGguYWJzKHgxLXgyKSUzQzAuMSklN0JzeXN0ZW0lNUIlMjJBMCUyMiU1RD1yYW5kb21QbGFjZSgpO3N5c3RlbSU1QiUyMkExJTIyJTVEPXJhbmRvbVBsYWNlKCk7c3lzdGVtJTVCJTIyQTMlMjIlNUQ9cmFuZG9tUGxhY2UoKTtzeXN0ZW0lNUIlMjJBNCUyMiU1RD1yYW5kb21QbGFjZSgpOyU3RCU3RA==",width="100%",height="400px"))
Robótica basada en comportamientos
El mundo cambia constantemente y es desconocido, por lo que no tiene sentido sobre-planear. La idea clave: Desarrollar un a biblioteca de controladores utiles (comportamientos). Cambiar entre los controladores en respuesta a los cambios ambientales.
Asumamos que tenemos un robot diferencial que se mueve a una velocidad translacional constante.
$$\cases{ \dot{x} = v_0 \cos(\phi)\cr \dot{y} = v_0 \sin(\phi)\cr \dot{\phi} = w } $$y queremos orientar el robot a una dirección deseada, ¿cuál debe ser el valor de $w = ?$ ?
Tenemos una referencia, un modelo, una señal de control y un seguimiento del error:
$$r=\phi_d \qquad e = \phi_d - \phi \qquad \dot{\phi}=w$$Por que no usar un PID?
$$ w = K_P \, e + K_I \int ed\tau + K_D \dot{e}$$Normalmente esto no funciona ya que estamos lidiando con angulos y entonces:
$$\phi_d =0 \quad \phi = 100\pi \qquad \to \qquad e = -100\pi$$La solución es asegurarnos que $e \in [-\pi,\pi]$
Podemos usar el truco con atan2:
$$e' = \text{atan2}(\sin(e),\cos(e)) \in [-\pi,\pi]$$El problema de la navegación es ir al objetivo sin chocar con obstaculos.
Como mínimo necesitamos dos comportamientos:
¿Cómo llevar el robot al objetivo?
$$\cases{ \dot{x} = v_0 \cos(\phi)\cr \dot{y} = v_0 \sin(\phi)\cr \dot{\phi} = w } \qquad e = \phi_d - \phi \qquad w = PID(e) $$¡Error en el cálculo de los angulos!
display(IFrame("http://cap232.davinsony.com/babylon-robot-diferencial?password=cGluWG0lMjA9JTIwMjslMEFwaW5ZbSUyMD0lMjAzOyUwQXBpblYlMjAlMjA9JTIwNjslMEFwaW5XJTIwJTIwPSUyMDc7JTBBcGluWCUyMCUyMD0lMjAlMjJBMCUyMjslMEFwaW5ZJTIwJTIwPSUyMCUyMkExJTIyOyUwQXBpblBoaT0lMjAlMjJBMiUyMjslMEElMEF4bSUyMD0lMjAwOyUwQXltJTIwPSUyMDA7JTBBJTBBc3lzdGVtJTVCcGluViU1RCUyMD0lMjAxOyUwQXN5c3RlbSU1QnBpblhtJTVEJTIwPSUyMHhtOyUwQXN5c3RlbSU1QnBpblltJTVEJTIwPSUyMHltOyUwQSUwQXN5c3RlbS5sb29wJTIwPSUyMGZ1bmN0aW9uKCklN0IlMEElMEElMjAlMjB4JTIwPSUyMHN5c3RlbSU1QnBpblglNUQ7JTBBJTIwJTIweSUyMD0lMjBzeXN0ZW0lNUJwaW5ZJTVEOyUwQSUyMCUyMHBoaSUyMD0lMjBzeXN0ZW0lNUJwaW5QaGklNUQ7JTBBJTBBJTIwJTIwcGhpZCUyMD0lMjBNYXRoLmF0YW4oKHltLXkpLyh4bS14KSk7JTBBJTIwJTIwZSUyMCUyMCUyMCUyMD0lMjBwaGlkLXBoaTslMEElMEElMjAlMjBzeXN0ZW0lNUJwaW5XJTVEJTIwJTIwJTIwJTIwPSUyMGU7JTBBJTBBJTdE",width="100%",height="400px"))
¡Una ganancia del controlador muy bajita!
display(IFrame("http://cap232.davinsony.com/babylon-robot-diferencial?password=cGluWG0lMjA9JTIwMjslMEFwaW5ZbSUyMD0lMjAzOyUwQXBpblYlMjAlMjA9JTIwNjslMEFwaW5XJTIwJTIwPSUyMDc7JTBBcGluWCUyMCUyMD0lMjAlMjJBMCUyMjslMEFwaW5ZJTIwJTIwPSUyMCUyMkExJTIyOyUwQXBpblBoaT0lMjAlMjJBMiUyMjslMEElMEF4bSUyMD0lMjAwOyUwQXltJTIwPSUyMDA7JTBBJTBBc3lzdGVtJTVCcGluViU1RCUyMD0lMjAxOyUwQXN5c3RlbSU1QnBpblhtJTVEJTIwPSUyMHhtOyUwQXN5c3RlbSU1QnBpblltJTVEJTIwPSUyMHltOyUwQSUwQXN5c3RlbS5sb29wJTIwPSUyMGZ1bmN0aW9uKCklN0IlMEElMEElMjAlMjB4JTIwPSUyMHN5c3RlbSU1QnBpblglNUQ7JTBBJTIwJTIweSUyMD0lMjBzeXN0ZW0lNUJwaW5ZJTVEOyUwQSUyMCUyMHBoaSUyMD0lMjBzeXN0ZW0lNUJwaW5QaGklNUQ7JTBBJTBBJTIwJTIwcGhpZCUyMD0lMjBNYXRoLmF0YW4yKCh5bS15KSwoeG0teCkpOyUwQSUyMCUyMGUlMjAlMjAlMjAlMjA9JTIwcGhpZC1waGk7JTBBJTIwJTIwZSUyMCUyMCUyMCUyMD0lMjBNYXRoLmF0YW4yKE1hdGguc2luKGUpLE1hdGguY29zKGUpKTslMEElMEElMjAlMjBzeXN0ZW0lNUJwaW5XJTVEJTIwJTIwJTIwJTIwPSUyMGU7JTBBJTBBJTdE",width="100%",height="400px"))
display(IFrame("http://cap232.davinsony.com/babylon-robot-diferencial?password=cGluWG0lMjA9JTIwMjslMEFwaW5ZbSUyMD0lMjAzOyUwQXBpblYlMjAlMjA9JTIwNjslMEFwaW5XJTIwJTIwPSUyMDc7JTBBcGluWCUyMCUyMD0lMjAlMjJBMCUyMjslMEFwaW5ZJTIwJTIwPSUyMCUyMkExJTIyOyUwQXBpblBoaT0lMjAlMjJBMiUyMjslMEElMEF4bSUyMD0lMjAwOyUwQXltJTIwPSUyMDA7JTBBJTBBc3lzdGVtJTVCcGluViU1RCUyMD0lMjAxOyUwQXN5c3RlbSU1QnBpblhtJTVEJTIwPSUyMHhtOyUwQXN5c3RlbSU1QnBpblltJTVEJTIwPSUyMHltOyUwQSUwQXN5c3RlbS5sb29wJTIwPSUyMGZ1bmN0aW9uKCklN0IlMEElMEElMjAlMjB4JTIwPSUyMHN5c3RlbSU1QnBpblglNUQ7JTBBJTIwJTIweSUyMD0lMjBzeXN0ZW0lNUJwaW5ZJTVEOyUwQSUyMCUyMHBoaSUyMD0lMjBzeXN0ZW0lNUJwaW5QaGklNUQ7JTBBJTBBJTIwJTIwcGhpZCUyMD0lMjBNYXRoLmF0YW4yKCh5bS15KSwoeG0teCkpOyUwQSUyMCUyMGUlMjAlMjAlMjAlMjA9JTIwcGhpZC1waGk7JTBBJTIwJTIwZSUyMCUyMCUyMCUyMD0lMjBNYXRoLmF0YW4yKE1hdGguc2luKGUpLE1hdGguY29zKGUpKTslMEElMEElMjAlMjBzeXN0ZW0lNUJwaW5XJTVEJTIwJTIwJTIwJTIwPSUyMDIwKmU7JTBBJTBBJTdE",width="100%",height="400px"))
¿Qué podemos hacer para que no gire locamente?
¿Cómo evadir ir directamente a los obstaculos.
Podemos usar la mismaidea para definir ir a la meta?
display(IFrame("http://cap232.davinsony.com/babylon-robot-diferencial?obstacles=30",width="100%",height="400px"))
La dirección depende de la dirección al objetivo, no puede ser puro sino combinado.
$$\phi_4 = F(\phi_{obst},\phi_{meta})$$Este ejemplo ilustra 2 mecanismos de decisión diferentes:
Las dos situaciones tienen merito en diferentes situaciones:
Veremos con diseñar comportamientos sistematicos y mecanismos de decisión