UR5 Stapelposition bei unterschiedlichen Höhen des Stapelgutes

  • Moin Zusammen,


    ich habe eine Frage bei der Ihr mir vielleicht behilflich sein könnt. Habe den UR5 mit Greifer wie folgt geplant:


    Er soll auf einer gleichbleibenden Ebene, Förderband, Güter mit seinem Greifer aufnehmen. Die Güter variieren jedoch in der Höhe (100-300mm). Diese sollen anschließend in feste Abstapelbereiche nach der Höhe, Dicke gestapelt werden.(natürlich nur bis zu einer bestimmten Stapelhöhe)

    Es ist mir bereits gelungen über die Greiferkontrolle die unterschiedlichen Höhen zu registrieren und die Güter zum richtigen Abstapelbereich zu lenken. Leider bekomme ich es aber nicht hin, dass der UR sich die letzte Stapelhöhe gemerkt hat und das nachfolgende Teil auf dem unterliegenden im entsprechenden Abstapelbereich ablegt. Hier gibt es aber doch bestimmt eine Möglichkeit oder?

    Zur not würde ich das über eine Sensorik und eine SPS-Steuerung machen aber vielleicht gibt es ja eine schlankere Variante.


    Besten Dank im Voraus für Eure Hilfe


    VG


    Florian

  • ANZEIGE
  • Ich hatte ein ähnliches Problem. Meine Lösung dafür:


    Ich habe zwei Variablen, die ich hier mal Stackhoehe und Bauteilhoehe nenne. Jedes Mal, wenn du ein Bauteil auf einem anderen ablegst, zählst du diese Variable um einen hoch. Wenn du nun beim nächsten Mal ein Bauteil greifst und es auf dem vorigen ablegen willst, musst du die Z-Position mit Hilfe dieser Variable ändern.


    Ich mache dies mit folgendem Script-Befehl:


    Ablagepunkt[2] = Ablagepunkt[2] + (Stackhoehe * Bauteilhoehe)


    Ablagepunkt[2], da du von der Position Ablagepunkt nur den Z-Wert ändern willst (x = 0, y = 1, usw.). Stackhoehe fängt bei 0 an, wenn noch kien Bauteil auf dem Ablageort liegt.


    Bei verschiedenen Bauteilhoehen brauchst du hier natürlich mehrere Variablen.

  • Hi JDab,


    vielen Dank für die schnelle Hilfe. Bin leider echt Neuling bei der Programmierung von UR und steige noch nicht ganz durch deinen Lösungsansatz durch. Versteh ich das richtig, dass ich in der Programmeinheit "Stapeln" die o.g f(x) bei der "nächsten Stapelposition" eingeben muss?

    Danke

  • Ich habe mal ein paar Bilder angehängt, vielleicht hilft das weiter. Du musst deine Ablageposition in den Installationsvariablen als Pose oder Punkt festlegen (p[x,y,z,rx,ry,rz] oder [x,y,z,rx,ry,rz]). Wichtig ist hier, dass deine Koordinaten die von deinem geteachten Ablagpunkt sind.


    Dann gehst du im Programmbaum auf deinen Wegpunkt Ablagepunkt und wählst oben rechts anstatt "Feste Position" --> "Variable Position" und wählst als Variable die vorher festgelegte Variable "Ablagepunkt". Nun kannst du die Werte dieses Punktes in deinem Programm ändern.


    Du musst deinen akuellen Ablagepunkt immer vor dem Anfahren berechnen, d.h. entweder zwischen Aufnahmepunkt und Ablagpunkt ODER nachdem du den Ablagepunkt angefahren hast (ich tendiere zu zweitem, auch wenn ich das auf dem Bild nicht getan habe).

  • Aaaah ja, habe den Fehler gefunden. Das ist ein bisschen tricky. Folgendes:

    Wenn du eine geteachte Position anfährst, dann macht das Programm daraus eine invertierte Bewegung. Das passiert automatisch (kannst du z.B. im Programm-Script einmal nachschauen).


    Um deinen Punkt korrekt anzufahren, musst du folgende Dinge machen:


    1. Lege deinen variablen Punkt als Pose an: p[x,y,z,ax,ay,az]

    2. Stelle sicher, dass dein Punkt in Metern angegeben ist, also in deinem Fall: p[0.56, 0.11, 0.48252, 0.0086, 1.636, -0.087]

    3. Deine Bauteilhoehe (bei dir Buchhoehe?) muss ebenfalls in m angegeben werden (0.025m in deinem Fall)

    4. Du musst deine Höhenverschiebung in Z auch wieder rückgängig machen, da du ja immer in eine Variable schreibst. Ich löse dies meistens, in dem ich nach erfolgreicher Abwicklung des Stapelns oder bei Programm-Neustart AblagepunktPose[2] = 0.48473 setze, um wieder auf den ursprünglichen Z-Wert zu kommen.


    So habe ich das ganze einmal getestet, das sollte so funktionieren.

    Ich habe das ganze einmal getestet. Wenn du den Punkt nicht als Pose definierst, fährt der Roboter einen anderen Punkt an.


    Habe mein Testprogramm und die Variablen einmal angehängt. Position des Wegpunkts Homeposition ist [400, 200, 400, 0.086, 1.636, -0.087].


    Hoffe das hilft dir.

  • Guten Morgen,


    also, die erste Ablageposition wird jetzt korrekt angefahren, das passt schonmal. Leider fährt er in der 2,3,usw. immer wieder die erste Ablageposition an anstatt etwas höher abzulegen. In der Installation kann ich sehen, dass die Variable "Stackhoehe" pro Durchgang mitzählt (5,4,3,..) aber leider baut sich die Höhe nicht auf.

    Habe nochmal Screenshots gemacht.

    Vielleicht hast Du ja noch eine Idee.

    LG

  • Das ist ungewöhnlich. Magst du mir mal deine Scriptzeile schicken? Oder noch besser:

    Wenn du das Programm auf deinen Rechner kopieren könntest, dann solltest du dort u.A. eine Datei mit der Endung "Name_des_Progamms".script haben.


    Entweder die Variable wird nicht richtig überschrieben oder in der Rechnung ist was falsch. Mehr kann ich mir da gerade nicht vorstellen. Es kann natürlich auch sein, dass du unabsichtlich irgendwo den Wert in Z immer zurücksetzt. Aber das seh ich in deinem Programm gerade nicht.

  • Hmm. Hab da mal durchgeschaut. Wie startest du dein Programm? Ich sehe, dass du vor dem Start deine Z-Position immer zurücksetzt. Das würde ich nur machen, wenn dein Stapel auch tatsächlich leer ist. Du könntest das z.B. abprüfen mit einem Pop-Up.


    Kommentier den VorStart-Befehl zum zurücksetzen der Z-Position aus und versuch es dann nochmal. Das wäre das einzige, was mir gerade einfällt :/

  • Hab den Fehler gefunden.

    Du vergleichst die Verschiebung mit: AblagepunktPose[2] == AblagepunktPose[2] + (Stackhoehe+Buchhoehe)


    Es müsste aber heißen: AblagepunktPose[2] = AblagepunktPose[2] + (Stackhoehe+Buchhoehe)


    Nur ein "=", da du hier nicht vergleichen, sondern eine Variable beschreiben willst. Versuch sonst mal ":=", das ist ebenfalls für eine Zuweisung.

  • JD, es funktioniert! Wie einfach es doch war. Jetzt habe ich aktuell nur noch ein Problem. Nach dem der UR das 2x abgelegt hat will er in Runde drei viel zu hoch abstapeln. Hast Du eine Idee woran das liegen könnte?

  • So spontan nicht, nein. Kontrolliere während des Programmablaufs einmal deine Variablen, ob die korrekt hochzählen. Ich kann jetzt nur spekulieren. Ansonsten teste es einmal aus, indem du den Punkt für die 3. Ebene manuell festlegst und den UR dann da mal hinfahren lässt und schaust, ob irgendwelche Probleme auftreten. Mehr fällt mir da gerade nicht zu ein.

  • Hab zwar null Ahnung von UR Robotern, aber eine Idee:

    Durch die Berechnung wird ja der Offset auf den letzten eh schon berechneten Punkt aufgeschlagen. Das wir dann im nächsten Durchlauf noch viel schlimmer.

    Also entweder immer vom untersten Punkt mit der aktuellen Formel berechnen, oder aber bei jedem Durchlauf nur EIN Mal die Buchhoehe addieren. Dann muss man bei einem neuen Stapel aber den Punkt wieder aus dem untersten übernehmen.

  • Hermann hat Recht. Versuch mal, bei der Berechnung des Offsets einfach nur AblagePunktPose[2] = AblagePunktPose[2] + Stackhoehe zu rechnen. Da du nur zurücksetzt, wenn die maximale Höhe erreicht ist, sollte das so ebenfalls funktionieren, ohne dass du exponentiell die Höhe änderst.

Erstelle ein Benutzerkonto oder melde dich an um zu kommentieren

Du musst ein Benutzerkonto haben um einen Kommentar hinterlassen zu können

Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Geht einfach!
Neues Benutzerkonto erstellen
Anmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden