Roboter 3D Druck Projekt

Der 3D-Druck oder die additive Fertigung ist der Herstellungsprozess dreidimensionaler fester Objekte aus einer digitalen Datei. Industrieroboterarme können hierzu als 3-Achs-3D-Drucker oder als 5-Achs-3D-Drucker mit RoboDK verwendet werden. Das folgende Video zeigt eine Übersicht über das Einrichten des 3D-Drucks mit RoboDK offline: Video anschauen.

3D-Druck mit Robotern ist auf eine der folgenden Arten möglich:

Konvertieren Sie G-Code-Programme (NC-Datei) direkt in Roboterprogramme mit Hilfe von RoboDK. Dies wurde im Projekt Roboter maschinelle Bearbeitunggezeigt. Die Materialflussrate (Extruder-Anweisung E) wird bei jeder Bewegung richtig berücksichtigt und kann als Programm Ereignis in das generierte Programm integriert werden. G-Code ist eine Art von NC-Datei, die von RoboDK unterstützt wird und auch von vielen 3D-Druckern unterstützt wird. Die meisten Slicer Programme können ebenfalls G-Code mit einer STL-Datei erzeugen.

Wählen Sie Dienstprogramme3D Projekt drucken, um die 3D-Druckeinstellungen zu öffnen. Diese Einstellungen sind mit denen eines Roboter maschinelle Bearbeitung identisch. Der einzige Unterschied besteht darin, dass die Pfad Eingabe als 3D-Druckobjekt voreingestellt ist. Wählen Sie Objekt auswählen, um das Objekt auf dem Hauptbildschirm auszuwählen und automatisch den Werkzeugweg zu erhalten. Wählen Sie 3D-Druckoptionen, um Slic3r zu öffnen.

Robot Machining - Bild 31

Robot Machining - Bild 32

Standardmäßig übersetzt RoboDK die E-Direktive als Programmaufruf in ein Programm namens Extruder und übergibt den E-Wert als Parameter. Wählen Sie Programm-Ereignisse, um dieses Verhalten zu ändern.

Robot Machining - Bild 33

Der Extruder-Wert (E) gibt an, wie viel Material vor jeder Bewegung extrudiert werden muss. Dieser Wert kann verwendet werden, um die Extruderzufuhr vom Roboter, abhängig von Robotergeschwindigkeit und Abstand der Punkte, zu steuern.

Alternativ ist es möglich, die Beschickung des Extruders mit einem Postprozessor zu berechnen und entsprechend Code zu generieren. Der folgende Abschnitt enthält ein Beispiel.


Postprozessoren für Roboter 3D Druck

Dieser Abschnitt beschreibt, wie ein Roboter Postprozessor bearbeitet werden muss, um die Zufuhr des Extruders, vor der jeweiligen Bewegung, zu berechnen. Alternativ können diese Berechnungen auch auf dem Roboter Controller gemacht werden.

Der erste Schritt besteht darin, die Extruder-Aufrufe abzufangen und die neuen Extruder-Werte (E-Werte) aus dem RunCode-Abschnitt im Postprozessor zu lesen:

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)

            # we extract the number as a string

            # and convert it to a number

            self.NEW_E_LENGTH = float(code[9:-1])

            # Skip the program call generation

            return

        else:

            self.addline(code + "()")

    else:

# Output program code

        self.addline(code)

Der Extruder-Wert wird als NEW_E_LENGTH-Variable gespeichert. Anschließend muss man ein neues Verfahren definieren, das Extruder-Vorschubbefehle entsprechend dem Abstand zwischen den Bewegungen, der Robotergeschwindigkeit und der Roboterbeschleunigung erzeugt. Dies setzt voraus, dass die Extruderzufuhr durch eine spezifische analoge Ausgabe von der Robotersteuerung (in diesem Beispiel den analogen Ausgang Nummer 5) angetrieben wird

def new_move(self, pose1, pose2):

    if pose1 isNone:

        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.NEW_E_LENGTH - self.LAST_E_LENGTH

    self.LAST_E_LENGTH = self.NEW_E_LENGTH

    if add_material >0:

        distance_mm = norm(subs3(pose1.Pos(), pose2.Pos()))

        # calculate movement time in seconds

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

        # add material

        self.setDO(5, (add_material/time_s))

    else:

        # DO not add material

        self.setDO(5,0)

Schließlich müssen wir den Befehl new_move mit jeder neuen Bewegungsinstruktion ausführen. Wir können diesen Aufruf am Anfang des MoveL-Befehls hinzufügen:

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

    """Add a linear movement"""

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