Verfahrweg und Sinus

  • Hallo Zusammen


    Hab hier ein kleines Problem. :huh:


    Gibt es eine einfache Möglichkeit eine LIN oder CIRC Fahrt mit einem Sinus zu überlagern.


    Ich meine zBsp. LIN von A nach B in einer Ebene XY. Nun würde ich das gerne mit einer Sinus Bewegung der Z Achse überlagern.


    Jemand ne Idee :kopfkratz:


    Vielen Dank schon mal


    Servus Roland

    Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt.<br />Albert Einstein

  • Schritt für Schritt zum Roboterprofi!
  • Hallo Roland,


    für eine "ungenaue Sinuskurve" bei LIN-Fahrt hätte ich eine Lösung:


    1) Den Weg von A nach B in n gleiche Stücke zerteilen und Hilfspunkte (X,Y)
    2) Für jeden Hilfspunkt (X,Y) dann den "Sinus" berechnen = Z-Koordinaten
    3) Hilfspunkte der Reihe nach mit LIN oder CIRC-Bewegung anfahren und überschleifen


    Die Genauigkeit hängt dann natürlich von der Länge der Teilstrecken ab.


    Die Orientierung könntest Du ebenfalls in Abhänigkeit der Teilstücke berechnen lassen.


    mfg
    Andi

  • Hallo Andi Hallo LindePaul


    Vielen Dank für den Tip. Werds gleich Morgen mal versuchen.


    :danke:


    Servus Roland

    Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt.<br />Albert Einstein

  • Hallo zusammen


    Habe jetzt endlich Zeit gefunden den Funktionsgenerator mal zu testen.
    Komme aber nicht weiter. :wallbash: :wallbash:
    Auch mit dem nachfolgenden ganz primitiven Programm bekomme ich immer den gleichen Fehler: >>> 1580 Techfunktion $TECH[1].FCT unzulässig <<<
    Kann mir vielleicht einer sagen was ich falsch mache bzw. was fehlt ?



    DECL TECH OSCI1 ; Variablen vom Typ TECH deklarieren


    CENTER = $NULLFRAME
    CENTER.X = 220
    CENTER.Y = 384
    S_POINT = $NULLFRAME
    S_POINT.X = 160
    S_POINT.Y = 293

    OSCI1.MODE = #CYCLE ; Kartesisches Pendeln ist eine zyklische Funktion.
    OSCI1.FCTCTRL.SCALE_IN = 2 ; Wellenlänge der Pendelschwingung ist 2mm.
    OSCI1.FCTCTRL.OFFSET_IN = 0 ; Auslenkungs Beginn ist CP Bahnbeginn.
    OSCI1.FCTCTRL.SCALE_OUT = 3 ; Amplitude des Pendelns ist 3mm.
    OSCI1.FCTCTRL.OFFSET_OUT = 0 ; Schwerpunkt der Pendelschwingung ist auf der Bahn: Bei Amplitude = 0 wird die ungependelte Bahn gefahren.
    OSCI1.CLASS = #PATH ; Argument der Pendel Figur ist die Bogenlänge, d.h. SCALE_IN die Wellenlänge.
    OSCI1.FCTCTRL.GEOREF = #Z ; Richtung der Pendel Auslenkung in Z Richtung im TTS
    OSCI1.FCT.ORDER = 1 ; Pendel Figur durch Polygonzug aus den Werte Paaren der Funktions Tabelle erzeugen.


    CUTPOS = CENTER
    CUTPOS.Z = 0
    LIN CUTPOS

    halt
    CUTPOS = S_POINT
    CUTPOS.Z = 0


    $TECH[1] = OSCI1 ; ab dem nächsten CP Satz wird gependelt.
    LIN CUTPOS C_DIS


    Servus Roland

    Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt.<br />Albert Einstein

  • Hallo LindePaul


    Welche Werte Paare ???????

    Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt.<br />Albert Einstein

  • Habs kapiert !!


    Wer lesen kann ist klar im Vorteil.
    Aber so doll ist dass im Funktionsgenerator auch nicht beschrieben.
    Zumindest hätte man in dem angführten Beispiel die "WERTE-PAARE" erläutern können.
    Habe folgendes noch deklariert und siehe da - Robot works


    OSCI1.FCT.CPNUM=4
    OSCI1.FCT.CPS1.X1=0.0
    OSCI1.FCT.CPS1.Y1=0.0
    OSCI1.FCT.CPS1.X2=0.3
    OSCI1.FCT.CPS1.Y2=0.5
    OSCI1.FCT.CPS1.X3=0.75
    OSCI1.FCT.CPS1.Y3=-0.5
    OSCI1.FCT.CPS1.X4=1
    OSCI1.FCT.CPS1.Y4=0


    :danke:


    Roland

    Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt.<br />Albert Einstein

  • Hallo Roland,
    schicke Dir trotzdem die gestern noch vorbereitete Antwort :D


    Beim Funktionsgenerator ist über die Komponente FCT anzugeben, wie die gewünschte Funktion aussieht:


    $TECH[i].FCT : im Programm änderbar; wirkt satzbezogen.
    $TECH_C[i].FCT : nicht änderbar
    Definiert die Funktion.

    ORDER: Integerzahl, die den Interpolationsgrad bei der Splineauswertung angibt. Zur Zeit ist nur der Interpolationsgrad 1 realisiert.
    CPNUM: Anzahl der insgesamt gültigen Stützpunkte der folgenden fünf Stützpunktstrukturen. Die Anzahl der gültigen Stützpunkte ist zwischen 2 und 50 frei wählbar, Lücken zwischen gültigen Stützpunkten sind nicht erlaubt.
    CPS1 Stützpunktliste für Stützpunkt 1 bis 10
    CPS2 Stützpunktliste für Stützpunkt 11 bis 20
    CPS3 Stützpunktliste für Stützpunkt 21 bis 30
    CPS4 Stützpunktliste für Stützpunkt 31 bis 40
    CPS5 Stützpunktliste für Stützpunkt 41 bis 50


    Mit ORDER ist der Grad der Funktion anzugeben. Hier ist nur 1 (also Geradenabschnitte zwischen den Stützstellen) erlaubt. Das wurde auch richtig gemacht.


    Mit CPNUM ist die Anzahl der Stützpunkte, über die die Funktion definiert ist anzugeben. Und in CPS1 bis CPS5 sind dann die Stützpunkte selber einzutragen. Diese Variablen werden aber in dem Beispielprogramm gar nicht gesetzt !!!.
    D.h. es ist gar keine Funktion für den Funktionsgenerator definiert worden. Deshalb meckert das System mit der Meldung unzulässiger Wert.
    Gruß Paul

    Wer nach allen Seiten offen ist kann nicht ganz dicht sein

  • Hallo LindePaul


    Wie schon gesagt, es funktioniert.
    ABER mit einer Einschränkung.
    Egal ob LIN oder CIRC, die gewünschte Pendel Bewegung wird nicht bis zum Ende des Path's durchgeführt !! ':kopfkratz:'
    D.h. es schaut so aus als ob der Path nur in vollständige Matrizen unterteilt wird, was übrig bleibt wird einfach geradlinig zu Ende gefahren.
    D.h. es ist anscheinend nicht möglich mehrere CIRC LIN nahtlos zu überpendeln ?


    Stimmt das so ? Oder gibts da noch nen Trick ? ':huh:'


    Servus Roland

    Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt.<br />Albert Einstein

  • Hallo Roland,
    ein Kollege schrieb:


    Statement zu Pendelverhalten:
    ======================
    Die Erkenntnis ist richtig, daß die letzte Pendelfiogur nicht mehr ganz in die Bahnbewegung reinpasst, und dann das Pendeln gestoppt wird, also eine restliche Gerade, bzw,
    Bei CIRC ein Kreisbogen gefahren wird.


    Möglicher Workaround:
    =================
    Es gibt da eine Variable namens $DISTANCE , die ab Genauhalt einer CP(Bahn-)Position den Wert (0 mm) besitzt, und kontinuierlich anwächst, bis zumnächsten Genau-Halt.
    Dieser Wert muß nach Ausführen dieser Bahn ermittelt, und notiert werden.


    Dieser Wert muß nun dividiert durch die Pendellänge ein ganzzahliges Vielfaches ergeben


    Vielfaches= $DISTANCE / Pendellänge ===> Realzahl
    Diese (Realzahl bei der 5. Stelle hinterm Komma vorsichtshalber abrunden, bzw. 0.000001 abziehen) somit werden ===> n,0000x Vielfache generiert


    Realzahl2=Realzahl - 0.00001;Anpassung wegen evt. Rundungsfehler


    KorrigiertePendellänge = $Distance / Realzahl2


    Die neue Korrigierte Pendellänge in unterem Beispiel muß dann der Variable OSCI1.FCTCTRL.SCALE_IN zugewiesen werden


    Hoffe es klappt :supi:

    Wer nach allen Seiten offen ist kann nicht ganz dicht sein

  • Hallo Roland,


    überprüfe mal die Datei /Steu/Mada/$custom.dat.


    Dort gibt es eine Variable "DECL BOOL $TECH_CONT=FALSE ;TECHNOLOGIEFUNKT. WIRD IM UEBERSCHLEIFBEREICH N. AUSGESETZT, WENN $TECH_CONT=TRUE
    "
    Defaulteintrag ist False, wenn du sie auf True setzt sollte dein Problem behoben sein. Probleme kann es nur geben wenn am Endpunkt ( Genauhalt ) im Funktionsgenerator noch eine Auslenkung ansteht. Dann kommt eine Fehlermeldung.


    Gruß Saerdna

  • Hallo LIndePaul, Hallo saerdna


    Erst mal vielen Dank für die Antworten und die Mühe :danke:


    LindePaul. Danke für den Tip mit $DISTANCE. Funktioniert leider nicht, da die LIN und CIRCs im Programm berechnet werden.
    Die genauen Distanzen hätte ich dadurch ja schon. Problem ist die konstante Wellenlänge über alle LINs und CIRCs. Ist für mich ein unlösbares Problem ein Lambda zu finden dass sich als Teiler in alle Distanzen einfügt.
    So ähnlich wird das im Prinzip aktuell ja auch schon gemacht. Wir berechen über das gesamte Polygon die einzelnen Punkte (Genaugkeit 1 mm) und das funktioniert.
    Dabei gibt es aber Probleme.
    1. Der Robby wird verdammt langsam, da anscheinend durch die Rechenoperationen viel CPU verbraten wird.
    2. Der Versuch vorauszuberechen und das Ganze in ein Array zu stecken schlug wegen deren Limitation auch fehl.


    Resultat - Externer Rechner. So wie es ausschaut kommen wir da nicht drum herum.


    Hallo saerdna


    Den Tipp find ich gut. Probiers Morgen mal aus und lass wissen was passiert.
    Wenns funktioniert schuld ich was.


    Nochmal Danke :danke:


    Servus Roland

    Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt.<br />Albert Einstein

  • Hallo saerdna


    Der Tipp mit dem $TECH_CONT = TRUE ist an und für sich nicht so schlecht.
    Die Pendelbewegung wird dann bis zum Ende des jeweiligen Lins oder CIRCs durchgeführt. :grinser043:


    Nachteil - wenn der Auschlag am Ende z.BSp. ganz oben oder unten ist dann fährt der Robbi aprupt auf den Anfangspunkt der neuen Pendelbewegung, und die ist nunmal in der Mitte.
    Fazit - so geht das leider auch nicht. :angry:


    Ich werd mich jetzt an den Vorschlag von LindePaul halten und die einzelnen Streckenlängen berechen um die Wellenlänge exakt einpassen zu können. Dann verlier ich zwar das konstante Lambda, aber der Unterschied dürfte nicht allzugross werden.


    Danke nochmal


    :danke:


    Servus Roland

    Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt.<br />Albert Einstein

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