Kreisinterpolation G02 G03

  • Hallo,
    Ich habe den Anspruch die Software für den Lasercutter selbst schreiben wollen.
    Genau genommen läuft das schon.
    Totaler Blödsinn ich weiß, gibt ja alles fertig , aber das war mir einfach zu langweilig.
    Bei mir läuft die Steuerung komplett auf einem Arm Controller.


    Beim Kreisfahren hatte ich mich durch die diversen Bresenham/Horn Algos gewühlt.
    Für einen Oktanten recht einfach und wenn man spiegelt hat man den kompletten Kreis.


    Nur hier muß via G-Code an irgendeinem Punkt am Kreis (xs/ys) bis (xe,Ye) gefahren werden.
    Daher erschien mir damals die Bresenham Methode schlecht umsetzbar.
    Auch weil Rechenleistung für quadrieren und Wurzelziehen auf dem Arm vorhanden ist.


    Also die bekannte Formel 0=x^2+y^2-r^2 benutzt.
    Natürlich beachte ich die schnelle Richtung für x und y und wechsle entsprechend wenn die Winkelhalbierende überschritten wird.


    Die double Variable aus der Wurzel runde ich dann, und fahre dorthin.
    Ein fader Nachgeschmack bleibt, ob ich durch das einfache Runden einen Fehler mache ?


    Die Horn Methode (hier auf den 1 Oktanten bezogen) X ist hier die schnelle Richtung macht dies:
    Einen halben Schritt in X Richtung und
    in die Kreisgleichung einsetzen, ist der Funktionwert > 0 dann y++
    ansonsten bleibt y unverändert.


    Wenn ich das bei mir einbauen will, brauche ich eine Erkennung aller 8 Oktanten. Bisher teile ich den virtuellen Kreis in 4 Teile. (um die schnelle Richtungen zu wechseln)
    Macht Arbeit, kann nicht einschätzen ob ich einem Mehrwert habe ?


    Hier ein Bild von ersten Test's mit dem bisherigen Algo.
    Da war der Laserkopf nocht nicht genau im 90 Grad Winkel über dem Tisch ausgerichtet, was den Eindruck der "Eierkreise" verstärkt.


    Grüße Rudi

  • Das kenne ich ja so nen bissle von Linux-EMC...



    und ich habe ehrlich gesagt nie genau verstehen wollen, warum ich keine XY-Koordinate eingeben kann für den Kreismittelpunkt und einfach nur die Kreisgröße.



    Finde das ziemlich kompliziert :huh:



    Durch die Brust ins Auge sozusagen....

    Gruß

    Michael


    Vom Handwerk kann man sich zur Kunst erheben. Vom Pfuschen nie.

    Johann Wolfgang von Goethe

  • Finde das ziemlich kompliziert :huh:

    Das ist es auch.
    Vollkreise sind im G-Code quasi nur Sonderfälle, die aus Kreisbögen zusammengesetzt sind.
    Den Radius und Mittelpunkt kann man einfach mit dem Pythagoras berechnen.


    Relativ kompliziert finde ich die Umsetzung des Bresenham/Horn Algos, in eine für CNC Maschine lauffähige Funktion
    Denn dieser geht von einem Oktantaten aus, es braucht dann innerhalb der Schleife keine teureren Funktionen wie Wurzelziehen oder Potensieren.
    Die Anfoderung ist aber eben das an einem Kreispunkt begonnen wird der irgendwo am Kreis liegt und evtl. auch über mehrere Oktantan läuft.
    Deshalb habe ich es damals einfach über die Kreisfunktion gemacht.


    Das Ergebnis wird dann aritmetisch gerundet.
    Und genau dort liegt wohl der Hase im Pfeffer, weil das keine richtige Rasterung ist.


    Habe meinen alten Algo nun soweit umgebaut, das der richtige Oktant erkannt wird.
    Die schnelle Richtung ist sowieso bekannt.
    Nun kann ich den Gedanken von Herr Horn anwenden, die schnelle Richtung einen Schritt weiter,und einen halben Schritt in die langsame Richtung und damit berechnen ob der Punkt innerhalb oder außerhalb des Kreisbogen liegt.
    Wenn außerhalb dann einen Schritt in die langsame Richtung, wenn nicht bleibt diese unverändert.
    Natürlich kann es passieren das beim Fahren der Oktant überschritten wird, dann wird der nächste erkannt und der Algo läuft mit anderen Vorzeichen weiter.


    Das wäre die ideale Rasterung von Kreisen.
    Man kann hier aber auch jede Menge Fehler einbauen, weil in jedem Oktanten in eine andere Richtung gerechnet werden muß.
    Das schaut nach einer längeren Debug und Testphase aus.


    Evtl. denke ich auch viel zu kompliziert.
    Es gibt hier etliche gelernte Softwareentwickler, für mich ist das nur ein intensives Hobby.
    Kann ja sein das es anderen Weg gibt.
    Deshalb habe ich versucht meine Idee möglichst ausführlich zu beschreiben.


    Grüße Rudi

  • Ja, Bahnsteuerung von CNC Maschinen ist nicht ohne.

    Macht aber Spaß, auch wenn der Weg etwas steinig ist ;)

    Je öfter ich mir das durchlese umso verwirrter bin ich :D

    Das Prinzip selbst ist relativ einfach.


    Heute habe ich beim Testen mit Debug Ausgaben, mit den Kreisbögen die einen Kreis bilden sollen, gesehen das der berechnete Radius von dem Bögen nicht identisch ist.
    Das kam dadurch, das ich die vor dem Berechnen die (float) Werte für I und J gleich in Steps umgerechnet hatte. (long)
    Wenn man damit mit den trigometrischen Funktionen den Radius berechnet entstehen relativ große Fehler.
    Rechne jetzt alles in double und caste erst Ende.


    Die Kreise sehen jetzt richtig rund aus, wenn ich das noch richtig beurteilen kann.
    Denn ich sitze ca. 9 Stunden vor dem Computer und teste und verändere den Code.


    Denke die Lösung gefunden zu haben, ohne die Horn Methode zu nutzen.

  • Ich so etwas von verwirrt.... :wacko:


    Bei mir sieht es so aus wenn ich einen Kreiss Ø50 erstelle auf der CNC..


    CNC.JPG




    Oder im Handbuch meiner Grossen..



    CNC1.JPG



    Ehrlich gesagt die Berechnungen im Hintergrund haben mich nie gross interessiert.. :noidea:


    Ist echt kompliziert :sad: :sad: :wacko:

    Gruss Max


    Shenhui G350 mit Synrad fierstar TI60.

    Synrad fierestar v30 Luftgekühlt mit Calvokopf

  • Das ist ja das was mich wurmt...


    Formel bis der Arzt kommt für eine Funktion....




    Genau deswegen habe ich, sobald Kreise ins Spiel kommen, das DXF to GCode benutzt.


    Gerade Bahnen und Schrägen inkl. Z schreibe ich aus dem Kopf als Listing... aber Kreise, das ist ne Strafe :huh:

    Gruß

    Michael


    Vom Handwerk kann man sich zur Kunst erheben. Vom Pfuschen nie.

    Johann Wolfgang von Goethe

  • Zumal, was mir gerade einfällt es ja auch noch eine Rolle spielt, mit welchen Koordinatensystem du arbeitest..


    Ich bin mal hingegangen und habe mit, ich glaub WNC, nen bissle rumgespielt und da kamen ganz ulkige Sachen raus, aber nicht das was ich wollte..


    Ich bin dann bei der Helix geblieben, das war am unauwendigsten, allerdings viel mehr Fräsbahn wie erforderlich




    irre


    Dann gibt es fertige Formelteile, da trägst du nur deine Koordinaten ein und die Kreisgröße, war Happy wie Hulle... :oo


    Ende vom Lied, Linux-CNC mochte das nicht :cursing:




    Gnaaaaa

    Gruß

    Michael


    Vom Handwerk kann man sich zur Kunst erheben. Vom Pfuschen nie.

    Johann Wolfgang von Goethe

  • Die anzufahrenden Punkte für eine Kreisbahn zu berechnen ist ja noch keine Kunst.


    Richtig fies wird es erst darurch, dass ja auch noch die Beschleunigungs- und Bremswege (Rampen) für die
    Motoren, die ja (bei gleichbleibender Kreisbahngeschwindigkeit) immer mit unterschiedlichen Geschwindigkeiten laufen,
    mit berücksichtigt werden müssen .... 8o 8o

    Gruß,

    Christian


    „Der größte Feind des Wissens ist nicht Unwissenheit, sondern die Illusion, wissend zu sein.“
    Stephen Hawking

  • Hallo,
    Habe wie gesagt erstmal den alten Algo so umgebaut, der Radius wird erst am Ende der Berechnung auf int gecastet.
    Der Vergleich ist sichtbar besser bis fast gut, muß aber noch andere Sachen testen.
    Habe mir die Koodinatenpaare ausgeben lassen, die einfache Methode das Ergebnis nur arithmetisch zu Runden verhält sich wie die Bresenham Methode.


    Natürlich nur so wie ich das sehen kann, weil mein "Debugger" auf dem Arm ist die Ausgabe der Variablen auf der seriellen. :(
    Der Arm hat einen jtag, denke damit müsste doch im Atmel Studio richtig komfortables Debugging möglich sein. (breakpoints, watchpoints)
    Brauche nur noch eine günstige Hardware dazu, Dragon Interface oder so...


    Die anzufahrenden Punkte für eine Kreisbahn zu berechnen ist ja noch keine Kunst.

    Kunst nicht gerade, aber bei der praktischen Umsetzung kann es unerwartete Probleme geben wie bei mir zu sehen ist. ;)
    Wie oben erwähnt, das Debugging auf einen µC ist sehr umständlich wenn man nicht die richtige Umgebung hat.
    Nicht zu vergleichen mit einer Windoof Visual C++ IDE z.b.
    Aber wem sage ich das, denn der Profi Entwickler schmunzelt nur ;)


    Mir macht das Projekt richtig Freude, und wenn es für mich lösbare Probleme auftreten umso mehr.
    Fertige Firmware kommt nicht in Frage, wo bleibt der Spaß am Programmieren ?
    Denke ein Lasertischprojekt, also nur 2 Achsen zu steuern, ist genau das Richtige zum Üben.


    Bei mir sieht es so aus wenn ich einen Kreiss Ø50 erstelle auf der CNC..

    Der Kreis wird hier nur mit 4 G03 Zeilen gebaut,gegen den Uhrzeigersinn.
    Ich finde diese Umsetzung des Kreises deiner Cam Software besser als bei mir.
    Mein Cam zerlegt den Vollkreis in 8 Teile, was zwar auch wieder Sinn macht.


    Die Freeware Software NC-Corrector simuliert die Teilstrecken anschaulich.