Hallo stromer,
wenn du ein Koordinatensystem ohne Berücksichtigung der Verdrehung des Ursprungskoordinatensystems bzw. des Verschiebungskoordinatensystems berechnen must, reicht die Addition der translatorische Anteile.
Beispiel:
Das Tool "tAlt" hat die gleiche Richtung wie das "tool0" (Orientierung [1,0,0,0]) und soll in Z-Richtung um 50 mm verlängert werden ("tNeu").
Hierzu muss zur Z-Komponenete des Tools "tAlt" nur 50 mm addiert werden.
PERS tooldata tAlt := [TRUE,[[0,0,200],[1,0,0,0]],[1,[0,0,0.1],[1,0,0,0],0,0,0]];
PERS tooldata tNeu := [TRUE,[[0,0,250],[1,0,0,0]],[1,[0,0,0.1],[1,0,0,0],0,0,0]];
Wenn Du ein Tool mit einer Drehung von 45 Grad um die Y-Achse hast und es dann in Werkzeugrichtung entlang der Z-Achse verschieben willst, verändern sich die X- und Z-Werte, so dass man diese ggf. mit den Winkelfunktionen berechnen müsste. Ist das Tool auch noch um die X- und Z-Achse gedreht, wird diese Berechnung entsprechend komplizierter.
Durch Verwendung der Funktion PosMult wird die Richtung des Tools bei der Berechnung berücksichtigt, wobei man das Tool nicht nur verschieben sondern auch noch zusätzlich verdrehen kann.
Beispiel:
Gemäß der angehängten Zeichnung wird der um 45 Grad gedrehte Greifer "tool1" um 500 mm in Z-Richtung des Werkzeugs verschoben.
!Ursprungstools
PERS tooldata tool1 := [TRUE,[[-380,0,745],[0.92388,0,-0.382683,0]],[1,[0,0,0.1],[1,0,0,0],0,0,0]];
!Berechnung mit PoseMult
PERS tooldata tool2 := [TRUE,[[-733.553,0,1098.55],[0.92388,0,-0.382683,0]],[1,[0,0,0.1],[1,0,0,0],0,0,0]];
!Berechnung durch Additions des Trans-Anteils
PERS tooldata tool3 := [TRUE,[[-380,0,1245],[0.92388,0,-0.382683,0]],[1,[0,0,0.1],[1,0,0,0],0,0,0]];
PROC CalcTool()
VAR pose peOffset;
!TCP-Werte in X,Y- und Z-Richtung für "tool1" gemäß Zeichnung zuweisen
tool1.tframe.trans.x:=-380;
tool1.tframe.trans.y:=0;
tool1.tframe.trans.z:=745;
!Drehung um 45 Grad um die Y-Achse als Orientierung des Tools berechnen
tool1.tframe.rot:=OrientZYX(0,-45,0);
!Einstellungen des alten Tools für die neuen Tools übernehmen
tool2:=tool1;
tool3:=tool1;
!Verschiebungskoordinatensystem bestimmen -> hier Verschiebung um 500 mm in Z-Richtung
peOffset:=[[0,0,500],[1,0,0,0]];
!"tool2" in Z-Richtung des Werkzeugkoordinatensystems von "tool1" um 500 mm mit der Funktion
!PoseMult verschieben
tool2.tframe:=PoseMult(tool1.tframe,peOffset);
!Berechnung des Tools durch Addition der translatorische Anteile in Richtung von "tool0"
tool3.tframe.trans:=tool1.tframe.trans+peOffset.trans;
ENDPROC
Alles anzeigen
Wenn man nun die Werte von "tool2" in den Tooldeklarationen mit denen in der Zeichnung vergleicht, kann man ganz leicht den Vorteil der Funktion PoseMult erkennen, vor allem wenn man ein Tool noch zusätzlich verdrehen will.
z.B. Tool um 30 Grad um die X-Achse drehen und um 100 mm in die Z-Richtung des Tools verschieben.
peOffset.trans:=[0,0,100];
peOffset.rot:=:=OrientZYX(30,0,0);
tool2.tframe:=PoseMult(tool1.tframe,peOffset);
Die Funktion RelTool arbeitet nach dem gleichen Prinzip wie PosMult.
Gruß
Micky