Frage: Schneckenförmige Kontur mit konstanter Geschwindigkeit KRC2.

  • Guten Morgen,
    ich habe mal eine Frage an die Kuka Spezialisten hier im Forum ;)
    Und zwar wurde mir aufgetragen, dass ich mit einem Kuka Kr150 Serie 2000 mit KRC2 Steuerung eine “Schneckenförmige“ Kontur (Bild) mit immer gleichbleibender Geschwindigkeit und auch konstantem Radius abfahren soll.


    Grundsätzlich könnte ich die ganze Kontur ja mittels Lin und Circ- Teach Bewegungen realisieren, nur da sich ja immer nur die Länge der geraden verändert und ich 10 Plattenvarianten komplett teachen müsste habe ich mich gefragt, ob das auch irgendwie einfacher geht?? :denk:
    Ich hoffe ihr könnt mir helfen und habt einen besseren bzw. einfacheren Lösungsansatz für mich.
    MFG

  • Schritt für Schritt zum Roboterprofi!
  • Guten Morgen


    Ich würde mir, ausgehend vom Mittelpunkt, jeden einzelnen Eckpunkt berechnen.
    Dazu musst Du den aktuellen Punkt in ein neues Frame schreiben und die gewünschte Koordinate ändern (x/y/z um z.B. 100 addieren / subtrahieren).
    Müsste eigentlich so gehen. Was ich jetzt nicht exakt weiß, ob der Roboter die "Ecken" passend überschleift. Müsste man mal testen. Den Vorlauf hoch genug stellen, dann müsste das eigentlich gehen.


    Ist Dir theoretisch bekannt, wie Du errechnete Positionen anfährst?


    Matthias

  • Vom Mittelpunkt aus berechnen hört sich schon mal sehr gut an, auf den Lösungsansatz bin ich noch gar nicht gekommen, da könnte man ja sogar die 10 Varianten mit einem Programm lösen!
    Allerdings muss ich mit der Bahn immer von dem Einlauf links unten beginnen und muss dann ja immer 4 Positionen berechnen, die senkrechte links, die waagerechte oben, die senkrechte rechts und die waagerechte unten..


    Die Ecken überschleifen würde denk ich nicht funktionieren, da schon eine genaue Kreisbahn gefordert wird. Aber die Kreisbahn ist ja immer identisch, könnten die Punkte dann nicht auch errechnet werden?


    Wie Positionen errechnet und angefahren werden habe ich theoretisch schon mal in einer Kuka Schulung gelernt.
    Die berechneten Punkte könnte ich dann ja in einer FOR Schleife (For reihe = reihe to Plattenvariante) anfahren, richtig?


    MFG

  • Der Startpunkt ist ansich mal egal.
    Ich würde es aber mal beobachten, wie das Überschleifen der berechneten Punkte aussieht. Das sollte schon recht gleichmäßig sein. Die Überschleifdistanz kann man auch einstellen, ich müsste allerdings raussuchen mit welchem Befehl.


    Vielleicht kommst Du ja auch so zum Ziel. Das exakte Berechnen der Kurvenradien wird aufwändiger, sollte aber auch möglich sein.


    Ich kenn jetzt die Unterschiede der 10 Varianten nicht, aber wenn man aus einem Hauptprogramm o.ä. ein paar Variablen übergibt, kann man sich mit Schleifen und Berechnungen ein sehr einfaches Programm bauen, welches alle Probleme auf einmal lösen kann.


    Matthias

  • Der Befehl zum Einstellen des Überschleifbereichs müsste $APO.CDIS = … sein.


    Die Frage ist nur ob dann ein gleichmäßiger Radius erzeugt wird.


    Für die graden Bewegungen muss ich dann jeweils Anfangs.- und Endpunkt berechnen, richtig?


    Die Varianten unterscheiden sich in der Größe der Platten, also gibt es dort dann auch weniger bzw. mehr abzufahrende Bahnen, wobei der Radius und die Abstände immer gleich bleiben.


    Ich hab den Roboter leider noch nicht hier stehen, sonst könnte ich ja schon mal was testen. Wenn er allerdings ankommt hab ich keine 2 Wochen mehr bis er laufen soll, deswegen mach ich mir jetzt schon mal Gedanken wie das Programm aussehen muss..

  • Das ist auch besser so: Erst denken, dann programmieren.


    Du brauchst eigentlich nur den Endpunkt. Der Startpunkt ist ja der aktuelle Punkt.


    Wie willst Du das mit den verschiedenen Platten lösen? Gibt es eine übergeordnete SPS?


    Matthias

  • Guten morgen,
    Also die Auswahl erfolgt über eine übergeordnete SPS, mal sehen ob ich das über die Cell mit verschiedenen Cases mache oder einfach über Eingänge löse.


    Das einzige was mir noch etwas Kopfschmerzen macht ist der Radius, und der Mittelpunkt ab dem wieder zurückgerechnet werden muss..


    MFG

  • Ich würde in zwei Schritten vorgehen. Erst die Koordinaten berechnen, wenn der Radius 0 wäre, das heisst, wenn man eckig fahren wollte. Dann eine Funktion machen, die aus Startpunkt, der Wunschkoordinate und der nächsten Wunschkoordinate die entsprechenden Fahrbewegungen generiert.
    Endpunkt der LIN-Bewegung wäre dann ein Punkt, der um Wunschradius in die Richtung liegt, wo der Startpunkt ist. Endpunkt der CIRC-Bewegung liegt um Wunschradius versetzt in die Richtung, in welcher die nächste Wunschkoordinate zu finden ist. Fehlt noch der Hilfspunkt der CIRC-Bahn, der liegt um (0.2929 * Wunschradius) in beide jeweilige Richtungen. (Die Zahl ist 1 minus sin(45)).


    Falls die Richtung der Bahnen nicht mit dem BASE übereinstimmt, muss man natürlich die x, y und z-Komponenten entsprechend aufdröseln, aber die Verhältniszahlen bleiben ja gleich.


    Grüße,
    Michael

  • Danke für die Antwort Programmiersklave,


    allerdings verstehe ich deinen Lösungsansatz noch nicht so richtig, dafür hab ich glaub ich einfach noch zu wenig mit den Kuka´s zu tun gehabt…


    Der erste Teil ist für mich noch verständlich, das darauffolgende allerdings nicht mehr, das sieht schon hoch kompliziert aus :huh:...

    Zitat

    Endpunkt der LIN-Bewegung wäre dann ein Punkt, der um Wunschradius in die Richtung liegt, wo der Startpunkt ist. Endpunkt der CIRC-Bewegung liegt um Wunschradius versetzt in die Richtung, in welcher die nächste Wunschkoordinate zu finden ist. Fehlt noch der Hilfspunkt der CIRC-Bahn, der liegt um (0.2929 * Wunschradius) in beide jeweilige Richtungen. (Die Zahl ist 1 minus sin(45)).

  • Hi Namensvetter,


    hat mit Kuka gar nicht mal viel zu tun, ist nur ein bisschen Geometrie. Vielleicht wird es deutlicher mit der eben zusammengeschmierten Grafik. Die gilt natürlich nur, wenn man immer nur 90°-Abzweigungen fährt. Für andere Winkel muss man noch etwas mit den Winkelfunktionen rechnen.
    Wenn man die Berechnungen in eine Prozedur packt, an die man den Radius, den Zielpunkt 1 und Zielpunkt 2 sowie evtl. noch den Startpunkt (falls man den nicht automatisch holen lässt) übergibt, braucht man sich nie wieder einen Kopp zu machen.


    Falls die Koordinaten der Punkte wild im Raum liegen, kommt noch ein bisschen Dreisatz dazu. Man braucht das Verhältnis.X ((Distanz zwischen Startpunkt.X und Zielpunkt.X ) / (Distanz zwischen Startpunkt und Zielpunkt)) und dann natürlich noch für Y und Z. Die Verhältnisse (ganz nach Pythagoras) sind dann später die Multiplikatoren für die ausgerechneten Abstände, so dass Abstand.X sich aus Abstand * Verhältnis.X errechnet. Dann auch wieder für y und Z.
    Wenn man sich das BASE so legt, dass die Richtungen immer parallel zu X und Y verlaufen, kann man sich diesen Teil natürlich gleich schon sparen. Man weiß ja dann, wo es langgeht.


    Grüße,
    Michael

  • Der Hilfspunkt muss nicht auf dem tatsächlich abgefahrenen Kreissegment liegen. Er kann sich irgendwo auf dem Kreis befinden.
    Somit lässt sich das Ganze eventuell auch einfacher gestalten.
    Teile das Ganze in Quadranten.
    1. Startpunkt = x,y Zielpunkt = x+r , y+r Hilfspunkt = x+2r , y
    2. x+r , y-r x , y-2r
    3. x-r , y-r x-2r , y
    4. x-r , y+r x , y+r2
    Das lässt sich nun relativ einfach in ein UP packen.


    Nun bei CIRC noch ne Angabe mit CA = 90
    Damit ist sichergestellt ist dass immer eine Rechtsdrehung erfolgt.


    Gruß Roland

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

  • Stimmt, beim KUKA geht das so. :gutidee:


    Die Quadrantenlösung ist auch brauchbar, um die Koordinaten der Eckpunkte zu bekommen, indem man die Grenze links von der eben gefahrenen Bahn um einen Abstand nach innen versetzt, also Minimalwerte größer und Maximalwerte kleiner macht. Fährt man also von Xmin,Ymin nach Xmax,Ymin, kann man Ymin=Ymin+Abstand setzen usw. Das macht man solange, WHILE (((Xmax-Xmin)>Abstand) OR ((Ymax-Ymin)>Abstand)). Auf diese Weise braucht man für alle Größen von rechteckigen Platten nur ein einziges Programm, man muss lediglich die vier Startgrenzen und den Sollabstand vorgeben sowie den Radius der Bögen.


    Und dann immer hoffen, dass die Werkstücke auch in Zukunft stets rechteckig bleiben :)


    Grüße,
    Michael

  • Hallo,
    erst mal vielen Dank für die vielen Lösungsvorschläge!


    Den Quadranten Weg finde ich gut, allerdings muss ich gestehen dass ich noch immer nicht komplett verstehe wie es wirklich funktioniert. :denk: Hat zufälliger weise jemand einen kleinen Programmauszug wo dieser 4 Quadranten Weg schon mal realisiert wurde?

    MFG

  • Nee, die Arbeit bleibt Dir schon erhalten... :P


    Der Kern des Programms wäre eine Switch-Case-Verzweigung mit 4 Cases, eingebettet in eine While-Schleife mit einer Abbruchbedingung wie von mir beschrieben (wenn kein Platz mehr zum Fahren übrig ist). Jeder CASE enthält das, was man tun muss, wenn man in der jeweiligen der vier Ecken ist. Man fährt ja immer nur von einer Ecke in die nächste, wobei die Ecken ständig weiter nach innen kommen, dann entsteht die Kontur.
    Dazu braucht man noch einen INT als Zaehler, und die Grenzwerte der Ränder als REAL-Variablen nebst Kleinzeug.
    Den Zaehler erhöhst Du nach jedem Durchlauf der Schleife um 1, ausser er ist >=4, dann setzt Du ihn auf 1 zurück.
    In den CASEs (je nach Stand des Zählers) machst Du eine Neuberechnung des Eckpunktes nach den bisherigen Grenzwerten und eine Berechnung der Kreispunkte nach Roland, dann Verschieben der Grenze um einen Abstand und schließlich, ausserhalb des CASEs, Roboter fahren.
    Achtung: in Rolands Beispiel ist der Startpunkt der Punkt, an dem die (Viertel)Kreisbahn beginnt. Ich würde vom "virtuellen" Eckpunkt aus rechnen, aber wie Du es machst, ist egal. Zeichne es Dir auf Rechenkästchen auf, dann siehst Du es.
    Voraussetzung ist, dass Du dein Base parallel zur Bearbeitung legst.
    Dann brauchst Du nur noch einen Punkt zu teachen (für ABC), und die Berechnung macht daraus neue Punkte (alle sind FRAMEs).
    zielpunkt1=teachpunkt; uebernahme der orientierungen
    zielpunkt1.x=berechneter_x_wert
    zielpunkt1.y=berechneter_y_wert
    zielpunkt1.z=vorgegebener_z_offset


    Grüße,
    Michael

  • Michael
    Respekt für Deine Erläuterungen. Für sowas hab ich leider keine Nerven mehr.
    :grinser043:

    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