Beiträge 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

    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.

    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

    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)