geoemetrischer Operator

  • Hallo,
    ich will in einem Visualbasic Programm die Koordinaten des Robis zuerst in Weltkoordinaten umrechnen und dann anschließend wieder neu mit geänderten Toolkoordinaten berechnen. Auf dem Robi ist das kein Problem, da mach ich es mit dem Doppelpunkt Operator. Kennt jemand von euch eine Formel für den Operator, die ich dann im Visual Basic implementieren kann???


    Danke im voraus
    Sebastian

  • Schritt für Schritt zum Roboterprofi!
  • Oder Du machst den Faulenzerweg.


    Binde die Chg_pos.exe in Dein Visual - Basic Projekt ein. Wenn Du nicht weißt, wie Du das machen sollst, dann meld Dich nochmal. Ich habe in einem von mir verwendeten Tool das gleiche Brämborium auch schon verzapft.


    Die Formeln da reinzuhämmern, da war ich ehrlich gesagt zu faul zu. Und warum sollte ich das "wheel re-invent" en ?
    :pfeif:

    Weniger als 100% wird nicht akzeptiert :)

  • Hallo Jungs,


    ich habe da eine Frage bezüglich der Berechnung. ich will für eine studienarbeit die Funktionalität des operators, anhand der Basistransformation beschreiben. habe aber folgendes problem.


    1. die RNG-matrix habe ich rausbekommen
    2.durch die multiplikation der beiden matrizen bekomme ich die X,Y,Z werte ziemlich genau raus.


    jetzt zu meinem Problem:


    wie kann ich jetzt die winkel ABC der neuen Basis rausbekommen?


    danke.
    Gruß Alex

  • Hallo Leutz!


    ich habe das Thema hier mal mitverfolgt und auch mal versucht, die Positionsdaten mit Tool- und Base auf Flanschkoordinaten runterzurechnen. Dafür habe ich mir ein Programm geteacht mit mehreren Punkten, die physikalisch alle auf denselben Koordinaten liegen, aber jeweils Unterschiedliche Tool- und Basedaten haben.


    Ich habe für die Punkte, die MIT einem Tool oder BASE geteacht sind, dann mittels der CHG_POS.exe versucht, gleiche Koordinaten rauszukriegen. Das hat aber nicht geklappt.


    Obwohl ich in der Chg_pos.dat die richtigen Daten (denke ich) eingegeben habe. Also:


    old_tool = {x y z a b c vom Tool eben}
    new_tool = {x 0.0, y 0.0, z 0.0, a .....}


    Dasselbe mit der Base. Die Koordinaten, die errechnet werden sind aber unterschiedlich zu denen, die in meinem geteachten Programm mit Tool und Base 0 programmiert sind :nocheck:


    Kann mir da mal jemand weiterhelfen ?


    Gruß Kartman (der kleine Dicke aus Southpark)

  • Dafür erstmal herzlichen Dank!


    Trotzdem brauche ich die Offline - Lösung. Außerdem würde ich gerne wissen, ob ich zu doof bin, die Chg_pos.exe richtig zu parametrieren oder ob die ein Problem mit dem Zurückrechnen auf $nullframe hat.


    Danke Dir nochmal

  • Morgen Jungs,


    ich hoffe ihr könnt mir helfen.


    was passiert eigentlich in diesem Programm:
    DEF INV_ORI_MAT (O[,])
    ; Invertieren der orthogonalen 3x3-Orientierungsmatrix durch Transponieren


    REAL O[,]


    REAL TAUSCH
    INT I, J


    FOR I=1 TO 3
    FOR J=I+1 TO 3
    TAUSCH = O[I,J]
    O[I,J] = O[J,I]
    O[J,I] = TAUSCH
    ENDFOR
    ENDFOR


    END


    Habe ich das richtig verstanden, das eine 3X3-Matrix transponiert wird?


    ABC ADG
    DEF =>BEH
    GHI CFK


    Mehr passiert dort nicht, oder??


    Gruß

  • Hallo R2D2,


    das hast du richtig erkannt. Da es sich bei einer 3x3-Orientierungsmatrix immer um eine orthonormale Matrix handelt, ist das Transponieren identisch mit dem Invertieren der Matrix. Damit drehst du sozusagen die Beschreibung des Verhältnisses der Orientierung zweier Koordinatensysteme um.


    Beispiel: In der Steurung beschreibt $POS_ACT immer die Lage und Orientierung von $TOOL bezüglich $BASE. Nimmt man nur den Orientierungsanteil (nach Umrechnung der ABC-Winkel in die entsprechende 3x3 Orientierungsmatrix) und wendet auf diesen INV_POS_MAT an erhält man also die Orientierung des $BASE-Systems bezüglich dem $TOOL-System.


    Gruß
    Fubini

  • :danke: erstmal.


    Also wie das so aussieht mache ich eigentlich alles richtig, aber ich bekomme bei der berechnung der A,B,C winkeln kommische ergebnise.
    Meine Vorgehnsweise:
    Ich habe die 2 Frames, für diese 2 Frames erzeuge ich jeweils eine Rotationsmatrix
    RNG=Rot(z,A)*Rot(y,B)*Rot(x,A).
    dann wird jeweils eine Homogene 4X4 Matrix erzeugt, die Beiden so erhaltenen Matrizen werden mit einander Multipliziert, als ergebnis bekomme ich natürch wieder eine Homogene 4X4 Matrix. Nun kann ich die Werte X=(1,4) Y=(2,4) Z=(3,4) Ablesen, soweit so gut.


    Um nun auf die Winkel zu kommen muss ich der Orthogonale 3X3 Matrix Transponieren.
    und Anschließend über die arctan2 funktion die Winkel bestimmen. das kalppt aber nicht.


    was mache ich falsch?? :hilfe:

  • Bei meiner Berechung orientiere ich mich an das Programm KUE_WEG.
    und dort wird es mit der arctan2 funktion gemacht also kass es nicht so falsch sein.
    nur es funktioniert Leider nicht.


    Gruß
    R2D2

  • Hallo R2D2,


    deine Beschreibung hört sich erstmal richtig an. Was ich allerdings nicht verstehe ist warum du die 3x3-Matrix zur Bestimmung der ABC-Winkel noch transponierst. Wie in


    http://www.roboterforum.de/rob…hen_operator-t3303.0.html

    bereits beschrieben bekommst du die Lage (X,Y,Z) und die ABC-Winkel zur homgenen Matrix A_ij, i=1,..4, j=1,...,4 über (vgl. MAT_TO_RPY in kue_weg.src)


    X = A14
    Y = A24
    Z = A34


    norm := sqrt( A11*A11 + A21*A21);

    ;Eulersingularität bei B=90°
    if norm > 1E-5 then
    sa = A21/norm;
    ca = A11/norm;
    A = atan2(sa, ca);
    else
    sa = 0.0;
    ca = 1.0;
    A = 0.0;
    endif


    B = atan2( -A21, ca*A11 + sa*A21 );
    C = atan2( sa*A13 - ca*A23, -sa*A12 + ca*A22 );


    atan2 ist dabei der Arkustangens mit zwei Argumenten, der entgegen dem normalen Arkustangens am Taschenrechner anhand der Vorzeichen der beiden Argumente auch eine Unterscheidung nach dem Quadranten in dem das Ergebnis liegen muss vornimmt.


    Ich bin mir jetzt bei KRL nicht sicher aber ich glaube der ATAN2 braucht und liefert in C normalerweise Werte in Bogenmaß, so dass du eventuell deine Winkel noch nach Grad bzw- Bogenmass umrechnen musst.


    Gruß
    Fubini

    Einmal editiert, zuletzt von fubini ()

  • Hallo ich hab auch dasselbe Problem mit chg_pos.exe wie kartman. Wenn ich diesselbe Position mit unterschiedliche Tool und Base auf Nullframe zurückrechne kommen bei jedem Tool/Base Wechsel ein anderer Wert heraus. Wei? jemand woran das liegt??
    Gruß
    Sebastian

  • Hallo Jung,


    Ich habe es geschaft und eine Excel Tabelle Erstellt in der man die Transformation berechnen kann.


    Das einzige was ich noch nicht ganz vestehe ist dass ich bei der Funktion ARCTAN2 die Parameter vertauschen muss zb. arctan2(sin_C;soc_C) muss bei mir arctan2(cos_C;sin_C) sein, damit die Werte Stimmem :denk:.


    hat vielleich einer von euch eine Idee woran es leigen kann??


    die Datei habe ich mit angehängt.


    und danke noch mal für eure Hilfe.


    Gruß R2D2

  • Hallo,


    R2D2
    Das mit der arctan2 vertauschen liegt vielleicht daran, das kuka dort erst den y und dann den x -Wert als Parameter haben will also arctan2(y, x) und andere das halt mit arctan2(x ,y) machen. (Fanuc z.B. oder die Excel Funktion)


    @Glöckler
    Du hast einen Punkt, und den rechnest du ins Nullframe. Dann hast du nu im prinzip die absolutwerte des Punktes bezogen auf Robroot. Wenn du nun von dem Punkt das Base oder das Toll änderst, liegt der natürlich auch woanders im Raum, also wenn du ihn aufs nullframe rechnest, gibts natürlich andere Werte.


    vereinfachtes (nur X,Y,Z, ohne Rotation) Bsp.:
    P= (2,2,2), Base dazu ist (1,1,1) also ist der Punkt bezogen auf Roobroot Base+P = (3,3,3)
    ändern wir die Base
    P= (2,2,2), neue Base dazu ist (2,0,2) also ist der Punkt bezogen auf Roobroot Base+P = (4,2,4)

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