Stossrichtung ändern?

  • Guten Morgen!


    Wir mußten einen Greifer neu vermessen (mit TCP & Z).


    Damit das Programm wieder läuft, müssten alle Höhen, also die "Z-Werte", invertiert werden, sprich aus "+" wird "-" und umgekehrt. Gibt es eine Möglichkeit die Stossrichtung bei RelTool zu ändern?


    Hier mal ein Programmauszug:


    Code
    PROC mv20VP_21AP()
        !Von : Vorpos Kerne ablegen Station A
        !Nach: Ablagepos 1 Kern Station A
        FirstMove p20VP,v200,fine,tServoGreifer\WObj:=wBeladeStationA;
        MoveL RelTool(p20VP,300,0,0),v2500,z200,tServoGreifer\WObj:=wBeladeStationA;
        MoveL RelTool(p21AP,0,0,nGreifHoeheOfen{A}+nStapelHoehe{A}+100\Rz:=nDrehen{A}),v1000,z200,tServoGreifer\WObj:=wBeladeStationA;
        MoveL RelTool(p21AP,0,0,nGreifHoeheOfen{A}+nStapelHoehe{A}\Rz:=nDrehen{A}),v500,fine,tServoGreifer\WObj:=wBeladeStationA;
      ENDPROC


    Eventuell wurde das mal mit RelTCP realisiert? Aber das liegt in einem geschützen Systemmodul...


    Gruß
    Buschmann

  • ANZEIGE
  • Wenn ich Dich richtig verstanden habe, liegt das Tool jetzt (nach der Vermessung) verkehrt herum, um x oder y um 180° verdreht,
    Du hast aber ausser dem "Höhen"problem auch
    RelTool(p21AP,0,0,nGreifHoeheOfen{A}+nStapelHoehe{A}\Rz:=nDrehen{A}).
    Der dreht ja dann ebenfalls um die neue Z-Richtung....


    Wäre es nicht einfacher, das Tool wieder so zu drehen, wie es der früheren Lage sinngemäß entspräche?
    GanzNeutool.Trans=PoseMult(Neutool.Trans,[[0,0,0],[0,-1,0,0]]);
    (oder eben [0,0,-1,0] bei Drehung um Y)


    Grüße,
    Michael

  • Hallo zusammen,
    ich greife das Thema PoseMult hier noch einmal auf.
    Ich muss einen bestehenden Greifer an einem unserer Roboter um 30° drehen, da sich die Zwischenplatte geanderg hat. Nun möchte ich nicht unbedingt alle Punkte neu teachem, sondern die 30° verschiebung einmal auf die alten Greiferkoordinaten rechnen lassen. Dann sollte es ja eigentlich wieder passen mit den alten Positionen.
    Jetzt habe ich hier PoseMult gelesen, komme aber dasmit der Umsetzung des Befehls, bzw. dem genauen Aufbau nicht ganz zurecht.


    Bei dem anderen Problem ging es um eine 180° Drehung der Stoßrichtung. Daher auch 1/-1, korrekt?
    Wenn ich jetzt aber 30° oder ähnlich drehen will, benötige ich ja einen Umrechnungsfaktor oder?


    Für Tipps wäre ich sehr dankbar. Gruss

  • Hallo,
    beim Ändern eines TCP muss der tFrame des tooldata mit PosMult neu berechnet werden
    tNeu.tframe:=PoseMult(tOld.tframe,pseFrame);



    Da Dir anscheined die Funktion "RelTCP" vorliegt, kannst Du diese zum Berechnen des neuen TCP 's verwenden, da diese intern die oben gezeigte Berechnung mit PoseMult durchführt.
    Du musst also nur ein neues Tooldata deklarieren und dann die Funktion auf den alten TCP anwenden:
    Beispiel:
    Verschiebt den TCP um 100 mm und dreht ihn um die X-Achse um 10 Grad
    tNeu := RelTCP(tOld\Dz:=100\Rx:=10);
    Sollte der berechnete TCP nicht stimmen, müssen die Korrekturen der einzelnen Achsen ggf. in Einzelschritten und in der richtigen Reihenfolge ausgeführt werden.
    Beispiel:
    Drehhung des TCP um 10 Grad umd die X-Achse mit anschließender Verschiebung in der neuen Z-Achse
    tNeu := RelTCP(tOld\Rx:=10);
    tNeu := RelTCP(tNeu\Dz:=100);


    Gruß
    Micky

    Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind. (Albert Einstein)

  • Hallo Micky,
    vielen Dank für den Tipp. Leider kann ich die Funktion reltcp nicht nutzen, da sie von der Steuerung nicht erkannt wird. Muss ich die Funktion erst irgendwo selber deklarieren oder ist es eine System Funktion.
    Gruss


  • Reltool kenne ich. Das ist aber nur eine Verschiebung mit Offset. Ich muss die Ausrichtung des Tools anpassen.


    Hallo!


    Ist nicht nur offset sondern kannst du die orientierung vom Werkzeug drehen!!


    "RelTool (Relative Tool) wird verwendet, um eine Verschiebung und/oder Rotation im aktiven Werkzeug-Koordinatensystem an einer Roboterposition auszuführen" so steht beim Rapid Intruktionen.
    [\Rx]
    Datentyp: num
    Die Rotation in Grad um die x-Achse des Werkzeug-Koordinatensystems.
    [\Ry]
    Datentyp: num
    Die Rotation in Grad um die y-Achse des Werkzeug-Koordinatensystems.
    [\Rz]
    Datentyp: num
    Die Rotation in Grad um die z-Achse des Werkzeug-Koordinatensystems.

  • Das ist mir wie gesagt schon bekannt. :)
    Ich nutze diese Funktion bereits in verschiedenen Programmen.
    Ich muss das Tool aber auf Grund von mechanischen Änderungen um ca. 30° am Flansch drehen. Das heist alle Positionen wären falsch. Nun möchte ich einfach die Orientierung des Tools auf die mechanische Änderung anpassen.
    Das sollte eigentlich gehen. Bei anderen Robotern geht's auch.

  • poseMult ist das, was bei KUKA der berüchtigte "Doppelpunkt-Operator" macht. Es hängt zwei Vektoren hintereinander. In Deinem Fall gibt es halt keine Verschiebung, sondern nur eine Umorientierung. Blöd ist halt, dass Du vorher die Umorientierung in Euler-Winkel umrechnen musst, dafür gibt es dann notfalls externe Programme im Netz.
    Oder Du lässt den ABB das selbst machen, indem Du Dir eine kleine Rechenroutine schreibst, die mit RelTool das bestehende Null-Tool ändert im Sinne von

    Code
    MODULE testtest
            TASK PERS robtarget tttt:=[[0,0,0],[1,0,0,0],[0,-1,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
            TASK PERS robtarget rrrr:=[[0,0,0],[0.965926,0,0,0.258819],[0,-1,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
    
    
            PROC aaaa()
                rrrr:=relTool(tttt,0,0,0,\Rz:=30);
            ENDPROC
    ENDMODULE


    dann kriegst Du die Verschiebung von einem zum anderen raus.


    Den Frame (ist im Codebeispiel ja ein Robtarget und muss händisch zu einer Pose zusammengefügt werden) kannst Du dann wieder zur Weiternutzung extrahieren:

    Code
    neutool.tframe:=poseMult([[0,0,0],[0.965926,0,0,0.258819]],alttool.tframe)


    Natürlich mit sinngemäß eigenen Werten.


    Edit: vielleicht hab' ich auch jetzt irgendwo ein PoseInv vergessen.
    RelTool ist nur eine Mathematik-Funktion, kein Positions-Hokuspokus.... wobei für die Umrechnung von Winkeln in Euler auch eigene Funktionen zur Verfügung stehen. Man braucht also jetzt nicht unbedingt RelTool, es geht auch professioneller.


    Grüße,
    Michael

  • Hallo,
    anbei die Funktion RelTCP für die Umrechnung des TCP's.



    Die Werte für die erforderliche Verschiebung und Verdrehung beziehen sich auf das Koordinatensystem zu alten TCP's, so dass man die 30 Grad als Verdrehparameter direkt angeben kann. Je nach Achse mit hierzu der Peameter Rx, Zy oder Rz verwendet werden.


    Code
    tNeu:=RelTCP(tOld\Rx:=30);


    Gruß
    Micky

    Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind. (Albert Einstein)

  • Hi Micky,
    vielen Dank für die genaue Beschreibung der Funktion relTCP.
    Ich habe nun ein bisschen damt gearbeitet und stolpere nun über ein neues Problem.
    Im Anhang habe ich versucht es grafisch darzustellen und hoffe das verständlich ist, was mein Problem ist.
    Ich drehe um Rx:=30.0 und erhalte eine neue Ausrichtung im Bezug auf den TCP, aber nun steht der Roboter nicht mehr senkrecht zur Base, sondern um 30.0° verdreht.


    Gruss Pat

  • Du musst die Korrektur dahin montieren, wo Du die Adapterplatte hinmontiert hast: zwischen Tool0 und Greifer, schätze ich mal. Also wie von mir vorgeschlagen: Tool0:Verdrehframe:AltesTool. Nützt Dir nichts, wenn Du stattdessen mit dem originalen TCP rummachst. Da Tool0 ja schon dran ist, bleibt also NeuTool.tframe:=PoseMult(Verdrehframe,AltTool.tframe).


    Grüße,
    Michael

  • Hallo Pat,


    die Drehung des TCP's erfolgt natürlich um den aktuellen TCP.
    Da Dein Drehpunkt nicht identisch mit dem TCP ist, muss Du den TCP zuerst in den Drehpunkt verschieben:



    Code
    tNeu:=Reltcp(tOld\Dz:=-AbstandTCPzumDrehpunkt);


    Anschließend drehst Du den neuen TCP um 30Grad:

    Code
    tNeu:=Reltcp(tNeu\Rx:=30);


    und verschiebst dann den TCP wieder in der neuen Z-Richtung um den erforderlichen Abstand:


    Code
    tNeu:=Reltcp(tNeu\Dz:=AbstandTCPzumDrehpunkt);


    Den ersten und zweiten Schritt kann man ggf. auch zusammenfassen, da zuerst die Verschiebung und dann die Verdrehung bei der Berechnung ausgeführt wird.

    Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind. (Albert Einstein)

Hilfe und Support für ABB Roboter Programmierung, Konfiguration, Inbetriebnahme finden Sie hier im ABB Roboter Forum. ABB Rapid Programmierung ist einfach, die Roboterforum Community hilft sehr gerne.

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