: Operator

  • Hallo zusammen,


    ich muß ein krl-programm in java übersetzen. Dabei habe ich folgende-Anweisung gefunden:


    result_frame=dest_frame:src_frame die 3 Variablen sind lauter FRAMES


    Ich hab in ner Doku zu dem Doppelpunkt folgendes gefunden:
    : Performs the vector addition of frames (geometric addition)
    between the data types FRAME and POS.


    Hatt jemand eine Ahnung wie die vector addition genau aussieht??
    :hilfe:


    Vielen Dank, im voraus

  • Schritt für Schritt zum Roboterprofi!
  • Hier nen Ausschnitt aus dem Programmierung Experte Handbuch:


    ---------------------------------------------------------------------------------------
    Geometrischer Operator
    Der geometrische Operator wird in KRL durch einen Doppelpunkt “:” symbolisiert. Er führt
    zwischen den Datentypen FRAME und POS eine Frameverknüpfung durch.
    Die Verknüpfung zweier Frames ist die übliche Transformation von Koordinatensystemen.
    Daher wirkt sich die Verknüpfung einer FRAME-- mit einer POS--Struktur nur auf das Frame
    innerhalb der POS--Struktur aus. Die Komponenten S und T bleiben von der Transformation
    unberührt und müssen daher auch nicht mit einem Wert besetzt sein. Die Werte X, Y, Z, A,
    B und C müssen jedoch sowohl bei POS--Operanden als auch bei FRAME--Operanden immer
    mit einem Wert besetzt sein.


    Wenn der linke Operand den Datentyp POS hat, dann findet eine Typanpassung statt.
    Die durch die POS--Struktur angegebene Position wird in ein Frame umgewandelt. Das
    heißt, das System ermittelt das Werkzeug--Frame zu dieser Position.
    DieWirkungsweise des geometrischen Operators sei an einem einfachen Beispiel erläutert
    (s. Abb. 5):
    In einem Raum steht ein Tisch. Das RAUM--Koordinatensystemsei als festes Koordinatensystem
    in der linken vorderen Ecke des Raumes definiert.
    Der Tisch steht parallel zu den Wänden des Raumes. Die linke vordere Ecke des Tisches
    liegt genau 600 mm von der vorderenWand und 450mm von der linkenWand des Raumes
    entfernt. Der Tisch ist 800 mm hoch.
    Auf dem Tisch steht ein quaderförmigesWerkstück. Das WERKSTUECK--Koordinatensystem
    legen Sie wie in Abb. 5 gezeigt in eine Ecke desWerkstücks.Umdas Teil späterzweckmäßig
    handhaben zu können, zeigt die Z--Achse des WERKSTUECK--Koordinatensystems nach unten.
    DasWerkstück ist bezüglich der Z--Achse des TISCH--Koordinatensystems um 40_ gedreht.
    Die Position des WERKSTUECK--Koordinatensystems bezogen auf das TISCH--Koordinatensystem
    ist X=80 mm, Y = 110 mm und Z = 55 mm.


    Die Aufgabenstellung ist nun, das WERKSTUECK--Koordinatensystem bezüglich des RAUM--
    Koordinatensystems zu beschreiben. Dazu vereinbaren Sie zunächst folgende Framevariablen:
    FRAME TISCH, WERKSTUECK, BASIS
    Das RAUM--Koordinatensystem sei bereits systemspezifisch festgelegt. Die Koordinatensysteme
    TISCH und WERKSTUECK werden nun entsprechend den Randbedingungen initialisiert:
    TISCH = {X 450,Y 600,Z 800,A 0,B 0,C 0}
    WERKSTUECK = {X 80,Y 110,Z 55,A -40,B 180,C 0}


    Das WERKSTUECK--Koordinatensystem bezüglich des RAUM--Koordinatensystems ergibt
    sich nun mit Hilfe des geometrischen Operators zu
    BASIS = TISCH:WERKSTUECK
    In unserem Fall ist BASIS nun folgendermaßen besetzt:
    BASIS = {X 530,Y 710,Z 855,A 140,B 0,C -180}
    Eine weitere Möglichkeit wäre:
    BASIS = {X 530,Y 710,Z 855,A -40,B 180,C 0}
    Nur in diesem speziellen Fall ergeben sich die Komponenten von BASIS als
    Addition der Komponenten von TISCH und WERKSTUECK. Dies liegt daran,
    daß das TISCH--Koordinatensystem nicht bezüglich des RAUM--Koordinatensystems
    verdreht ist.
    Im allgemeinen ist jedoch eine einfache Addition der Komponenten nicht möglich!
    Eine Frameverknüpfung ist auch nicht kommutativ, das heißt, durch Vertauschen
    von Bezugsframe und Zielframe wird sich normalerweise auch das Ergebnis
    ändern!


    ---------------------------------------------------------------------------------------------------
    Hoffe das hilft erst mal,


    Kai

    If you and DEAD people can read Hex, how many people can read Hex?

  • Hallo,


    danke für die schnelle Antwort.


    Das Beispiel hab ich schon verstanden. Aber die Tatsache, dass der Tisch parallel zu den Wänden des Raumes steht, ist doch normal eher selten. Deswegen funktioniert auch die komponentenweise Addition.


    Was mach ich aber wenn der Tisch verdreht ist?


    Etwa:


    TISCH = {X 450,Y 600,Z 800,A 30,B 90,C 120}
    WERKSTUECK = {X 80,Y 110,Z 55,A -40,B 180,C 0}


    MfG kolmogorow

  • Es ist doch so, das xyz der Ursprung und abc die Verdrehung eines neuen Koordinatensystems sind, das aber weiterhin genauso skaliert ist, wie das ursprüngliche.
    Dann wirst Du also den Vektor um die Verdrehung des koordinatensystems drehen müssen, um ihn in das "weiter aussen" liegende Koordinatensystem zu überführen.
    Klingt wild, ist es aber nicht.
    Die 6 Koordinaten sind xyz und abc. Einen Vektor xyz in einem gedrehten Koordinatensystem (im Beispiel der Ursprung 0,0,0) muss erst um abc gedreht werden, bevor man ihn zum Vektor des "darüber liegenden" koordinatensystems (der auf den neuen Ursprung zeigt) addieren darf. Daraus erhält man dann einen Vektor xyz, der direkt aus den Punkt im "Unterkoordinatensystem" zeigt.
    Das drehen des Vektors selber (ist ja jeweils ne drehung um den Ursprung) erledigen Matritzen, schau mal nach http://de.wikipedia.org/wiki/Rotationsmatrix oder,
    Falls Dir - wie mir - meine Erklärung zu seltsam erschien http://de.wikipedia.org/wiki/7-Parameter-Transformation da ist dann halt der Maßstabsfaktor =1.


    Viel Glück

    If you and DEAD people can read Hex, how many people can read Hex?

  • Hallo,


    danke für den 1. Wikepedia-Link, war sehr hilfreich! :danke:
    die Transformation der x,y,z koordinaten mit den Drehmatrizen funktioniert bestens.


    Allerdings hab ich mit den neuen Winkeln, die sich bei der Rotation ändern noch Probleme.


    Hast du ne Ahnung wie sich die berechnen lassen?


    TISCH = {X 450,Y 600,Z 800,A 30,B 90,C 120}
    WERKSTUECK = {X 80,Y 110,Z 55,A -40,B 180,C 0}


    BASIS=TISCH:WERKSTUECK


    Wenn das Werkstück selbst nicht verdreht ist, also A=B=C=0, dann sind die Winkel nach der Rotation mit den Winkeln von TISCH identisch. Wenn nun aber das WERKSTUECK selbst verdreht ist, verändern sich auf einmal alle Winkel :wallbash::wallbash:


    MfG Kolmogorow

  • Das klingt logisch. Wie man die Orientierung um die Verdrehung des Koordinatensystems dreht weiss ich nicht auf anhieb. Ich würde mir einen kartesischen Vektor generieren, der die Länge 1 hat und in Richtung der verdrehung "schaut", also jeweils den Sinus der Winkel für die Komponenten nehmen, danach auf die Länge normieren. Diesen Vektor kannst Du dann mit den Matritzen drehen und anschliessend wieder dieWinkel zu den Koordinatenebenen Berechnen.
    Vielleicht kannst Du die Orientierung auch direkt als Vektor betrachten und genauso drehen wie die xyz Komponenten, das musst Du mal testen.

    If you and DEAD people can read Hex, how many people can read Hex?

  • Gehen wir mal wieder von diesem Beispiel aus:


    TISCH = {X 450,Y 600,Z 800,A 30,B 90,C 120}
    WERKSTUECK = {X 80,Y 110,Z 55,A -40,B 180,C 0}


    BASIS=TISCH:WERKSTUECK


    Ich hab keine Ahnung, wie der zu generierende Vektor aussehen soll?
    Schaut er wie folgt aus? (sin(30), sin(90), sin(120))
    Den muß ich dann normieren, OK
    Und dann mit welchen Winkeln drehen? -40, 180
    Und berechne ich nach der Drehung die Winkel zu den Koordinatenebenen? Mit arcussinus der einzelnen Komponenten?


    P.S.: die Orientierung als direkten Vektor also (30,90,120) zu betrachten und mit 30,90,120 zu drehen bringt nichts


    MfG Kolmogorow

  • Du willst doch vom Werkstückkoordinatensystem die Orientierung in das Weltkoordinatensystem transformieren, also die -40,180,0 um die 30,90,120 drehen.
    Am einfachsten ist das, wenn Du die nen Vektor in einer Koordimnatenachse nimmst, also zB 0,0,1 und den um die -40,180,0 drehst, danach schaut die z-Achse dahin, wo das koordinatensystem auch hinschaut. das dann um die 30,90,120 drehen und du solltest im Weltkoordinatensystem sein.
    Der winkel A sollte die Drehung um Z sein, also müsstes das sowas wie arccos(y/x) oder x/y (oder so ähnlich) von deiner gerehten Z-axe sein.

    If you and DEAD people can read Hex, how many people can read Hex?

  • Hallo,


    ich habs jetzt raus, mit ein paar selbstgebastelten Koordinatensystemen und mit dem Einheitsvektor als Tip :danke:


    MfG Kolmogorow

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