25 may 2021

Construcción de un Manipulador de 3GDL | Parte 2 | Cinámica Directa

 Simulación en Matlab: Cinemática Directa

En esta entrada realizaremos la simulación en Matlab de la cinemática directa de nuestro manipulador con la ayuda del complemento de Simscape Multibody™ (anteriormente SimMechanics™ ). Simscape Multibody™ proporciona un entorno de simulación multicuerpo para sistemas mecánicos 3D, como robots, suspensiones de vehículos, maquinas de construcción y trenes de aterrizaje de aeronaves. Puede modelar sistemas multicuerpo utilizando bloques que representan cuerpos, articulaciones, restricciones, elementos de fuerza y sensores. Simscape Multibody formula y resuelve las ecuaciones de movimiento de todo el sistema mecánico. Puede importar a su modelo montajes CAD completos, incluidas todas las masas, inercias, articulaciones, restricciones y geometría 3D. Una animación 3D generada automáticamente permite visualizar la dinámica del sistema. [1]

Vamos a Exportar nuestro diseño CAD

Una vez que ya tenemos nuestro diseño CAD es necesario simplificarlo un poco para que a la hora de exportarlo a Simscape, este Software pueda identificar correctamente las uniones de nuestros eslabones. La versión que vamos a simular es la siguiente: (Todos los archivos utilizados estarán disponibles en el link de descarga al final de esta entrada)


Nota: Si se desea incluir los servos en la simulación, se recomienda realizar sub-ensambles con un eslabón y su servo y luego realizar un ensamble generar. 

Nota: Es importante exportar el diseño CAD en la posición de inicio o home que se eligió para el análisis y cálculo de los parámetros de Denavith Hartenberg.

Para exportar nuestro diseño CAD debemos habilitar el complemento de Simscape en SolidWorks 2020. Aquí explico como instalar el complemento.
Configuración → Complementos → Simscape Multibody Link 

Ahora si procedemos a exportar el diseño CAD 
Herramientas → Simscape Multibody Link → Export → Simscape Multibody

Cuando termina de exportarse el diseño, podemos cerrar SolidWorks y abrir Matlab. Nos ubicamos en la carpeta donde hemos guardado el archivo *.xml ( es el archivo que se genera al exportar desde SolidWorks) y ejecutamos el código -smimport(nombre.xml)- donde nombre se reemplaza con el nombre que le hemos dado a nuestro archivo *.xml . Cuando termine de cargar (tarde un poco), podemos ver lo siguiente:


Estoy ocupando Matlab 2020a. Si corremos la simulación, podemos ver: ( con 1 segundo de simulación esta bien) 


Vamos a añadir el modulo de accionamiento Motion en cada junta de revolución del manipulador. Para esto, cada junta se debe configurar de la siguiente manera dando doble click en cada una.

Una vez que se añade el puerto "q" en cada unión de revolución, le conectamos una constante. Para que sea compatible el modulo de contante con los componente de Simscape, se necesita el elemento "Simulink-PS Converter". También agregamos un modulo Gain para hacer la conversión de grados a radianes antes del "Simulink-PS Converter".



Si le damos en correr a nuestra simulación tenemos lo siguiente:


Nos damos cuenta que debemos corregir los marcos de referencia. Para esto realizamos las siguientes modificaciones en el modulo Base1_1_RIGID en el elemento Transform y en Transform del elemento Eslabon2_1_RIGID.



Con estas modificaciones y al colocar todas las uniones de revoluciona en su posición de 0° ( posición de inicio o home) obtenemos lo siguiente.

Diseño de una interfaz con AppDesigner

Para la programación y simulación de la cinemática directa ( y posteriormente la inversa) vamos a realizar una pequeña interfaz en el entorno de desarrollo de aplicaciones de Matlab: AppDesigner. Este entorno nos permite la creación de una app, de una manera sencilla, arrastrando y colocando componente visuales y usando un editor integrado para una programar rápida.

Para iniciar escribimos appdesigner en la consola de Matlab y nos abre la pantalla de bienvenida de este entorno. Elegimos una plantilla vacía (Blank App) para iniciar el diseño de nuestra interfaz.


Vamos a iniciar agregando un Tab Group que se encuentra en la pestaña de COMPONENT LIBRARY (lado izquierdo de la pantalla) en la sección de CONTAINERS.  El Tab Group contará con dos pestañas, una para la cinemática directa y otra para la inversa.



Dentro del Tab Group vamos a añadir 4 Edit Field que nos permitirán establecer los ángulos deseados. También necesitaremos un Button para iniciar la simulación y un Text Area para indicar los estados de la simulación ( que pueden ser posición inicial, cargando ángulos, generando movimiento) y mostrar las posiciones cartesianas [x,y,z] que resultan de la cinemática directa. Adicionalmente añadimos un elemento Image, unos Label para colocar Títulos y un Button para salir de la Interfaz.



Una vez añadidos todos los elementos que vamos a ocupar, es hora de iniciar con la "programación" de nuestra Interfaz. Bueno, para tener una mejor organización a la hora de programar, les recomiendo nombrar cada elemento, dando doble click sobre él en la pestaña de COMPONENT BROWSER.


Podemos cambiar el color de fondo, tamaño y color de letra y algunos parámetros mas, seleccionando cada elemento y dirigiéndonos a la pestaña de Inspector en la esquina inferior izquierda de la ventana. 

Ahora sí, iniciemos a programar. Para esta interfaz solo es necesario programar el Button de Enviar y Salir. Iniciamos con el de Enviar, así que seleccionamos el Button y con click izquierdo nos vamos a
 Callbacks  → Go to EnviarPushed Callback 

Esto nos enviará al Code View (Vista del código de nuestra interfaz), específicamente a la función EnviarPushed del Botón Enviar.  Donde colocaremos el siguiente código.


Te invito a que investigues cada sentencia del código, pero los mas importante son:
set_param(gcs,'SimulationCommand','Start','StopTime',num2str(1))→ Lo ocupo para iniciar la simulación. La simulación durará 1 segundo ( num2str(1) ). 

app.Posiciones.Value=datos → Le envió una cadena al Text Area ( el Text Área se llama Posiciones).

set_param('Ensamble_Simulacion/th1','Value',num2str(th1)) → Establezco un valor a las constantes que se encuentra en nuestra ventana de Simulink, el cual se llama Ensamble_Simulacion y el modulo constante que modifica se llama th1

th1=app.Th1.Value  Leo el valor de cada Edit Field y lo asigno a una variable.

En la función de Button solamente debemos colocar lo siguiente, para salirnos de la interfaz.
delete(app)

Verificación de la cinemática directa

Para verificar la cinemática directa vamos a ingresar ángulos fácil de comprobar las posiciones X,Y y Z.

Sabemos que si theta 1, theta 2 y  theta 3 son 0°, el robot estará en su posición de inicio o home, por lo que el punto final del robot estará en [x,y,z]=[24,0,10]m



Si theta 1=0°, theta 2=90° y  theta 3= 90°, es fácil identificar que el punto final del robot estará en [x,y,z]=[12,0,22]m


Vista Final: Cinemática Directa



Referencias

[1] Mathworks. Link

Descargas 

Descarga los archivos utilizados aquí.

Suscríbete

Visita mi Canal de YouTube. Esta lista de reproducción es para ti.












0 comments:

Publicar un comentario