Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
lehrkraefte:blc:informatik:glf20:robotik:linefollower [2021/05/12 11:37] Ivo Blöchliger |
lehrkraefte:blc:informatik:glf20:robotik:linefollower [2021/05/21 11:37] Ivo Blöchliger |
||
---|---|---|---|
Line 7: | Line 7: | ||
Am einfachsten ist es, der Grenze zwischen Weiss und Schwarz zu folgen (so dass der Helligkeitssensor effektiv grau sieht). So weiss der Roboter sofort, auf welche Seite er korrigieren muss. | Am einfachsten ist es, der Grenze zwischen Weiss und Schwarz zu folgen (so dass der Helligkeitssensor effektiv grau sieht). So weiss der Roboter sofort, auf welche Seite er korrigieren muss. | ||
- | Die einfachste Umsetzung dieser Idee sieht (als Pseudocode) wie folgt aus: | + | <WRAP info> |
+ | Damit alle Roboter in die gleiche Richtung und den gleichen Parcours fahren, machen wir ab, dass | ||
+ | * **Weiss ist links, Schwarz ist rechts** | ||
+ | </ | ||
+ | |||
+ | Die einfachste Umsetzung dieser Idee sieht (als noch ungetesteten Code) wie folgt aus: | ||
<code python> | <code python> | ||
+ | # Initialisierung fehlt hier! | ||
+ | |||
grau = 500 # Diesen Wert eventuell anpassen | grau = 500 # Diesen Wert eventuell anpassen | ||
radiusLinks = 0.1 # Radius anpassen, so dass die engsten Kurven gefahren werden können | radiusLinks = 0.1 # Radius anpassen, so dass die engsten Kurven gefahren werden können | ||
- | rediusRechts | + | radiusRechts |
gear.setSpeed(20) | gear.setSpeed(20) | ||
Line 18: | Line 25: | ||
if hell==0: | if hell==0: | ||
break | break | ||
- | if hell>grau: # Bedingung umkehren, wenn in die andere Richtung gefahren werden soll | + | if hell<grau: # Bedingung umkehren, wenn in die andere Richtung gefahren werden soll |
gear.leftArc(radiusLinks) | gear.leftArc(radiusLinks) | ||
else: | else: | ||
Line 34: | Line 41: | ||
Wenn die Geschwindigkeit klein genug ist (z.B. '' | Wenn die Geschwindigkeit klein genug ist (z.B. '' | ||
+ | <code python> | ||
+ | ########################################### | ||
+ | ## B E G I N D E S P R O G R A M M S ## | ||
+ | ########################################### | ||
+ | |||
+ | |||
+ | grau = 500 # Diesen Wert eventuell anpassen | ||
+ | radiusLinks = 0.1 # Radius anpassen, so dass die engsten Kurven gefahren werden können | ||
+ | radiusRechts = 0.2 # Radius anpassen, so dass die engsten Kurven gefahren werden können | ||
+ | |||
+ | # Das Interval [a,b] linear auf das Intervall [c,d] umrechnen, an der Stelle x | ||
+ | |||
+ | def linear(a, | ||
+ | return (x-a)/ | ||
+ | |||
+ | def guterRadius(hell): | ||
+ | if (hell> | ||
+ | gear.forward() | ||
+ | return | ||
+ | if (hell< | ||
+ | r = linear(?, grau-50, ?, ?, hell); | ||
+ | gear.leftArc(r) | ||
+ | else: | ||
+ | r = linear(grau+50, | ||
+ | gear.rightArc(r) | ||
+ | |||
+ | gear.setSpeed(20) | ||
+ | while True: | ||
+ | hell = ls.getValue() | ||
+ | if hell==0: | ||
+ | break | ||
+ | guterRadius(hell) | ||
+ | |||
+ | gear.stop() | ||
+ | robot.exit() | ||
+ | </ | ||
===== Weitere mögliche Verbesserungen ===== | ===== Weitere mögliche Verbesserungen ===== | ||
- | * Auf geraden Stücken könnte die Geschwindigkeit erhöht werden und die Kurvenradius | + | * Auf geraden Stücken könnte die Geschwindigkeit erhöht werden und die Kurvenradien |
* Man betrachtet nicht nur die aktuelle Helligkeit, sondern auch die Veränderung der Helligkeit. Wenn diese schnell heller wird, kann man so bereits Gegensteuer geben. | * Man betrachtet nicht nur die aktuelle Helligkeit, sondern auch die Veränderung der Helligkeit. Wenn diese schnell heller wird, kann man so bereits Gegensteuer geben. | ||
* Man summiert die " | * Man summiert die " |