Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Last revision Both sides next revision | ||
lehrkraefte:blc:informatik:glf20:robotik:motorenkontrolle [2021/04/28 08:46] Ivo Blöchliger [Intervall umrechnen, ein für alle mal] |
lehrkraefte:blc:informatik:glf20:robotik:motorenkontrolle [2021/05/03 09:15] Ivo Blöchliger [Steuerung der Motoren] |
||
---|---|---|---|
Line 25: | Line 25: | ||
robot.exit() | robot.exit() | ||
</ | </ | ||
+ | {{: | ||
</ | </ | ||
Line 152: | Line 153: | ||
* Die Geschwindigkeit soll auf den ersten 10cm langsam auf '' | * Die Geschwindigkeit soll auf den ersten 10cm langsam auf '' | ||
* Finden Sie dazu eine lineare Funktion $v(d)=m \cdot d + q$, die zur Distanz $d$ (in Grad = '' | * Finden Sie dazu eine lineare Funktion $v(d)=m \cdot d + q$, die zur Distanz $d$ (in Grad = '' | ||
- | * Setzen mit dieser Funktion in der while-Schlaufe die Geschwindigkeit, | + | * Setzen mit dieser Funktion in der while-Schlaufe die Geschwindigkeit, |
* Testen Sie Ihren Code. | * Testen Sie Ihren Code. | ||
- | * Machen Sie das umgekehrt Gleiche am Ende auf den letzten | + | * Machen Sie das umgekehrt Gleiche am Ende auf den letzten |
**Zusatz für Mathematik-Begeisterte**: | **Zusatz für Mathematik-Begeisterte**: | ||
Line 176: | Line 177: | ||
* Intervall verschieben: | * Intervall verschieben: | ||
* Die gesuchte Funktion ist $f(x) = f_4(f_3(f_2(f_1(x))))$. | * Die gesuchte Funktion ist $f(x) = f_4(f_3(f_2(f_1(x))))$. | ||
+ | |||
+ | {{lehrkraefte: | ||
+ | |||
+ | {{lehrkraefte: | ||
Programmieren Sie diese Funktion nun in Python: | Programmieren Sie diese Funktion nun in Python: | ||
Line 188: | Line 193: | ||
<code python> | <code python> | ||
if gear.getLeftMotorCount()< | if gear.getLeftMotorCount()< | ||
- | gear.setSpeed(linear(0, | + | gear.setSpeed(int(linear(0, |
</ | </ | ||
- | * Bauen Sie die Funktion '' | + | |
+ | <hidden Lösungsvorschlag> | ||
+ | <code python> | ||
+ | def linear(a, | ||
+ | return (x-a)/ | ||
+ | |||
+ | |||
+ | einMeter = 100/ | ||
+ | anfahren = 0.4*einMeter | ||
+ | bremsen = 0.6*einMeter | ||
+ | gear.resetLeftMotorCount() | ||
+ | mySpeed = 60 # Egal welche Geschwindigkeit | ||
+ | |||
+ | while gear.getLeftMotorCount()< | ||
+ | if gear.getLeftMotorCount()< | ||
+ | v = linear(0, | ||
+ | print(int(v)) | ||
+ | gear.setSpeed(int(v)) | ||
+ | gear.forward() | ||
+ | |||
+ | </ | ||
+ | </ | ||
+ | | ||
* Programieren Sie eine Funktion '' | * Programieren Sie eine Funktion '' | ||
<code python> | <code python> | ||
Line 205: | Line 232: | ||
<hidden Lösung> | <hidden Lösung> | ||
+ | $$ | ||
+ | s(t)=\frac{1}{2}at^2+v_0t \quad \Leftrightarrow \quad t = \frac{-v_0 + \sqrt{v_0^2+2as}}{a} | ||
$$ | $$ | ||
- | s(t)=\frac{1}{2}at^2+v_0t \quad \Leftrightarrow \quad t = \frac{-v_0 + \sqrt{v_0^2+2as}{a} | + | Die negative Lösung wird hier verworfen, weil wir nur an der positiven Zeit interessiert sind. |
+ | Eingesetzt in $v(t)$ erhält man | ||
$$ | $$ | ||
+ | v(s) = \sqrt{v_0^2+2as} | ||
+ | $$ | ||
+ | Löst man $v(s_1)=v_1$ nach $a$ auf erhält man | ||
+ | $$ | ||
+ | a = \frac{v_1^2-v_0^2}{2s_1} | ||
+ | $$ | ||
+ | und damit die gesuchte Funktion | ||
+ | $$ | ||
+ | v(s) = \sqrt{v_0^2 + \frac{v_1^2-v_0^2}{s_1} \cdot s} | ||
+ | $$ | ||
+ | |||
+ | Diese kann nun in Python programmiert werden: | ||
+ | <code python> | ||
+ | # Anfangsgeschwindigkeit, | ||
+ | def vs(v0, v1, s1, s): | ||
+ | return (v0*v0 + (v1*v1-v0*v0)/ | ||
+ | </ | ||
</ | </ | ||
</ | </ |