ABB Roboterschulung von praxiserfahrenen Trainern
in unserem Schulungszentrum in Mainburg oder vor Ort bei Ihnen
Bediener und Expertenschulungen anfragen

Autor Thema:  TCP-Korrektur  (Gelesen 3261 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

leila

  • Gast
TCP-Korrektur
« am: 06. Juni 2006, 08:48:42 »
Hallo Leute,
ich möchte im Programm meinen TCP verändern. Ich habe dazu relative Angaben (in mm) zum alten TCP im Datentyp pose.
Frage: Kann ich die Position des TCP einfach mit meiner Pose-Variable multipliezieren(PoseMult) um den neuen TCP zu erhalten? Wie funktioniert PoseMult überhaupt?
Muß man dabei irgendwas beachten?

Danke!

leila
  • finde ich gut    Danke, das hat mir geholfen    brauche Hilfe    da stimmt was nicht    Lesenswert


ABB Robotertraining
günstig und verständlich mit Zertifikat
ABB Roboterschulung

Offline stromer

  • Forum Elite LV 7
  • *
  • Beiträge: 366
  • Denken hilft
  • Bewertet: 0
Re: TCP-Korrektur
« am: 06. Juni 2006, 11:26:32 »
Hallo Leila,

PoseMult kenne ich garnicht, wenn Deine Pose-Variable aber relative Angaben zum TCP enthält müsste es eigentlich mit einfachem Addieren funktionieren. tool.trans + pose. Im Zweifelsfall einzeln, tool.trans.x + pose.x.

Gruß
Stromer
  • finde ich gut    Danke, das hat mir geholfen    brauche Hilfe    da stimmt was nicht    Lesenswert

Offline Micky

  • Forum Elite LV 3
  • *
  • Beiträge: 271
  • Bewertet: +40
Re: TCP-Korrektur
« am: 06. Juni 2006, 18:02:10 »
Hallo Leila,

du musst die Instruktion PoseMult verwenden, denn die Addition wie von stromer beschrieben funktioniert so nicht. :uglyhammer_2:

PoseMult ist im Prinzip das Addieren von zwei Koordinatensystemen, wobei  durch Verwendung von PoseInv auch ein Koordinatensystem abgezogen werden kann.

z.B. peBeisipiel:=PoseMult(PoseInv(peFrame1),peFrame2);

Nähere Informationen kannst Du aber auch dem Handbuch entnehmen

Gruß
Micky
  • finde ich gut    Danke, das hat mir geholfen    brauche Hilfe    da stimmt was nicht    Lesenswert

Offline stromer

  • Forum Elite LV 7
  • *
  • Beiträge: 366
  • Denken hilft
  • Bewertet: 0
Re: TCP-Korrektur
« am: 07. Juni 2006, 08:44:47 »
@Micky:
bei mir hat das ganz prima kunktioniert, ich rechne so die Position in einem Werkobjekt zurück auf die Welt
Position:=wFrame.uframe.trans-Hilfspos;
 :beerchug: :beerchug:
Gruß
Stromer
  • finde ich gut    Danke, das hat mir geholfen    brauche Hilfe    da stimmt was nicht    Lesenswert

Offline Micky

  • Forum Elite LV 3
  • *
  • Beiträge: 271
  • Bewertet: +40
Re: TCP-Korrektur
« am: 08. Juni 2006, 20:26:57 »
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



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);



:huh:

Die Funktion RelTool arbeitet nach dem gleichen Prinzip wie PosMult.


Gruß
Micky
« Letzte Änderung: 08. Juni 2006, 20:30:08 von Micky »
  • finde ich gut x 1    Danke, das hat mir geholfen x 1    brauche Hilfe    da stimmt was nicht    Lesenswert (Details | 3 Schreiben Alle)

Offline stromer

  • Forum Elite LV 7
  • *
  • Beiträge: 366
  • Denken hilft
  • Bewertet: 0
Re: TCP-Korrektur
« am: 09. Juni 2006, 08:38:58 »
Hallo Micky,

Du hast recht, das was ich gemacht habe funktioniert nur weil die Achsen der Koordinatensysteme übereinstimmen.
 :genau:

Deine Erklärung mit den Beispielen ist super :supi:

Gruß
Stromer
  • finde ich gut    Danke, das hat mir geholfen    brauche Hilfe    da stimmt was nicht    Lesenswert

leila

  • Gast
Re: TCP-Korrektur
« am: 09. Juni 2006, 09:51:03 »
Hallo

Danke ihr habt mir sehr geholfen.
Da ich mein Werkzeug auch Verdrehen will werde ich dann PoseMult verwenden.

Gruß
Leila
  • finde ich gut    Danke, das hat mir geholfen    brauche Hilfe    da stimmt was nicht    Lesenswert

Offline Gerhard Reinig

  • Forum Mitglied LV 14
  • *
  • Beiträge: 164
    • Gerhard Reinig Roboterprogrammierung
  • Bewertet: +4
Re: TCP-Korrektur
« am: 17. Mai 2017, 13:16:45 »
Boah, Danke!!!
Ich sitze hier mit leerem Kopf, weil ich stationäres Tool mit Verschleiß der stationären Polierscheibe verschieben muss.
  • finde ich gut    Danke, das hat mir geholfen    brauche Hilfe    da stimmt was nicht    Lesenswert
Gerhard Reinig
Roboterprogrammierung
Fanuc KUKA ABB Comau Reis RobCad

Offline Gerhard Reinig

  • Forum Mitglied LV 14
  • *
  • Beiträge: 164
    • Gerhard Reinig Roboterprogrammierung
  • Bewertet: +4
Re: TCP-Korrektur
« am: 17. Mai 2017, 14:41:23 »
Also, ich habe auch über PoseMult im Handbuch gelesen, aber das ist so abstrakt beschrieben und mit den Bildchen bin ich auch nicht klar gekommen.

Hatte zuvor auch mit Winkelberechnung gemacht, aber jetzt verworfen und total simpel mit PoseMult.
Kann jeder mal selbst in Robotstudio mit einem virtuellen Roboter probieren.

  PERS tooldata TScheibGr_1:=[FALSE,[[35.3553,135.355,100],[0.92388,0,0,0.382683]],[1.5,[1.6,0,0],[1,0,0,0],0,0,0]];

  PERS wobjdata WScheibGr_1:=[FALSE,TRUE,"",[[0,500,500],[0.923879533,0,0,0.382683432]],[[0,0,0],[1,0,0,0]]];
  PERS tooldata TScheibKL_1:=[FALSE,[[35.3553,135.355,100],[0.92388,0,0,0.382683]],[1.5,[1.6,0,0],[1,0,0,0],0,0,0]];
  PERS wobjdata WScheibKL_1:=[FALSE,TRUE,"",[[0,-500,500],[0.923879533,0,0,-0.382683432]],[[0,0,0],[1,0,0,0]]];
  PERS num VorschGr:=50;
  PERS num VorschKl:=25;
  VAR pose Verschleiss;

  PROC VorschGr_ber()
    !
    Verschleiss:=[[VorschGr,0,0],[1,0,0,0]];
    TScheibGr_1.tframe:=PoseMult(WScheibGr_1.uframe,Verschleiss);
    !
  ENDPROC
 
  PROC VorschKl_ber()
    !
    Verschleiss:=[[VorschKl,0,0],[1,0,0,0]];
    TScheibKl_1.tframe:=PoseMult(WScheibKl_1.uframe,Verschleiss);
    !
  ENDPROC


Zur Erläuterung:
Zwei Polierscheiben (Große und Kleine), um 45 und -45 Grad verdreht, unterschliedlicher Verschleiß.
Die unterschiedlichen Koordinaten von Tool-Position zu Werkobjekt-Position habe ich nicht angepaßt zur Verdeutlichung, dass die PoseMult-Berechnung die richtigen Koordinaten in das stationäre Tool einträgt.

Man kann das auch in nur eine Zeile schreiben, also
TScheibKl_1.tframe:=PoseMult(WScheibKl_1.uframe,[[VorschKl,0,0],[1,0,0,0]]);
Mann kann das auch in nur eine Zeile schreiben, also
  • finde ich gut    Danke, das hat mir geholfen    brauche Hilfe    da stimmt was nicht    Lesenswert
Gerhard Reinig
Roboterprogrammierung
Fanuc KUKA ABB Comau Reis RobCad

 

über das Roboterforum

Nutzungsbedingungen Impressum
Sitemap