Robótica con Maxima
Breve introducción a Maxima.
Maxima, como se cita en su página oficial, "... es un sistema para la manipulación de expresiones simbólicas y numéricas".
Tabla 1. Parámetros D-H.
Figura 2. Cinemática Directa.
Figura 4. Lagrangiano de energía.
Las matrices que componen el modelo dinámico inverso excluyendo las fuerzas de fricción se obtienen como resultado del código siguiente:
lst_Tau:create_list(diff(diff(L,e),t), e, lst_qp) - create_list(diff(L,e), e, lst_q)$
Carpeta con ejemplos de Maxima
Si desea apoyar este blog, puede hacerlo usando el enlace a PayPal
La potencia de Maxima para el cálculo simbólico, facilita la obtención de las expresiones matemáticas que modelan el comportamiento cinemático y dinámico de los manipuladores robóticos. Si bien hay otros programas que pudieran hacer casi lo mismo, como es el caso de MatLab, Octave y más recientemente Python, maxima presenta como ventaja, sobre algunos de los programas citados, la declaración de dependencia de una variable en función de otra, lo que hace posible la derivación de una expresión en función del tiempo; esta característica en particular, facilita la implementación del algoritmo Euler-Lagrange.
Otra de las ventajas que obtenemos con Maxima, es que al usar WxMaxima como interfaz, se pueden copiar las expresiones en diferentes formatos como por ejemplo: imagen, latex, entre otros; esta ventaja favorece la redacción de reportes de investigación, sobre todo cuando se usan expresiones matemáticas.
Cinemáticas Directa e Inversa.
Según el libro "Robótica. Control del Robots Manipuladores" de Fernando Reyes Cortés, "La cinemática es la parte de la física que aborda el problema de la descripción geométrica del movimiento de sistemas mecánicos sin tomar en cuenta las fuerzas que lo producen...". La Cinemática Directa es una expresión matemática que representa la posición del efector final en función del vector de variable(s) articular(es)
Para ejemplificar el uso de Maxima en la obtención de la Cinemática Directa, se usará un robot esférico como el mostrado en la Figura 1.
Figura 1. Robot esférico.
Los parámetros Denavit-Hartemberg (D-H) para el robot esférico se muestran en la Tabla 1.
El código en Maxima para la obtención de la posición del efector final (Cinemática Directa) es:
for i:1 thru n step 1 do{
rho:submatrix(4,lst_T[i],1,2,3),print("rho", rho)
}$
donde:
- lst_T[i]. Representa las mutiplicaciones sucesivas de las matrices de transformaciones homogéneas, dependientes de los parámetros D-H.
- rho. Representa las posiciones de los marcos coordenados intermedios, inclusive el de la posición del efector final.
Después de los cálculos realizados por el código anterior, la cinemática directa está dada por la expresión de la Figura 2:
La Cinemática Inversa (obtenida por el método geométrico) está dada por la expresión de la Figura 3:
Figura 3. Cinemática Inversa.
Modelo Dinámico.
En el libro "Fundamentos de Robótica" de Antonio Barrientos, et al. encontramos los conceptos de Modelo Dinámico Directo y Modelo Dinámico Inverso, tal como se transcriben a continuación.
1) Modelo dinámico directo: expresa la evolución temporal de las coordenadas articulares del robot en función de las fuerzas y pares que intervienen θ (t) = f(τ(t)).
2) Modelo dinámico inverso: determina las fuerzas y pares necesarios para conseguir una evolución de las coordenadas articulares determinada τ(t) = g(θ (t)).
El empleo de las ecuaciones de Euler-Lagrange arrojan como resultado el modelo dinámico inverso, estas ecuaciones se basan en el Lagrangiano de energía, mismo que se obtiene con el código Maxima:
for i:1 thru n step 1 do{
rho:submatrix(4,lst_T[i],1,2,3),
v:diff(rho,t),
L:L+lst_m[i]*(1/2*(transpose(v).v)-g*rho[3,1])
}$
Como resultado del código anterior el Lagrangiano de energía obtenido se muestra en la Figura 4.
Las ecuaciones de Euler-Lagrange son mostradas en la Figura 5.
Figura 5. Ecuaciones de Euler-Lagrange.
lst_Tau:create_list(diff(diff(L,e),t), e, lst_qp) - create_list(diff(L,e), e, lst_q)$
M:factor(trigsimp(create_list(diff(lst_Tau,e),e,lst_qpp)))$
D:fObtieneMatriz(M)$
D:factor(D);
M:factor(trigsimp(create_list(diff(lst_Tau,e),e,lst_qp)/2))$
C:fObtieneMatriz(M)$
C:factor(C);
M:factor(trigsimp(create_list(diff(lst_Tau,e),e,[g])[1])*g)$
G:matrix([M[1]],[M[2]],[M[3]]);
Nota: La función fObtieneMatriz reordena los elementos de la lista dándoles la forma de una matriz.
Las matrices resultantes D, C y G se muestran en las Figuras 6, 7 y 8.
Figura 6. Matriz de inercia.
Figura 7. Matriz de fuerzas centrípetas y de Coriolis.
Figura 8. Vector de fuerzas o pares gravitacionales.
Nota: El código completo en Maxima para la obtención de las matrices que componen el modelo dinámico de la Figura 1, se encuentra en el enlace a la carpeta de google drive. Las matrices resultantes ya están con el formato adecuado para ser usadas en otros programas de simulación numérica como por ejemplo SciLab.
Visite la página: siAOS
Si desea apoyar este blog, puede hacerlo usando el enlace a PayPal








