Forum: PC-Programmierung Trigonometrie zum Platinenbohren


von Boor (Gast)


Angehängte Dateien:

Lesenswert?

Ich möchte mit einer kleinen CNC-Maschine (CNC-1610)
Platinen bohren. Für meine Anwendungen schreibe ich
ein kleines Programm, welches eine einfache Bedienung
ermöglichen soll.
So möchte ich, daß das Programm die Lage der Platine
auf dem Bohrtisch erfasst und eine "Schieflage"
(also einen Winkelfehler) automatisch korrigiert.
Das Programm habe ich soweit fertig und ich teste mit
auf Pappe geklebten Layout-Ausdrucken.
Aber, unabhängig davon, ob ich das Layout ausgerichtet
oder gezielt schief auf den Bohrtisch lege, es gehen
immer Bohrungen daneben. Die Ergebnisse sehen absolut
gleich aus, nur leider fehlerhaft...
Was mache ich falsch, wo ist mein Denkfehler?
Hier meine Arbeitsweise:
Test-Layout gedruckt, Excellon-Bohrdatei erzeugt
(Sprint-Layout),
Nullpunkt unten links bei Sicht auf die Lötseite.
Platine auf den CNC-Tisch fixieren.
Das Programm fordert auf, den Nullpunkt anzusteuern (Jogging).
Wenn NullPunkt manuell einjustiert, bestätigen.
Das Programm setzt jetzt seine internen Koordinaten
auf X=0,Y=0.
Das Programm fährt danach automatisch einen
Referenzpunkt an. Dazu sucht es die Bohrung, die am
weitesten vom Nullpunkt entfernt ist (diagonal zum
Nullpunkt).
Aufgrund des Einrichtungsfehlers (Schieflage)
ist eine Korrektur der Bohrposition erforderlich,
wieder manuelles Jogging.
Nach dieser Korrektur kennt das Programm auch
die wirklichen Koordinaten des Referenzpunktes.
Aus der Abweichung dieser Koordinaten zu denen der aus
der Bohrdatei soll für alle Bohrungen die tatsächliche
Position errechnet werden.

Winkelfehler berechnen:

Der Referenzpunkt liegt auf einer Kreisbahn um den Nullpunkt.
Radius zum Referenzpunkt Rref (Koordinaten Bohrdatei)
Radius zum Referenzpunkt Rcnc (wahre Position, CNC-Maschine)
Wenn kein Maßstabsfehler vorliegt sollte Rcnc=Rref sein.

Rref=sqrt(Xref*Xref+Yref*Yref)
Rcnc=sqrt(Xcnc*Xcnc+Ycnc*Ycnc)
ALPHAref=arcsin(Yref/Rref)
ALPHAcnc=arcsin(Ycnc/Rcnc)
ALPHAerr=ALPHAcnc-ALPHAref (der Winkelfehler durch Schieflage)

Maßstabsfehler berechnen:
(könnte entfallen, da vernachlässigbar...)

Der Maßstabsfehler ist unabhängig vom Winkelfehler.

Der Referenzpunkt Xcnc,Ycnc liegt idealerweise auf der
gleichen Kreisbahn wie Xref,Yref (wenn Rcnc=Rref).
D.h., unter dem gegebenen Winkelfehler und ohne Maßstabsfehler
müsste dieser Punkt auf
x=cos(ALPHAcnc)*Rref
y=sin(ALPHAcnc)*Rref
liegen. Die Abweichung zu den tatsächlichen Koordinaten,
gemessen mit der CNC-Maschine (Xcnc, Ycnc), ergeben die
Verzerrungen für
Xscale=Xcnc/x
Yscale=Ycnc/y

Damit sollten die Korrekturwerte für alle Bohrungen
bekannt sein (Xdat,Ydat aus der Bohrdatei):

Xbohr = (Xdat*cos(ALPHAerr) - Ydat*sin(ALPHAerr)) * Xscale
Ybohr = (Xdat*sin(ALPHAerr) + Ydat*cos(ALPHAerr)) * Yscale

Ein Hinweis zum Foto (gebohrte Pappe):
Der REF-Punkt oben rechts ist präzise getroffen, der
weiße Punkt links im Pad ist ein Papierfussel.
Ebenso ist der Null-Pad genau gebohrt. Es sieht so aus,
als würde ein Winkelfehler rechts-drehend die Bohrungen
verschieben.


Danke für's mitdenken!

Boor

von pegel (Gast)


Lesenswert?

Dir ist aber schon klar das ein Laserdrucker das Papier ganz schön 
stresst und möglicherweise auch verzerrt?

von Flip B. (frickelfreak)


Lesenswert?

Ich schätze die maschine ist schlichtweg nicht rechtwinklig. darauf 
beruht aber die positionierung und das kalibrierst du nicht raus. 
versuch mal mit 3 punkten zu referenzieren. Dann ist nicht nur position 
und drehwinkel, sondern auch paralellogrammförmiger versatz 
rausrechenbar.

von PegelMesser (Gast)


Lesenswert?

pegel schrieb:
> Dir ist aber schon klar das ein Laserdrucker das Papier ganz schön
> stresst und möglicherweise auch verzerrt?

Nein, das ist ihm nicht klar und mir auch nicht. Ich habe hier einen 
"Brother HL2030", der stresst und verzerrt NIEMANDEN -weder mich noch 
das Papier.

von Theor (Gast)


Lesenswert?

Ich habe das jetzt nicht im Einzelnen nachvollzogen, möchte aber eine 
Beobachtung, eine Vermutung und einen Ratschlag zum Besten geben.

Die Bohrungen scheinen entlang der Linie zwischen Nullpunkt unten links 
und Referenzpunkt oben rechts recht genau das im Layout ausgelassene 
Loch zu treffen. D.h. die Winkelkorrektur ist für Punkte auf oder nahe 
dieser Linie recht gut. Das aber legt die Vermutung nahe, dass bei dem 
Berechnungsschema etwas schiefgelaufen ist.
Die nächst genauere Vermutung wäre, dass in dem Schema irgendwo ein 
unzulässiger Übergang zwischen absoluten (Maschinenkoordinaten) und 
Layoutkoordinaten vorkommt bzw. der Offset dazwischen unberücksichtigt 
blieb. (Wenn ich es nicht übersehen habe, dann fehlt die 
Berücksichtigung des Offsets eigentlich).
Denn eine einfache Drehung kann den Fehler nicht korrigieren. Falls man 
das Layout um irgendeinen Punkt dreht, mögen die Löcher in einiger 
Entfernung von der oben erwähnten Linie zwar richtig getroffen werden, 
aber die Punkte in der Nähe der Linie nicht mehr. Was wiederum darauf 
hindeutet, dass der Mittelpunkt der Drehung irgendwann gewechselt wurde.

Ich rate Dir das Verfahren einmal graphisch zu skizzieren, damit man das 
nachvollziehen kann. Das könntest Du, falls Du dabei nicht selbst auf 
den Unterschied kommst, auch hier posten.

von nachtmix (Gast)


Lesenswert?

Rundungsfehler evtl.?

Versuch mal, insbesondere bei den trigonometrischen Funktionen, mit 
doppelter Genauigkeit zu rechnen.

von pegel (Gast)


Lesenswert?

PegelMesser schrieb:
> "Brother HL2030", der stresst und verzerrt NIEMANDEN

Na dann ist es ja gut.
Um das zu prüfen kannst du das Layout auch mehrmals auf eine Seite 
drucken, ausschneiden und übereinander legen.
Bei meinem alten Laserdrucker war ich teilweise echt erstaunt.

von Boor (Gast)


Lesenswert?

@ pegel
richtig, bei meinem altem Laserdrucker muß ich den
Faktor 1.01 für die X-Richtung einstellen.
Diese Vorlage ist jedoch mit einem HP-Tintendrucker
erstellt worden, und da habe ich keine Verzerrungen
ausmessen können.
Ich glaube eher an ein programmiertechnisches
Matheproblem bei mir...

@ nachtmix
Das war auch bereits mein Gedanke. Die Koordinaten
speichere ich als integer mit 1um Auflösung.
Einen Integer-Überlauf gibt es nicht.
Die Trigonometrie mache ich mit real, hatte aber
auch schon extended probiert (Lazarus).
Immer das selbe Ergebnis...

@ frickelfreak
Danke für diese Info! Darüber habe ich noch garnicht
nachgedacht. Möglich ist es schon, war ja ein Bausatz.
Aber müsste die Achse nicht klemmen, wenn sie schief
läuft? Es passt aber zur bleibenden Winkelabweichung,
wie auf dem Foto sichtbar.

@ Theor
Der Offset wird berücksichtigt. Bei der Nullung werden
die Programm-Koordinaten auf 0 gesetzt und die CNC mit
GCode G92. Das klappt auch.

Gruß
Boor

von Walter T. (nicolas)


Lesenswert?

Wenn Du Trapez-Verzerrungen mit berücksichtigen willst, geht das extrem 
einfach mit Lagrange-Polynomen erster Ordnung. Als Parameter entstehen 
dann einfach die vier Eckpunkte des Trapezes.

Berücksichtigt werden dann: Skalierung, Drehung, Trapezverzerrung in 
beide Richtungen.

Dafür mußt Du vier Punkte, deren Lage bekannt ist, abtasten. Tastest Du 
mehr als vier Punkte ab, kannst Du das z.B. mit der gaußschen 
Fehlerquadratmethode berücksichtigen, um die Genauigkeit zu steigern.

Die Programmierung ist recht geradeheraus, wenn man mit float arbeiten 
kann. Ich hatte das damals mal als Matlab-Skript gemacht. Gescheitert 
ist es bei mir dann daran, dass angetasteten Punkte von Hand von der 
CNC-Steuerung ins Matlab-Programm übernommen werden mußten, während die 
Leiterplattenhersteller plötzlich immer billiger wurden, daß die Lust am 
Weiterentwickeln vergangen ist.

Bei begrenzter Genauigkeit wäre dann eine Affine Abbildung im 4D Mittel 
der Wahl (bei Wikipedia unter "Householder Transformation" zu finden). 
Die Implemtierung ist auch einfach, aber der theoretische Unterbau 
gewöhnungsbedürftig.

: Bearbeitet durch User
von pegel (Gast)


Lesenswert?

Du kannst neben den Null- und Refpunkt Koordinaten die größten Ausreißer 
mal in der Originalen und Berechneten Form in ein CAD eintragen und 
drehen.
Z.B.: LibreCAD

Dann sieht man, ob es Hard oder Soft Probleme gibt.

von Walter T. (nicolas)


Lesenswert?

Sri-Denkfehler: Bei 2D bleibt von der Householder-Transformation nur 
eine affine Abbildung im 3D-Raum übrig. Macht sie aber nicht weniger 
gewöhnungsbedürftig. :-)

von Theor (Gast)


Lesenswert?

Boor schrieb:
[...]
> @ Theor
> Der Offset wird berücksichtigt. Bei der Nullung werden
> die Programm-Koordinaten auf 0 gesetzt und die CNC mit
> GCode G92. Das klappt auch.
>
> Gruß
> Boor

Und was ist mit dem Offset des Nullpunktes auf der Platine? Der wird ja 
nicht in Platinenkoordinaten genau bei Null, Null liegen, oder? In 
irgendeiner Weise müsste die Differenz in Platinenkoordinaten zwischen 
der Lage des Nullpunktes und den jeweiligen anderen Bohrungen in der 
Berechnung vorkommen, meine ich.

Es bleibt insgesamt die Frage ob das Verfahren korrekt ist. Um diese 
Frage beantworten zu können, wäre eine genaue Beschreibung mit Skizze 
nützlich. Es fehlen Informationen und die verbale Darstellung muss 
(zumindest, damit ich selbst sie leichter nachvollziehen kann) erst in 
eine visuelle Vorstellung umgewandelt werden.

von Boor (Gast)


Lesenswert?

Vielen Dank für die große Unterstützung!

Da ich bei meiner Programmierung keinen Fehler entdeckt habe,
halte ich die Mechanik als Ursache für möglich.
Nun habe ich bei dem Layout (s. oben) zuerst für eine
rechtwinklige Ausrichtung gesorgt, indem ich vom Nullpunkt
aus die auf gleicher Höhe liegende rechte Bohrung anfahre
und beide Punkte auf eine X-Linie bringe.
Dann vom Nullpunkt in Y-Richtung nach oben zur Eck-Bohrung,
der Bohrer steht mittig! So ein deutlicher Versatz wie auf
dem Foto ist nicht vorhanden.

Ich glaube, die Tendenz des Fehlers ist deutlich sichtbar.
Im oberen linken Viertel sind große Verschiebungen nach rechts,
im unteren rechten Viertel sind es große Verschiebungen nach
links. Bei der Leiste rechts kann man das Wegwandern erkennen.

@ Theor
Doch, die Bohrung unten links ist der Platinen-Nullpunkt.
D.h., die Koordinaten aller Bohrungen in der Excellon-Datei
beziehen sich darauf. Der Nullpunkt ist frei wählbar im
Layoutprogramm und ich habe ihn auf diese Bohrung gesetzt
um die CNC besser justieren zu können - hätte aber auch
eine andere Referenzmarke wählen können.

Gruß
Boor

von foobar (Gast)


Lesenswert?

Schon mal getestet, wie genau deine (Arcus-)Winkelfunktionen sind? Der 
von dir genutzte arcsin sollte bei Ref unten rechts die höchste und oben 
links die schlechteste Genauigkeit haben.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Du versuchst, mit Hilfe von zwei Eingabewerten (Xcnc und Ycnc) drei
Abbildungsparameter (ALPHAerr, Xscale und Yscale) zu bestimmen, d.h. das
Ergebnis ist unbestimmt. Wenn deine Rechnung dennoch ein eindeutiges
Ergebnis liefert, kann das nur bedeuten, dass sie fehlerhaft ist.

Du braucht also einen weiteren Referenzpunkt, um die gesuchten Parameter
zu bestimmen. Da du dann vier Eingabewerte hast, kannst du auch gleich
noch den Scherungsparameter (Parallelogrammverszerrung) bestimmen.

Alle vier Parameter zusammen beschreiben eine affine Abbildung, die sich
auch ohne trigonemtrische Funktionen als Multiplikation mit einer
2×2-Matrix darstellen lässt:

(xd,yd) ist dabei ein Punkt im Koordinatensystem deiner Bohrdatei,
(xb,yb) der enstrpechende Punkt im Koordinatensystem deiner CNC-
Bohrmaschine und t11, t12, t21 und t22 die Parameter der affinen
Abbildung.

Du legst also wie gehabt den Nullpunkt fest und vermisst zusätzlich zwei
Referenzpunkte (x1d,y1d) und (x2d,y2d). Die gemessenen Bohrkoordinaten
seien (x1b,y1b) und (x2b,y2b).

Mit den folgenden Gleichungen berechnest du die Abbildungsparameter:

1
det =  y1d·x2d - x1d·y2d
2
t11 = (y1d·x2b - x1b·y2d) / det
3
t12 = (x1b·x2d - x1d·x2b) / det
4
t21 = (y1d·y2b - y1b·y2d) / det
5
t22 = (y1b·x2d - x1d·y2b) / det

Nun kannst du alle weiteren Punkte (xd,yd) folgendermaßen in das
Bohrkoordinatensystem transformieren:

1
xb = t11·xd + t12·yd
2
yb = t21·xd + t22·yd

Das ist alles. Und man braucht nicht einmal Trigonometrie dafür :)


Edit:

Ich sehe gerade, dass bei deiner Rechnung immer Xscale=Yscale ist und
damit aus den drei Parametern zwei werden, so dass das Ergebnis
eindeutig bestimmt ist. Ansonsten scheint deine Rechnung zu stimmen.
Vielleicht hat dein Laserdrucker ja tatsächlich ein leicht von 1
abweichendes x/y-Verhältnis. Dieses wird durch deine Rechnung durch eine
Rotation kompensiert, weswegen die vier äußeren Bohrlöcher in deinem
Foto ein Rechteck bilden, das zwar das gewünschte Seitenverhältnis hat,
aber leicht verdreht ist.

: Bearbeitet durch Moderator
von Hans (Gast)


Lesenswert?

schau dir mal opencv an...

mit der library kannst du eigentlich recht einfach Features auf einem 
Bild erkennen (z.B. den Platinenrand) und eine transformationsmatrix zu 
einer referenz erstellen.

Wenn du nur Rechtecke erkennen willst geht das recht einfach wenn du 
bilder mit gutem kontrast hast- prinzipiell könntest du aber sogar die 
PADs erkennen lassen.

Sprich, du gibst die Bohrdaten rein und bekommst eine 
transformationsmatrix auf die erkannten pads am Bild vom PCB.

Die nicht-Rechtwinkeligkeit der Maschine müsste sich mit etwas 
Hirnschmalz auch rausrechnen lassen... (also Soll-Ist 
transformationsmatrix errechnen).

Hab sowas (also definierte features erkennen, perspektive rausrechen und 
entzerren) schon mal gemacht... ist nicht an einem wochenende erledigt, 
aber durchaus machbar.

73

von Walter T. (nicolas)


Lesenswert?

Yalu X. schrieb:
> die sich
> auch ohne trigonemtrische Funktionen als Multiplikation mit einer
> 2×2-Matrix darstellen lässt:

Stimmt nicht ganz. Auf diese Weise kannst Du die Nullpunktverschiebung 
nicht darstellen. Mit Nullpunktverschiebung sieht es so aus:

Oder eben affin:
mit leicht anderen Parametern.

von Boor (Gast)


Lesenswert?

Danke Yalu

für die ausführliche Beschreibung!

Ich muß mir das ganze jetzt erst durch den Kopf gehen lassen...
Die Korrektur des Maßstabfehlers hatte ich mir wohl zu
einfach vorgestellt. Wenn der Radius Rcnc vom Nullpunkt zum
CNC-Referenzpunkt 10mm länger ist als der anhand der
Bohrkoordinaten erwartete Radius Rref und der Winkel 45°
beträgt, hatte ich für X und Y jeweils einen Fehler von 7,07mm
erwartet. Da das ganze doch etwas komplizierter wird und der
Skalierungsfehler keine große Rolle spielt, kann ich auch
darauf verzichten. Bei zu großen Fehlern würde eine VG96-Leiste
auch nicht mehr passen, also die Vorlage muß schon stimmen.
Aber selbst wenn ich die Skalierungsfaktoren fest auf 1 setze
habe ich immer noch dieses herauswandern der Bohrungen.


@ Hans

Ja, das wäre das Optimale! Aber für diese kleine CNC wohl etwas
zu aufwändig? Ich werde mir das mal anschauen!
Hätte mir bisher nur eine Kamera als "Sehhilfe" zum Positionieren
vorgestellt.

Danke für die Information!

Boor

von MaWin (Gast)


Lesenswert?

PegelMesser schrieb:
> Nein, das ist ihm nicht klar und mir auch nicht.

Schon das Bild der Belichtungsvorlage zeigt massive Verzerrungen.
Soll er halt mal ein Millimeterpapier drüberlegen und vergleichen.
Oder einmal landscape und ein mal portrait ausdrucken und 
übereinanderlegen

von Yalu X. (yalu) (Moderator)


Lesenswert?

Walter T. schrieb:
> Yalu X. schrieb:
>> die sich
>> auch ohne trigonemtrische Funktionen als Multiplikation mit einer
>> 2×2-Matrix darstellen lässt:
>
> Stimmt nicht ganz. Auf diese Weise kannst Du die Nullpunktverschiebung
> nicht darstellen. Mit Nullpunktverschiebung sieht es so aus:

Ich habe den TE so verstanden, dass der Punkt, der im Bild mit "NULL"
bezeichnet ist, in der Datei bereits die Koordinaten (0,0) hat bzw. der
Offset bereits vor Beginn der von ihm beschriebenen Berechnung von allen
Punkten subtrahiert wird. Auf der Maschine wird der entsprechende
Nullpunkt durch das erste manuelle Verfahren gesetzt, so dass auch hier
nichts korrigiert werden muss. Man sieht in seinem Bild ja auch keinen
Offsetfehler, sondern nur eine Kombination aus Rotation und Skalierung.

Solle ich falsch liegen, kann man den Offset aber leicht in der von dir
beschriebenen Weise berücksichtigen. Man muss dann nur von allen Punkten
erst einmal die Koordinaten des gewählten Nullpunkts subtrahieren.
Danach geht es weiter wie in meinem obigen Beitrag.

von Boor (Gast)


Lesenswert?

Hallo MaWin,

die Verzerrungen stammen von meiner Kamera!
Ich belichte meine Platinen mit Laserdruck
auf transparentem Zeichenpapier, bohre (bisher)
von Hand und bin glücklich damit...
Nein, die Vorlage ist OK und mit der
Qualität meiner Platinen bin ich auch sehr
zufrieden. Ist aber nur für Hobby-Bastelei.

Gruß
Boor

von Boor (Gast)


Lesenswert?

@ Yalu

Einen Skalierungsfehler sehe ich nicht.
Der Null-Punkt und der diagonale Referenzpunkt
werden gut getroffen. Es läuft an einer schrägen
Linie entlang heraus, Trapezfehler passt hier
ganz gut zur Beschreibung.
Also doch etwas an der Mechanik, wie frickelfreak
schon schrieb.
Oder liege ich falsch?

Gruß
Boor

von Yalu X. (yalu) (Moderator)


Angehängte Dateien:

Lesenswert?

Boor schrieb:
> Einen Skalierungsfehler sehe ich nicht.

Für mich sieht das ein wenig so aus wie im angehängten Bild:

Die beiden Vierecke sind perfekt rechtwinklig und haben exakt die
gleiche Diagonale, sie unterscheiden sich aber etwas in ihrem Längen-/
Breitenverhältnis. Da die beiden Rechtecke einen gemeinsamen linken
unteren (Nullpunk) und rechten oberen Eckpunkt (Referenzpunkt) haben
müssen, bleibt dem roten Rechteck nichts anderes übrig, als sich ein
wenig zu drehen.

Wenn du das Layout einmal auf dem Laserdrucker ausdruckst und einmal
ohne jegliche Umrechnungen auf der CNC-Maschine in ein Stück Pappe
bohrst, solltest du theoretisch beides manuell zur Deckung bringen
können. D.h. du kannst die Pappe so auf den Ausdruck legen, dass du
durch die Bohrlöcher der Pappe die Bohrmarkierungen auf dem Ausdruck
sehen kannst.

Wenn dies der Fall ist, dann wissen wir, das eine Anpassung der
Bohrkoordinaten allein durch eine Verschiebung und eine Rotation
möglich ist. Dann solltest du mit deiner Berechnung ohne den
Skalierungsfaktor zum Ziel kommen.

Wenn nicht, musst du nachschauen, worin sich die beiden durch die vier
äußeren Bohrlöcher gebildeten Rechtecke unterscheiden. Haben sie
tatsächlich die gleiche Länge und Breite und sind sie wirklich exakt
rechtwinklig?

von Hardy F. (hardyf)


Lesenswert?

Tief im Forum gibt es so ein Programm bereits von jemand für Linux 
geschrieben.

von Roland L. (Gast)


Lesenswert?

Boor schrieb:
> Damit sollten die Korrekturwerte für alle Bohrungen
> bekannt sein (Xdat,Ydat aus der Bohrdatei):
>
> Xbohr = (Xdat*cos(ALPHAerr) - Ydat*sin(ALPHAerr)) * Xscale
> Ybohr = (Xdat*sin(ALPHAerr) + Ydat*cos(ALPHAerr)) * Yscale

kommt mir komisch vor. hast du da mal eine Skizze dazu gemacht?

Ich würde die Daten in Polarkoordinaten umwandeln, drehen und skalieren 
und wieder zurück wandeln.
Ist einfacher zu durchschauen und weniger fehleranfällig

eine unterschiedliche Skalierung in x und y Richtung geht allerdings 
nicht.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Roland L. schrieb:
>> Xbohr = (Xdat*cos(ALPHAerr) - Ydat*sin(ALPHAerr)) * Xscale
>> Ybohr = (Xdat*sin(ALPHAerr) + Ydat*cos(ALPHAerr)) * Yscale
>
> kommt mir komisch vor. hast du da mal eine Skizze dazu gemacht?

Das ist eine ganz gewöhnliche Multiplikation mit einer Rotationsmatrix.

  https://de.wikipedia.org/wiki/Drehmatrix#Drehmatrix_der_Ebene_%7F'%22%60UNIQ--postMath-00000003-QINU%60%22'%7F

Sehr viel direkter kann man eine Rotation in kartesischen Koordinaten
nicht formulieren.

Roland L. schrieb:
> Ich würde die Daten in Polarkoordinaten umwandeln, drehen und skalieren
> und wieder zurück wandeln.
> Ist einfacher zu durchschauen und weniger fehleranfällig

Für die Umwandlung in Polarkoordinaten und zurück brauchst vier statt
zwei Formeln, was doppelt so fehleranfällig ist. Die eigentliche
Rotation (also die fünfte Formel) ist dann zugegebenermaßen sehr
einfach :)

von Walter T. (nicolas)


Lesenswert?

Roland L. schrieb:
>> Xbohr = (Xdat*cos(ALPHAerr) - Ydat*sin(ALPHAerr)) * Xscale
>> Ybohr = (Xdat*sin(ALPHAerr) + Ydat*cos(ALPHAerr)) * Yscale

Hier wird übrigens erst gedreht, dann in X- und Y-Richtung skaliert. Das 
erzeugt zwangsweise eine Winkeländerung, wenn Xscale und Yscale 
unterschiedlich sind.

Xdat *= Xscale
Ydat *= Yscale
Xbohr = (Xdat*cos(ALPHAerr) - Ydat*sin(ALPHAerr))
Ybohr = (Xdat*sin(ALPHAerr) + Ydat*cos(ALPHAerr))

So herum wird erst skaliert, dann gedreht. Die Abbildung bleibt 
winkeltreu.

von Walter T. (nicolas)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

das hat mir jetzt keine Ruhe gelassen, dass das so umständlich mit 
Rotationsmatrizen und Nullpunktverschiebung gemacht wird. Also habe ich 
-sozusagen als Fingerübung vor dem Einschlafen- mal direkt die 
Transformationsparameter angenähert, also die Fehlerquadratmethode auf 
die Transformierte von (x/y) angewendet und nach den 
Transformationsparametern aufgelöst.

In Matlab implementiert sieht das dann wie auf dem Bild aus.

Das hat den netten Vorteil, dass man

1. durch mehrere Stützpunkte die Genauigkeit steigern kann und

2. man nicht lange suchen muss, in welcher Reihenfolge man die 
Operationen durchführt.

3. ist die Implementierung auch geradeheraus.

Ganz ohne Nachteile ist es nicht: Wenn die gemessenen Punkte zu dicht 
beieinander liegen, kommt man um doppelte Genauigkeit nicht mehr herum, 
ansonsten ist die Jacobimatrix singulär. Aber das sollte ja selbst auf 
einem kleinen Mikrocontroller kein Problem sein, eine niedliche 
3x3-Matrix in doppelter Genauigkeit (zweimal) zu lösen.

Viele Grüße
W.T.

: Bearbeitet durch User
Beitrag #5723504 wurde von einem Moderator gelöscht.
von Hardy F. (hardyf)


Lesenswert?


von Boor (Gast)


Angehängte Dateien:

Lesenswert?

Hallo und vielen Dank nochmal für die tolle Mitarbeit!

Um zwischen Software- und Hardware-(Mechanik)-Problemen
unterscheiden zu können, habe ich, wie vorgeschlagen,
die Bohrungen auf Millimeterpapier durchgeführt.
Das Papier zuvor an der X-Achse ausgerichtet und mehrfach
vom NullPunkt zu X+100mm verfahren. Dabei zeigte sich, daß
statt 100mm nur 99mm erreicht wurden. Es gibt aber keine
Fehler die sich aufsummieren.
Die Y-Achse habe ich vom Nullpunkt nach Y+80mm verfahren,
die X-Position blieb dabei erhalten (kein Winkelfehler)
und die Abweichung war etwa -1/4mm.

Beim anschliessenden Bohren mit den Kordinaten aus der
Bohrdatei habe ich jegliche "Korrektur" ausgeschaltet,
die GCode-Befehle werden zudem in einem Textfenster mit-
geloggt. Wie man auf den Bild erkennen kann, sind die
Bohrungen soweit OK. Die Drehung, wie Yalu sie entdeckt
und grafisch dargestellt hat, ist nicht vorhanden.
Damit ist es klar ein Softwarefehler in meiner Koordinaten-
umrechnung.
Dennoch sind mir einige kleine Fehler der CNC aufgefallen,
dazu habe ich einige Bohrungen im Bild nummeriert.

Die Nummerierung ist die Reihenfolge der Bohrungen.
  1: X=55.88 Y= 0.00 Die erste Bohrung.
  6: X=40.64 Y= 5.08 Passt zur Reihe darüber.
 76: X=40.64 Y= 2.54 Weicht von 6 ab, obwohl gleiches X !
 59: X=55.88 Y=43.18
114: X= 0.00 Y=43.18
119: X= 0.00 Y= 0.00 Der Nullpunkt des Koordinatensystems.

Die Bohrungen 6 und 76 liegen nicht auf einer Linie, die
Reihe ging von 6 aufwärts und der darunterliegende Punkt 76
wurde erst später angefahren. Dieses ist auch an weiteren
Stellen erkennbar. Es kann doch nur ein Spiel der Achse
sein, obwohl ich es nicht spüren kann. Die Achsen haben
eine Spindelmutter mit Anti-Backlash Feder. Ich werde die
Mechanik nochmal neu zusammensetzen. Dieses Problem gehört
auch in eine andere Rubrik des Forums...

Bleibt die Programmierung der Winkelkorrektur, über die
ich noch einmal intensiv nachdenken muß.

Danke an hardyf für den Link. Das Programm sieht wirklich
gut aus! Leider ist der Quellcode nicht dabei.

Alles Gute!
Boor

von Theor (Gast)


Lesenswert?

@ Boor

Es wäre, meiner Ansicht nach, sinnvoll, dass von Yalu vorgeschlagene 
Verfahren,

> ...ohne jegliche Umrechnungen auf der CNC-Maschine in ein Stück Pappe
bohrst ...

nicht mit einem realen Layout durchzuführen, sondern mit einem Raster 
von Punkten das sich über die gesamte von der CNC ansteuerbaren Fläche 
erstreckt.
Zum einen könnte man, beim Vergleich, auf dem Layout Länge und Richtung 
der Abweichung markieren und hätte einen systematischen Überblick.
Zum anderen sind Punkte in Randlage, wegen der numerisch grossen 
Koordinaten-Werte resp. ihrer Differenzen, gut für eine nachfolgenden 
Einsatz in einer Fehlerkorrektur. (Man könnte den Bereich sogar noch mit 
einem Pantographen erweitern).

Das ist nichts Neues, aber ich wollte es mal erwähnen. Ich hoffe es ist 
hilfreich.

von Boor (Gast)


Lesenswert?

Danke Theor,

ich habe zuerst einmal die Mechanik neu zusammengebaut.
Das Spiel der Achsen ist jetzt raus. Testpunkte auf
Millimeterpapier im Abstand von X=100mm und Y=80mm
wurden exakt angefahren, reproduzierbar.
Durch das Spiel wurden auch die Referenzpunkte falsch
ermittelt, was sich auf die weiteren Berechnungen
ausgewirkt hat. Ich muß jetzt noch testen, wie sich
die Softwarekorrektur bei schiefliegenden Vorlagen
auswirkt. Dazu werde ich die von Dir vorgeschlagene
Methode anwenden.

Mit freundlichem Gruß
Boor

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.