06.02.2014, 12:58
Beitrag #1
|
Achim
*****
Beiträge: 4.223
Registriert seit: Nov 2005
20xx
2000
EN
978xx
Deutschland
|
2D-Interpolation
Hallo,
ich steh' auf dem Schlauch...
Ein PSD (Position Sensing Detector) liefert jeweils ein X- und Y-Signal, abhängig von der Position, wo ein Laserstrahl die Sensoroberfläche trifft.
Es handelt sich um folgenden Sensor:
http://www.lasercomponents.com/fileadmin...5_su24.pdf
Die Position soll in der Einheit mm ermittelt werden, d.h. es muss eine Skalierung bezogen auf die physikalischen Sensorabmessungen (hier: 45x45 mm, d.h. +- 22,5 mm) erfolgen.
Über einen Vorverstärker liefert der Sensor jeweils für die X- und Y-Richtung ein Signal zwischen -10V und + 10V, welche mit einer DAQ-Karte erfasst werden. Soweit so gut...leider ist der Sensor nicht linear, insbesondere zum Rand hin wir das Signal "schlechter". Theoretisch sollte bei linearem Verlauf folgendes gelten:
Sensormitte: X= 0 V, Y= 0 V, d.h. Pos. X = Pos. Y = 0 mm
linker Rand, Mitte: X = -10 V, Y= 0 V, d.h. Pos X = -22,5 mm, Pos. Y = 0 mm
rechter Rand, Mitte: X = 10 V, Y = 0V
obere Kante, Mitte: X = 0 V, Y = 10 V
untere Kante, Mitte: X = 0 V, Y = -10 V
linkes oberes Eck: X = -10V, Y = 10 V
rechtes unteres Eck: X = 10V, Y = -10 V
usw. usw.
Weil das aber nicht linear verläuft, soll über eine Interpolation der konkreten X-Y-Spannungs-Messwerte anhand von zuvor erstellten "Look-Up-Tables" der Positionswert ermittelt werden. Dazu würde der bestrahlende Laser z.B. über eine genaue Positionierung um bekannte Werte entlang der X- bzw. Y-Richtung verschoben. Zu jedem Positionswert wäre dann ein Spannungswert verfügbar, wie folgende Tabellen beispielhaft zeigen:
Ich weiß, es gibt das Interpolate 2D.vi, aber ich steige da mit den vielen Ein-/Ausgängen nicht durch...Kann mir da jemand weiterhelfen? Wie bekomme ich für ein konkretes XY-Spannungswerte-Paar die entsprechenden mm-Werte...siehe das angehängte (fast leere) VI mit den oben gezeigten Werten?
Beispieldaten_fuer_Interpolation.vi (Größe: 12,36 KB / Downloads: 302)
Gruß
Achim
"Is there some mightier sage, of whom we have yet to learn?"
"Opportunity is missed by most people because it is dressed in overalls and looks like work." (Thomas Edison)
|
|
|
06.02.2014, 19:43
Beitrag #3
|
Lucki
Tech.Exp.2.Klasse
Beiträge: 7.699
Registriert seit: Mar 2006
LV 2016-18 prof.
1995
DE
01108
Deutschland
|
RE: 2D-Interpolation
Habe das schon mal gemacht, heute ist es aber zu spät und morgen habe ich keine Zeit. Also wenn Du etwas Geduld hast..
|
|
|
07.02.2014, 08:41
(Dieser Beitrag wurde zuletzt bearbeitet: 07.02.2014 08:42 von Achim.)
Beitrag #4
|
Achim
*****
Beiträge: 4.223
Registriert seit: Nov 2005
20xx
2000
EN
978xx
Deutschland
|
RE: 2D-Interpolation
(06.02.2014 14:30 )GerdW schrieb: - Warum hast du für X- und Y-Positionen jeweils 2D-Arrays? Reicht da nicht ein 1D-Array aus?
Also...für jede beliebige Stelle auf dem PSD kann man zwei Werte messen, einen für die X-Position und einen für die Y-Position.
Wenn man jetzt der Breite nach (also entlang der X-Achse) wandert, kann man man "viele" X-Spannungen messen. Wenn man das vertikal erweitert, misst man z.B. an der Oberkante eine X-Spannung, in der Mitte eine X-Spannung und an der Unterkante eine X-Spannung. Beliebig feine Zwischenschritte sind möglich. Und für jeden Schritt gibt es halt nicht nur die X-Spannung, sondern auch die Y-Spannung...
Ich hab hier nochmal ne kleine Tabelle gebastelt, die die Positionen auf der Sensoroberfläche angibt. Die roten Zahlen kennzeichnen jeweils die Mitte von X- und Y-Achse, d.h. auf der X-Achse werden in Richtung des rechten Rands positive Spannungen gemessen, in Richtung des linken Rands werden negative Spannungen gemessen. Genauso verhält es sich auf der Y-Achse, hier eben oben negativ, unten positiv. Das ist aber prinzipiell egal, es könnte auch zwischen null und Endwert gehen. Die zur Veranschaulichung farbig hinterlegten Felder gehören zusammen, d.h. das ist physikalisch die gleiche Stelle auf der Sensorfläche. Konnte ich das jetzt rüber bringen?
Für jeden Punkt gibt es eben jeweils einen X-Spannung und eine Y-Spannung. Es ist aber leider so, dass die X-Spannungen nicht spaltenweise gleich sind, d.h. für jeden X-Position wird nicht über die gesamte Sensorhöhe (von Oberkante zu Unterkante) die gleiche Spannung gemessen. Und auch für jede Y-Position wird nicht über die gesamte Sensorbreite (von linkem zu rechtem Rand) die gleiche Spannung gemessen. Die Spannungen sind zwar pro Spalte bzw. pro Zeile recht nah beieinander, aber eben nicht gleich. Und wenn ich es richtig verstanden habe, erwartet das Interpolate2D.vi genau das...
Wobei ich in der Beschreibung schon nicht kapiere, was die "dependent variable" und die "independent variables" sind, und auch was im Z-Array stehen muss...
@Lucki: Es ist (noch) nicht so akut, ich würde mich aber freuen wenn du da noch Informationen für mich hättest..
Gruß
Achim
"Is there some mightier sage, of whom we have yet to learn?"
"Opportunity is missed by most people because it is dressed in overalls and looks like work." (Thomas Edison)
|
|
|
07.02.2014, 08:53
(Dieser Beitrag wurde zuletzt bearbeitet: 07.02.2014 08:55 von GerdW.)
Beitrag #5
|
GerdW
______________
Beiträge: 17.480
Registriert seit: May 2009
LV2021
1995
DE_EN
10×××
Deutschland
|
RE: 2D-Interpolation
Hallo Achim,
was ist denn das für ein schei** Sensor?
Nun, dann halt von Hand:
- Anhand deiner X-/Y-Spannungsmesswerte kannst du auf alle Fälle schon mal die in Frage kommenden Zeilen und Spalten für die Interpolation eingrenzen.
- Du solltest jetzt 4 Werte haben, je zweimal einen Index für X- und Y-Richtung (die um den Messwert herum liegenden Stützpunkte).
- Damit dann eine einfache bilineare Interpolation "von Hand" durchführen, um jeweils X- und Y-Richtung zu verfeinern
- jetzt hast du jeweils eine Indexangabe (inkl. Nachkommastellen), mit denen du dank Interpolate1DArray auf die X-/Y-Position schließen kannst.
Hab gerade kein LV2013 zur Hand - und keine Lust, das jetzt ohne deine VI-Vorlage zu programmieren…
|
|
|
08.02.2014, 11:48
Beitrag #6
|
Lucki
Tech.Exp.2.Klasse
Beiträge: 7.699
Registriert seit: Mar 2006
LV 2016-18 prof.
1995
DE
01108
Deutschland
|
RE: 2D-Interpolation
Habe jetzt mal, ohne groß nachzudenken, Dein vorbildlich aufbereitetes VI verdrahtet. Schau mal nach wie es läuft, vielleicht habe ich schon im ersten Durchlauf einen Glückstreffer gelandet.
Gruß Ludwig
Beispieldaten_fuer_Interpolation-1.vi (Größe: 16,3 KB / Downloads: 284)
|
|
|
10.02.2014, 12:35
Beitrag #7
|
|
|
11.02.2014, 11:57
(Dieser Beitrag wurde zuletzt bearbeitet: 11.02.2014 12:00 von Achim.)
Beitrag #9
|
Achim
*****
Beiträge: 4.223
Registriert seit: Nov 2005
20xx
2000
EN
978xx
Deutschland
|
RE: 2D-Interpolation
(10.02.2014 15:18 )Lucki schrieb: Die Positionen ließen sich auf 0.02mm genau einfach mit dieser Formel berechnen:
...
Wenn Dir das aber nicht reicht, dann müßtest Du die Tabellen noch mal mit höherer Genauigkeit erstellen.
Ouhouhou...immer langsam!
Wie ich schon im ersten Post erwähnt habe, sind das "Beispieldaten"...die haben mit den realen Messwerten "nichts" zu tun! Ich habe die programmatisch mit nem addierten Zufallsgenerator erzeugt! Ich habe keine realen Daten, weil wir die noch nicht mit ner steuerbaren Positionierung des Lasers erzeugen können! Das ist momentan ein Gedankenspiel, es muss noch einiges geklärt werden...insbesondere wer die Kosten für den ganzen "Aufriss" trägt
Es ging mir nur darum, eine "allgemein gültige" Methode zu haben, wie die Daten für eine Koordinate (X bzw. Y) zu behandeln sind. Wir haben uns jetzt auch nochmal selber was überlegt...irgendwie habe ich da auch ein bisschen was durcheinander geworfen. Ich habe ja X- und Y-Daten...die sind aber quasi unabhängig voneinander zu behandeln. Das X-2D-Array bildet sozusagen eine "Fläche" ab, ebenso das Y-Array. Aber diese beiden Flächen liegen irgendwo "im Raum", und haben nichts miteinander zu tun. D.h. jede Fläche kann getrennt betrachtet werden, die Interpolation eines X-Zwischenpunkts, der irgendwo zwischen den X-Stützpunkten der Fläche liegt, ist völlig unabhängig von den Y-Stützpunkten.
Leider ist es so, dass das "Interpolate 2D.vi" davon ausgeht, dass die X-Stützpunkte pro Spalte (Y-Stützpunkte pro Zeile) immer gleich sind, d.h. die "Fläche" jeweils durch eine Schar paralleler Kurven gebildet wird, die allle identisch aussehen, d.h. für jede X-Position bzw. jede Y-Position über die gesamte Breite (X) bzw. Höhe (Y) des Sensors den gleichen Verlauf haben.
Beispiel:
Kurve X=1...Y1 = 1,00 / Y2 = 1,10 / Y3 = 1,11 / Y4 = 0,99 / etc.
Kurve X=2...Y1 = 1,00 / Y2 = 1,10 / Y3 = 1,11 / Y4 = 0,99 / etc.
Kurve X=3...Y1 = 1,00 / Y2 = 1,10 / Y3 = 1,11 / Y4 = 0,99 / etc.
Bei uns ist es aber so, dass die Kurven natürlich auch parallel laufen, aber unterschiedliche Verläufe (Beträge pro Position) haben.
Beispiel (keine realen Daten!):
Kurve X=1...Y1 = 1,00 / Y2 = 1,10 / Y3 = 1,11 / Y4 = 0,99 / etc.
Kurve X=2...Y1 = 1,10 / Y2 = 1,00 / Y3 = 0,99 / Y4 = 1,10 / etc.
Kurve X=3...Y1 = 0,99 / Y2 = 0,99 / Y3 = 0,97 / Y4 = 1,15 / etc.
Wie verhackstückt man jetzt also diese Fläche mit nem fertigen Interpolations-VI? Ich hab keine Ahnung...
Was wir uns überlegt haben ist folgendes...erläutert am Beispiel der X-Daten: Wir interpolieren die Daten jeder X-Position-Spalte (also jeweils ein 1D-Array) mit dem "Polynomial Interpolation.vi". Damit kriegen wir dann jeweils pro Spalte einen Interpolierten Positionswert entsprechend der gemessenen Spannung. Über die gleichzeitige Kenntnis des Y-Spannungswerts kann man dann herausfiltern, zwischen welchen beiden Spalten bzw. zwischen welchen der interpolierten X-Werte der gesuchte Zwischenwert liegt. Jetzt kann man noch schauen, an welcher Y-Stützstelle der gemessene Y-Wert näher im Verhältnis liegt, und kann so die beiden gefundenen X-Werte entsprechend prozentual gewichten und die Summe der gewichteten Werte dann durch zwei teilen. Soweit die Theorie...ob das "klug", "vernünftig" oder "sinnvoll" ist? Hm...ich könnte mir aber vorstellen, dass da was "hübsches" rauskommt, und das es dann auch mal genug ist mit der "Näherung". Es werden in diesem Versuch für die praktische Anwendung sowieso schon einige Annahmen beim Versuchsaufbau gemacht, die selbst eine recht große Ungenauigkeit verursachen, die keiner irgendwie mathematisch berücksichtigt.
(10.02.2014 15:18 )Lucki schrieb: PS: Seit mehr als 8 Jahren beim LVF dabei und Auto immer noch kaputt wie am ersten Tag - was soll nur mal aus Dir werden?
Gruß
Achim
PS: Ich schau mir jetzt mal dein VI vom letzten Post an...
"Is there some mightier sage, of whom we have yet to learn?"
"Opportunity is missed by most people because it is dressed in overalls and looks like work." (Thomas Edison)
|
|
|
11.02.2014, 12:32
|
Achim
*****
Beiträge: 4.223
Registriert seit: Nov 2005
20xx
2000
EN
978xx
Deutschland
|
RE: 2D-Interpolation
(08.02.2014 11:48 )Lucki schrieb: Habe jetzt mal, ohne groß nachzudenken, Dein vorbildlich aufbereitetes VI verdrahtet. Schau mal nach wie es läuft, vielleicht habe ich schon im ersten Durchlauf einen Glückstreffer gelandet.
Hm...ich weiß nicht...wie ich schon geschrieben habe, setzt das VI voraus, dass jeweils alle Spalten bzw. Zeilen für die Interpolation gleich aussehen. Das ist aber nicht der Fall! Bei ungleichen Zeilen bzw. Spalten benutzt das VI jeweils nur die erste Spalte und Zeile, d.h. die folgenden werden gleichgesetzt.
Wenn man nämlich anstelle von "Interpolate 2D.vi (2D X, Y)" (dein Beispiel) die "Interpolate 2D.vi (1D X, Y)"-Variante wählt und nur die erste Zeile der X-Spannungen und die erste Spalte der Y-Spannungen anschließt, kommt das gleiche Ergebnis raus...
Es bleibt also die Frage, wie mit ungleichen Spannungszeilen bzw. Spannungsspalten umzugehen ist.
Gruß
Achim
"Is there some mightier sage, of whom we have yet to learn?"
"Opportunity is missed by most people because it is dressed in overalls and looks like work." (Thomas Edison)
|
|
|
| |