HP20 mit NX100, Koordinaten / Nestverschiebung

  • Hallo,
    hier mal eine kurze Frage:
    Ich habe ein Koordinatensystem eingerichtet und einige Positionen darauf geteacht. Ich möchte nun das ganze System um den Nullpunkt verschieben und verdrehen.
    Mit Mframe geht das generell, aber man benötigt 3 komplette Koordinatenpunkte (ORG, XX,XY). Ich möchte aber gerne das Koordinatensystem um den Punkt ORG verschieben und verdrehen.
    Ich bekomme zum Beispiel aus Halcon Verschiebewerte im Format X,Y,Z-Winkel A,B,C. Und diese beziehen sich immer auf den Nulpunkt des Koordinatensystems
    Hat da einer schon Erfahrung mit gemacht?
    Mir freundlichen Gruß
    Fallon

    Einmal editiert, zuletzt von fallon ()

  • ANZEIGE
  • Hallo,


    das habe ich soeben selber programmieren müssen.
    Ist eigentlich kein großes Problem.


    Du bekommst ja die Daten von einer Kamera oder so.
    Diese schreibst du in eine P-Var. Also der ORG Wert
    Jetzt legst du 2 weitere P-Vars an. Der XX und der XY Wert


    Jetzt schreibst du noch 2 andere P-Vars. Eine Differenz für XX und eine für XY.
    In der XX ist nur der Wert 100 in X enthalten.
    In der XY ist nur der Wert 100 in Y enthalten.


    Jetzt schreibst du zunächst den XX Wert auf den ORG Wert und machst das auch für den XY Wert.
    Jetzt hast du 3 gleiche P-Vars.
    Nun rechnest du per MULMAT auf den XX P-Var die Diff XX P-Var.
    Nun rechnest du per MULMAT auf den XY P-Var die Diff XY P-Var.
    Jetzt hast du deine ORG / XX / XY P-Vars mit dem Versatz.
    Mit MFRAME erzeugst du jetzt dein U-FRAME.
    Deine Positionen / Programme kannst du dann um das U-FRAME shiften!
    FERTIG !



    Anbei mein Code:
    P041=ORG
    P042=XX
    P043=XY
    P016= Diff XY
    P017= Diff XX
    P044= Zielpos


    'Userframe erstellen
    SET P042 P041
    SET P043 P041
    MULMAT P042 P041 P016
    MULMAT P043 P041 P017
    'Userframe 4 (Bolzen) berechnen
    'im Bezug zu den Basiskoordinaten
    MFRAME UF#(4) PX041 PX042 PX043


    ...


    SFTON P044 UF#(4)
    SFTOFF
    ...




    Viel Glück !!!

    Nichts ist einfach - alles bedarf der Übung !

  • Hallo,


    danke für die Antwort, aber irgendwie habe ich da noch einige Verständnisprobleme:


    Gehen wir davon aus das ich eine Verschiebung von x=10, Y=25 und rx 90 Grad habe.


    Du legtst zuerst 3 P-Variablen (ORG,XX,XY) mit den selben Inhalt ( 10,25,0,90,0,0) an. Danach eine P-Variable X-Diff(100,0,0,0,0,0) und Y-Diff (0,100,0,0,0,0) an.


    Wenn ich es richtig verstehe rechnest du danach :
    MULMAT P_XX (10,25,0,90,0,0) P_ORG (10,25,0,90,0,0) X-Diff (100,0,0,0,0,0)


    Als Ergebniss kommt neu P_XX ( 110,25,0,180,0,0) raus, analog für P_YY ( 10,125,0,180,0,0)

    Gehe ich davon aus, das mein Uhrsprung bei 0,0,0,0,0,0 ist müssten die 3 Punkte an folgenden Stellen liegen:


    ORG 10,25,0,n,n,n
    XX 10,125,0,n,n,n
    XY -90,25,0,n,n,n


    Aber irgendwie passt das nicht, habe ich da was falsch verstanden?


    Gruß
    Fallon

  • Hallo,
    mach das mal ohne einen Winkel zur Probe. Wie sieht das dann aus ?
    Du drehst ja dein System um den Rx Winkel um 90Grad.
    Dann ist auch dein Y-Wert nach oben gerichtet , nicht mehr zur Seite !
    Und dein Z-Wert ist zur Seite gerichtet, nicht mehr nach oben !
    Warum drehst du denn um Rx???
    Normalerweise sind doch die Bases nur um Rz gedreht oder auch mal um Ry gekippt.
    Und deine Werte für ORG sind eigentlich die Shiftwerte !
    Die Daten für das ORG kommen im Normalfall im Bezug zum Basissystem.

    Nichts ist einfach - alles bedarf der Übung !

  • Hallo,
    erstmal sorry, du hast mit dem Winkel rech, meinte natürlich Rx, das heist die Verschiebung beträgt ( 10,25,0,0,0,90), war ein Schreibfehler die unsere Applikation etwas anders ausgibt.


    Nur Verschiebungen ist kein Problem, dann kann ich auch die Punkte als Block mit den Shift-Befehl verschieben. Die Probleme treten nur bei Winkeländerungen auf.
    Es gibt System (zb Mitsubishi) die erstellen ein Koordinatensystem mit dem Ursprung (x,y,z) und geben mit den Winkelstellungen (wx,wy,wz) die Ausrichtung des Systemes an. Hier ist ja die Schwierigkeit, das Motoman anscheinend Koordinatensysteme ausschliesslich über 3 XYZ-Koordinaten deklariert.
    Wir hätten zwar die Möglichkeit, die neuen Absolutpunkte extern zu berechnen, verkompliziert aber die Gesamtanwendung.

  • Hi.


    Wenn du das so machst wie ich unten beschrieben habe funktioniert das auch.
    Du machst dein Base über einen Punkt der von der Kamera kommt.
    Der Rest wird dann berechnet. Das können alle Roboter Systeme.
    Läuft gerade bei mir ohne Probleme. Und wir vershiften alle 6 Werte!


    Kannst ja mal deinen Code posten oder senden per PM.

    Nichts ist einfach - alles bedarf der Übung !

  • Hallo,
    danke für die Antworten.


    Du hast Recht, im Normalfall ist deine Lösung schon ziemlich passend.


    Wenn ich das so mache wie du beschreibst und ich im Base-System bin, klappt das auch. Ich komme aber aus einem anderen User-System, da kommen noch einige Schwierigkeiten dazu. Ich habe damit die Hotline von Yaskawa 2 Tage beschäftigt.


    Zum einen muss die Verschiebung von meinem Ursprung ins Base convertiert werden. Nach Berechnung der neuen Koordinatenpunkte ist die Lage des Koordinatensystem auf dem Kopf. Die Positionen der Punkte sind an der richtigen Stelle. Deswegen muss man noch die Werte von RX auf 180 setzen, dann passt es.
    Hier mal mein Code und Lösung für die Allgemeinheit:


    NOP
    SET LP001 P000
    CNVRT LPX001 LPX001 BF -->Konvertierung User2 auf Base
    SET LP002 LP001
    SUB LP002 LP002
    SET LP003 LP001
    SUB LP003 LP003
    SETE LP002 (1) 100000
    SETE LP003 (2) 100000
    'Punkt ORG
    SET LP004 LP001
    GETE LD000 LP004 (4)
    ADD LD000 18000 -->RX auf 180 Grad setzten
    SETE LP004 (4) LD000
    'Punkt XX
    MULMAT LP005 LP001 LP002
    GETE LD000 LP005 (4)
    ADD LD000 18000 -->RX auf 180 Grad setzten
    SETE LP005 (4) LD000
    'Punkt XY
    MULMAT LP006 LP001 LP003
    GETE LD000 LP006 (4)
    ADD LD000 18000 -->RX auf 180 Grad setzten
    SETE LP006 (4) LD000
    MFRAME UF#(5) LPX004 LPX005 LPX006
    END


    P000 ist die Verschiebung. Wichtig hierbei ist, die Variable für das Ursprungskoordinatensystem (bei mir User2) zu deklarieren.


    @Roboboss
    ich habe gesehen, das du dich mit fast den identischen Problem an das Forum gewendet hast. Dort hast du aber die Steuerung DX100 angegeben.
    Die Steuerung verarbeitet die Befehle ein bischen anders.


    Für alle was ganz wichtiges:
    Werden Punkte errechnet, die der Roboter theoretisch nicht anfahren kann, wirft die NX-Steuerung sofort einen Fehler raus. Bei der DX-Steuerung wir er errechnet und kann bearbeitet werden. Erst wenn ein Fahrbefehl auf so einen Punkt kommt, macht sie einen Fehler.


    Viele Grüße
    Fallon

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