im radius um einen punkt fahren ?? IRC5

  • hallo zusammen :hilfe:



    mein problem ist , ich möchte in einem radius um eine punkt fahren ! :stupid:
    das heist ich habe am roboter eine kleine klinge und möchte damit einige löcher in ein werkstück schneiden !
    allerdings sind die löcher immer unterschiedlich im durchmesser .
    jetzt will ich das der roboter den mittelpunkt vom loch bekommt und immer rechts oder links herum einen kreis ausschneidet !
    dabei soll die klinge immer 90° zum mittelpunkt stehen !


    weis jemand von euch ob der abb das überhaupt bringt ?
    hat jemand von euch schon mal so was programmiert und wie ??


    danke für jede antwort !
    vieleicht hat ja jemand von euch einen beispiel-code für mich !


    Gruß und Danke Roboprog :blumen:

    Die dümmsten Programmierer haben die dicksten Programme

  • ANZEIGE

  • weis jemand von euch ob der abb das überhaupt bringt ?


    Bringen musste das wohl größtenteils selbst. (Wobei, in den uralten Waterjet-Anlagen war schon so 'ne Funktion drin, aber natürlich ohne Umorientierung des Werkzeugs.)
    Ist aber erstmal nicht schwer, würde ich sagen: Eine Routine schreiben, die ein paar Parameterchen haben will, wie Mittelpunkt, Radius, Schnittgeschwindigkeit usw.
    Dann vom Mittelpunkt aus 5 oder 7 Punkte berechnen (Stichwort PoseMult), einen Startpunkt und dann mindestens zwei Kreissegmente, die zusammen 360 Grad machen. Die Orientierung ergibt sich ja aus dem Zielpunkt, dann nacheinander abfahren mit MoveC.
    Entsprechend kann man freilich noch Anfahr- und Rückzugspunkte festlegen.


    Wie immer gibt es mehrere Wege nach Rom, man könnte das vielleicht auch mit offs(..) realisieren oder besser noch mit RelTool(...), das sind ja auch nur Funktionen, die eine Pose zurückliefern; je nachdem, ob die Schnittebene von der Ausrichtung des Mittelpunkts bestimmt werden soll oder eher nicht.


    Wnn man den Luxus liebt, extrahiert man vorher noch aus den Konfigurationsdaten oder aus dem Achswinkel von A6 die nötigen Informationen, ob man rechts- oder linksrum schneiden will bzw. ob man die Achse vorher "aufzieht", da man ja beim Schneiden am Ende +- 360° mehr drauf hat als vorher.


    Grüße,
    Michael

  • ok danke erst mal für die antwort !


    aber bei dir hört sich das irgendwie einfach an
    !!!! für mich nicht !!!


    [/quote]
    Eine Routine schreiben, die ein paar Parameterchen haben will, wie Mittelpunkt, Radius, Schnittgeschwindigkeit usw.
    [/quote]


    glaube bekomme ich noch hin aber


    [/quote]
    Dann vom Mittelpunkt aus 5 oder 7 Punkte berechnen (Stichwort PoseMult), einen Startpunkt und dann mindestens zwei Kreissegmente, die zusammen 360 Grad machen. Die Orientierung ergibt sich ja aus dem Zielpunkt, dann nacheinander abfahren mit MoveC.
    [/quote]


    da haperts bei mir schon !!
    die orientirung für den startpunkt habe ich aber wie berechne ich die vom hilfspunkt und die vom zielpunkt ?


    sp = 0°
    hp = 90°
    zp = 180°


    hast du da vieleicht schon einen syntax ??


    und wie mache ich das , damit er mir am halbkreisübergang nicht stehen bleibt ?
    übeschleifen ja , aber in abhängigkeit vom radius ??? (prozent) ??


    orientierung in abhängigkeit vom tool ??


    also du merkst das mit den punkten ist nicht so das problem sondern ehr das mit der orientierung !!


    gruß Ralph

    Die dümmsten Programmierer haben die dicksten Programme

  • Hallo Roboprog,
    ich habe für Kreisbewegungen sowas programmiert.


    !**********************************************************
    !* Programm MoveOneC *
    !* Einen ganzen Kreis fahren. *
    !* pCentrePoint:der Mittelpunkt des Kreises *
    !* nRadius :Radiusangabe des Kreises in mm *
    !* vSpeed :speeddata für die Kreisbewegung *
    !* zZone :verschleifdaten für die Kreisbewegung *
    !* nTime :optionaler Parameter der angegeben werden*
    !* :kann.Damit wird vSpeed nicht beachtet und*
    !* :die Kreisbewegung dauert die angegebene *
    !* :Zeit *
    !* tTool :Das Werkzeug *
    !* workOb :Das Werkobjekt *
    !**********************************************************
    PROC MoveOneC(robtarget pCentrPoint,num nRadius,speeddata vSpeed,zonedata zZone,\num nTime,INOUT tooldata tTool,INOUT wobjdata workOb)


    IF(Present (nTime)) THEN
    nTime:=nTime/2;
    MoveC Offs(pCentrPoint,nRadius,0,0), Offs(pCentrPoint,0,-nRadius,0), vSpeed\T:=nTime, zZone, tTool\WObj:=workOb;
    MoveC Offs(pCentrPoint,-nRadius,0,0), Offs(pCentrPoint,0,nRadius,0), vSpeed\T:=nTime, zZone, tTool\WObj:=workOb;
    ELSE
    MoveC Offs(pCentrPoint,nRadius,0,0),Offs(pCentrPoint,0,-nRadius,0),vSpeed,zZone,tTool\WObj:=workOb;
    MoveC Offs(pCentrPoint,-nRadius,0,0),Offs(pCentrPoint,0,nRadius,0),vSpeed,zZone,tTool\WObj:=workOb;
    ENDIF
    RETURN;
    ENDPROC


    Bei deiner Anwendung müssen einige Übergabeparamter dazu andere können vielleicht entfernt werden. Mit diesem Programm fährt der Roboter ohne Stopp einen ganzen Kreis.
    Für den Anfang kann du das gut verwenden. Gruß Paulaner

    Für seine Arbeit muß man Zustimmung suchen, aber niemals Beifall.<br />Zitat: Charles-Louis Baron de Montesquieu

  • danke für die antwort !


    so habe ich mir das auch vorgestellt !


    ABER :


    es fehlt mir noch die orientierung !


    das was du da schreibst ist für eine fräse oder so !
    ich habe aber ein messer und das muß halt immer mit der klinge 90° zum mittelpunkt stehen
    und damit die orientirung drehen können !
    diese muß er aber aus dem tool beziehen !


    trotzdem danke und gruß Ralph

    Die dümmsten Programmierer haben die dicksten Programme

  • ohhhh danke das könnte klappen


    ich probiere es gleich aus !!


    Danke !



    nach test !!


    ok aber bei mir soll sich die orientierung ja drehen und zwar immer um 90 ° von start zu Hilfspunkt und zu zielpunkt !


    das habe ich immer noch nicht hin bekommen !!


    gruß R

    Die dümmsten Programmierer haben die dicksten Programme

    Einmal editiert, zuletzt von roboprog ()

  • Pass bitte auf bei diesen 180° - Fahrten.
    Die Maßgabe für den Robbi lautet: "fahre von Anfangsorientierung zu Endorientierung". Bei exakt 180.0000 Grad ist sich der Roboter nicht unbedingt sicher, wie herum er diese Orientierungsänderung fahren soll. Der Zwischenpunkt hat dabei keinen Einfluß, deswegen kann da u. U. ne böse Überraschung passieren. Ich präferiere deshalb die Verwendung von mindestens 3 Kreissegmenten.


    Ich würde auch eher ungern mit offs() arbeiten, da sich das auf das Wobj bezieht und nicht auf die Orientierung des Punktes. Weiß ja nicht, was Du als Ausgangsposition benutzt, ich würde halt beim Teachen versuchen, den Punkt senkrecht zur Oberfläche auszurichten. Wenn die Oberfläche allerdings selbst topfeben ist und parallel zum Wobj, dann ist diese Lösung hier eher unbequem, und man sollte Raumbezogen arbeiten (mit offs).


    Wenn ich es machen würde, würde ich zuerst auf Schönheit verzichten und mir die Punkte im Voraus ausrechnen. Dadurch kann man in der Datenansicht beim schrittweisen durchsteppen schon mal schauen, was eigentlich passiert.


    Zwei Arrays mit reichlich Positionsdaten und einer mit Targets, sodann noch ein paar Container:

    Code
    var pose erster_schritt{7};
    var pose zweiter_schritt{7};
    var pose rechenpose_winkel;
    var pose rechenpose_radius;
    var pose mittelpunkt;
    var robtarget kreispunkte{7};
    var byte z;


    Dann für den ersten Schritt:



    An dieser Stelle hast Du einen Array mit dem Mittelpunkt, 6-Fach verdreht um jeweils 60 °. Der letzte um 360° verdreht, der sollte also hinterher genauso aussehen wie der 1., der mit 0° verdreht wurde. Die Poses mit Index 1 und 7 sind somit eigentl. überflüssig, aber es geht ums Prinzip.
    Achso: die Verdrehung geht hier um z des Mittelpunktes, also um den e3-Vektor. Ich gehe hier also davon aus, dass Dein Messer in der Längsachse z ist und x die Schnittrichtung.


    im zweiten Step dann den Radius draufrechnen. Ich mache hier in Y:


    Code
    zweiter_schritt{z+1}:=posemult(erster_schritt{z+1},rechenpose_radius)


    Jetzt hat man die Positionen berechnet, leider kann man eine Pose nicht komplett in ein Robtarget holen. Also einzeln:


    Code
    kreispunkte{z+1}:=pCentrPoint;
     kreispunkte{z+1}.trans:=zweiter_schritt{z+1}.trans;
     kreispunkte{z+1}.rot:=zweiter_schritt{z+1}.rot;
    
    
    endfor


    Hier endet die FOR-Schleife, und in allen 7 Punkten steht jetzt ein Ziel drin, Natürlich mit falschen Konfigurationsangaben.
    Also ConfL \off und fahren
    movel kreispunkte{1} ... Messer eintauchen
    movec kreispunkte{2}, kreispunkte{3}... erstes Segment
    Dann 4 und 5 zweites Segment
    dann 6 und 7 drittes Segment.
    Auftauchen dann beliebig relTool(0,0,-30) oder so....


    Nur mal so aus der Hüfte geschossen, wenn auch ohne Gew(a)ehr.


    Grüße,
    Michael

Hilfe und Support für ABB Roboter Programmierung, Konfiguration, Inbetriebnahme finden Sie hier im ABB Roboter Forum. ABB Rapid Programmierung ist einfach, die Roboterforum Community hilft sehr gerne.

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