TX2-40 mit Joystick verfahren

  • Guten Tag

    Ich bin dabei für eine studentische Arbeit einen Stäubli TX2-40 Roboter über eine SPS mit einem Joystick zu verfahren. Der Roboter soll lediglich lineare Bewegungen in X-, Y- und Z-Richtung ausführen. Die Analogwerte des Joysticks bzw. X-, Y- und Z-Koordinaten werden via EtherCAT über die analogen Eingänge der Steuerung auf den Roboter übertragen. Die Koordinaten ändern sich kontinuierlich je nach Auslenkung des Joysticks. Wenn ich nun diese dynamischen Koordinaten in einen linearen Fahrbefehl einbinde führt der Roboter die gewünschte Bewegung zwar aus, jedoch ruckelt er sehr stark. Wahrscheinlich aus dem Grund, dass er jeder punkt anfährt, stoppt und auf den nächsten Punkt wartet. Ich habe danach versucht mit einer delay vier Punkte zu definieren damit das Programm weitere Punkte zur Verfügung hat. Das Problem mit dem Ruckeln oder stottern beim Verfahren besteht leider weiterhin. Hat jemand eine Ahnung wie ich die Punkte verschleifen kann, damit er möglicherweise nicht an jedem Punkt stillsteht und eine fliessende Bewegung entsteht?


    Als Bemerkung: Das ist meine erste Aufgabe mit einem Industrieroboter. Ich bin also Neuling :)


    Ich danke euch bereits im Voraus für Hilfeleistungen


    Anbei liegt ein ausschnitt aus meinem Val3 Programm:


    Auschnitt aus Unterprogramm für Definition der Punkte:

    (xcoord_num, ycoord_num, zcoord_num sind die dynamischen Werte des Joysticks.


    // Position adaptation

    X_Target = xcoord_num

    Y_Target = ycoord_num

    Z_Target = zcoord_num

    pTarget[0]={{X_Target,Y_Target,Z_Target,180,0,180},{sfree,efree,wfree}}

    delay(0.00002)

    X_Target1 = xcoord_num

    Y_Target1 = ycoord_num

    Z_Target1 = zcoord_num

    pTarget[1]={{X_Target1,Y_Target1,Z_Target1,180,0,180},{sfree,efree,wfree}}

    delay(0.00002)

    X_Target2 = xcoord_num

    Y_Target2 = ycoord_num

    Z_Target2 = zcoord_num

    pTarget[2]={{X_Target2,Y_Target2,Z_Target2,180,0,180},{sfree,efree,wfree}}

    delay(0.00002)

    X_Target3 = xcoord_num

    Y_Target3 = ycoord_num

    Z_Target3 = zcoord_num

    pTarget[3]={{X_Target3,Y_Target3,Z_Target3,180,0,180},{sfree,efree,wfree}}

    waitEndMove()


    Auschnitt aus main Programm für Fahrbefehl:


    movel(pTarget[0],flange,mSmooth)

    movel(pTarget[1],flange,mSmooth)

    movel(pTarget[2],flange,mSmooth)

    movel(pTarget[3],flange,mSmooth)

  • ANZEIGE
  • Guten Tag

    Ja ich arbeite mit SRS. Ich habe mir in der Stäubli Referenzanleitung mal die Befehle getMoveId() und setMoveId() angesehen. Ich habe die Befehle aber noch nicht ganz genau verstanden und bin momentan noch am ausprobieren.


    Motion descriptor ist wie folgt definiert:

    Accel: 100

    Vel: 100

    Decel: 100

    TVel: 99'999

    RVel: 99'999

    Blend: Cartesian

    Leave: 0.3

    Reach: 0.3

  • Ich habe die delays eingefügt damit ich nicht 4 mal die selben Koordinaten für die Target-Punkte erhalte. Die delays sind aber aktuell auskommentiert und das Ruckeln ist noch da.


    Gibt es eine Möglichkeit bei einer linearen Bewegung z.B. zwischen drei Punkten, den mittleren Punkt zu überschleifen und direkt vom ersten zum dritten Punkt zu Fahren? So in der Art sollten die Fahrbefehle abgearbeitet werden. D.h wenn der Roboter kontinuierlich neue Punkte erhält, soll er immer zum aktuellsten Punkt fahren und die Punkte dazwischen nahtlos überschleifen.

    Einmal editiert, zuletzt von Daniel_94 ()

  • Ich habe das Problem mittlerweile gelöst.

    Ich habe ein Unterprogramm in welchem ich die Koordinaten des Joysticks verarbeite und Punkte X_, Y_ und Z_Target definiere. Diese Koordinaten werden dynamisch, je nach Auslenkung des Joysticks neu definiert.


    Das Unterprogramm rufe ich zusammen mit der Homeposition bei Programmstart auf. Danach beginnt eine While-Schlaufe. Dabei sind bereits die Punkte pHome und X_, Y_ und Z_Target bekannt. Mit dem Befehl MoveID kann bereits, auf dem Weg von pHome zum TargetPunkt, das Programm fortgeführt und die neuen Koordinaten gelesen werden.

    Das Ergebnis ist erstaunlich gut und reicht für die Anwendung aus.


    begin


    // Move to strat position

    movej(pHome,flange,mNomSpeed)

    waitEndMove()


    call GetCoord()


    while true


    nId1 = getMoveId()

    //MoveID = 0


    setMoveId(10)

    nId2 = getMoveId()

    //MoveID = 0 und wird gerade auf 10 gesetzt


    nId3 = movel(pTarget[0],flange,mSmooth)

    //MoveID = 10

    wait(getMoveId()>=0)


    if getMoveId()>=0

    call GetCoord()

    endIf


    setMoveId(0)


    endWhile


    waitEndMove()


    end

  • Hallo Daniel_94


    Zur Info.

    Stäubli bietet eine Option 'RemoteMCP' an, um der Roboter über ein externes 'Gerät' (wie z.B. eine SPS) zu verfahren.

    Wenn diese Option installiert ist, braucht man bloss Analoge E/As zur Verfahrfunction verlinken, mithilfe der Datei /usr/configs/templates/iomap/iomap.cfx.

    Es ist auch möglich das Verfahrbertrieb (Frame/Tool/Joint) zu wählen.

    Eigentlich lassen sich die meisten Funktionalitäten des stäubli Teachgeräts verlinken.


    Das riesen Vorteil dabei is das erreichte Sicherheitsniveau (das gleiche wie Stäubli SP2).


    MfG

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