Werkstück um Offest Wert drehen [HILFE benötigt]

  • Hallo Freunde!


    Ich benötige Unterstützung in folgender Aufgabe:
    - Werkstück wird mit Spanngreifer im Rohr aufgenommen, vor eine Kamera in Y-Richtung gehalten (horizontal)
    - SPS gibt Offsetwert an Roboter
    - Roboter soll Punkt manipulieren oder Achse 6 drehen, vielleicht auch um Achse "A" drehen und senkrecht in "Z" ablegen (vertikal)


    Nun die Preisfrage:
    Wie bekomme ich das am besten auf die Reihe?
    E6AXIS ist nicht REAL kompatibel..

    Einmal editiert, zuletzt von KAKA ()

  • Schritt für Schritt zum Roboterprofi!
  • Achse 6 drehen wird dir nicht helfen. Ich würde wahrscheinlich das Tool oder die Base verschieben. Dazu nutzt man den geometrischen Operator.
    Kleines Beispiel Tool-Verschiebung:



    Programm Aufruf:


    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.

    Einmal editiert, zuletzt von IrrerPolterer ()


  • ...
    - Roboter soll Punkt manipulieren oder Achse 6 drehen, vielleicht auch um Achse "A" drehen und senkrecht in "Z" ablegen (vertikal)


    Hoho, 'oder' und 'vielleicht', das schreit nach Fuzzy Logic. :uglyhammer_2: Aber davon hört man schon lange nichts mehr, dürfte wohl so ziemlich out sein.


    Spaß beiseite:
    Ich würde da eher auf einen verschobenen Punkt fahren. Im Prinzip so ähnlich wie der IrrePolterer, nur eben nicht das Tool, sondern den Zielpunkt verschieben.
    Aber das kann jeder halten wie er will. Kommt auch darauf an worauf der Offset der Kamera bezogen ist, und wie das ganze kalibriert / eingerichtet wird.
    Mit Base verrechnen würde ich nicht, sobald Verdrehungen im Spiel sind gibt das meist seltsame Überraschungen, weil sich die Verdrehung dann nicht auf das Bauteil bezieht, da muss das Base dann schon recht speziell eingerichtet werden.

  • Danke Irrer Polterer!
    Sieht ganz schön kompliziert aus!
    Wieso ist "Offset X="alles andere?
    Ich hatte überlegt, den Base Ursprung mit einem Teachpunkt zu überschreiben und die ganze Base zu drehen, geht das?
    Dreht eine Base immer um den Ursprung?


    Aber ich glaube ich verstehe deinen Code jetzt. Einfach das Prog vorschalten und den Tool_dataX beschreiben?
    Wenn ich nur um A drehen will, wo muss ich das da einsetzen?
    Genügt da ein offset.x=cam_offset (bsp. REAL 10,2°)

    Einmal editiert, zuletzt von KAKA ()


  • Sieht ganz schön kompliziert aus!
    Wieso ist "Offset X="alles andere?
    Ich hatte überlegt, den Base Ursprung mit einem Teachpunkt zu überschreiben und die ganze Base zu drehen, geht das?
    Dreht eine Base immer um den Ursprung?


    1. Ist nicht so kompliziert.
    2.Weil ich bei Copy/Paste vergessen habe, es anzupassen. :laugh: Korrigiere ich gleich.


    Sicher kannst du genauso die Base drehen. Allerdings immer daran denken auch hier den geometrischen Operator zu nehmen, dann verdrehst/verschiebst du die Base immer um sich selbst.


    Hier ein wenig einfacher. Mit Base:


    Code
    DEF MOVEBASE()
    ;Kopiert Base 1 mit Offset in Base 11
    FRAME OFFSET
    OFFSET=$NULLFRAME ;Offset mit allen Koordinaten auf 0.0 initialisieren
    OFFSET.Z=CAM_Z ;Offset.Z mit Z-Wert von Kamera überschreiben
    OFFSET.A=CAM_A ;Offset.A mit A-Wert von Kamera überschreiben
    BASE_DATA[11]=BASE_DATA[1]:OFFSET
    ENDFCT

    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.


  • Sicher kannst du genauso die Base drehen. Allerdings immer daran denken auch hier den geometrischen Operator zu nehmen, dann verdrehst/verschiebst du die Base immer um sich selbst.


    Also dreht sich die Base um X=0? Und nicht um $POS_ACT oder TCP?


    Was haltet Ihr davon, wenn man nur verdrehen will? Kann das hinhauen?


    Code
    DEFFCT FRAME MOVETOOL()
    FRAME OFFSET
    OFFSET.X=$POS_ACT.X
    OFFSET.X=$POS_ACT.Y
    OFFSET.X=$POS_ACT.Z
    OFFSET.X=$POS_ACT.A + CAM_OFFSET
    OFFSET.X=$POS_ACT.B
    OFFSET.X=$POS_ACT.C
    RETURN TOOL_DATA[1]:OFFSET
    ENDFCT

    Einmal editiert, zuletzt von KAKA ()

  • Also dreht sich die Base um X=0? Und nicht um $POS_ACT oder TCP?


    Hääh? :shock:
    Wenn du eine Base vermessen hast und per geometrischem Operator nur A drehst, dann wird um die Z-Achse des Base-Nullpunktes gedreht. Kleines Beispiel:

    Externer Inhalt youtu.be
    Inhalte von externen Seiten werden ohne deine Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklärst du dich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

    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.

  • Wenn Du eine $POS_ACT auf's Tool draufrechnest (wie in Deinem Vorschlag), geht es ziemlich sicher schief. Bei Tool hast Du eher Erfolg mit

    Code
    OFFSET=$NULLFRAME
    OFFSET.A=CAM_OFFSET * (-1)
    RETURN TOOL_DATA[1]:OFFSET


    Das "*(-1)" natürlich nur, wenn das Vorzeichen falsch ist. Obiges bedingt, dass die Z-Achse des TOOLS exakt parallel zur Kamera-Sichtachse steht. Generell wäre Tool m. E. die richtige Variante.
    Generell: Achtung bei solchen Sachen. Wenn man solche automatischen Verdrehungen aus irgendwelchen Kamerasystemen ohne weitere Überprüfung übernimmt, kriegt man schnell ein Problem mit den Achskonfigurationen. Oder der Roboter überlegt sich, dass es mit _diesem_ Tool doch viel kürzer wäre, andersherum zu schwenken. Und Kameras neigen bei symmetrischen Bildern dazu, Verdrehungen von 179° auszugeben statt -1°....


    Grüße,
    Michael

  • Außerdem hast du meinen Fehler "OFFSET.X" schön übernommen... :zwink:


    Code
    DEFFCT FRAME MOVETOOL()
    FRAME OFFSET
    OFFSET.X=$POS_ACT.X
    OFFSET.X=$POS_ACT.Y
    OFFSET.X=$POS_ACT.Z
    OFFSET.X=$POS_ACT.A + CAM_OFFSET
    OFFSET.X=$POS_ACT.B
    OFFSET.X=$POS_ACT.C
    RETURN TOOL_DATA[1]:OFFSET
    ENDFCT




    Was tust du, wenn in $POS_ACT.C z.B. 180.0, also nicht 0.0 drinsteht? Dann rechnest du diesen Winkel mit ein!
    Das Ganze hängt also stark von deinem bisherigen Programmaufbau ab, und wonach sich die Offsetdaten berechnen, auf was sie sich beziehen und viele andere Faktoren...

    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.


  • Macht's bissl kompakter ;)


    Dreht aber auch alle Werte mit, die gerade in $POS_ACT stehen. Wenn schon mit POS_ACT, dann sollte man auch nur die Werte nutzen, de benötigt werden.

    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.


  • Alles was halt in einen Frame so rein passt. Also nichts anderes als zuvor auch schon...


    Das Kompakte hatte Programmiersklave schon geschrieben. Und dort eben auch mit $NULLFRAME, was für mich die einzige sinnvolle Lösung ist. Denn:
    Wenn man das Bauteil nur in A drehen möchte und in $POS_ACT folgendes drinsteht: {...., a. 45.0, b 0.0, c 180.0....} dann dreht man z.B. auch noch C mit. Dürfte nicht so der Brüller sein.
    Die Funktion in meinem Beispiel ist eine etwas abgespeckte Version eine Funktion aus meiner eigene Bibliothek, die ich immer auf jeder Steuerung nutze. Heißt da etwas anders:



    Damit lässt sich also jeder Frame mit x-beliebigen Koordinaten verschieben. Egal ob Tool-, Basedata oder sonstige Frames.

    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.

  • Nettes Video - THX!!
    Muss ich das Offset nicht zum absoluten Wert addieren?
    Ich habe bisher nie Function Programmiert. Ich bekomme die Meldung "Der Rückgabewert wird nicht ausgewertet" in WV. Kann man das vernachlässigen? Oder muss ich irgendwo noch den "OUT" in die Klammer schreiben?
    Ich muss die Tage unbedingt mal mit dem Roboter spielen.. Testen..


    EDIT: Ich bekomme scheinbar nichts raus aus der Funktion. Laut WV.


    Was passiert wenn ichs so mache?


    Code
    R181.A = R181.A + CAM_OFFSET
    SLIN R181 C_SPL

    Einmal editiert, zuletzt von KAKA ()

  • Was haltet Ihr davon?


    Code
    $Advance=0
    base_data[1]=$NULLFRAME
    base_data[1].X=$POS_ACT.X
    base_data[1].Y=$POS_ACT.Y
    base_data[1].A=base_data[1].A+CAM_OFFSET
    $Advance=3

    Einmal editiert, zuletzt von KAKA ()

  • Gar nix. Das ist doch alles nur rumraterei, solange man nicht die genauen Voraussetzungen kennt.
    Um den Polterer zu zitieren:
    "Das Ganze hängt also stark von deinem bisherigen Programmaufbau ab, und wonach sich die Offsetdaten berechnen, auf was sie sich beziehen und viele andere Faktoren...", hatte ich auch schon mal kurz angedeutet.
    Die Spielerei mit dem $advance kann man sich auch getrost sparen. Das ist vollkommen unnötig.

  • Wie gesagt: beim Polterer gibt es das Problem dass die Funktion nichts raushaut. Der Sytax is irgendwie daneben. Auch ist die Frage, woher die Parameter der variablen kommen sollen. In meinem Fall ist am besten die Posact, Allerdings sind nur X und Y sinnvoll. Der Rest null Frame. Dann das Offset addieren zu A addieren und drehen. Theoretisch müsste ich dann aber den Ori_Type switchen, Weil der Kunde alles auf Null Frame Teachen will. Vielleicht hast du ja noch eine Idee.


    Vielen Dank.


    PS: Kann man die Fehlermeldung ignorieren das eine Funktion keinen Wert zurück gibt? Ist die geometrische Operation dann Fakt? Oder verbleibt sie in der Funktion?

    Einmal editiert, zuletzt von KAKA ()

  • Die Rückgabe der Funktion ist entscheidend. Es soll nichts in der Funktion bleiben, sondern die Funktion gibt einen Wert zurück, den du dann verwendest. Der Rückgabewert wird mit RETURN angegeben. Und der wird dann an der Stelle (unten im Beispiel im Main-Programm) verwendet, wo du ihn brauchst. Mal mit der auf deinen Anwendungsfall angepassten Funktion vom Polterer:


    Funktion:


    Code
    DEFFCT FRAME MOVETOOL() <--- Funktionsname für die Verwendung
    FRAME OFFSET
    OFFSET.X=$POS_ACT.X
    OFFSET.X=$POS_ACT.Y
    OFFSET.X=$POS_ACT.Z
    OFFSET.X=$POS_ACT.A + CAM_OFFSET
    OFFSET.X=$POS_ACT.B
    OFFSET.X=$POS_ACT.C
    RETURN TOOL_DATA[1]:OFFSET <----- Rückgabe
    ENDFCT



    Programmaufruf:



    Alle Klarheiten beseitigt? :)
    Wie du es verwendest (Tool oder Base) musst du dann selber gucken.


    Gruß,
    M.

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