Impresión 3D Robótizada

La impresión 3D o fabricación aditiva es el proceso de hacer objetos sólidos tridimensionales desde un archivo digital. Los brazos robots industriales pueden ser utilizados como una impresora 3D de 3 ejes o como una impresora 3D de 5 ejes con RoboDK. El siguiente vídeo muestra una visión general de cómo configurar la impresión 3D con RoboDK fuera de línea: Ver vídeo.

La impresión 3D con los robots es posible en una de las siguientes formas:

Convierta directamente programas de código G (archivo NC) a programas de robot con RoboDK, como se muestra con el Proyecto de mecanizado de robots. La tasa de flujo de material (directiva E de extrusora) está correctamente tenida en cuenta para cada movimiento y se puede integrar en el programa generado como un Evento del programa. El código G es un tipo de archivo del NC soportado por RoboDK y es también un formato soportado por muchas impresoras 3D. La mayoría de los softwares rebanadores pueden generar el código G dado un archivo de STL.

Seleccione UtilidadesProyecto de Impresión 3D para abrir la configuración de impresión 3D. Estos ajustes son los mismos que para el Proyecto de Mecanizado Robótico, la única diferencia es que el Entrada de ruta está preajustada para imprimir objeto 3D. Seleccione Seleccionar Objeto para seleccionar el objeto en la pantalla principal y obtenga automáticamente la trayectoria de herramienta. Seleccione opciones de impresión 3D para abrir Slic3r.

Robot Machining - Imagen 31

Robot Machining - Imagen 32

De forma predeterminada, RoboDK traduce la directiva E como una llamada de programa a un programa llamado Extrusora y pasando el valor E como parámetro. Seleccione Eventos del programa para cambiar este comportamiento.

Robot Machining - Imagen 33

El valor de la Extrusora (E) presenta la cantidad de material que necesita ser sacado antes de cada movimiento. Este valor se puede utilizar para impulsar la alimentación de la extrusora desde el robot teniendo en cuenta la velocidad del robot y la distancia entre los puntos.

Alternativamente, es posible calcular la alimentación de la extrusora utilizando un post-procesador y generar el código apropiado en consecuencia. La siguiente sección proporciona un ejemplo.

Post-Procesador para impresión 3D robótica

Esta sección muestra cómo modificar un  post-procesador robótico para calcular la alimentación de la extrusora antes ejecutar cada movimiento. Alternativamente, estos cálculos se pueden hacer en el controlador del robot.

El primer paso es interceptar las llamadas de la Extrusora y leer los nuevos valores de Extrusora (valores E) desde la sección RunCode en el postprocesador:

def RunCode(self, code, is_function_call = False):

    if is_function_call:

        if code.startswith("Extruder("):

            # Intercept the extruder command.

            # if the program call is Extruder(123.56)

# extraemos el número como una cadena

            # y convertirlo a un número

            Self.PRINT_E_NEW = float(code[9:-1])

            # Skip the program call generation

            return

        else:

            self.addline(code + "()")

    else:

# Output program code

        self.addline(code)

El valor de la Extrusora (longitud) se guarda como ela variable PRINT_E_NEW. Entonces, necesitamos definir un nuevo procedimiento que genere comandos de alimentación de extrusoras según la Distancia entre movimientos, la velocidad del robot y la aceleración del robot. Este asume que la alimentación de la extrusora es conducida por una salida analógica específica desde el controlador del robot (salida analógica número 5 en este ejemplo).

def new_move(self, pose2):

    '''Output the Extruder signal to have a constant flow

Dada la cantidad de material que necesita ser extruido,

    la distancia entre los 2 puntos y la velocidad del robot ' ' ' '

if self.PRINT_POSE_LAST is None:

        self.PRINT_POSE_LAST = pose2

        return

    def Calculate_Time(Dist, Vmax, Amax):

        '''Calculate the time to move Dist with Amax acceleration and Vmax speed'''

        tacc = Vmax/Amax;

        Xacc = 0.5*Amax*tacc*tacc;

        if Dist <=2*Xacc:

            # Vmax is not reached

            tacc = sqrt(Dist/Amax)

            Ttot = tacc*2

        else:

            # Vmax is reached

            Xvmax = Dist -2*Xacc

            Tvmax = Xvmax/Vmax

            Ttot = 2*tacc + Tvmax

        return Ttot

    add_material = self.PRINT_E_NEW - self.PRINT_E_LAST

    self.PRINT_E_LAST = self.PRINT_E_NEW

    if add_material >0:

        distance_mm = norm(subs3(self.PRINT_POSE_LAST.Pos(), pose2.Pos()))

        # calculate movement time in seconds

        time_s = Calculate_Time(distance_mm, self.SPEED_MMS, self.PRINT_ACCEL_MMSS)

        # add material

Señal = Min(Automático.PRINT_FLOW_MAX_SIGNAL , Automático.PRINT_FLOW_2_SIGNAL * add_material/time_s)

        self.setDO(self.PRINT_E_AO,"%.3f" %(signal))

    else:

        # DO not add material

        self.setDO(self.PRINT_E_AO,"0")

    # Remember the last position

self.PRINT_POSE_LAST = pose2

Debemos añadir las siguientes variables en la cabecera del postprocesador para que el código anterior funcione:

# Clase de objeto que maneja las instrucciones/Syntax del robot

Clase RobotPost(Objeto):

"""Robot post object"""

...

# 3D Printing Extruder Setup Parameters:

PRINT_E_AO =5# Analog ID de salida para ordenar el flujo de extrusora

PRINT_FLOW_2_SIGNAL =0,05# Ratio para convertir el flujo a una señal analógica

PRINT_FLOW_MAX_SIGNAL =24# Señal máxima para proporcionar a la extrusora

PRINT_ACCEL_MMSS =1E9# Acceleration (asuma la velocidad constante si utilizamos el redondeo/la mezcla)   

# Internal 3D Printing Parameters

PRINT_POSE_LAST =Ninguno# Última pose impresa

PRINT_E_LAST =0# Última longitud del estirador

PRINT_E_NEW =0# Nueva longitud del estirador

...

Finalmente, también necesitamos disparar el comando new_move con cada nueva instrucción de movimiento. Podemos añadir esta llamada en el principio del comando MoveL:

def MoveL(self, pose, joints, conf_RLF=None):

    """Add a linear movement"""

    self.new_move(pose) # used for 3D printing