Hallo liebe Gemeinde,
aktuell arbeite ich an einer Vision-Anwendung und habe an einer entscheidenden Stelle die Vermutung, dass ich etwas nicht ganz richtig berechne. Und da ich im KUKA-Forum zu meiner Problematik irgendwie nicht richtig fündig geworden bin, mache ich mal ein eigenes Thema auf.
Ich habe ein robotergeführtes Vision-System (Kamera im Greifer montiert und sauber vermessen) welches kalibriert ist und sich auf $WORLD bezieht.
Nun fahre ich eine Position über das zu erkennende Bauteil an und triggere das Vision-System an. Darauf hin bekomme ich von diesem die Verschiebung vom Master-Bauteil in World-Koordinaten zurück (X,Y,RZ bzw. A).
Im Anschluss sollen zwei Positionen im erkannten Bauteil angefahren werden. Die erste Position, um zu überprüfen, ob das Bauteil an einer entsprechenden Stelle ein bestimmtes Merkmal besitzt (Vision-System wird erneut angetriggert und ausgewertet) und die zweite Position, um das Bauteil zu greifen, wenn die Merkmal-Prüfung OK war. Diese habe ich im Master-Bauteil geteacht, für welche ich folgende BASE gesetzt habe (aktuelle Position in $WORLD):
;BASE UND TOOL (KAMERA) SETZEN
$BASE = $NULLFRAME
$TOOL = TOOL_DATA[3]
;BASE_DATA[11] SETZEN
BASE_DATA[11] = $NULLFRAME
BASE_DATA[11].X = $POS_ACT_MES.X
BASE_DATA[11].Y = $POS_ACT_MES.Y
BASE_DATA[11].Z = $POS_ACT_MES.Z
;ORIENTIERUNG ANPASSEN,UM KOMFORTABLER IM BAUTEIL TEACHEN ZU KOENNEN
BASE_DATA[11].A = -90.0
BASE_DATA[11].B = 0.0
BASE_DATA[11].C = 0.0
Alles anzeigen
Im Ablauf gehe ich wie folgt vor (Code etwas eingekürzt):
PTP XP1
VISION_TRIGGERN()
; VISION-SYSTEM ARBEITET IN $WORLD
; $WORLD.X = VISION.X
; $WORLD.Y = VISION.Y
;BASE UND TOOL (KAMERA) SETZEN
$BASE = $NULLFRAME
$TOOL = TOOL_DATA[3]
;BASE_DATA[11] SETZEN
BASE_DATA[11] = $NULLFRAME
BASE_DATA[11].X = $POS_ACT_MES.X + VISION_OFFSET_X
BASE_DATA[11].Y = $POS_ACT_MES.Y + VISION_OFFSET_Y
BASE_DATA[11].Z = $POS_ACT_MES.Z
;ORIENTIERUNG ANPASSEN,UM KOMFORTABLER IM BAUTEIL TEACHEN ZU KOENNEN
BASE_DATA[11].A = -90.0 + VISION_OFFSET_A
BASE_DATA[11].B = 0.0
BASE_DATA[11].C = 0.0
;BASE (BAUTEIL) UND TOOL (KAMERA) SETZEN
$BASE = BASE_DATA[11]
$TOOL = TOOL_DATA[3]
;GETEACHTE POSITION IN BASE 11 ZUR MERKMALPRUFUNG ANFAHREN...
;MERKMAL PRUEFEN...
;WENN MERKMAL OK...
;BASE (BAUTEIL) UND TOOL (GREIFER) SETZEN
$BASE = BASE_DATA[11]
$TOOL = TOOL_DATA[1]
;GETEACHTE POSITION IN BASE 11 ZUM GREIFEN ANFAHREN...
Alles anzeigen
Sprich, ich lege mir eine BASE in das Bauteil, um von da mit geteachten Positionen weiter zu arbeiten. Doch leider habe ich Positionsabweichungen beim Greifen, die ich mir nicht erklären kann - die Auswertung vom Vision-System scheint aber OK zu sein.
Ist meine Herangehensweise eine richtige bzw. hat jemand eine Idee, wie ich der Sache Herr werde?
Und bevor ich es vergesse und es wichtig wird - es handelt sich um einen Roboter an einer KRC4 mit KSS 8.6.7.
Beste Grüße