OP
drfunfrock
Level-1
- Beiträge
- 934
- Reaktionspunkte
- 72
-> Hier kostenlos registrieren
Ich hab das einfacher gemacht, wobei ich zugeben muss, dass meine Mathematik ist nicht mehr die beste.
Die Form ist
Länge(x) = a + b x + c x^2
x ist identisch mit dem Enkoderzähler, welcher den Drehwinkel des Motors angibt. Ich hab das auf Pulse/Umdrehung der Trommel reduziert.
a muss 0 sein, da Länge(0) = 0 sein soll.
Weil ein x^2 in der Nähe von 0 sehr viel kleiner als x ist, beachte c im Punkt 0 nicht. Daher muss b die Längenänderung per Enkoderpuls sein. Das entspricht der 1. Ableitung einer Gleichung, die ich nicht habe.
c ist dann die 2.Ableitung nach dem Enkoderzähler und es gehen nur der Kabeldurchmesser, die Breite der Trommel und die Enkoderauflösung mit Pulsen/Trommelumdrehung ein.
Das kann man ausprobieren, indem man einfach in der iterativen Funktion einen Parameter verdoppelt und schaut, wie sich c in der numerischen Näherung verhält. Wächst es linear, quadratisch oder umgekehrt proportional? Dann geht der Parameter in C entsprechend ein. Zum Schluss muss man nur noch die Numpy-Lösung durch das eigene C teilen und man bekommt den Faktor Pi. Welch eine
Uberraschung.
Deine Lösung hatte immer den Haken, dass ich verkehrtherum rechnen muss, dh. die Trommel ist voll und da ist dann auch der Nullpunkt. Nun weiss ich nicht, wie voll die letzte Lage ist. Ich hatte auch keine Lust mir darum einen Kopp zu machen. Daher hab ich einfach iterativ von leerer Trommel bis Kabelende für alle Enkoderwerte gerechnet und alle Längen in eine Pythonliste eingetragen. Die Liste wurde dann gespiegelt und jeder Wert durch Kabellänge-Länge ersetzt. Das war eine Zeile
result = [self.cable_len-z for z in result[::-1]]
Ist Python nicht wunderbar?
Das gibt dann alle Funktionswerte in einer Liste für eine abzurollende Trommel. Dann rechne ich auch von Kabelmitte zu Kabelmitte, weil die bis zu etwa 50mm dick sein können.
Für die Lösungsfindung reicht eine Enkoderauflösung von 4 Pulsen pro Trommelumdrehung. Man muss also nicht mit realen Enkoderwerten arbeiten.
Die Form ist
Länge(x) = a + b x + c x^2
x ist identisch mit dem Enkoderzähler, welcher den Drehwinkel des Motors angibt. Ich hab das auf Pulse/Umdrehung der Trommel reduziert.
a muss 0 sein, da Länge(0) = 0 sein soll.
Weil ein x^2 in der Nähe von 0 sehr viel kleiner als x ist, beachte c im Punkt 0 nicht. Daher muss b die Längenänderung per Enkoderpuls sein. Das entspricht der 1. Ableitung einer Gleichung, die ich nicht habe.
c ist dann die 2.Ableitung nach dem Enkoderzähler und es gehen nur der Kabeldurchmesser, die Breite der Trommel und die Enkoderauflösung mit Pulsen/Trommelumdrehung ein.
Das kann man ausprobieren, indem man einfach in der iterativen Funktion einen Parameter verdoppelt und schaut, wie sich c in der numerischen Näherung verhält. Wächst es linear, quadratisch oder umgekehrt proportional? Dann geht der Parameter in C entsprechend ein. Zum Schluss muss man nur noch die Numpy-Lösung durch das eigene C teilen und man bekommt den Faktor Pi. Welch eine
Uberraschung.
Deine Lösung hatte immer den Haken, dass ich verkehrtherum rechnen muss, dh. die Trommel ist voll und da ist dann auch der Nullpunkt. Nun weiss ich nicht, wie voll die letzte Lage ist. Ich hatte auch keine Lust mir darum einen Kopp zu machen. Daher hab ich einfach iterativ von leerer Trommel bis Kabelende für alle Enkoderwerte gerechnet und alle Längen in eine Pythonliste eingetragen. Die Liste wurde dann gespiegelt und jeder Wert durch Kabellänge-Länge ersetzt. Das war eine Zeile
result = [self.cable_len-z for z in result[::-1]]
Ist Python nicht wunderbar?
Das gibt dann alle Funktionswerte in einer Liste für eine abzurollende Trommel. Dann rechne ich auch von Kabelmitte zu Kabelmitte, weil die bis zu etwa 50mm dick sein können.
Für die Lösungsfindung reicht eine Enkoderauflösung von 4 Pulsen pro Trommelumdrehung. Man muss also nicht mit realen Enkoderwerten arbeiten.
Zuletzt bearbeitet: