Clase 10 - Taller de resolución

Cinemática de un robot diferencial

Modelo cinemático directo

  • Dada las velocidades angulares de las ruedas (derecha \(\textcolor{Blue}{\upsilon_R}\) e izquierda \(\textcolor{Blue}{\upsilon_L}\)) y las propiedades geométricos del robot (separación entre las ruedas \(\textcolor{Gray}{b}\) y radio de las ruedas \(r\)), calcular su velocidad angular \(\textcolor{Orange}{\dot\theta}\) y radio de giro \(\textcolor{ForestGreen}{{R}}\) al rededor del \(\textcolor{Plum}{ICR}\):

\[ {\Large \begin{split} \textcolor{Orange}{\dot\theta} = \frac{r}{\textcolor{Gray}{b}}(\textcolor{Plum}{\dot\phi_R} - \textcolor{Plum}{\dot\phi_L}) \end{split} \quad\quad\quad \begin{split} \textcolor{ForestGreen}{{R}} = \frac{\textcolor{Gray}{b}}{2} \frac{\textcolor{Plum}{\dot\phi_R} + \textcolor{Plum}{\dot\phi_L}}{\textcolor{Plum}{\dot\phi_R} - \textcolor{Plum}{\dot\phi_L}} \end{split} } \]

Modelo cinemático inverso

  • Dada la velocidad lineal \(\textcolor{ForestGreen}{\dot{x}}\) y la velocidad angular \(\textcolor{Orange}{\dot\theta}\) del robot junto con las propiedades geométricas (separación entre las ruedas \(\textcolor{Gray}{b}\) y radio de las ruedas \(r\)), calcular las velocidades angulares de la rueda derecha \(\textcolor{Blue}{\upsilon_R}\) e izquierda \(\textcolor{Blue}{\upsilon_L}\):

\[ {\Large \begin{cases} \textcolor{Plum}{\dot\phi_R} = \frac{1}{r} (\textcolor{ForestGreen}{\dot{x}} + \frac{\textcolor{Gray}{b}}{2} \textcolor{Orange}{\dot\theta}) \\[0.5em] \textcolor{Plum}{\dot\phi_L} = \frac{1}{r} (\textcolor{ForestGreen}{\dot{x}} - \frac{\textcolor{Gray}{b}}{2} \textcolor{Orange}{\dot\theta}) \end{cases} } \]

Marco inercial

  • Pose en el marco de referencia local del robot \(\textcolor{Maroon}{\mathcal{P}: \{ \mathcal{X}_R, \mathcal{Y}_R \}}\)

\[ {\Large {}^\textcolor{Maroon}{R} \boldsymbol{\dot \xi} = \sideset{^\textcolor{Maroon}{R}}{}{\begin{bmatrix} \textcolor{ForestGreen}{\dot{x}} \\ \textcolor{ForestGreen}{\dot{y}} \\ \textcolor{Orange}{\dot\theta} \end{bmatrix}} = \begin{bmatrix} \frac{r}{2} & \frac{r}{2}\\ 0 & 0\\ \frac{r}{\textcolor{Gray}{b}} & - \frac{r}{\textcolor{Gray}{b}} \end{bmatrix} \begin{bmatrix} \textcolor{Plum}{\dot\phi_R} \\ \textcolor{Plum}{\dot\phi_L} \end{bmatrix} } \]

  • Pose en el marco de referencia inercial (global) \(\textcolor{Blue}{\mathcal{O}: \{ \mathcal{X}_O, \mathcal{Y}_O \}}\)

\[ {\Large {}^\textcolor{Blue}{O} \boldsymbol{\dot\xi}_\textcolor{Maroon}{R} = \boldsymbol{R}(\textcolor{Orange}{\theta}) {}^\textcolor{Maroon}{R} \boldsymbol{\dot\xi}_\textcolor{Maroon}{P} = \begin{bmatrix} \cos{\textcolor{Orange}{\theta}} & -\sin{\textcolor{Orange}{\theta}} & 0 \\ \sin{\textcolor{Orange}{\theta}} & \cos{\textcolor{Orange}{\theta}} & 0 \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} \frac{r}{2} & \frac{r}{2}\\ 0 & 0\\ \frac{r}{\textcolor{Gray}{b}} & - \frac{r}{\textcolor{Gray}{b}} \end{bmatrix} \begin{bmatrix} \textcolor{Plum}{\dot\phi_R} \\ \textcolor{Plum}{\dot\phi_L} \end{bmatrix} } \]

Resolución ejercicios 5 al 8

Calcular la velocidad lineal y angular del robot y de las ruedas para que se complete:

  • una trayectoria recta de 1[m] en 10 [s].
  • una trayectoria circular con un radio de 0.5 [m] en sentido horario en 20 [s].

Examinar la definición de los mensajes de tipo geometry_msgs/Twist y describir cuál sería la secuencia de comandos de velocidad a aplicar al robot para seguir la trayectoria mostrada en la Figure 1 utilizando dichos mensajes. La velocidad máxima de giro de los motores es de \(50 [rpm]\).

Figure 1: Trayectoria para el ejercicio 6

El punto inicial del robot será asignado por el docente.

Examinar la definición de los mensajes del topic suscripto por el JointGroupVelocityController. Calcule las velocidades angulares de las ruedas para cada comando del ejercicio 6 y construya la secuencia de mensajes de comando correspondientes.

El campo layout no se debe completar.

Dentro del paquete (*)_control, cree un nodo que reciba comandos de tipo geometry_msgs/Twist a través de un topic llamado cmd_vel, calcule las velocidades angulares en base al modelo cinemático inverso del robot y escriba los comandos de velocidad de cada rueda de tracción en los topics left_wheel_cmd y right_wheel_cmd. Tenga en cuenta que los parámetros del robot se encuentran en el robot description.