Mathematik online lernen im Mathe-Forum. Nachhilfe online
Startseite » Forum » Beschleunigung auf Steppermotor mappen

Beschleunigung auf Steppermotor mappen

Universität / Fachhochschule

Tags: Beschleunigung, Fokus, Kamera

 
Antworten Neue Frage stellen Im Forum suchen
Neue Frage
clkdiv

clkdiv aktiv_icon

09:22 Uhr, 20.09.2020

Antworten
Hallo liebe Leute,

ich habe einen Motor, der soll sich x mal drehen und dabei die Kurve einer Beschleunigung nachahmen. Ich lasse etwas aus sagen wir 50cm Höhe auf einen Tisch fallen, und während des Falls soll eine Kamera den Gegenstand fokussieren. Die Kamera ist senkrecht zur Tischplatte montiert und bewegt sich nicht. Anfangs ist der Gegenstand scharf, der Tisch völlig unscharf. Gegenstand fällt, Fokus zieht mit, beim Auftreffen sind Tisch und Gegenstand scharf.

Das Objektiv wird durch einen Schrittmotor gedreht max ist 300 rpm. Ich kenne die Anzahl der Schritte, die der Motor machen muss, damit der Fokus von 0cm auf 50cm Entfernung gezogen wird, sagen wir iSteps=100.

Ich möchte nun einzelne Schritte mit dem Motor machen und dann eine Verzögerung einbauen, so dass die Beschleunigung nachgeahmt wird. Mir ist natürlich klar, dass da die Übersetzung, Umfang des Objektivs etc. eine Rolle spielen, aber das lässt sich ja dann vielleicht über eine Konstante [KONSTANTE] einbringen?

Was ich erstmal brauche ist eine Abbildung der realen Beschleunigung in die Geschwindigkeit des Motors. Nach Wikipedia lässt sich Beschleunigung mit dem Weg 0+1+3+5+7+9+11+13.... je Zeiteinheit beschreiben.

Wie mache ich das nun? Der Code wäre ungefähr so:

for(int i=0;i<iSteps;i++)
{
motor.step(1,FORWARD);
Delay([GESUCHTER WERT]);
Delay([KONSTANTE]);

}

Wer kann mir helfen? Ich habe, als ich Mathe hätte lernen sollen, mit Mädchen rumgemacht. Das war zwar schön, hilft mir jetzt aber nicht weiter.

Vielen Dank! Gruß! Martin

IMG_20200920_091909

Für alle, die mir helfen möchten (automatisch von OnlineMathe generiert):
"Ich bräuchte bitte einen kompletten Lösungsweg." (setzt voraus, dass der Fragesteller alle seine Lösungsversuche zur Frage hinzufügt und sich aktiv an der Problemlösung beteiligt.)
Online-Nachhilfe in Mathematik
Antwort
N8eule

N8eule

10:53 Uhr, 20.09.2020

Antworten
Hallo
Du wirst dir zwei Dinge klar machen müssen:
1.)
Du beschreibst einen freien Fall (wir wollen mal annehmen, dass Luftwiderstand keine wesentliche Rolle spielt.). Das ist ein parabolischer Zusammenhang:
h(t)=h0-g2t2
In deinem Fall wird gelten:
Ausgangshöhe: h0=50 cm
Gravitationskonstante: g=9,81ms2

2.)
Kamera-Fokusierung:
Du beschreibst zwar die Fokusierung
> im Ausgangszustand h=h0
> und im Endzustand h= Tischplatten-Höhe,
nicht aber den Verlauf dazwischen.
Du wirst - um das mathematisch sinngemäß umsetzen zu wollen - sicherlich den Funktionsverlauf der Fokusierung über die bedenkliche Fallhöhe verstehen und nutzen müssen, also: welche Fokusierung in Schrittmotor-Schritten du z.B. bei
>h=50 cm
>h=40 cm
>h=30 cm
>h=20 cm
>h=10 cm
>h=0= Tischplattenhöhe
hast. Das wird vermutlich alles andere als linear sein.
Gegebenenfalls wirst du vielleicht am leichtesten tun, dies mal statisch auszuprobieren.

3.)
Mit dieser Kenntnis kannst du, ggf. mit unserer Unterstützung, dann leicht den Zusammenhang zwischen Fall-Zeit und Schrittmotor-Schrittvorgabe ermitteln...

clkdiv

clkdiv aktiv_icon

11:42 Uhr, 20.09.2020

Antworten
Ach Mensch, ja klar, daran hatte ich noch nicht gedacht: das Objektiv hat intern vermutlich auch noch eine Art Funktion. Vielleicht jedenfalls. Also jedenfalls werde ich versuchen, mal die Schrittmotor-Steps für jeweils 10 cm zu ermitteln. Das kann man ja gut in eine Kurve packen, da sieht man es dann ja. Hmmmm, dass macht das natürlich noch komplizierter, wenn die Funktion für jedes Objektiv bei ermittelt werden muss...
clkdiv

clkdiv aktiv_icon

23:19 Uhr, 20.09.2020

Antworten
Hallo N8Eule,

vielen Dank für deine Antwort. Ich habe jetzt dreimalig die Steps gemessen. Ich habe einen Zollstock auf den Tisch gelegt and dann einen Holzklotz mit Text zum besseren Fokussieren an den cm-Markierungen positioniert, dann gemessen, wie viele Steps ich zur jeweils nächsten Markierung brauche. Daraus habe ich dann rückgerechnet, wie viele Steps ich von 0 bis zur Markierung gebraucht hätte. Das ist dann in einem Diagramm zu sehen.

Das ganze sieht ziemlich linear aus, es scheint einen kleinen Knick in der Mitte zu geben, aber ich denke, das kann man vernachlässigen.

Im Anhang die Messreihen und das Diagramm!

Noch einmal ganz herzlichen Dank! Martin

Sigma24_18_Stepper-001
Sigma24_18_Stepper-002
Antwort
Roman-22

Roman-22

01:39 Uhr, 21.09.2020

Antworten
Linear sieht das für mich nicht aus und der "Knick" kommt eher daher, dass du in Excel das Diagramm falsch angelegt hast.
Auf der waagrechten Achse sollte man die Entfernung sehen und nicht die Nummer des Messwerts. Die Achse sollte also von 1 bis 80 laufen und nicht von 1 bis 18.
B

Es gibt unendlich viele Möglichkeiten, eine einigermaßen gut passende Funktion durch diesen Punkthaufen zu legen. Eine relative einfache ist einem Modell zum beschränkten Wachstum entnommen: steps(dist):=107,147distdist+4,028
B2


clkdiv

clkdiv aktiv_icon

07:15 Uhr, 21.09.2020

Antworten
Vielen Dank!

Ohje, dass mir das nicht aufgefallen ist! Die Anzahl der Messpunkte auf der Achse ist natürlich völliger Humbug, so viel Mathe habe ich denn doch noch intus. Man sieht es ja schon an den Werten, dass das nicht linear ist, vor allem an den Werten 1-10. Dass das passiert ist, liegt einfach daran, dass ich das alles mitten in der Nacht gemacht habe. Trotzdem peinlich.

Ok, die Wachstumskurve, wo kommt die her? Wo die Werte? Und wie nutze ich das jetzt in einem Code, ich meine, wie komme ich nun zu den passenden Delays?

for(int i=0;i<iSteps;i++)
{
motor.step(1,FORWARD);
delayMicroseconds([GESUCHTER WERT]);
}

Nochmal vielen Dank!
clkdiv

clkdiv aktiv_icon

09:21 Uhr, 21.09.2020

Antworten
Hmmm, die Sache wird noch komplizierter, als ich dachte. Da das Objektiv ja nicht linear reagiert, ist es ja auch noch wichtig, von wo aus der Fall beginnt. Der soll nämlich nicht immer bei 0cm beginnen.

Ich habe jetzt mal eine Tabelle in Excel angelegt, ich glaube, ich bin da jetzt wirklich schon ein gutes Stück weiter, dank eurer Hilfe!

Ich habe die Wachstumsformel nun auf die Entfernungen angewandt, so habe ich zumindest die Zeiten, an denen der Motor x Steps gemacht haben müsste. Hier ist die Tabelle als Google-Sheet:

docs.google.com/spreadsheets/d/1dHFYicn4x5l4f-0yDIrRTrOwL1DtrOABNVtGdu3bhG0/edit?usp=sharing

Mir scheint, dass es nicht möglich sein wird, den Gegenstand aus 0 cm, also aus der Naheinstellgrenze fallen zu lassen, weil der Motor in der Anfangszeit zu viele Steps machen müsste. Oder ich ändere die Übersetzung nochmal.

Was haltet ihr davon, mache ich das richtig?


Antwort
N8eule

N8eule

12:55 Uhr, 21.09.2020

Antworten
Um Missverständnisse zu vermeiden:
Du solltest dir - und dann ggf. uns Lesern - klar machen, wie die Maßstäbe zu verstehen sind.
Du sprichst in der ersten Aufgabenbeschreibung von der "Höhe",
dann aber von der "Falltiefe".
Ist es so, dass wenn die 'Höhe' noch groß ist, die 'Falltiefe' noch gering ist?
Dann gälte irgend ein:
h= 50cm - Falltiefe = 50cm -f

Wenn du dir solche Zusammenhänge nicht konsequent klar machst, verstrickst du dich ruck zuck in irgendwelchen Vorzeichen-Fehlern.

So - und dann ist es einfach so, dass du eben aus diesen beiden Zusammenhängen die Schritt-Motor-Schrittzahl als Funktion der Fallzeit ermitteln willst - so zumindest verstehen wir den mathematischen Teil der Aufgabe.

Du hast:
h=h0-g2t2=h0-f

g2t2=f

und (dabei nehme ich gerne mal den Vorschlag von Roman):
Schrittzahl: stp = (107,147*f)/(f+4,028cm)

einsetzen:
stp = (107,147*g/2*t^2)/(g/2*t^2+4,028cm)

stp = (107,147*981cm/(2*s^2)*t^2)/(981cm/(s^2)/2*t^2+4,028cm)

stp =107,1479812(ts)29812(ts)2+4,028

ich würd jetzt mit 9812 kürzen:
stp =107,147(ts)2(ts)2+0,008212

Here we are, so siehtst du die Motor-Schrittfolge als Funktion der Zeit t.

Jetzt ahne ich, dass du für deinen Programm-Algorithmus eigentlich umgekehrt die Zeitpunkte t für die einzelnen Motor-Schritte haben willst.
Also umkehren:
stp =107,147(ts)2(ts)2+0,008212

ganze Gleichung mal Nenner:
stp*((t/s)^2+0,008212) =107,147(ts)2

stp*(t/s)^2+0,008212*stp =107,147(ts)2

ganze Gleichung minus stp*(t/s)^2 :
0,008212*stp =107,147(ts)2- stp*(t/s)^2

0,008212*stp = [107,147-stp] (ts)2

ganze Gleichung durch []:
(0,008212*stp)/(107,147-stp) =(ts)2

sqrt((0,008212*stp)/(107,147-stp)) s=t

So hast du für jeden Motor-Schritt die zugehörige Zeit t ab dem Fallenlassen.

Prinzipiell begünstigend ist, dass du um die Anfangszeit, wenn die Kamere bzw. der Motor noch schnell nachstellen muss, der Körper noch relativ langsam fällt.

clkdiv

clkdiv aktiv_icon

13:07 Uhr, 21.09.2020

Antworten
Liebe N8Eule! Super, vielen Dank!

Ich verstehe den Unterschied von Höhe und Falltiefe nicht. Wenn ich einen Gegenstand 50cm über einem Tisch loslasse, fällt er 50cm tief. Bei 30cm Höhe nur 30cm. Oder geht es dir um die Entfernung des Objektivs?

Ich baue das alles jedenfalls nun auch in das Google Sheet ein, um ehrlich zu sein, ich kann das hier aber nicht wirklich nachvollziehen. Ich tüftele heute Abend noch etwas, aber schon das hier:

stp = (107,147*g/2*t^2)/(g/2*t^2+4,028cm)
stp = (107,147*981cm/(2*s^2)*t^2)/(981cm/(s^2)/2*t^2+4,028cm)

verstehe ich nicht. Wo kommt s her?

Die Stelle mit dem Kürzen kann ich auch nicht nachvollziehen, gleiche Teiler und Nenner kann man doch einfach rausnehmen, nicht wahr?

Wenn das so ist, warum verwandeln sich die 4,028 plötzlich in 0,008212?

Ich habe es wohl aber geschafft, die letztendliche Formel

sqrt((0,008212*stp)/(107,147-stp)) s=t

in Excel einzugeben, ich erhalte - so scheint es mir - plausible Resultate. Selbst wenn ich nun vielleicht hätte, was ich brauche, wäre es mir trotzdem sehr lieb, wenn ich zumindest verstehen könnte, wie nun erstens Roman zu seiner Kurve kam und was ich machen muss, wenn ich ein anderes Objektiv an die Kamera schraube.

Hier meine Werte aus dem Sheet, ob die wohl stimmen?

Vielen Dank!

Schritt / Zeit
1 / 0,008795704
2 / 0,012498015
3 / 0,015380191
4 / 0,017845395
5 / 0,020049182
6 / 0,02207108
7 / 0,023958218
8 / 0,025741253
9 / 0,02744146
10 / 0,029074334
11 / 0,030651586
12 / 0,032182334
13 / 0,03367386
14 / 0,035132095
15 / 0,036561963
16 / 0,037967611
17 / 0,039352587
18 / 0,040719961
19 / 0,042072421
20 / 0,043412345
21 / 0,04474186
22 / 0,046062885
23 / 0,047377165
24 / 0,048686303
25 / 0,049991782
26 / 0,051294985
27 / 0,052597211
28 / 0,053899689
29 / 0,055203589
30 / 0,056510035
31 / 0,057820111
32 / 0,059134869
33 / 0,060455337
34 / 0,061782527
35 / 0,063117437
36 / 0,064461057
37 / 0,065814378
38 / 0,067178391
39 / 0,068554095
40 / 0,069942501
41 / 0,071344635
42 / 0,072761544
43 / 0,074194297
44 / 0,075643993
45 / 0,077111765
46 / 0,078598781
47 / 0,080106252
48 / 0,081635438
49 / 0,08318765
50 / 0,084764256
51 / 0,086366691
52 / 0,087996459
53 / 0,089655143
54 / 0,09134441
55 / 0,093066022
56 / 0,094821845
57 / 0,096613857
58 / 0,098444161
59 / 0,100314996
60 / 0,102228753
61 / 0,104187988
62 / 0,10619544
63 / 0,108254048
64 / 0,110366979
65 / 0,112537643
66 / 0,114769727
67 / 0,117067225
68 / 0,119434469
69 / 0,121876176
70 / 0,12439749
71 / 0,127004034
72 / 0,129701975
73 / 0,132498092
74 / 0,13539986
75 / 0,138415548
76 / 0,141554329
77 / 0,144826416
78 / 0,14824322
79 / 0,151817543
80 / 0,1555638
81 / 0,159498296
82 / 0,163639561
83 / 0,16800876
84 / 0,172630194
85 / 0,177531932
86 / 0,182746603
87 / 0,188312394
88 / 0,194274338
89 / 0,200685989
90 / 0,207611617
91 / 0,215129141
92 / 0,223334117
93 / 0,232345234
94 / 0,24231208
95 / 0,253426343
96 / 0,265938421
97 / 0,280182823
98 / 0,296618455
99 / 0,315895333
100 / 0,338971027
101 / 0,367327591
102 / 0,403410755
103 / 0,451623014
104 / 0,520946073
105 / 0,633728294
106 / 0,871155522
107 / 2,44488081
Antwort
N8eule

N8eule

16:07 Uhr, 21.09.2020

Antworten
"Ich verstehe den Unterschied von Höhe und Falltiefe nicht."
Wie ich schon geschrieben habe, ist es die Frage, ob die 'Höhe' groß ist, wenn die Falltiefe gering ist.
In anderen Worten: Wächst die Falltiefe, wenn die Höhe schrumpft?
Oder nochmals in anderen Worten: es geht um's Vorzeichen. Du musst dir (und ggf. uns) schon klar machen, in welche Richtung du eine 'Höhe' oder 'Tiefe' misst, sonst hast du eben dieses VorzeichenProblem...

"Wo kommt s her?"
's' ist die Einheit 'Sekunde'.

"Die Stelle mit dem Kürzen kann ich auch nicht nachvollziehen, gleiche Teiler und Nenner kann man doch einfach rausnehmen, nicht wahr?"
Rausnehmen tut man eben in der Mathematik nichts. Kürzen heisst, Zähler und Nenner durch den selben Ausdruck teilen.
Und was kommt raus, wenn du 4,028 durch 9812 teilst?

Antwort
Roman-22

Roman-22

17:26 Uhr, 21.09.2020

Antworten
Zu deiner Frage, wie ich auf die Funktionsgleichung kam:

Zuerst steht die Idee, welche Art von Funktion man für die Anpassung für geeignet hält. Dass der Graph dieser Funktion eine waagrechte Asymptote bei oder über ca. 105 haben sollte, war klar. Das entspricht dann der Unendlich-Stellung des Objektivs.
Der Erstversuch war eine verallgemeinerte Hyperbel y=axb+c, weil ich der Meinung war, dass der Graph bei x=0 eine senkrechte Asymptote haben sollte. Das Ergebnis hat mich aber nicht sonderlich überzeugt (a-133,21;  b0,24;  c151,28).

Dann ließ ich die Forderung nach der senkrechten Asymptote fallen und kam damit rasch auf die Idee, die Sache mit simplem begrenzten Wachstum y=axx+b zu modellieren. Da gibt es im einfachsten Fall nur die zwei Parameter a und b, was einen Fit normalerweise eher erschwert, aber das Ergebnis hat optisch recht gut gepasst und diese einfache Funktion ist auch sehr leicht umzukehren, was in deinem Fall ja nötig ist. Daher hab ich auch nicht weiter rummodelliert.

Die konkrete Umsetzung der Regression überließ ich einem Mathe-Programm (siehe Bild).
"entfernungen" ist da ein Vektor mit den Entfernungen vom Ojektiv, entsprechend deiner Messungen und "steps" ist der zugehörige Vektor mit deinen step-Werten. Der Vektor (100;1) gibt die (relativ beliebigen) Anfangswerte für a und b für den numerischen Algorithmus (Levenberg-Marquardt) an, welcher dann programmintern in der generischen Fit-Funktion "genfit" zur Anwendung kommt.
Da ich solche Dinge nur sehr ungern und damit eigentlich nie in Excel mache, weiß ich nicht, ob man dort Regressionen auch mit selbst gewählter Funktionsbauart durchführen kann, oder ob man nur auf die vorgegebene Funktionstypen (linear, exponentiell, logarithmisch, ...) beeschränkt ist.


Deine Werte habe ich mir nicht näher angesehen, aber falls sie richtig sind, geben sie ja nur die Zeit ab loslassen des Objekts an, bei welcher das Objektiv mit einer bestimmten Stepanzahl das Objekt scharf abbildet. Bis der Befehl umgesetzt ist (Verzögerung durch die Zeit, die der Schleifendurchlauf benötigt, die Signalübertragungszeit, Latenz des Mototors, Stellzeit) ist es auch schon wieder zu spät. Diese Summe der Verzögerungszeiten müsstest du von der Delay-Time bis zum nächsten Step noch subtrahieren.


B
Antwort
Roman-22

Roman-22

20:14 Uhr, 21.09.2020

Antworten
Eine kleine Ergänzung, weil du gefragt hast, wie die Sache aussieht, wenn das Objekt nicht im Abstand von 0cm vom Objektiv startet. Natürlich ändert sich dann der zeitliche Ablauf ein wenig.
Sei die Distanz des Objekts zum Objektiv zum Zeitpunkt t=0 mit d0 bezeichnet. Zu diesem Zeitpunkt wird das Objekt losgelassen.
Die Distanz d zum Objektiv in Abhängigkeit von der Zeit t ist dann

d(t)=d0+12gt2

was nach t aufgelöst

t(d)=2(d-d0)g             Gleichung (1)

ergibt.

Der von mir angegebene Zusammenhang zwischen Step-Anzahl stp und der Distanz d ist, aufgelöst nach der Distanz

d(stp)=bstpa-stp                 Gleichung (2)

mit a107,1471012567 und b4,0279568767 cm.

Gleichung (2) eingesetzt in Gleichung (2) liefert dann den benötigten Zusammenhang zwischen Step.Anzahl stp Initialdistanz d0 und Zeit t:

t(stp,d0)=2(d(stp)-d0)g=2(bstp-d0(a-stp))g(a-stp)

Im ersten Bild siehst du nun die Zeiten für die ersten 40 Steps, einmal mit d0=0 cm und einmal mit d0=1 cm. Für d0=0 cm scheinen die Werte mit denen übereinzustimmen, die du angegeben hattest. Unterschied sind vermutlich darauf zurückzuführen, dass ich mit den genauen, vom Programm errechneten Werten für a und b gearbeitet hatte.

Wundere dich nicht, dass in der Spalte für d0=1 cm die ersten Werte alle nicht-reell sind und der erste reelle Zeit-Wert erst für stp=22 mit 9,1 ms angegeben ist. Zum Zeitpunkt t=0 müsste das Objektiv ja schon auf 1 cm scharf gestellt sein, also bereits 21 Steps gemacht haben (eigentlich 21,3, aber das geht ja nicht). 9,1 ms nach dem Loslassen müsste dann ein weiterer Step erfolgen.


Eine weitere Anmerkung:
Selbst wenn du mit Programm, Signalübertragung, Stellzeit, etc. keinerlei Verzögerung hättest, wäre das Objektiv nur ganz kurzen scharf gestellt, dann entfernt sich das Objekt ja auch schon wieder.
Das sieht man im Bild 2 in der oberen Reihe (Gesamtansicht für d0=0 cm, von 0 bis 103 steps und zwei herausgezoomte Bereiche). Die Idealkurve wäre die in rot eingezeichnete, die entspricht dem bewegten Objekt. Mit dem Schrittmotor ist aber nur die blaue Stufenkurve realisierbar - die Schärfe hinkt also immer hinterher.
Es erscheint mir daher sinnvoll, einen Verlauf wie in der zweiten Reihe gezeigt anzustreben. Ich habe hier, wie du im Bild ohnedies siehst, einfach den Stepwert beim Aufruf der Distanzfunktion um 0,5 erhöht. Auch andere Korrekturen sind denkbar.
Die im vorherigen Post angesprochenen Verzögerungen sind natürlich trotzdem in jedem Fall noch zusätzlich zu berücksichtigen.


B1
B2
clkdiv

clkdiv aktiv_icon

21:09 Uhr, 21.09.2020

Antworten
Hallo N8Eule, hallo Roman!

Ganz herzlichen Dank für eure Hilfe! Ich werde versuchen, das nachzuvollziehen, ich gestehe aber, dass ich da echt große Probleme habe. In meinem nächsten Leben steige ich aber sicher mehr ein, das ist superspannend. Allerdings müsste ich im nächsten Leben auch noch Elektrotechnik, Physik und Biologie angehen. :-)

Also ihr habt mir auf jeden Fall sehr geholfen, und ich bin ziemlich sicher, dass ich zu Ergebnissen komme.

Vielleicht interessiert es euch, warum ich das hier alles erfrage und warum ich euch besonders dankbar bin. Ich habe vor einiger Zeit angefangen, Bullet-Time-Rigs zu bauen, alles selber gelötet, programmiert und bezahlt.

Was das macht, könnt ihr hier sehen:

rb.gy/jmrjct

Nachdem ich die Systeme so schnell gekriegt habe, dass sie direkt nach dem Auslösen der Kameras die Ergebnisse ausspucken, hat sich die Eventindustrie für die Technik interessiert, und so kam es, dass ich immer mehr und dann fast ausschliesslich auf Events unterwegs war.

Dann kam Corona und damit Hartz IV. Jetzt muss ich ganz schnell versuchen, was anderes zu machen, dazu gehört einerseits, dass ich die Kamerafelder wieder in Produktionen bekomme, aber auch die Highspeed-Kamera will ich sinnvoll einsetzen. Dafür will ich den Highspeed-Follow-Focus haben. Hier kann man in den ersten drei Takes sehen, was ich erreichen will:

www.youtube.com/watch?v=d1vUHJRen2I&feature=youtu.be

Ich hatte nun noch eine Idee, wie ich das ganze sogar ganz ohne Mathe realisiert bekomme: Ich stelle einen Zollstock senkrecht hin und lasse daran entlang etwas fallen. Das filme ich mit h
der Highspeedkamera, von der Seite, also alles voll im Fokus, die kann in jedem Frame ganz präzise den Zeitpunkt in jeden Frame printen. So kann ich dann genau sehen, wann sich der Gegenstand in welcher Position befand. Damit könnte ich dann vielleicht auch leichtere Objekte wie Federn "fassen", also auch den Luftwiderstand berücksichtigen.

Da es ja anscheinend eh nur um max. 107 Steps geht, ist es dann etwas Fleißarbeit, die steps per Handarbeit den Zeitpunkten zuzuordnen, über ein Array. Damit könnte ich vielleicht auch Erfolg haben, wenn ich eure Mathehilfe wider Erwarten nun doch nicht umsetzen kann. Es wäre jedenfalls urnett, wenn ihr doch nochmal prüfen könntet, ob meine Zahlenreihe denn nun richtig ist.

Okay, also nochmal ganz herzlichen Dank. Ich werde bei Gelegenheit dann hier nochmal posten, ob ich Erfolg hatte oder nicht.

Sonnigen Gruß! Martin
Antwort
Roman-22

Roman-22

21:25 Uhr, 21.09.2020

Antworten
Klingt nach einem interessanten und spannendem Thema.

Die Idee mit dem Filmen mit der Highspeed Kamera erspart dir natürlich bei Objekten wie einer Feder die lästige formelmäßige Berücksichtigung des Luftwiderstands. Allerdings wird eine Feder nicht immer gleich fallen, d.h. trial and error sind da vermutlich angesagt.
Bei einer Münze zB sollten die Werte aber nicht wesentlich von den berechneten abweichen.

> Es wäre jedenfalls urnett, wenn ihr doch nochmal prüfen könntet, ob meine Zahlenreihe denn nun richtig ist.
Wie schon oben geschrieben stimmen die Werte, die du 13:07 Uhr, 21.09.2020 gepostet hast, mit den von mir berechneten Werten für d0=0 cm überein.

Viel Erfolg!

clkdiv

clkdiv aktiv_icon

09:50 Uhr, 22.09.2020

Antworten
Hallo Roman, hallo Nachteule,

nochmal ganz herzlichen Dank! Ich habe die Formel von Roman jetzt in Excel nachgebaut und bin nun auch in der Lage, die Anfangsdistanz zu berücksichtigen. Roman, wirklich super, danke, dass du dir so viel Mühe gemacht hast. Ich habe nun doch vieles verstanden! :-)

Die Werte habe ich in ein Array übertragen, der Arduino wartet dann auf ein Startsignal und steuert das Objektiv. Tatsächlich ist das Ergebnis wirklich vielversprechend.

Für das Feintunen kann ich ja nun auch noch die ms-Werte der einzelnen Steps anfassen.

Ich habe eine Münze aus ca 50cm Höhe fallen lassen. Einmal mit Offenblende, einmal mit möglichst geschlossener Blende. Bei geschlossener Blende musste ich wegen Lichtmangel mit dem Gain der Kamera hoch, deshalb rauscht es.

Hier eure Modellierung zum Objektiv #Sigma 24mm f1.8 und meinem Steppermotor bei 1000 fps gefilmt.

Bei geschlossener Blende:
www.youtube.com/watch?v=ETKset7M8co

Bei Offenblende:

www.youtube.com/watch?v=jmPXRkdrBFI
Antwort
Roman-22

Roman-22

15:21 Uhr, 22.09.2020

Antworten
Gerade am Beginn bei kleiner Distanz zum Objektiv ist das Ergebnis noch nicht wirklich zufriedenstellend, was bei offener Blende sehr deutlich wird.
Bei geschlossener Blende hat man den Eindruck, dass der Fokus immer ein wenig hinterher hinkt. Das könnte vielleicht (abgesehen vom verringern des Delays) durch die Addition von 0.5 zum aktuellen Stepwert wie im vorher geposteten Bild unten kompensiert werden.
clkdiv

clkdiv aktiv_icon

17:46 Uhr, 24.09.2020

Antworten
Hallo, ich habe jetzt alles etwas stabiler gebaut, den Abwurfmechanismus verbessert, und siehe da, es passt auf Anhieb. Ohne jede Veränderung, zu genau den berechneten Zeiten. Top! Danke an die Mathematik und euch!

Mir scheint allerdings, ich habe ein großes Glück gehabt, dass ich zufällig die Übersetzung richtig gewählt habe. Tatsächlich schafft der Motor anscheinend alles Steps, allerdings nicht mit Microsteps, da ist er dann zu langsam. Eventuell würde ich deshalb gerne das Übersetzungsverhältnis ändern (Motor soll weniger Umdrehungen drehen müssen, dafür aber kleinere Steps machen).

Mir wäre es deshalb jetzt wirklich wichtig, den Weg zur Wachstumskurve nachvollziehen zu können. Ich vermute, dass sich die Kurve allgemein für andere Objektive ähnlich modellieren lässt, denn immerhin müssen die ja auch einem Fokus-Puller (also einem Mensch beim Film) genügen, sie dürfen also eigentlich keine "Dellen" haben.

Deshalb nochmal meine Frage: Wie genau kommt man zu der Kurve im Diagramm? Also zu den Werten? Was für ein Programm macht das? Ich nehme mal an, dass a=107,1471012567 der letzte Step ist, der gemacht werden muss, um das Objektiv auf Unendlich zu stellen, richtig? Dann kann man ja b auch durch Versuch und Fehler finden, also durch Annäherung? Wenn das so ist, dann schaffe ich das eh alleine.

Falls es euch interessiert, hier der letzte Test mit halb geschlossener Blende:

youtu.be/DpQOvd_6wwU

Und hier mein Aufbau zum Ablese-Test des freien Falls:

youtu.be/vLZGOxkthDk

Der Motor wackelt allerdings noch zu sehr am Stativ, aber das lässt sich leicht beheben.

Vielen Dank!




Antwort
Roman-22

Roman-22

22:54 Uhr, 24.09.2020

Antworten
> Deshalb nochmal meine Frage: Wie genau kommt man zu der Kurve im Diagramm? Also zu den Werten? Was für ein Programm macht das?

Im Wesentlichen habe ich dir das bereits in meiner Antwort 17:26 Uhr, 21.09.2020 beantwortet. Mehr, als dort im Bild zu sehen ist, musste ich nicht machen (abgesehen von der Definition der Vektoren mit deinen Messdaten).
Man legt also zuerst den Fuktionstyp fest (und da gibt es vl auch bessere Ansätze als mein einfaches y=axb+x geben). Und dann wird genfit aufgerufen mit Initialwerten für a und b (ich habe 100 und 1 gewählt) und diese Funktion spuckt dann das Ergebnis aus, wie du im Bild siehst.

Jetzt musst du aber deswegen nicht loslaufen und dir das Programm kaufen. Excel kann zwar, wie ich mittlerweile nachgesehen habe, tatsächlich nur ein paar vorgefertige Funktionstypen mit seinem Regressionsmodul abarbeiten und das ist daher für den Zweck untauglich.
Aber Excel liefert ja auch noch den "Solver" und bietet damit genau so ein numerisches Verfahren wie wir es benötigen. Man muss die Aufgabe halt ein wenig für Excel aufbereiten.
Ich arbeite zwar kaum mit Excel, aber ich war neugierig und es hat auf Anhieb geklappt.
Du siehst das Ergebnis im beigefügten Bild.

In C3:C4 stehen die Werte für a und b. Das Bild zeigt bereits die vom Solver gefundenen Werte. Ursprünglich hatte ich dort einfach 100 und 1 eingetragen.

Die ersten vier Spalten (Entfernungen, Steps 1 bis Steps 3) sind deine Messdaten.

In Spalte E wird der Mittelwert von Spalte B bis D berechnet.
In E8 steht also zB "=MITTELWERT(B8:-D)8)"

In Spalte F steht der Funktionswert. Hier versteckt sich also der Funktionstyp.
In F8 steht also zB "=(C3*A8)/(C4+A8)" entsprechend der Funktion f(x)=(a*x)/(b+x)

In Spalte G steht das Quadrat der Differenz des Funktionswert zum Messwert (also hier zum Mittelwert der drei Messwerte bei der gleichen Entfernung).
In G8 steht also zB "=(F8-E8)^2"
In G26 steht dann die Summe aller Abweichungsquadrate, also "=SUMME(G8:G25)"

So, damit ist alles für den Solver vorbereitet. Du findest ihn im Daten-Ribbon unter Analyse.
Als Zielzelle wählt man natürlich G26, die veränderbaren Zellen sind C3:C4.
Das Ziel ist "Min.", den die Abweichungen sollen ja möglichst gering sein.

Nebenbedingungen (wie zB C3>105) sind nicht nötig.
Der Algorithmus ist vermutlich schon auf GRG-Nichtlinear eingestellt und so bleibt nur noch der Klick auf "Lösen".
Excel trägt dann die errechneten Werten anstelle der eingetragenen Initialwerte in C3:C4 ein.

Gutes Gelingen!

P.S.: Eine letzte Anmerkung noch. Da für deine Aufgabe letztlich ja die Umkehrung der Funktion benötigt wird, wäre es vermutlich vernünftiger, gleich die Umkehrfunktion zu suchen. Also die Stepwerte in die Funktion einsetzen und das Ergebnis ist die Entfernung vom Objektiv. Also quasi gleich x und y vertauschen.
Dadurch könnte man dann auch kompliziertere Funktionstypen durchprobieren, da man ja nun nicht mehr die Umkehrfunktion bilden muss.
Wär vl einen Versuch Wert.




B
clkdiv

clkdiv aktiv_icon

16:02 Uhr, 25.09.2020

Antworten
Hallo Roman! Vielen Dank! Sag, würdest du mir wohl dein Excel-Sheet schicken? Habe dir eine PN geschickt. Wäre echt nett.

Ich habe jetzt den Motor auf Micro-Stepping umgestellt, nun ruckelt er nicht mehr wie wild am Stativ. Allerdings sind es jetzt 425 Schritte, und in der Mitte der Fallhöhe kommt der Motor an seine Grenzen. Ich werde deshalb den Durchmesser der Riemenscheibe etwas vergrößern, das ist dann ein Kompromiss. Aber es müssen eben jedes Mal die Werte neu gerechnet werden. Für jetzt hatte ich einfach die fehlenden interpoliert.

Gruß und Danke!
Antwort
Roman-22

Roman-22

16:39 Uhr, 25.09.2020

Antworten
Die Datei sollte eigentlich recht einfach nachzubasteln sein, denn mehr als ich vorhin beschrieben habe ist nicht dran.
Du kannst die Datei hier downloaden (weiß nicht, wie lange die dort vorgehalten wird)
workupload.com/file/ggwYYaL56RJ

Ich habe wieder die Initialwerte 100 und 1 für a und b eingetragen, damit du gleich mit dem Solver loslegen kannst.
Dort ist nicht viel einzustellen - einfach auf "Lösen" klicken (siehe Bild) und dann die Lösung akzeptieren.

P.S.: Ich erinnere mich nur mehr vage, aber ich glaube, dass der Solver bei der Standardinstallation nicht automatisch mitinstalliert wird. Sollte ich mich da richtig erinnern, muss man den Solver eben als Add-In nachinstallieren.
support.microsoft.com/de-de/office/herunterladen-des-solver-add-ins-in-excel-612926fc-d53b-46b4-872c-e24772f078ca
Falls das dann trotzdem nicht funkt, liegts vl daran, dass man in Excel ActiveX aktivieren muss (Datei -> Optionen -> Trust Center)


B
clkdiv

clkdiv aktiv_icon

16:49 Uhr, 25.09.2020

Antworten
Oh Mann! Echt super! Also falls hier irgendwann mal im Jahr 2041 über diesen Thread stolpert und die Excel-Datei will: Ich habe sie. Einfach melden. Top!
Antwort
Roman-22

Roman-22

17:01 Uhr, 25.09.2020

Antworten
Hier ist ein Excelsheet, bei dem ich auf einem zweiten Tabellenblatt die Daten einfach untereinander kopiert habe.
Dadurch entfällt die Berechnung des Mittelwerts der Stepwerte und du könntest auf diese Weise auch Messreihen verwenden, bei denen du nicht jedesmal bei der gleichen Distanz misst.
Man könnte bei diesem Ansatz auch die Messwerte in einem bestimmten Bereich vervielfachen, sodass der Algorithmus diesen Bereich dann favorisiert und das Ergebnis besonders gut an diesen Bereich anpasst.
workupload.com/file/vvePztzeSgy

B
clkdiv

clkdiv aktiv_icon

19:37 Uhr, 25.09.2020

Antworten
Roman, vielen Dank. Da kommt noch einiges auf mich zu, die neuen Zahnriemenscheiben sind noch nicht da, aber ich freue mich schon drauf, das alles dann einzubauen.

Sag, wenn das dein Projekt wäre, hättest du eine Präferenz der Messung? Vor allem jetzt, da klar ist, welcher Art die Kurve ist? Wie würdest du das angehen?
Antwort
Roman-22

Roman-22

20:15 Uhr, 25.09.2020

Antworten
Präferenz der Messung?
Ich würde in dem Entfernungsbereich mehr Messwerte anpeilen, in dem beim praktischen Versuch vl. doch noch Ungenauigkeiten zu erkennen sind.

Außerdem würde ich nicht so weit gehen, zu sagen, dass klar ist, von welcher Art die Kurve ist. Wir haben nur für dieses eine Objektiv einen Funktionstyp gefunden, der ganz gut zu passen scheint und hoffen, dass das auch auf andere Objektive umlegbar ist.
Wie schon früher geschrieben war es nur mein zweiter Versuch einer Anpassung.
Genaueres könnten vielleicht Spezialisten in Sachen Optik liefern, wenn man Information darüber hätte, welche Verschiebung des Linsensystems eine Drehung am Schärfering um 1° zB bewirkt und welche Auswirkung das auf den Schärfepunkt hat. Das könnte man vermutlich in eine mathematische Formel gießen. Da moderne Objektive aber recht komplex sind, wirds nicht so wirklich einfach sein, schätze ich.
Generell tut man sich beim Kurvenfit immer leichter, wenn man weiß, welche mathematische Gesetzmäßigkeit dem Vorgang zugrunde liegt, als wenn man so wie hier im Trüben fischen muss und letztlich nur optisch oder aufgrund der Summe der Fehlerquadrate entscheiden kann.

Ich würde bei neuen Objektiven und neuen Messungen jedenfalls in einem Plot prüfen, ob die gefundene Regressionskurve zumindest optisch gut zu den Messpunkten passt oder ob sie in irgend einem Bereich vl zu sehr davon abweicht.
Ich denke, dass vor allem Abweichungen bei kleine Entfernungen kritischer zu betrachten sind, weswegen ich vorhin auch meinte, dass man die Messwerte in diesem Bereich stärker gewichten könnte, indem man sie einfach mehrfach reinkopiert. Bei dem zweiten Blatt sollte das problemlos möglich sein.
Ich hab das mal ausprobiert und habe für jede deiner drei Messserien die 5 Werte für die Bereiche von 1cm bis 5cm noch viermal hinten drangehängt, hab also noch 60 Werte hinzugefügt. Jetzt wird (zumindest theoretisch) der Anfangsbereich besser an die Messwerte angepasst. Wie du dem Screenshot entnehmen kannst, sind die Änderungen an den Werten aber nur marginal erst ab der zweiten/dritten Nachkommastelle (die Zahlen rechts im blauen Feld sind die von vorhin).


B
clkdiv

clkdiv aktiv_icon

20:40 Uhr, 25.09.2020

Antworten
Hallo Roman,

ich habe es tatsächlich geschafft, den Solver zu nutzen. Nachdem ich erst an gefühlten vier Ecken Häkchen setzen musste, damit die Analysetools überhaupt erscheinen.

Das Prinzip der Gewichtung der Werte verstehe ich, wobei ich allerdings denke, dass eine derartige Präzision mit meinem Aufbau eh nicht erreicht wird.

Ich finde keine Informationen darüber, welcher Art die response von Objektiven ist, wenn man am Stellring dreht. Ich könnte mir schon vorstellen, dass es ein Ziel eines Objektivdesigns ist, da eine "zugängliche" Kurve zu bekommen. Sonst würde das Fokussieren ja schwierig, oder?

Sobald die neue Zahnriemenscheibe da ist, werde ich mein 14mm und mein 50mm auch mal ausmessen.

Richtig cool wäre es dann auch noch, wenn ich ein Objekt, das von unten nach oben zur Kamera geschossen wird, während des Herannahens und Entfernens fokussiert bekäme. Eigentlich müsste man die Kurve ja nur rückwärts laufen lassen, nicht wahr?

Gruß! Martin
Antwort
Roman-22

Roman-22

21:09 Uhr, 25.09.2020

Antworten
> Ich finde keine Informationen darüber, welcher Art die response von Objektiven ist, wenn man am Stellring dreht.
Ja, das kann ich mir gut vorstellen und auch, dass man da rasch an die Grenzen stoßen würde, wenn ich mir vor Augen halte, dass Objektive ja 20 und mehr Linsen enthalten können.

> Ich könnte mir schon vorstellen, dass es ein Ziel eines Objektivdesigns ist, da eine "zugängliche" Kurve zu bekommen.
Ich weiß nicht, ob das eine Zielsetzung ist. Wenn, dass eher eine nachrangige. Hauptziel wird es wohl sein, möglichst über einen großen Bereich Verzerrungen und Vignettierungen zu vermeiden, vermute ich. Ich nehme an, dass die Drehung am Enfernungsrad und die dadurch bedingte Verschiebung der Fokussiergruppe im Objektiv linear ist, aber der Einfluss auf die Entfernung des Schärfepunkts ist es sicher nicht.

> Eigentlich müsste man die Kurve ja nur rückwärts laufen lassen, nicht wahr?
Ja, siehe zB de.wikipedia.org/wiki/Wurfparabel#Senkrechter_Wurf

Ich habe mich anfangs gefragt, warum du nicht einfach eine Autofokus-Funktion der Kamera nutz- Aber ich nehme an, dass solche SloMo Kameras gar keinen Autofokus haben, da dieser bei den hohen Frameraten vermutlich ohnedies überfordert wäre, oder?
clkdiv

clkdiv aktiv_icon

16:57 Uhr, 27.09.2020

Antworten
Ja genau, ich glaube, bei Highspeed-Kameras gibt es einen Autofokus grundsätzliche nicht. Soweit ich weiß, haben die Objektive nicht einmal eine elektronische Anbindung, also auch die Blende muss manuell gewählt werden.

Ich betreibe den Steppermotor jetzt bei 800 steps pro Umdrehung, statt 200, dadurch wird die Fokussierung weicher und der Motor zerrt nicht mehr so am Stativ. Die Vibrationen sind jetzt weg, es sind nun 425 steps statt 107. Die fehlenden Werte habe ich jetzt erstmal extrapoliert. Ich muss das Übersetzungsverhältnis jedenfalls ändern, weil der Motor jetzt nicht mehr ganz hinterherkommt, ab ca. 40cm bekomme ich bis zu 10ms failure, bei 70cm holt der Motor dann wieder ein. Sobald die neuen Zahnräder da sind, werde ich die Funktionsfindung nochmal neu durchgehen müssen. Ich will auch ein anderes Objektiv benutzen.


clkdiv

clkdiv aktiv_icon

11:59 Uhr, 07.10.2020

Antworten
Weil mir Roman hier so sehr geholfen hat, ist es mir nun wirklich gelungen, die ganze Sache perfekt umzusetzen. Nochmals ganz superherzlichen Dank! So sieht es jetzt aus:

vimeo.com/465686382
vimeo.com/465686471
vimeo.com/465686204


Nachdem ich nun den Follow-Fokus habe, würde mich natürlich auch noch interessieren, wie man damit nicht nur einen freien Fall, sondern einen Wurf verfolgen könnte. Ich habe nämlich zwischenzeitlich auch eine Wurfmaschine gebaut, und eine Wasserkippautomatik. Alles mit Servomotoren gesteuert, so dass die Aktionen reproduzierbar werden. Hier ist ein erster Test:

vimeo.com/464013886

Die Umsetzung für das Mappen auf das Objektiv habe ich ja. Ich kann den Abschusswinkel festlegen und mit der Highspeedkamera die Geschwindigkeit auch sehr exakt messen. Da würde es möglich, auch noch geworfene Objekte mit der Kamera zu verfolgen. Das wäre echt klasse.
Antwort
Roman-22

Roman-22

12:31 Uhr, 07.10.2020

Antworten
Nun, die Formeln für die Parabelbahn beim schiefen Wurf ohne Berücksichtigung des Luftwiderstands sind ja hinlänglich bekannt, zB de.wikipedia.org/wiki/Wurfparabel

Was du noch benötigst, um wieder den Zusammenhang zwischen Distanz vom Objektiv und Zeit herzustellen, ist die genaue Position deiner Kamera in Relation zu Abwurfpunkt und Abwurfrichtung. Sonst lässt sich die Distanz zum Objektiv zu einem bestimmten Zeitpunkt ja nicht ermitteln.

Legen wir zB ein 3D-Koordinatensystem so fest, dass x nach rechts, y ausnahmsweise nach oben und z nach "vorne" zeigt.
Der Abwurfpunkt sei im Ursprung gelegen, die Wurfparabel liege in der xy-Ebene und der Abwurfwinkel φ sei gegen die positiv orientierte x-Achse gemessen.

Wenn die Kameraposition in diesem KS mit (xK/yK/zK) festgelegt ist, dann kann die Distanz vom Objektiv für jeden Zeitpunkt t (Abwurfzeitpunkt t=0) wie folgt berechnet werden:

d(t)=(xK-v0tcosφ)2+(yK-v0tsinφ+g2t2)2+zK2

Dabei ist v0 die Abwurfgeschwindigkeit und g die Graviatationskonstante g9,80665ms2.

Die Umkehrung, also das Ermitteln der Zeit t bei gegebenen Objektivabstand d, ist hier allerdings problematisch. Zum einen führt das auf eine unangenehme Gleichung vierten Grades, welche man eher lieber nur numerisch lösen wird und dann ist die Lösung natürlich nicht eindeutig (auch wenn man negative Zeiten ausschließt), denn je nach Kameraposition kann das Objekt ja u.U. an bis zu vier verschiedenen Zeitpunkten den gleichen Objektivabstand haben.

Die obige Formel ist natürlich auch für den ursprünglich diskutierten Spezialfall des freien Falls gültig. Dort gilt eben v0=0,φ=beliebig,xK=zK=0 und yK=d0.
Damit vereinfacht sich die Formel zum oben angegebenen d(t)=d0+g2t2.

Diese Frage wurde automatisch geschlossen, da der Fragesteller kein Interesse mehr an der Frage gezeigt hat.