Problem bei dem von PTP zum LIN

  • Hallo


    Beschreibung
    Ich habe folgende Anwendung,
    Ich greife Artikel von dem laufenden Band mit ConveyorTracking.
    Alle Punkte im ConveyorProgramm müssen lineare Punkte sein.


    Der Roboter fährt einen PTP1 Vorpunkt über den Band
    Dann fährt er LIN1 Punkt (Conveyor) 50 mm über das Band und anschließend den LIN2 Greifpunkt


    Wenn der Artikel parallel zu dem Band liegt, dann fähr der Roboter von PTP zu LIN1 ohne Probleme
    Wenn der Artikel aber gedreht ist + oder - Grad
    dann dreht sich die 6 Achse während der Roboter von PTP1 zu LIN1 fährt
    Da die LIN Drehung zu lange dauert habe ich einen zusätzlichen PTP2 Punkt engefügt
    in dem ich die Koordinaten von dem erten PTP1 und den Winkel von dem LIN1 manuell schreibe.


    So wollte ich erreichen, dass die Drehbewegung möglichst schnell verläuft.


    Jetzt habe ich allerdings ein Problem, dass der Roboter(6 Achse) sich immer nur in positive Richtung dreht.
    Auch wenn der Winkel z.B. - 120° ist, dreht sich die 6 Achse von positiven Bereich in negative.
    Dazu habe ich festgestellt dass:
    Bis -89° dreht sich der Greifer von 0°(PTP1) in die Lage über die negative Richtung
    bei -90° und weiter geht es zuerst in die positive Richtung bis 179, dann von -179 bis -90



    Jetzt ist die Frage
    wie kann man so machen dass der Greifer immer von je nach Winkel in die richtige Richtung sich dreht.
    Ich dachte nach der PTP Definition müsste das auch jetzt funktionieren.


    Gruss


    Maxim

    Einmal editiert, zuletzt von mkilber ()

  • Schritt für Schritt zum Roboterprofi!
  • Hallo,
    das sieht nach dem alten S- und T-Problem aus.
    Der Roboter verfährt bei PTP-Bewegung die Achse nicht nur auf den Achswert
    (im Beispiel -120), sondern wertet auch noch S und T des zugehörigen Punktes aus.


    Dementsprechend müsstest Du auch noch S und T (eigentlich nur T soweit ich das
    noch im Hirn habe) anpassen, so dass die Achse 6 in den negativen Bereich fährt.


    Such' mal hier im Forum nach 'Status' und 'Turn', irgendwo war da mal eine genauere
    Erklärung, oder schau in der Roboterdoku nach, da war das eingermassen erklärt.


    Hermann

  • ich hab da so ein ähnliches problem gehabt. hab da mit einen greifer von 80cm bis über 3m mittig aufnehemen müssen. natürlich hat der robi seinen greifpunkt berechnen müssen. und da es ein relativ sehr großen bereich ist, was er berechnen hat müssen, überhaupt in gestreckter lage, bin ich auch mit dem problem s- und t- darüber gestolpert. der hat da karateübungen mit den 3m rohren veranstaltet :uglyhammer_2:


    ich hab da eine ganz einfache lösung gefunden. bei ptp bewegungen einfach den wert von s- und t- nicht angeben bzw nach abspeichern des ptp punktes die werte raus gelöscht. der robi nimmt dann den kürzesten weg der einzelnen achsen :D

  • Das sind meine Bewegungspunkte



    ;FOLD PTP GHP2 CONT Vel= 100 % PDAT100 Tool[1]:Greifer_1 Base[0];%{PE}%R 5.4.35,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:GHP2, 3:C_PTP, 5:100, 7:PDAT100
    $BWDSTART=FALSE
    PDAT_ACT=PPDAT100
    FDAT_ACT=FGHP2
    BAS(#PTP_PARAMS,100)
    PTP XGHP2 C_PTP
    ;ENDFOLD


    XGHP33.x = XGHP2.x
    XGHP33.y = XGHP2.y
    XGHP33.z = XGHP2.z
    XGHP33.a = XCamera_Point_2.a
    XGHP33.b = XCamera_Point_2.b
    XGHP33.c = XCamera_Point_2.c
    XGHP33.s = Xghp2.s
    XGHP33.t = XGHP2.t
    ;FOLD PTP GHP33 CONT Vel= 100 % PDAT100 Tool[1]:Greifer_1 Base[0];%{PE}%R 5.4.35,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:GHP33, 3:C_PTP, 5:100, 7:PDAT100
    $BWDSTART=FALSE
    PDAT_ACT=PPDAT100
    FDAT_ACT=FGHP33
    BAS(#PTP_PARAMS,100)
    PTP XGHP33 C_PTP
    ;ENDFOLD


    Folgender Punkt ist ein dynamischer punkt und wird von dem Camera_Point_1 übenommen und in z Richtung um 50 mm versetzt.
    ;FOLD LIN GHP3 CONT Vel= 2 m/s CPDAT01 Tool[1]:Greifer_1 Base[11]:CONV1;%{PE}%R 5.4.35,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:GHP3, 3:C_DIS, 5:2, 7:CPDAT01
    $BWDSTART=FALSE
    LDAT_ACT=LCPDAT01
    FDAT_ACT=FGHP3
    BAS(#CP_PARAMS,2)
    LIN XGHP3 C_DIS


    ;FOLD LIN Camera_Point_1 Vel= 2 m/s CPDAT1 Tool[1]:Greifer_1 Base[11]:CONV1;%{PE}%R 5.4.35,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:Camera_Point_1, 3:, 5:2, 7:CPDAT1
    $BWDSTART=FALSE
    LDAT_ACT=LCPDAT1
    FDAT_ACT=FCamera_Point_1
    BAS(#CP_PARAMS,2)
    LIN XCamera_Point_1



    Mit dem S und T von dem GHP2 funktioniert es nicht.
    mit dem S und T von GHP3 oder Camera_Point_1 ebenfalls



    ich habe es jetzt so gelöst, ist aber nicht schöhn


    XGHP33.a = XCamera_Point_1.a
    Continue
    IF (XCAMERA_POINT_1.a < -89.0) AND (XCAMERA_POINT_1.a > -180) THEN
    PTP{a6 0.0} C_PTP
    ENDIF
    Continue
    IF (XCAMERA_POINT_1.a > 90.0) AND (XCAMERA_POINT_1.a < 180) THEN
    PTP{a6 180.0} C_PTP
    ENDIF
    Continue
    IF (XCAMERA_POINT_1.a > -89.0) AND (XCAMERA_POINT_1.a < 90) THEN
    PTP{a6 97.0} C_PTP
    ENDIF
    ;FOLD LIN GHP33 CONT Vel= 3 m/s CPDAT14 Tool[1]:Greifer_1 Base[0];%{PE}%R 5.4.35,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:GHP33, 3:C_DIS, 5:3, 7:CPDAT14
    $BWDSTART=FALSE
    LDAT_ACT=LCPDAT14
    FDAT_ACT=FGHP33
    BAS(#CP_PARAMS,3)
    LIN XGHP33 C_DIS
    ;ENDFOLD



    Ich habe jetzt noch ein Problem
    Ich muss den CAMERA_POINT_1 am Band Teachen
    nach dem Teachen wenn ich zum nächsten Programm punkt springe bekomme ich
    folgende Fehlermeldung


    Fehlermeldung


    2853 MDR: Status Wechsel nicht erlaubt


    Ich habe in der Doku nachgelesen aber viel shlauer bin ich nicht geworden.


    Ursache Der Statuswechsel mit “MD_SETSTATE()” ist nicht zulässig.
    Auswirkung Interpreterstop und Roboter Stopp.
    Abhilfe
    Zulässig ist:
    INITIALIZED <--> ACTIVE Wenn der Status INITIALIZED nicht möglich
    ist, ging eine Störung während der Initialisierung voraus.




    Gruss
    Maxim

  • servus mkilber,


    hab jetzt mal eine frage zu deinem problem!


    erkennst du die position deines teils mit einer kamera oder nicht? wenn es der fall ist das du deine position des artikels mit einer kameras erkennst, dann kann ich dir sagen wie ich so etwas löse.


    mfg
    rasputin

  • jawohl


    ich ermittele die position mit Kamera


    freu mich auf deine Antwort.


    Ich habe eine Idee dass ich den winkel abfrage und dann T und S manuell je nach winkel schreibe.


    Gruss


    Maxim

  • Wenn du auf Status und Turn verzichten kannst, deklariere in der Datenliste deines Programms die benötigten Positionen als Frames.


    z.B:


    DECL FRAME XGHP2={x 0.0,y 0.0,z 0.0, a 0.0,b 0.0,c 0.0}


    Das sollte das Problem beseitigen.

    Greetings, Irrer Polterer!

    Wie poste ich falsch? Nachdem ich die Suche und die FAQ erfolgreich ignoriert habe, erstelle ich das gleiche Thema in mehreren Unterforen, benutze einen sehr kreativen Titel wie "Hilfe", am Besten noch mit mehreren Ausrufezeichen, und veröffentliche einen so eindeutigen Text, dass sich jeder etwas Anderes darunter vorstellt.


    Life is a beta version. Full of bugs and no Manual.

  • Grüß euch,


    also IrrerPolterer hat an sich schon geschrieben.


    Ich deklariere ein Frame ohne Status und Turn


    decl frame verschiebung {x 0,y 0,z 0,a 0,b 0,c 0}


    in dieses Frame schreibe ich meine verschobene Position hinein die ich von der Kamera erhalte.


    so und damit mach ich eine baseverschiebung auf meine referenzbase


    also z.B: base_data[4]=base_data[5]:verschiebung
    base[4]=neue verschoben base
    und base[5]=die referenzbase


    hoffe das ich es verständlich geschrieben habe


    mfg
    rasputin

  • Hi,


    gut erklärt! Ich glaube über dieses Problem stolpert jeder Prog einmal.


    Gruß
    Stefan

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