Zwischenpunkte einer LIN-Bewegung berechnen

  • Hallo,


    ich habe das Problem dass ich zwischen zwei geteachten Punkten P1 und P2 die LIN-Bahn in 100 Zwischenpunkte aufteilen soll.
    Die Punkte P1 und P2 sind leider nicht immer in der selben Orientierung (A,B,C).
    Hat jemand eine Idee wie der Roboter auf einfache Art die Zwischenpunkte in X,Y,Z,A,B,C berechnen und in Variablen abspeichern kann, auch wenn die Orientierung der Punkte nicht identisch ist?
    Die Orientierung sollte sich wie bei einer normalen LIN-Bewegung kontinuierlich ändern.
    Am besten ohne die Bewegung P1 nach P2 auszuführen.


    Steuerung: KRC4


    Gruß
    Twister

    Kleinere Wunder werden sofort erledigt... größere nach der Mittagspause...

  • Schritt für Schritt zum Roboterprofi!
  • Hallo


    so könnte ich es mir vorstellen. wobei das der Roboter eigentlich sowieso machen sollte wenn du die richtige orientierungsführung einstellst.


    Delta von P1 und P2 ausrechnen (DeltaX ..... DeltaC) durch die 100


    Array
    INT i
    FRAME P[100]
    REAL DeltaX,DeltaY,DeltaZ,DeltaA,DeltaB,DeltaC


    FOR i=1 TO 100
    P[I].X=P1.X+(DeltaX*(I-1))
    P[I].Y=P1.Y+(DeltaY*(I-1))
    P[I].Z=P1.Y+(DeltaZ*(I-1))
    P[I].A=P1.Y+(DeltaA*(I-1))
    P[I].B=P1.Y+(DeltaB*(I-1))
    P[I].C=P1.Y+(DeltaC*(I-1))
    ENDFOR


    FOR i=1 TO 100
    LIN P[i] C_DIS
    ENDFOR


    Ohne gewähr

  • Hallo,
    vielen Dank für die Kommentare.
    Aber das Problem ist ja nicht die Unterteilungen (6 Dreisätze) zu programmieren.
    Das Problem ist dass ich nicht einfach die Eulerwinkel (A,B,C) linear von P1 auf P2 aufteilen kann.
    Da kommt doch nicht die gleiche Bahn dabei raus, oder liege ich da falsch?


    Gruß
    Twister

    Kleinere Wunder werden sofort erledigt... größere nach der Mittagspause...

  • wenn du an unterschiedlichen Stellen unterschiedliche orientierungen brauchst wirst du wohl welche teachen müssen.
    wenn du eine mathematische lösung willst müsstest du ja an den verschiedenen Punkten verschiedene berechnungen machen.


    mach mal ne skizze was für eine bewegung du haben willst


  • Das Problem ist dass ich nicht einfach die Eulerwinkel (A,B,C) linear von P1 auf P2 aufteilen kann.


    A dreht rechnerisch zuerst um Z. Danach dreht sich B um das neue Y. Danach dreht sich C um das neue X. Das gilt für's Ziel genau wie für den Start. Stelle es Dir mal mit konstanten XYZ vor.
    Die Bewegung heißt nicht von ungefähr LIN. Ich würde eigentlich nichts anderes erwarten?!



    Grüße,
    Michael

  • Hallo,
    ich habe hier ein Video gefunden, welches mein Problem schön veranschaulicht.

    Externer Inhalt www.youtube.com
    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.

    Hier wird zwischen einer EULER-Orientierungsbahn und einer Quaternionen-Orientierungsbahn unterschieden.
    Da der KUKA bei LIN-Bewegungen immer die Quaternionenbahnorientierung fährt würde ich auch gerne diese Zwischenpunkte berechnen.
    Ich muss an den einzelnen Zwischenpunkten definierte Bewegungsmuster abfahren.
    Nach Möglichkeit sollte dies ohne externen Rechner berechnet werden, da die Punkte ja auch individuell vor Ort geteacht werden.
    Gruß
    Twister

    Kleinere Wunder werden sofort erledigt... größere nach der Mittagspause...

  • Hallo Loipe,


    die $ORI_TYPE ist nicht mein Problem.
    Ich will ja nicht die Bewegung durchführen, ich will nur die Zwischenpunkte welche eine LIN-Bewegung P1 nach P2 durchlaufen würde berechnen.
    Theoretisch die gleichen Zwischenpositionen welche die Bahnplanung des Roboters alle 12ms berechnet während einer LIN-Bewegung. Nur halt nicht alle 12ms, sondern die Strecke P1 nach P2 in 100 Punkte aufgeteilt.


    Gruß
    Twister

    Kleinere Wunder werden sofort erledigt... größere nach der Mittagspause...

  • Hallo,


    die Orientierungsführung in Old Motion, d.h. ohne Spline, passiert über Drehen und Schwenken der Werkzeug x-Achse, daher auch immer die Ori1 und Ori2 Komponenten in z.B. $VEL und $ACC. Aus den eigentlich physikalischen drei Freiheitsgraden werden so nur noch zwei, die ineinander überführt werden müssen. Insbesondere werden auch die ABC-Winkel nicht linear ineinanderüberführt, was auch mathematisch falsch wäre und zu sehr komischen Orientierungsverläüfen führen würde. Die lineare Überführung ist nur für XYZ mathematisch korrekt.


    Die konkreten Formeln für das Drehen und Schwenken, habe hier im Urlaub leider nicht griffbereit, aber ich würde das Problem ganz anders lösen. Ich würde zuerst über einen Timer die Verfahrzeit der nichtzerteilte Bahn messen, diese dann durch 100 teilen und über einen Interrupt dann immer in diesen Zeitabständen den $POS_ACT wegsichern. Wenn man nicht über die Zeit sondern über den Weg aufteilen will, könnte man das analog über $DISTANCE oder $DIST_ NEXT erreichen. Die so erhaltene Punkttabelle kann dann wieder über mit C_VEL überschliffenen LINs abgenudelt werden.


    Allerdings, gebe ich schon mal zu bedenken, dass man bei sehr kurzen Punktabständen in Old Motion nicht auf Geschwindigkeit kommt, hier wäre dann die aufgezeichneten Punkte in einem Splineblock abzufahren besser.


    Fubini

    Einmal editiert, zuletzt von fubini ()

  • Hallo Fubini,
    das wird so funktionieren wie Du das beschreibst.
    Ich habe gehofft dass ich um das Abfahren herum komme und die Positionen irgendwie mit geringem Aufwand berechnen kann.
    Dem ist wohl nicht so.


    Gruß
    Twister

    Kleinere Wunder werden sofort erledigt... größere nach der Mittagspause...


  • irgendwie mit geringem Aufwand berechnen kann.


    Ich spreche es mal aus, sonst traut sich keiner: wir sind einfach zu blöd. :twisted:
    Für den Kuka ist es offensichtlich ein geringer Aufwand, denn der macht es ja ohne Unterlaß. Und wenn man einmal eine passende Funktion programmieren würde, hätte man es ja im Griff.


    Habe versucht, mich anläßlich dieses Threads ein wenig in die Materie einzulesen, einfach, weil es mich auch interessiert. Im Prinzip (wie es sich für mich gerade darstellt) bräuchte man ja "nur" die Kuka-ABC in Euler-Vektoren umrechnen, die dann linear interpolieren, und das Ergebnis dann jeweils zurückzurechnen.


    Versucht man dann, sich in das Thema einzulesen, findet man Formeldarstellungen, die aussehen - für mich jedenfalls, ich gebe es zu - wie Kartoffelsalat. Dabei scheint das im Grunde gar nicht so schwer zu sein. Wenn man es denn kapiert hätte, könnte man es vermutlich mit Leichtigkeit in eine Programmiersprache umsetzen. Man findet ja auch Codebeispiele für andere Sprachen im Netz, schließlich ist das eine permanente Anforderung an alle Programmierer, die irgendwas mit 3D-Darstellung zu tun haben, nur weiß man dann wieder nicht, ob jene Antwort überhaupt zur eigenen Frage gehört.


    Also, falls mal jemand nettes Unterrichtsmaterial zu finden weiß, unter der hypothetischen Überschrift: "Rotationsmatritzen für Dummies" oder "Jetzt helfe ich mir selbst - Quaternionen" oder sowas, bitte Meldung an mich.


    Grüße,
    Michael

  • hallo zusammen,
    ich weiß nicht ob es weiterhilft, aber ich habe mal bei einer blister abstapelung positionen auf einer geraden zwischen 2 geteachten punkten berechnet. der ansatz stammt aus der vektorrechnung, was allerdings fehlt ist leider die orientierung.


    „Welten, regiert von künstlichen Intelligenzen,<br />mußten oftmals ihre schmerzlichen Erfahrungen machen.<br />Logik kennt keine Gefühle.“

  • mist sorry, hab ich auf die schnelle übersehen :-|

    „Welten, regiert von künstlichen Intelligenzen,<br />mußten oftmals ihre schmerzlichen Erfahrungen machen.<br />Logik kennt keine Gefühle.“

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