EMC para el control de manipuladores

Site Navigation:
 
 

Cinemática en EMC2

Introducción

Cuando se habla de las máquinas de CNC, se suele pensar en máquinas a las que se ordena que se muevan a ciertos puntos en el espacio y realicen ciertas tareas. Para tener una idea del espacio de la máquina, y ajustarlo al espacio en 3D desde el punto de vista humano, muchas de estas máquinas utilizan un sistema de coordenadas llamado el sistema cartesiano. Este sistema está formado por tres ejes (comúnmente denotados por X, Y y Z) donde cada uno es perpendicular a los otros 2.

Cuando se habla de un programa de G-código, se habla de una serie de comandos (G0, G1, etc.) que hacen referencia a una serie posiciones(X Y Z). Estas posiciones son exactamente las posiciones cartesianas. Una tarea del regulador del movimiento de EMC2 es la encargada de traducir esas posiciones cartesianas en posiciones en los ejes de la máquina, en posiciones correspondientes a la cinemática de la máquina.

Conviene hacer una diferencia entre los ejes de la máquina y los movimientos que ésta realiza. Según esta diferencia se pueden distinguir dos tipos de máquinas:

  • Existen las llamadas máquinas de cinemática trivial (o máquinas cartesianas), para las cuales un movimiento en uno de sus ejes supone un movimiento de la cabeza da la máquina en esa dirección. Las más comunes suelen disponer de tres ejes proporcionando tres grados de libertad (X,Y,Z) y son muy comunes en aplicaciones de tipo fresado.
  • Para aplicaciones distintas a las anteriores existen las máquinas denominadas de cinemática no trivial, donde los movimientos de los ejes no coinciden con los movimientos en las coordenadas cartesianas (X,Y,Z). El movimiento a lo largo de una de estas coordenadas cartesianas supone el movimiento de uno o varios ejes según la cinemática de la máquina, y al contrario, el movimiento de un eje no supone un movimiento sobre una coordenada cartesiana.

El manipulador de tipo paralelo que se esta desarrollando pertenece a este último grupo. Se trata de una estructura de 6 ejes lineales, dispuestos verticalmente con los que se mueve una cabeza sobre las tres coordinadas cartesianas. En un principio los grados de libertad correspondientes a las orientaciones no se tendrán en cuenta. Esto es lo que se denomina un manipulador tipo "hexapod".

Debido a que la máquina no dispone de una cinemática trivial, se han de realizar una serie de cambios sobre el programa EMC2 para lograr tal objetivo, es decir, trasladar los movimientos en los ejes cartesianos a los movimientos sobre cada uno de los 6 ejes.

Cinemática de la máquina


Configuración de EMC2 para la cinemática de esta máquina.

El primer paso para la configuración de la cinemática en el programa EMC2 consiste en la obtención de las ecuaciones de cinemática directa e inversa para la máquina, como se ve en el ejemplo anterior.

Una vez que se dispone de estas ecuaciones hay que introducirlas en EMC2, pero para ello se ha de obtener el código fuente, ya que es preciso la compilación de éste y del archivo donde se indica la cinemática que se desea utilizar.

Compilación

Tras descomprimirlo, en nuestro caso, surgieron una serie de problemas de no muy difícil solución a la hora de la compilación. Todos los problemas que se tuvieron fueron de dependencias, faltaban paquetes como los compiladores de C y C++ (gcc y g++) que por defecto no se instalan con Ubuntu y librerías como GTK y Qt. Una vez instalados los paquetes necesarios el EMC2 siguiendo los siguientes pasos:

Desde el directorio emc2 se accede al directorio del código fuente:

  cd src

En este directorio se compila con las siguientes instrucciones:

  ./configure 
  make clean
  make
  sudo make install

para ejecutar el software simplemente ejecutar:

 emc

Existe un segundo método para compilar únicamente el archivo de la cinemática en vez de tener que compilar todo el programa. El siguiente comando compila e instala un módulo HAL.

sudo comp --install nuestra_cinemática.c 

esto sólo funciona con la versión 2.1.7 de EMC y superiores.

Implementación de las ecuaciones

Las ecuaciones de la cinemática se han de introducir en un fichero de tipo nuestra_cinemática.c en el directorio emc2/src/emc/kinematics/ de la carpeta donde se descomprimió el código fuente. Este fichero ha de disponer de las siguientes funciones:

  • int kinematicsForward(const double *joint, EmcPose *world, const KINEMATICS_FORWARD_FLAGS *fflags, KINEMATICS_INVERSE_FLAGS *iflags)

    Implementa la cinemática directa de la máquina.

  • extern int kinematicsInverse(const EmcPose * world, double *joints, const KINEMATICS_INVERSE_FLAGS *iflags, KINEMATICS_FORWARD_FLAGS *fflags)

    Implementa la cinemática indirecta de la máquina.

  • extern KINEMATICS_TYPE kinematicsType(void)

    Devuelve el indicador del tipo de cinemática

  • int kinematicsHome(EmcPose *world, double *joint, KINEMATICS_FORWARD_FLAGS *fflags, KINEMATICS_INVERSE_FLAGS *iflags)

    Esta función indica los valores correspondientes al punto Home de la máquina. Cuando es ejecutada, lleva la máquina a este punto, que es indicado en un archivo de tipo .INI en la descripción de la máquina

  • int rtapi_app_main(void)
  • void rtapi_app_exit(void)

    Estas funciones ejecutan y paran los módulos en el núcleo de tiempo real

En la siguiente página de proyecto EMC2 se explica cómo implemetar la cinemática de una máquina para ser ejecutada en este software: Kinematics