Frage zur Transformation

  • Der Befehl

    Code
    pPickPos=compose(pReferenzPos,frTisch1,trKoordinaten)


    bedeutet ja, daß der Position pPickPos die Koordinaten von pReferenzPos zugewiesen werden und das Frame um trKoordinaten verändert wird.
    Gibt es zu compose ein Synonym das nicht die Koordinaten des Frames verschiebt/dreht sondern die des Tools?
    Beispielsweise soll sich bei RZ+45 nicht das Frame um 45° drehen sondern der Greifer.
    Oder muss ich dazu die Koordinaten einzeln zuweisen?

    Gruß Roland


    Wie poste ich falsch?

    Nachdem ich die Suche und die FAQ erfolgreich ignoriert habe, erstelle ich das gleiche Thema in mehreren Unterforen, benutze einen sehr kreativen Titel wie "Hilfe", am Besten noch mit mehreren Ausrufezeichen, und veröffentliche einen so eindeutigen Text, dass sich jeder etwas Anderes darunter vorstellt.


    Ich bin wie ich bin. Die Einen kennen mich, die Anderen können mich.

    Konrad Adenauer

    Einmal editiert, zuletzt von Roboman ()

  • ANZEIGE
  • Hallo,


    hier lernt ja noch jemand Stäublisch :zwink:


    Bin auch seit etwa einem Jahr mit den Dingern befasst, komme allerdings von Mitsubishi und finde beide eigentlich sehr ähnlich.


    Also compose brauche ich für solche Sachen sehr selten. Meistens komme ich mit simplen Multiplikationen aus.


    Wenn man z.B. an einer Position pPunkt steht und von dort aus in Toolkoordinaten um pRelativ weiter will, schreibt man einfach pNeu = pPunkt * pRelativ. Das ist in beiden Sprachen gleich.


    Deine Drehung sollte also irgendwie so gehen:


    pNeu.trsf = pPunkt.trsf * { 0, 0, 0, 0, 0, 45.0 }



    Hope that helps


    Urmel

    Einmal editiert, zuletzt von Urmel ()

  • Stäublisch ist gut :mrgreen:
    Wenn ich es so mache wie von dir geschrieben, bekomme ich beim Anstarten des Programms

    Code
    VAL3 Laufzeitfehler. Punkt basiert nicht auf einem Frame.


    angezeigt.

    Code
    pPickPos.trsf=pReferenzPos.trsf*{nOffsetX,nOffsetY,0,0,0,nOffsetRZ}
      movej(appro(pPickPos,trApproZ),fStandart,mHighSpeed)
      movel(pPickPos,fStandart,mHighSpeed)


    Mir ist nicht ganz klar wo/wie ich den frame angeben muss.
    Bei der compose-Variante wird er ja bei der Transformation angegeben.

    Gruß Roland


    Wie poste ich falsch?

    Nachdem ich die Suche und die FAQ erfolgreich ignoriert habe, erstelle ich das gleiche Thema in mehreren Unterforen, benutze einen sehr kreativen Titel wie "Hilfe", am Besten noch mit mehreren Ausrufezeichen, und veröffentliche einen so eindeutigen Text, dass sich jeder etwas Anderes darunter vorstellt.


    Ich bin wie ich bin. Die Einen kennen mich, die Anderen können mich.

    Konrad Adenauer

  • Ok, du siehst, ich lerne auch noch.


    Ich habe immer noch ein Problem mit dieser künstlichen Trennung in Point, Tool, Frame und Trsf. Bei Mitsubishi gibt es dafür nur einen Datentyp, die Bedeutung ergibt sich aus dem Kontext. Auch in der Mathematik sind die trsf erstmal nur Matrizen.


    Aber zum Thema.


    Geht es, wenn du vor deinen Dreizeiler noch ein

    Code
    pPickPos = pReferenzPos


    schreibst ?


    Eine Position hat ja implizit ein Bezugskoordinatensystem. Das sollte dabei eigentlich mit übergeben werden.


    Das ist auch der Knackpunkt an compose. Das braucht man eigentlich nur, wenn sich die Position, die transformiert wird, und die Transformation auf unterschiedliche Bezugskoordinatensysteme beziehen. D.h. das Ergebnis von compose übernimmt den frame des ersten Parameters, der zweite bildet nur den Bezug des dritten Parameters. So verstehe ich das jedenfalls. Sonst müsste man ja eine Formel mit allerlei +,* und ! Operationen schreiben, um beide trsf erstmal auf die selbe Basis zu bringen.


    Grüße


    Urmel

    Einmal editiert, zuletzt von Urmel ()

  • Zitat

    Gibt es zu compose ein Synonym das nicht die Koordinaten des Frames verschiebt/dreht sondern die des Tools?


    Das wäre dann

    Code
    point appro(point Position, trsf Transformation)


    Der Fehler

    Code
    VAL3 Laufzeitfehler. Punkt basiert nicht auf einem Frame.

    kommt dann, wenn der Punkt z. B. kein Teachpunkt ist, sondern eine im Programm angelegte Variable. Man kann einem berechneten Punkt mit dem Befehl

    Code
    trsf position(point Position, frame Koordinatensystem)

    ein KS zuweisen. Also die Drehung um 45° sollte wie beschrieben mit dem * Operator oder auch so gehen:

    Code
    movej(appro(pPickPos,{0,0,0,0,0,45}),ToolGripper,mdHighSpeed)

    Der Punkt pPickPos muss natürlich einen Frame besitzen (Teachpunkt oder zuweisen im Programm). Der movej-Befehl erwartet nicht den Frame, sondern das Greifertool.


  • [quote]Der Fehler

    Code
    VAL3 Laufzeitfehler. Punkt basiert nicht auf einem Frame.

    kommt dann, wenn der Punkt z. B. kein Teachpunkt ist, sondern eine im Programm angelegte Variable.


    Mahlzeit, es handelt sich schon um einen Teachpunkt.
    Mit dem Vorschlag von Urmel klappt es jetzt. :merci:
    Was für mich noch ein wenig gewöhnungsbedürfig ist, ist der *Operator.
    Bei allen anderen Robotertypen die ich programmiere wird dafür der + oder - Operator verwendet.
    Öfter mal was neues...sonst wird´s langweilig :uglyhammer_2:

    Gruß Roland


    Wie poste ich falsch?

    Nachdem ich die Suche und die FAQ erfolgreich ignoriert habe, erstelle ich das gleiche Thema in mehreren Unterforen, benutze einen sehr kreativen Titel wie "Hilfe", am Besten noch mit mehreren Ausrufezeichen, und veröffentliche einen so eindeutigen Text, dass sich jeder etwas Anderes darunter vorstellt.


    Ich bin wie ich bin. Die Einen kennen mich, die Anderen können mich.

    Konrad Adenauer

  • Ach du heiligs Blechle....das erspar ich mir lieber bzw. schiebe es solange es geht :icon_rofl:

    Gruß Roland


    Wie poste ich falsch?

    Nachdem ich die Suche und die FAQ erfolgreich ignoriert habe, erstelle ich das gleiche Thema in mehreren Unterforen, benutze einen sehr kreativen Titel wie "Hilfe", am Besten noch mit mehreren Ausrufezeichen, und veröffentliche einen so eindeutigen Text, dass sich jeder etwas Anderes darunter vorstellt.


    Ich bin wie ich bin. Die Einen kennen mich, die Anderen können mich.

    Konrad Adenauer

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