Moin,
entweder mache ich grad was falsch, oder ich hab ein Verständnisproblem.
Ich hab einen Greifer mit Messspitze. Die Messspitze ist definiert (TCP, 4 Punkte). Die Daten sind ok und die Bewegung und Umorientierung passt. Danach wollte ich mit drei geteachten Punkten ein wobj berechnen lassen. Dazu gibt es eine Teachplatte mit Spitzen drauf. Die lege ich auf die Palette, für die das wobj sein soll. Nach dem Definieren des wobj mit DefFrame möchte ich die Abstände der Spitzen gerne rausrechnen, damit der Ursprung des wobj im Ursprung der Palette liegt. Das passt aber irgendwie nicht.
Grün gekennzeichnet ist das Koordinatensystem, wie ich es gerne an der Palette hätte.
Rot gekennzeichnet sind die Abstände der Messspitze vom Ursprung des Koordinatensystems an der Palette.
Das Koordinatensystem der Palette ist etwa 30° gegenüber dem des Roboters verdreht.
! Greifer
TASK PERS tooldata tMessspitze := [TRUE,[[0.00902181,0.452353,340.189],[1,0,0,0]],[52.3,[-19.2,-1.6,129.6],[1,0,0,0],3.359,2.194,2.759]];
! Palettenplatz vom Roboter aus gesehen links
CONST robtarget pU_wobj_PM761 := [[17.30,1429.51,-493.26],[0.0474765,0.796139,-0.597662,0.0819047],[1,-1,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
CONST robtarget pX_wobj_PM761 := [[366.30,1233.84,-493.49],[0.0474632,0.796154,-0.597644,0.0819022],[0,-1,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
CONST robtarget pXY_wobj_PM761 := [[512.69,1496.33,-491.18],[0.0474953,0.796101,-0.597711,0.0819092],[0,-1,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
! IBN
CONST robtarget pDummy1 := [[0.00,0.00,0.00],[0.0286675,0.921209,-0.376711,0.0929573],[1,-1,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
CONST robtarget pDummy2 := [[33.26,53.68,79.61],[0.0286672,0.921209,-0.376711,0.092957],[1,-1,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
CONST robtarget pDummy3 := [[-17.46,30.39,3.41],[0.0901483,0.924186,-0.369797,-0.0316935],[0,0,-2,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
! Abstande der Spitze U auf der Teachplatte vom Ursprung des wobj
CONST num nDeltaX := -55; ! Abstand der Teachspitzen U und X von X-Achse in mm
CONST num nDeltaY := -30; ! Abstand der Teachspitze U von Y-Achse in mm
CONST num nDeltaZ := -80; ! Hoehe der Teachspitzen von Null in mm
! Werkobjekte
PERS wobjdata wobj_PM761 := [FALSE, TRUE, "", [[-37.7, 1399.51, -573.26],[0.967531, 0.00379013, -0.000692955, -0.252724]], [[0, 0, 0],[1, 0, 0, 0]]];
PROC Setup_wobj_PM761()
! Teachpunkte zum Einrichten wobj PM761 (Palettenpatz links)
MoveL pU_wobj_PM761, vHome,fine,tMessspitze\Wobj := wobj0;
MoveL pX_wobj_PM761, vHome,fine,tMessspitze\Wobj := wobj0;
MoveL pXY_wobj_PM761, vHome,fine,tMessspitze\Wobj := wobj0;
! Koordinatensystem berechnen
wobj_PM761.uframe := DefFrame(pU_wobj_PM761, pX_wobj_PM761, pXY_wobj_PM761);
! Vor der Korrektur teachen
MoveL pDummy1, vHome, fine, tMessspitze \wobj:= wobj_PM761;
! (Bekannte) Verschiebung durch die Spitze auf der Messplatte rausrechnen
wobj_PM761.uframe.trans.x := wobj_PM761.uframe.trans.x + nDeltaX;
wobj_PM761.uframe.trans.y := wobj_PM761.uframe.trans.y + nDeltaY;
wobj_PM761.uframe.trans.z := wobj_PM761.uframe.trans.z + nDeltaZ;
! Nach der Korrektur teachen
MoveL pDummy2, vHome, fine, tMessspitze \wobj:= wobj_PM761;
! Mit der Messspitze im Ursprung
MoveL pDummy3, vHome, fine, tMessspitze \wobj:= wobj_PM761;
ENDPROC
Alles anzeigen
Wie man sieht passt die Position pDummy1, die direkt nach dem DefFrame geteached wurde. Nach der ersten Korrektur haut es aber schon nicht mehr hin. Der Roboter wurde zwischenzeitlich nicht bewegt. Wenn ich dann pDummy2 teache, würde ich erwarten, daß da die Werte nDeltaX, ...Y und ...Z drin stehen. Ich hab da aber schon etwa 1,7mm bzw. 1,3mm Differenz. Danach habe ich die Messspitze so nah wir möglich an den Ursprung des Koordinatensystems gefahren. Nach dem Teachen von pDummy3 würde ich da jetzt Werte nahe bei 0 erwarten. Die sind aber weit davon entfernt.
Hab ich da jetzt einen Fehler in der Denke oder im Code?
Vielen Dank schonmal.
Gruß
Jörn