Transformationsmatrix von Base (base=[1]) zu Flansch (tool=[0]) aus ACT_POS und ACT_TOOL, bei gewähltem Werkzeug tool=[1]

  • Hallo Zusammen,


    ich bin relativ neu in der Materie und habe ein großes Verständnisproblem.

    Vorab Infos zur Roboterzelle und Steuerung:

    • Steuerung: KUKA KR C5 dualcab AC
    • Roboter: KUKA KR 120
    • Drehtisch: KUKA KP1-V 1000


    Ich wähle am SmartPad das Werkezug tool = [1] "Greifer" und die Basis base = [1] "Drehtisch"

    Zudem greife ich via OPC UA auf die folgenden Daten der Robotersteuerung zu:

    • $ACT_POS (X, Y, Z, A, B, C)
    • $TOOL (X, Y, Z, A, B, C)


    Nun müsste ich nach meinem Verständnis durch die Informationen von $ACT_POS und $TOOL,

    über Transformationsmatrizen auf die Roboterposition von der Basis base = [1] "Drehtisch" zum Roboterflansch tool = [0] "$NULLFRAME"

    rückrechnen können.

    Schematisch.png


    Die Transformationsmatrix berechne ich jeweils wie im folgenden Beitrag beschrieben in der Drehreihenfolge ZY'X''.

    Going from KUKA Euler angles to transformation matrix.

    Aus $ACT_POS lässt sich die folgende Transformationsmatrix berechnen: robo_pos_trafo_B1W1

    Aus $TOOL lässt sich die folgende Transformationsmatrix berechnen: FLANSCH2TOOL_trafo_W1

    B1_W1.JPG


    Mittels Matrizenmultiplikation sollte ich doch dann wie folgt auf die Roboterposition von der Basis base = [1] "Drehtisch"

    zum Roboterflansch tool = [0] "$NULLFRAME" rückrechnen können:


    robo_pos_trafo_B1W0 = inverse(FLANSCH2TOOL_trafo_W1) * robo_pos_trafo_B1W1



    Wenn ich das allerdings so mache mit den Beispieldaten (Siehe Bild B1_W1.JPG) komme ich nicht auf das Ergebnis,

    wie wenn ich in der Steuerung auf Werkzeug tool = [0] "$NULLFRAME" wechsle.(Siehe Bild B1_W0.JPG)

    B1_W0.JPG


    Das Python-skript wie ich die Berechnung durchführe habe ich mit angehängt.



    Ich bin wirklich langsam am verzweifeln, wäre um jede Hilfe sehr dankbar.

  • Schritt für Schritt zum Roboterprofi!
  • Lass doch erstmal für den Test deiner Sequenz von Transformationsmatrizen eine eigene Implementierung weg und rechne direkt auf der Steuerung. Dazu kannst du das auch direkt unter Anzeige->Variable->Einzeln eingeben. Da kannst du auch direkt die Dollarvariablen verwenden.


    Ausserdem hast du eine Zusatzachse. Ist da die Kopplung aktiv? Dann kannst du auch auf $Base_c schauen, dass die das aktuelle base gibt.


    Diese Diskussion hilft vielleicht auch noch weiter


    Behind the scene - geometric operator - Robotforum - Support and discussion community for industrial robots and cobots
    I was looking for the "geometric operator"in this forum and found a lot of problems unsolved. Maybe this thread will help to get a better understanding. So,…
    www.robot-forum.com


    x_value of wrist root point - Robotforum - Support and discussion community for industrial robots and cobots
    I am coding post-processor for KUKA KR 3. Now i am stuck at S(status) value in POS position. S value is formed with 3 bits (bit 2, bit 1, bit 0). According to…
    www.robot-forum.com


    Ich verstehe auch deine Beschreibung nicht ganz. Um auf nullframe im Tool also auf den Flansch zurückzurechnen brauchst du nur das aktuelle Werkzeug von der aktuellen Position abziehen also


    Code
    $POS_ACT:INV_POS($TOOL_C)

    willst du dann zurück in die Welt ändert sich das zu


    Code
    $BASE_C:$POS_ACT:INV_POS($TOOL_C)

    Dabei ist insbesondere auch wichtig die Reihenfolge richtig einzuhalten, da Framemultiplikation nicht kommutativ ist also f1:f2 ist nicht dasselbe wie f2:f1. Daher vermute ich dass


    robo_pos_trafo_B1W0 = inverse(FLANSCH2TOOL_trafo_W1) * robo_pos_trafo_B1W1

    sowieso falsch herum ist.


    Fubini

    4 Mal editiert, zuletzt von fubini ()

  • Hallo,


    Erstmal vielen herzlichen Dank für die Hilfe und vor allem so extrem schnell.


    Zu den Fragen:

    - Ja, mein Base base=[1] "Drehtisch" ist mit der Drehachse gekoppelt.


    Hab den ersten Link gerade überflogen. Scheint meinem Problem sehr nahe zu kommen so dass ich mir das morgen genauer ansehe.


    Auch den zweiten Link schau ich mir dann an.


    Das mit dem $Base_c hab ich noch nicht verstanden. Wenn ich mir die Werte anzeigen hab lassen waren diese immer mit $Base identisch.



    Ich verstehe auch deine Beschreibung nicht ganz. Um auf nullframe im Tool also auf den Flansch zurückzurechnen brauchst du nur das aktuelle Werkzeug von der aktuellen Position abziehen also

    Ja, das könnte ich machen und hab ich auch so gemacht um meine Berechnungen zu verifizieren. Da habe ich auch die Screenshots gemacht.

    Aber in der späteren Anwendung wir ein Python-skript auf einem extra Rechner laufen, der weiter Transformation unter anderem mit den Daten aus der Robotersteuerung durchführt.

    Dabei läuft aber das Robertprogramm immer mit base=[1] und tool=[1].



    Code $POS_ACT:INV_POS($TOOL_C)

    Die Programmierung auf der Robotersteuerung beherrsche ich leider noch nicht. Ich muss aber so oder so die weiteren Transformationen in Python durchführen.






    Dabei ist insbesondere auch wichtig die Reihenfolge richtig einzuhalten, da Framemultiplikation nicht kommutativ ist also f1:f2 ist nicht dasselbe wie f2:f1. Daher vermute ich dass


    sowieso falsch herum ist.

    Mir ist bewusst dass i.d.R. Matrixenmultiplikationen nicht kommutativ sind.

    Und ich geh davon aus dass hinter Framemultiplikationen Matrixenmultiplikationen stecken.


    Soviel wie ich weiß müssen bei einer Verkettung von Transformation die Matrizen immer links seitig nach einander aufmultipliziert werden.

    Werde ich mir morgen aber auch nochmal anschauen.

  • Auch Dir Danke für die Hilfe.


    Bitte entschuldige. Ich hab schon auf die Koordinaten und Eulerwinkel zugegriffen und nicht auf die Toolnummer.


    Sorry, für die falsche Deklaration.

  • Hallo Zusammen,


    ich bon nach wie vor an dem Thema dran.


    Kurzes Update:

    - Änderung der Gleichung für die Berechnung der Transformationsmatrix hat nichts gebracht.


    - Ich hab meine Implementierung jetzt mal auf die Seite geschoben und mir einfach mal nur die Werte zur Position base=1, tool=1 und die Position base=1, tool=0 angeschaut.


    Wie kann sich A, B und C überhaupt für die beiden Positionen unterscheiden, wenn doch mein tool=1 in der Konfiguration des TCP keine Drehung hat (A=B=C=0)?

  • Hallo Zusammen,


    ich hatte mittlerweile meine eigene Implementierung komplett bei Seite gelegt und mir nur die Werte der KUKA Steuerung angesehen.


    Es war/ist mir nicht klar warum sich die Eulerwinkel bei der Ist-Position ändern, wenn ich von tool=1 auf tool=0 umschalte, obwohl tool=1 keine Drehung konfiguriert hat, also A=B=C=0.


    Das hab ich auch KUKA mitgeteilt und dort war man auch überrascht.


    Wenn ich direkt in der Config.dat ein bis dahin unverwendetes tool (tool=16) ändere, in dem ich dort Werte für X,Y,Z und A=B=C=0 ein gebe, habe ich keine Drehung beim Umschalten von tool=0 auf tool=16.


    Bei Verwendung dieser Tools (tool=0 und tool=16) funktioniert meine Implementierung auch und ich kann immer die Position von der Base zum Flansch berechnen.

    (Ja mir ist bewusst dass bei tool=0 ehe schon auf's referenziert ist)


    Warum und vorallem was im Hintergrund die eine Drehung bei der Verwendung von tool=1 auslöst, muss ich noch klären.

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