KUKASim Programm Funktion einbauen und abrufen

  • Schritt für Schritt zum Roboterprofi!
  • Stimmt, ich habe das beim kopieren irgendwie übersehen. Im Anhang noch ein Screenshot von Kukasim. Der Roboter fährt nun zu Punkt1 und fährt wieder zurück. Aber nach dem Punkt 1 wird keine Spiralförmige bewegung ausgeführt. Muss ich die funktion hierzu im def main aufrufen? Wenn ich das mache wird die funktion rot, bild 2.

    Einmal editiert, zuletzt von popoff_1 ()

  • Die Variablendeklaration zwischen Main() und coilbreaksub() dürfen da nicht stehen. Entweder ins coilbreaksub oder ins .dat file.

    By the way. Screenshots von Programmcode finde ich leicht ätzend. Lieber das komplette src als Anhang, oder zumindest in einen Code-Abschnitt reinkopieren.

  • Danke für die Info. Wenn ich die Variablendeklaration innerhalb coilbreaksub() gebe werden diese rot unterstrichen. Es kommt dann folgende meldung: Variablendeklaration mit Initialisierung sind in Programmen und Funktionen nicht zulässig. Bzw. wenn ich es direkt ins .dat file kopiere dann scheint es zu funktionieren.


    Wie bekomme ich es nun hin dass diese programmierte Spirale coilbreaksub() aufgerufen wird und abgefahren wird? Vielen Dank.

    2 Mal editiert, zuletzt von popoff_1 ()

  • .. Muss ich die funktion hierzu im def main aufrufen?..

    Auf alle Fälle, sonst wird es nicht ausgeführt.

    Mein letzter Kontakt mit Kuka sim ist schon lange her, hast du da schon auch das Office lite dazu? Da kann man das Programm dann schön im Einzelschritt debuggen.

  • Ich vermute mal die ersten zwei Meldungen kommen beim verlassen deines coilbrakesub. Mann kann zwischen nicht spline und spline nicht überschleifen. Entweder mach aus dem circ einen scirc oder aus dem sptp home ein ptp home.


    Fubini

  • Also wenn ich aus circ scirc eingebe dann kann ich C_Vel auch dann komplett weglassen?


    Code
         SCIRC PS : PH, PS : PT 

    Denn dann funkioniert es auch und ich erhalte keine Fehlermeldung mehr.

    Und noch eine andere Frage: Kann ich in KukaSim auch das Optionspaket zu RSI installieren? Ich würde da den Befehl $OUT[RSIBREAK] einbinden. Gibt es den Befehl in RSI noch da ich diesen in einem älteren Benutzerhandbuch gefunden habe?

    Einmal editiert, zuletzt von popoff_1 ()

  • Also wenn ich aus circ scirc eingebe dann kann ich C_Vel auch dann komplett weglassen?

    Jein. C_VEL gibt es beim Spline nicht. Nimmst du C_VEL weg wird gar nicht mehr überschliffen. Bei SCIRC solltest du C_SPL statt C_VEL einsetzen.


    Noch eine ganz andere Möglichkeit wäre in die Schleife ein IF auf den letzen Durchlauf einzubauen, alles auf CIRC zu lassen und nur beim letzen Durchlauf das C_VEL weglassen. Dann wird aus dem Subprogramm nicht hinausüberschliffen und die Meldungen sollten auch weg sein.


    Fubini

  • Jein. C_VEL gibt es beim Spline nicht. Nimmst du C_VEL weg wird gar nicht mehr überschliffen. Bei SCIRC solltest du C_SPL statt C_VEL einsetzen.


    Noch eine ganz andere Möglichkeit wäre in die Schleife ein IF auf den letzen Durchlauf einzubauen, alles auf CIRC zu lassen und nur beim letzen Durchlauf das C_VEL weglassen. Dann wird aus dem Subprogramm nicht hinausüberschliffen und die Meldungen sollten auch weg sein.


    Fubini

    Ok habe es nun so abgeändert:

    Code
    SCIRC PS : PH, PS : PT C_SPL 

    Ich erhalte diese Information in der Ausgabe: Group1_KUKA 8.6: RRS OP 118 (GetNextStep) message: Approximation not possible


    Auf jeden Fall funktioniert es, ob die Meldung schlecht ist kann ich nicht beurteilen.

  • Noch eine Verständnisfrage: Wenn ich C_vel weglasse wird ja nicht überschliffen und der Roboter bleibt beim Übergang auf den nächsthöheren Halbkreis kurz stehen.


    Wenn ich also keine Überschleifung habe fährt der Roboter genau zu dem Endpunkt des Halbkreises stoppt kurz und verfährt den größeren Halbkreis ab. Wenn ich also eine Überschleifung verwende erkennt dann der Roboter automatisch dass der Halbkreis endet und fährt automatisch sanft weiter? Verstehe ich das richtig?


    Wie sieht da die Überschleifung genau aus? Habe versucht dies zu skizzieren. Fährt der Roboter bzw. TCP da bündig auf den nächsten Punkt des größeren Halbkreises weiter? Oder fährt er nur den Hilfspunkt genau an und verläst danach die genaue Bahn? Wie funktioniert das bei Kreisen genau, bin aus dem Benutzerhandbuch nicht recht schlau geworden.


    Vielen Dank

  • In einer CIRC gibst Du ja nur Hilfspunkt und Zielpunkt vor. Startpunkt ist Punkt davor.

    Bei mehreren Kreissegmenten hintereinander wird der Endpunkt des vorherigen Segmentes automatisch zum Startpunkt des nächstfolgenden Segmentes. Damit berechnet er das Segment im Vorlauf und erlaubt ein sauberen Übergang ins nächste Segment auch beim Überschleifen.

    Manche Maenner bemuehen sich lebenslang, das Wesen einer Frau zu verstehen. Andere befassen sich mit weniger schwierigen Dingen z.B. der Relativitaetstheorie.

  • Ok, dann wenn ich dies richtig Verstehe brauche ich bei hintereinanderliegenden Kreissegmenten eine Überschleifung damit der Roboter nicht beim Übergang ins nächste Kreissegment stehen bleibt (damit er die nächste Bahn bereits im Voraus berechnet). Denn wenn ich keine Überschleifung mache bleibt er kurz stehen und fährt weiter. Eine Überschleifung gewährleistet also einen sauber Übergang zum nächsten Kreissegment?

  • Ja du brachst Überschleifen, damit der Roboter nicht stehen bleibt. Direkt von einem Kreis auf einen anderen Kreis mit anderem Radius und anderem Mittelpunkt kann physikalisch nicht funktionieren. Da beide Kreise eine andere Krümmung aufweisen würdest du zwangsläufig einen Beschleunigungssprung bekommen und sowas kann kein Auto fahren und ein Roboter, der natürlich den gleichen physikalischen Gesetzen unterworfen ist, auch nicht. Insofern bleibt nur entweder stehen bleiben oder die Bahn so zu verfälschen, das die unterschiedlichen Krümmungen der beiden Kreise ineinander übergeführt werden. Letzeres macht genau das Überschleifen.


    Fubini

  • Ok. Ab wann wird da dann aber die Bahn verfälscht? Der Endpunkt vom ersten Halbkreis dient ja als Startpunkt für den Neuen Halbkreis. Mich würde es interessieren wie genau diese verfälschung aussieht beim Übergang von einem Halbkreis zum nächsten größeren Halbkreis. Im Benutzerhandbuch steht dass beim Überschleifen einer CIRC Bewegung der Hilfspunkt genau angefahren wird. Dann erfolgt die verfälschung der Bahn nach dem Hilfspunkt?

    Habe dazu eine neue Skizze erstellt (meine Zeichenkünste haltet sich in Grenzen).

    Dann würde die verfälschte neue Bahn in etwa so aussehen?

  • Der Zielpunkt des ersten respektive Startpunkt des zweiten Kreises wird verschliffen. Frühestens bei Satzmitte zwischen Hilfspunkt und Zielpunkt des ersten Kreises wird angefangen und spätestens Satzmitte zwischen Startpunkt und Hilfspunkt des zweiten aufgehört. Wo genau definiert der Überschleifradius gemäss $APO und das Kriterium (vel, dis, ori). Die genaue Form der Überschleifkontur hängt auch noch von programmierter Geschwindigkeit und Beschleunigung ab. Du hast doch KUKA.SIM also probiers doch einfach aus. Oder geh an ei en Roboter oder nutze Office.lite dann kannst auf $move_state schauen. Das sagt dir genau wo der Roboter in die Überschleifbahn reinkommt und wo er sie wieder verlässt. Du scheinst dich hier gerade in Sachen zu versteifen die in der Praxis kaum bis ins letzte Detail relevant sind.

    In der Praxis macht man einfach den überschleifradius solange grösser oder kleine solange bis es passt. Wenn du genaure Konturtreue willst solltest du Splineblöcke verwenden. Da bekommst einen interpolierenden Spline, denn du ohne Überschleifen auf die von dir gewünschte Kontur bringen kannst.


    Fubini

  • Zwischen "WHEN" und "DO" muss deine Auslösebedingung.

    Möglicherweise würde ich darüber nachdenken die Auslösebedingung in einem .sub Modul zu Überwachen und dann ein Flag oder etwa eine boolsche Variable damit zu schalten. Dies löst dann den Interrrupt aus.

    Den Roboter "in seinem Lauf hält weder Ochs noch Esel auf!"

  • Ok Danke für die Information. Kann ich da als Auslösebedingung eine Kraft oder eine bestimmte Tiefe eingeben? Also entweder würde ich als Auslösebedingung festlegen wenn die Z-Kraft Null wird oder wenn in Z einen Millimeter verfahren wurde. Wie gebe ich da diese Bedingung ein?

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