Diseño y construcción de una impresora delta (1)

Comienzo una serie donde se estudiará, se diseñará y se construirá una impresora 3D de tipo delta lineal.

Enlaces de interés (En construcción):

Modelo 3D de la impresora OnShape

Notebooks de Jupyter donde se realizan los cálculos GitHub

Notebook específico de este post NbViewer

Descripción del Problema

Se tiene una impresora 3D de tipo delta con 3 columnas equidistantes como se muestra en la siguiente figura:

prototipo

Figura 1: Impresora 3D delta lineal a analizar

Se desea obtener:

  1. Las expresiones que resuelven el problema cinemático en función de las variables geométricas del prototipo.
  2. El cálculo del espacio de trabajo.
  3. La variación de la resolución en el espacio de trabajo.
  4. La variación de la velocidad de la herramienta.

Descripción Geométrica

Consideremos la representación simplificada:

simplificado.png

Figura 2: Impresora 3D simplificada

Ubicamos los puntos importantes de la siguiente manera

puntos.png

Figura 3: Ubicación de puntos en la impresora 3D

En la figura podemos observar los puntos:

  • O el punto central de la cama caliente.
  • A el punto justo debajo de O, está separado una distancia \epsilon que se deja a propósito para la calibración o nivelación de la plataforma.
  • B el punto entre los centros de los tubos de una columna.
  • C el punto que denota la altura del carro respecto a la coluna.
  • D el punto ubicado en el punto medio de las dos juntas esféricas superiores.
  • F el punto ubicado en el punto medio de las dos juntas esféricas inferiores.
  • G el punto ubicado encima del centro de la plataforma móvil.
  • P el punto ubicado en la punta del extrusor.

Vemos que el robot estudiado mueve la punta de la herramienta, donde se encuentra el punto P, a través del movimiento lineal de los carros en el eje Z, es decir, a través del movimiento vertical del punto C accionado por el motor paso a paso.

Entradas y salidas

El robot analizado posee como entrada las distancias verticales del carro respecto a la base (l) y como salida el movimiento del punto P en dirección x, y y z.

Estudio Cinemático

 El problema cinemático

Existen dos problemas fundamentales para resolver la cinemática del robot; el primero de ellos se conoce como el problema cinemático directo, y consiste en determinar cual es la posición y orientación del extremo final del robot, con respecto a un sistema de coordenadas que se toma como referencia, conocidos los valores de las articulaciones y los parámetros geométricos de los elementos del robot, el segundo denominado problema cinemático inverso resuelve la configuración que debe adoptar el robot para una posición y orientación del extremo conocidas (Barrientos 2007).

Grados de Libertad

Podemos calcular el número de grados de libertad usando la fórmula de Grübler:

NGDL = \lambda (n - j - 1) + \sum_{i=1}^{j} f_i

Donde:
\lambda: Grados de libertad del espacio de trabajo (3 en el plano, 6 en el espacio).
n: Número de eslabones (incluyendo la base).
j: Número de articulaciones.
f_i: Grados de libertad de la articulación i.

Aplicando la ecuación:
NGDL = 6 (17-21-1) + 21 = -9

Lo cual es incorrecto,para hacer que la fórmula funcione debemos tratar las barras paralelas como un solo eslabón por brazo.

NGDL = 6 (14-15-1) + 15 = 3

Los que corresponde a las traslaciones en los ejes x, y y z. Cabe destacar que esta configuración no posee rotación de ningún tipo, así la plataforma móvil es siempre paralela a la plataforma fija.

Planteamiento Geométrico

Si observamos de nuevo la figura 3 podemos establecer la siguiente igualdad vectorial:

^B\vec{OA}_i + ^B\vec{AB}_i + ^B\vec{BC}_i + ^B\vec{CD}_i + ^B\vec{DE}_i = ^B\vec{P_P} + ^B_P\vec{R} ^P\vec{P_i}

Donde el subíndice i indica la columna y el superíndice indica respecto a cual sistema de coordenadas, B respecto a la base o plataforma fija y P respecto a la plataforma móvil.

Como no existe rotación entre la plataforma móvil y la base ^B_P\vec{R} = 1 obteniendo entonces:

^B\vec{OA}_i + ^B\vec{AB}_i + ^B\vec{BC}_i + ^B\vec{CD}_i + ^B\vec{DE}_i = ^B\vec{P_P} + ^P\vec{PF}_i + ^P\vec{FE}_i

Entonces el problema cinemático se resume a determinar cada una de estos vectores.

Determinación de los Vectores

El vector ^B\vec{OA}_i para todas las columnas es el mismo y es ^B\vec{OA}_i = [0, 0, \epsilon ]

# Importamos la librería de álgebra simbólica
import sympy as sym
# Activamos la salida en latex
sym.init_printing()

#Creamos la variable simbólica epsilon
e = sym.Symbol("\epsilon", positive=True)

# Definimos los vectores
OA_1 = sym.Matrix([0,0,-e])
OA_2 = sym.Matrix([0,0,-e])
OA_3 = sym.Matrix([0,0,-e])

^B\vec{OA}_1 = \left[\begin{matrix}0\\0\\- \epsilon\end{matrix}\right]

^B\vec{OA}_2 = \left[\begin{matrix}0\\0\\- \epsilon\end{matrix}\right]

^B\vec{OA}_3 = \left[\begin{matrix}0\\0\\- \epsilon\end{matrix}\right]

Para determinar los vectores ^B\vec{AB}_i debemos mirar la base:

base

Figura 4:  Base o cama caliente de la impresora

Definamos la distancia entre columnas como s, sabeos que la base formará entonces un triángulo equilátero de lado s.

# Creamos la variable simbólica s
s = sym.Symbol("s", positive=True);

AB_1x = s / 2
AB_1y = -AB_1x * sym.tan(sym.pi / 6)
AB_1 = sym.Matrix([AB_1x, AB_1y, 0])

AB_2x = 0
AB_2y = (s / 2) / sym.cos(sym.pi / 6)
AB_2 = sym.Matrix([AB_2x, AB_2y, 0])

AB_3x = -s / 2
AB_3y = AB_1y
AB_3 = sym.Matrix([AB_3x, AB_3y, 0])

 

^B\vec{AB}_1 = \left[\begin{matrix}\frac{s}{2}\\- \frac{\sqrt{3} s}{6}\\0\end{matrix}\right]

^B\vec{AB}_2 = \left[\begin{matrix}0\\\frac{\sqrt{3} s}{3}\\0\end{matrix}\right]

^B\vec{AB}_3 = \left[\begin{matrix}-\frac{s}{2}\\- \frac{\sqrt{3} s}{6}\\0\end{matrix}\right]

Los vectores ^B\vec{BC}_i Estń en dirección z y tienen magnitud l_i la cual es la distancia vertical entre el carro y la base

l_1 = sym.Symbol("l_1", positive=True)
BC_1 = sym.Matrix([0, 0, l_1])

l_2 = sym.Symbol("l_2", positive=True)
BC_2 = sym.Matrix([0, 0, l_2])

l_3 = sym.Symbol("l_3", positive=True)
BC_3 = sym.Matrix([0, 0, l_3])

^B\vec{BC}_1 = \left[\begin{matrix}0\\0\\l_{1}\end{matrix}\right]

^B\vec{BC}_2 = \left[\begin{matrix}0\\0\\l_{2}\end{matrix}\right]

^B\vec{BC}_3 = \left[\begin{matrix}0\\0\\l_{3}\end{matrix}\right]

Los vectores ^B\vec{CD}_i están en la misma dirección que los ^B\vec{AB}_i pero en sentido opuesto. La magnitud de este vector la denominaremos a

a = sym.Symbol("a", positive=True)

CD_1 = -a * AB_1 / sym.sqrt((AB_1.dot(AB_1)))
CD_2 = -a * AB_2 / sym.sqrt((AB_2.dot(AB_2)))
CD_3 = -a * AB_3 / sym.sqrt((AB_3.dot(AB_3)))

^B\vec{CD}_1 = \left[\begin{matrix}- \frac{\sqrt{3} a}{2}\\\frac{a}{2}\\0\end{matrix}\right]

^B\vec{CD}_2 = \left[\begin{matrix}0\\- a\\0\end{matrix}\right]

^B\vec{CD}_3 = \left[\begin{matrix}\frac{\sqrt{3} a}{2}\\\frac{a}{2}\\0\end{matrix}\right]

Las coordenadas del punto del extrusor ^B\vec{P_P} son

x = sym.Symbol("x")
y = sym.Symbol("y")
z = sym.Symbol("z")

P_P = sym.Matrix([x, y, z])

^B\vec{P_P} = \left[\begin{matrix}x\\y\\z\end{matrix}\right]

Los vectores ^P\vec{PF}_i son todos iguales, van en dirección z y a su magnitud la llamaremos b

b = sym.Symbol("b", positive=True)

PF_1 = sym.Matrix([0, 0, b])
PF_2 = sym.Matrix([0, 0, b])
PF_3 = sym.Matrix([0, 0, b])

^P\vec{PF}_1 = \left[\begin{matrix}0\\0\\b\end{matrix}\right]

^P\vec{PF}_1 = \left[\begin{matrix}0\\0\\b\end{matrix}\right]

^P\vec{PF}_3 = \left[\begin{matrix}0\\0\\b\end{matrix}\right]

Para hallar los vectores ^P\vec{FE}_i debemos observar la plataforma móvil. Además llamamos c a la distancia entre los puntos E_i

plataforma

Figura 5: Plataforma Móvil

c = sym.Symbol("c", positive=True);

FE_1x = c / 2
FE_1y = -FE_1x * sym.tan(sym.pi / 6)
FE_1 = sym.Matrix([FE_1x, FE_1y, 0])

FE_2x = 0
FE_2y = (c / 2) / sym.cos(sym.pi / 6)
FE_2 = sym.Matrix([FE_2x, FE_2y, 0])

FE_3x = -c / 2
FE_3y = FE_1y
FE_3 = sym.Matrix([FE_3x, FE_3y, 0])

^P\vec{FE}_1 = \left[\begin{matrix}\frac{c}{2}\\- \frac{\sqrt{3} c}{6}\\0\end{matrix}\right]

^P\vec{FE}_2 =\left[\begin{matrix}0\\\frac{\sqrt{3} c}{3}\\0\end{matrix}\right]

^P\vec{FE}_3 = \left[\begin{matrix}- \frac{c}{2}\\- \frac{\sqrt{3} c}{6}\\0\end{matrix}\right]

Finalmente sustituiremos los vectores en la ecuación

^B\vec{OA}_i + ^B\vec{AB}_i + ^B\vec{BC}_i + ^B\vec{CD}_i + ^B\vec{DE}_i = ^B\vec{P_P} + ^P\vec{PF}_i + ^P\vec{FE}_i

^B\vec{DE}_i = ^B\vec{P_P} + ^P\vec{PF}_i + ^P\vec{FE}_i - ^B\vec{OA}_i - ^B\vec{AB}_i - ^B\vec{BC}_i - ^B\vec{CD}_i

# Columna 1
DE_1 = P_P + PF_1 + FE_1 - OA_1 - AB_1 - BC_1 - CD_1

# Columna 2
DE_2 = P_P + PF_2 + FE_2 - OA_2 - AB_2 - BC_2 - CD_2

# Columna 3
DE_3 = P_P + PF_3 + FE_3 - OA_3 - AB_3 - BC_3 - CD_3

^B\vec{DE}_1  = \left[\begin{matrix}\frac{\sqrt{3} a}{2} + \frac{c}{2} - \frac{s}{2} + x\\- \frac{a}{2} - \frac{\sqrt{3} c}{6} + \frac{\sqrt{3} s}{6} + y\\\epsilon + b - l_{1} + z\end{matrix}\right]

^B\vec{DE}_2 = \left[\begin{matrix}x\\a + \frac{\sqrt{3} c}{3} - \frac{\sqrt{3} s}{3} + y\\\epsilon + b - l_{2} + z\end{matrix}\right]

^B\vec{DE}_3 = \left[\begin{matrix}- \frac{\sqrt{3} a}{2} - \frac{c}{2} + \frac{s}{2} + x\\- \frac{a}{2} - \frac{\sqrt{3} c}{6} + \frac{\sqrt{3} s}{6} + y\\\epsilon + b - l_{3} + z\end{matrix}\right]

No conocemos los vectores ^B\vec{DE}_i pero sabemos que su longitud es fija y vale L así que sacamos el módulo y lo igualamos a L

L = sym.Symbol("L", positive=True)

eq_1 = sym.Eq(L**2, DE_1.dot(DE_1))
eq_2 = sym.Eq(L**2, DE_2.dot(DE_2))
eq_3 = sym.Eq(L**2, DE_3.dot(DE_3))

Obteniendo las ecuaciones:

L^{2} = \left(\epsilon + b - l_{1} + z\right)^{2} + \left(- \frac{a}{2} - \frac{\sqrt{3} c}{6} + \frac{\sqrt{3} s}{6} + y\right)^{2} + \left(\frac{\sqrt{3} a}{2} + \frac{c}{2} - \frac{s}{2} + x\right)^{2}

L^{2} = x^{2} + \left(\epsilon + b - l_{2} + z\right)^{2} + \left(a + \frac{\sqrt{3} c}{3} - \frac{\sqrt{3} s}{3} + y\right)^{2}

$L^{2} = \left(\epsilon + b – l_{3} + z\right)^{2} + \left(- \frac{a}{2} – \frac{\sqrt{3} c}{6} + \frac{\sqrt{3} s}{6} + y\right)^{2} + \left(- \frac{\sqrt{3} a}{2} – \frac{c}{2} + \frac{s}{2} + x\right)^{2}$

Donde

Variable Descripción
\epsilon Distancia vertical entre la estructura y la cama caliente, esta distancia puede variar ligeramente debido al proceso de nivelación
a Distancia entre el punto medio del centro de las guías verticales y el punto medio de los extremos superiores de las juntas esféricas
b Distancia entre el plano forado por los puntos F_i y la punta del extrusor P
c Lado del triángulo formado por los puntos E_i
l_i Distancia vertical del carro
s Distancia entre columnas
L Longitud de los brazos
x, y, z Coordenadas de los puntos de la herramienta
l1 = sym.solve(eq_1,l_1)
l2 = sym.solve(eq_2,l_2)
l3 = sym.solve(eq_3,l_3)

Las ecuaciones que describen la cinemática inversa son las siguientes:

l_1 = \left [ \epsilon + b + z - \frac{\sqrt{3}}{3} \sqrt{3 L^{2} - 3 a^{2} - 2 \sqrt{3} a c + 2 \sqrt{3} a s - 3 \sqrt{3} a x + 3 a y - c^{2} + 2 c s - 3 c x + \sqrt{3} c y - s^{2} + 3 s x - \sqrt{3} s y - 3 x^{2} - 3 y^{2}}, \quad \epsilon + b + z + \frac{\sqrt{3}}{3} \sqrt{3 L^{2} - 3 a^{2} - 2 \sqrt{3} a c + 2 \sqrt{3} a s - 3 \sqrt{3} a x + 3 a y - c^{2} + 2 c s - 3 c x + \sqrt{3} c y - s^{2} + 3 s x - \sqrt{3} s y - 3 x^{2} - 3 y^{2}}\right ]

l_2 = \left [ \epsilon + b + z - \frac{1}{3} \sqrt{9 L^{2} - 9 a^{2} - 6 \sqrt{3} a c + 6 \sqrt{3} a s - 18 a y - 3 c^{2} + 6 c s - 6 \sqrt{3} c y - 3 s^{2} + 6 \sqrt{3} s y - 9 x^{2} - 9 y^{2}}, \quad \epsilon + b + z + \frac{1}{3} \sqrt{9 L^{2} - 9 a^{2} - 6 \sqrt{3} a c + 6 \sqrt{3} a s - 18 a y - 3 c^{2} + 6 c s - 6 \sqrt{3} c y - 3 s^{2} + 6 \sqrt{3} s y - 9 x^{2} - 9 y^{2}}\right ]

l_3 = \left [ \epsilon + b + z - \frac{\sqrt{3}}{3} \sqrt{3 L^{2} - 3 a^{2} - 2 \sqrt{3} a c + 2 \sqrt{3} a s + 3 \sqrt{3} a x + 3 a y - c^{2} + 2 c s + 3 c x + \sqrt{3} c y - s^{2} - 3 s x - \sqrt{3} s y - 3 x^{2} - 3 y^{2}}, \quad \epsilon + b + z + \frac{\sqrt{3}}{3} \sqrt{3 L^{2} - 3 a^{2} - 2 \sqrt{3} a c + 2 \sqrt{3} a s + 3 \sqrt{3} a x + 3 a y - c^{2} + 2 c s + 3 c x + \sqrt{3} c y - s^{2} - 3 s x - \sqrt{3} s y - 3 x^{2} - 3 y^{2}}\right ]

Las dos soluciones que nos ha dado corresponden a los casos de la plataforma móvil encima de los carros (l_i menor) y el de la plataforma móvil debajo de los carros (l_i mayor). Así que solo tomamos la segunda solución.

l1 = l1[1]
l2 = l2[1]
l3 = l3[1]

l_1 = \epsilon + b + z + \frac{\sqrt{3}}{3} \sqrt{3 L^{2} - 3 a^{2} - 2 \sqrt{3} a c + 2 \sqrt{3} a s - 3 \sqrt{3} a x + 3 a y - c^{2} + 2 c s - 3 c x + \sqrt{3} c y - s^{2} + 3 s x - \sqrt{3} s y - 3 x^{2} - 3 y^{2}}

l_2 = \epsilon + b + z + \frac{1}{3} \sqrt{9 L^{2} - 9 a^{2} - 6 \sqrt{3} a c + 6 \sqrt{3} a s - 18 a y - 3 c^{2} + 6 c s - 6 \sqrt{3} c y - 3 s^{2} + 6 \sqrt{3} s y - 9 x^{2} - 9 y^{2}}

l_3 = \epsilon + b + z + \frac{\sqrt{3}}{3} \sqrt{3 L^{2} - 3 a^{2} - 2 \sqrt{3} a c + 2 \sqrt{3} a s + 3 \sqrt{3} a x + 3 a y - c^{2} + 2 c s + 3 c x + \sqrt{3} c y - s^{2} - 3 s x - \sqrt{3} s y - 3 x^{2} - 3 y^{2}}

 

 

 

 

Licencia Creative Commons
Diseño y construcción de una impresora delta por Eduardo Vieira se distribuye bajo una Licencia Creative Commons Atribución 4.0 Internacional.
Basada en la obra “The Delta Parallel Robot: Kinematics Solutions” de R.L. Williams II en http://www.ohio.edu/people/williar4/html/pdf/DeltaKin.pdf.
Bibliografía: Fundamentos De Robótica de: Antonio Barrientos, Luis F. Penin, Carlos Balaguer y Rafael Aracil. 2da Ed (2007).

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s