Loch Schleifen mit KR6/2

  • Hallo Leute,


    im Rahmen meines Praktikums für mein Studium darf ich mich intensiver mit einem Kuka KR6/2 (BOF Version V 2.2.8, Grundsystemversion KS V2.38_14) beschäftigen. Und zwar wollen wir ein Loch (Durchmesser=17mm) in einem Blech mit einem Stabschleifer (Durchmesser Schleifer=12,5mm), der am Roboter montiert ist, abschleifen. Also recht kleine Kreisradien. Bin jetzt seit ca. 3 Wochen Neuling am Robi und verzweifle gerade an unerklärlichen Phänomenen.:hilfe:
    Hatten uns das so gedacht, das wir ins Loch rein fahren, schräg anstellen und die untere Lochkante schleifen, danach gerade stellen und schleifen, danach wieder schräg stellen und obere Lochkante schleifen. Das ganze je nach bedarf mit mehreren runden. Und um den Schleifer auch noch gleichmäßig abzunutzen muss dann nach jedem Zyklus etwas tiefer eingetaucht werden.


    Habe da schon einiges Programmiert was auch recht gut funktioniert. Jedoch bekomme ich mit der Orientierung während meiner Kreisbahn bei bestimmten Werten Probleme.


    Der Roboter soll hierbei die Orientierung im Hilfspunkt beibehalten, wobei diese in den einzelnen Kreispunkten durch abkippen der Winkel B und C erreicht wird. Tut er eigentlich auch, jedoch fängt er irgendwann an (unerklärlicher Weise) die Orientierung nicht wie normal zu halten, sondern durch eine komplette Umorientierung auch über den Winkel A. Das ist unerwünscht, da sonst eine Kollision auftreten würde...ausserdem wäre somit auch die Anzahl der Kreise beschränkt, wegen des endlichen Achsenwinkels...!? Haben lange rumprobiert bis wir die Geschichte mit der Orientierung raus hatten, aber $ORI_TYPE=#VAR und $CIRC_TYPE=#PATH waren die einzigen Einstellungen bei denen es (ab und zu) so funktioniert hat wie wir wollten.


    Dieses Problem tritt auf, wenn der TCP während der Kreisbewegung einen kleineren Radius als 0,25mm beschreibt!
    Wenn die dritte Nachkommastelle die Werte 2-4 (z.B. 3.122-3.124mm), und die erste und zweite Nachkommastelle den Wert 58-62 (z.B. 3.58-3.62mm) annimmt! :kopfkratz: sehr komisch.........!
    Oder sobald wir versuchen durch Variablen eine Zustellung des Kreisradius zu erreichen! Hierbei wird der erste Kreis dann normal abgefahren und der zweite mit der komischen Orientierung.


    Diese unterschiedlichen Bereiche haben wir beim rumprobieren herausgefunden, und sie lassen sich für unterschiedliche TCP's sowie verschiedene Arbeitsbereiche wiederholen. Eine Singularität lag auch nicht vor.


    Eines der Programme bei denen sich das Phänomen hervorrufen lässt sieht so aus:
    Variablen müssten eigentlich alle richtig deklariert sein...funktioniert ja des öfteren... :zwink:


    INI
    PTP Home Vel=100% Default


    ;Kreismittelpunkt berechnen
    MPKT[1,1].X=Wert_X
    MPKT[1,1].Y=Wert_Y
    MPKT[1,1].Z=Wert_Z
    MPKT[1,1].A=-178.214
    MPKT[1,1].B=0
    MPKT[1,1].C=180
    ;Kreispunkte berechnen
    KP1[1,1]=MPKT[1,1]
    KP1[1,1].X=KP1[1,1].X-RAD
    KP1[1,1].B=KP1[1,1].B+ANG
    KP2[1,1]=MPKT[1,1]
    KP2[1,1].Y=KP2[1,1].Y+RAD
    KP2[1,1].C=KP2[1,1].C+ANG
    KP3[1,1]=MPKT[1,1]
    KP3[1,1].X=KP3[1,1].X+RAD
    KP3[1,1].B=KP3[1,1].B-ANG
    KP4[1,1]=MPKT[1,1]
    KP4[1,1].Y=KP4[1,1].Y-RAD
    KP4[1,1].C=KP4[1,1].C-ANG


    PTP Ueberloch Vel=100% PDAT1
    $APO.DIS=3
    LIN MPKT[1,1] C_DIS
    Set Greifer1 State=Zu CONT at START Delay 0ms
    $VEL.CP=0.02
    LIN KP1[1,1] C_DIS


    FOR ZAEHLER 1 TO 2
    $VEL.CP=0.01
    $ORI_TYPE=#VAR
    $CIRC_TYPE=#PATH
    CIRC KP2[1,1], KP3[1,1] C_DIS ; Halbkreis1
    CIRC KP4[1,1], KP1[1,1] C_DIS ; Halbkreis2
    ;KP1[1.1].X=KP1[1.1].X-OFFSET ; Mit Offset die Zustellung im Kreisradius berechnen
    ;KP2[1.1].Y=KP2[1.1].Y+OFFSET
    ;KP3[1.1].X=KP3[1.1].X+OFFSET
    ;KP4[1.1].X=KP4[1.1].Y-OFFSET
    ENDFOR


    $VEL.CP=0.5
    LIN MPKT[1,1]
    SET Greifer1 State=Auf CONT at START Delay 0ms
    PTP Home Vel=100% Default


    Erster Beitrag und dann gleich so einen Roman...vielen Dank wenn ihr euch die Zeit genommen habt das ganze zu lesen...vielleicht hat der ein oder andere ja einen nützlichen Tipp, wie ich diese Fehler beheben kann, oder wie ich sie umgehen kann. :danke:


    MfG


    Nilsbert

  • Schritt für Schritt zum Roboterprofi!
  • Moin Nilsbert,


    versuche mal die Bahn nicht über 2 Halbkreise, sondern über 4 Viertelkreise zu beschreiben. Das dürfte dein Orientierungsproblem wesentlich eindämmen.

    Die Abnahme von GOTO Anweisungen verhält sich reziprok zur Qualität einer Programmierung

  • Hi,


    hätte ja nicht gedacht, dass die Lösung so einfach ist...damit sind alle beschriebenen Probleme gelöst! Danke Martin :danke:


    Hätte da aber trotzdem noch einige Anfängerfragen, die sich mit der Zeit ergeben haben und nicht so einfach mit Hilfe der Bedinungsanleitung und dieses Forums zu klären waren. Die möchte ich dann doch gleich bei der Gelegenheit noch stellen:


    1. Habe gemerkt, dass sich bei allen Programmen die Home-Position ändert, wenn ich sie bei einem Programm ändere. Ist das zwangsläufig so, oder kann ich das irgendwie ändern?


    2. Alle Programme die ich schreibe benutzen automatisch mein Werkzeug Nr.1, ohne dass ich irgendwo das Werkzeug anwählen muss, oder so. Wie kann ich in einem Programm sagen dass ich ein anderes Werkzeug benutzen möchte? Muss ich am Anfang $TOOL=BASE_DATA[X] schreiben, oder muss man das in der INI irgendwie umstellen?


    3. Habe versucht mal relativ zu meinem Tool-Koordinatensystem zu verfahren...klappt irgendwie nicht...
    Will das Werkzeug verdrehen und dann trotzdem in Stoßrichtung fahren.


    INI
    $BASE=$WORLD
    $TOOL=$NULLFRAME oder BASE_DATA[1]
    PTP HOME VEL=100% DEFAULT
    LIN P1 VEL=2m/s CPDAT1 ; Irgendwie im Raum verdrehen über Winkel A,B und C
    $BASE=$TOOL
    LIN_REL {X 30} ; Hier liegt dann die x-Achse des Tools auf der z-Achse des Base-Koordinatensystems, aber die Verdrehung wird nicht berücksichtigt.


    Bei LIN_REL TOOL:{X 30} bekomme ich die Fehlermeldung "A1 Wert ungültig".
    Den Befehl LIN_REL {X 30} #TOOL (wie hier im Forum beschrieben) akzeptiert er nicht.


    Oder dreht sich das Tool-Koordinatensystem und das Nullframe-Koordinatensystem nicht mit wenn ich die Winkel A,B und C verdrehe?


    Habe schon einiges hier im Forum nachgelesen, auch über ähnliche oder sogar die gleichen Themen, aber bin daraus noch nicht so schlau geworden. Aber die meisten Fragen die ich hatte konnte ich mir durch stöbern hier beantworten...tolles Forum.


    :danke:


    MfG


    Nilsbert

  • Hi Nilsbert,


    zu 1.) Ja, das ist so, denn die Homeposition ist global definiert !!


    zu 2.) Das kannst du entweder direkt über die Zuweisung oder im Inlineformular anwählen, bsp.



    In diesem Beispiel ist es erwünscht, daß am Anfang der Überschleifbewegung von P1
    zu P2 das Werkzeug TOOL_DATA1[1] gegen TOOL_DATA[2] ausgetauscht wird.
    $TOOL=TOOL_DATA[1]
    PTP P0_TOOL1; Punkt wird mit dem Werkzeug TOOL_DATA[1] geteacht
    LIN P1_TOOL1 C_DIS; Punkt wird mit dem Werkzeug TOOL_DATA[1] geteacht
    $TOOL=TOOL_DATA[2]
    LIN P2_TOOL2; Punkt wird mit dem Werkzeug TOOL_DATA[2] geteacht


    zu 3.) macht keinen Sinn was du da machst, du drehst nichts du weist der Base $world zu dem Toll das Nullframe und dann das Nullframe auf die Base , ich würd erst mal die Base_Data um A,B oder C drehen und dann die zuweisung entsprechend machen dann gehts auch

    Die Abnahme von GOTO Anweisungen verhält sich reziprok zur Qualität einer Programmierung

  • Hi nochmal,


    Dachte, wenn man $Base=$Tool sagt fährt man im Tool-Koordinatensystem.
    Ich bin davon ausgegangen, dass sich das Tool-Koordinatensystem, oder das Nullframe mitdreht wenn ich in meinem Base-Koordinatensystem eine Drehung um A, B oder C ausführe. Zumindest das Nullframe liegt doch genau im Flansch, und wenn der verdreht ist müsste doch auch das Koordinatensystem zum Base-Koordinatensystem verdreht sein...?
    Also muss ich immer erst dem Tool-Koordinatensystem, oder dem Nullframe eine Verdrehung zuweisen um entsprechend zu fahren? Wäre ja auch irgendwie umständlich...


    Vielen Dank nochmal.


    Grüße


    Nilsbert

  • ..deine Drehung des Tools passiert nicht automatisch wenn du einen Punkt anlegst. Besser ausgedrückt dein Punkt orientiert sich nach Werkzeug (Tool) und Base.
    Du musst deinem Tool oder deiner Base entsprechend die Verdrehung mitteilen.

    Die Abnahme von GOTO Anweisungen verhält sich reziprok zur Qualität einer Programmierung

  • Hi,
    dann akzeptiere ich dass mal so.


    Gibt es denn dann die Möglichkeit wie mit dem PHG in Handgelekskoordinaten zu fahren? Da erkennt der Roboter ja auch automatisch die Stellung meines Tools oder Nullframes und verfährt dementsprechend.


    Und noch eine Frage, ich hoffe ich nerve mittlerweile nicht schon. :)
    Ich kann also jederzeit mein Koordinatensystem verschieben (z.B. BASE_DATA[1].X=BASE_DATA[1].X+20). Ist es auch möglich meinen TCP zu ändern während das Programm läuft, ohne dabei jedes mal ein neues Tool auszuwählen? Also den X-Wert meines TCP immer etwas zu vergrößern? Ich frage, weil ich, um die Schleifscheibe gleichmäßig abzunutzen, immer etwas weiter in das Blech eintauchen muss. Und wenn ich den TCP dabei nicht verschiebe, oder ganz weit weg lege (was aber von der Berechnung her sehr aufwendig ist) komme ich irgendwann in den Bereich wo der Kreisradius 0 wird. Unzulässige Kreisparameter.


    Vielen Dank


    MfG


    Nilsbert

  • ...habe mittlerweile rausgefunden wie das mit den Handgelenk-Koordinaten funktioniert. Meinte das so:
    $BASE=$POS_ACT
    $TOOL=$NULLFRAME
    LIN_REL {Z 30}


    Doch irgendwie schaffe ich es nicht meinen TCP zu verschieben:
    $BASE=$ROBROOT
    BASE_DATA[1].Z=BASE_DATA[1].Z+15
    $TOOL=BASE_DATA[1]
    Danach fährt der Robi jedoch wie zuvor. Also mein Schleifer taucht nicht tiefer ein...oder ändert seine Position sonst irgendwie. Auch wenn ich statt $TOOL=... dann $BASE=BASE_DATA[1] sage.
    Ebenso bei dieser Variante tut sich nix:
    http://www.roboterforum.de/rob…chiebung_tcp-t1612.0.html


    MfG


    Nilsbert

  • Hallo Nilsbert,


    erstmal finde ich es super wie du deine Fragen stellst. Da könnten sich einige ein Beispiel nehmen. ;)


    Um relativ im zum Tool zu fahren, kannst du auch mal

    Code
    LIN_REL {x , y ,z ,a , b, c} #TOOL

    probieren.


    Um den TCP zu verschieben könntest du auch direkt TOOL_DATA[] manipulieren.


    Bemerkung:
    1. Die Tooldaten beziehen sich auf das Flanschkoordination System. Das Flanschkoordinatensystem befindet sich je nach Roboterstellung an einem andern Ort im Raum.


    2. Die Basedaten beziehen sich auf das $WORLD


    3. Die Transformationsreihenfolge ist erst Translation (x, y, z), dann Rotation (a), dann Rotation (b), dann Rotation (c)


    4. Bei den Positionsdaten beziehen sich x, y und z auf das aktive Base. Die Winkel a, b, c definieren wie das aktive Tool zum Punkt/Base verdreht ist.


    5. Für dich nützlich wäre auch noch der Geometrische operator. Dieser eignet sich gut für Verschiebungen oder Verdrehungen von Punkten.


    Das einfach noch als Gedankenanstösse

  • Hallo!


    Danke, habe nur versucht Folgefragen zu vermeiden...hat ja auch geklappt.


    Das Programm läuft mittlerweile so wie wir es uns vorgestellt hatten. Jetzt müssen wir erst mal ein Paar Schleifversuche machen um herauszufinden welche Einstellungen wir genau brauchen. Sieht aber alles sehr zuversichtlich aus.


    Falls sich wieder Fragen ergeben werde ich mich natürlich erneut hier melden... :meld:


    Vielen Dank nochmal für die Lösungen und die schnellen Antworten...unsere Anfrage bei Kuka wurde erst heute beantwortet. :)


    MfG


    Nilsbert

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