Forum: Compiler & IDEs Roboter Labyrinth


von Peter S. (wuhu)


Lesenswert?

Hallo.

Wie ihr sicher unschwer erkennen werdet, bin ich kein Profi, 
strenggenommen bin ich wohl eher Anfänger. Trotzdem möchte ich natürlich 
-auch wenn es jeder Vernunft widerspricht- hoch hinaus.

Folgendes Problem:
Ich habe in einem Buch in etwa folgendes gesehen:
1
##################
2
#           #    #
3
# ###### ####### #
4
# # #    #     # #
5
# # ## ###### ####
6
# #      #     # #
7
# ###### # ##### #
8
#                #
9
##################

Es stellte ein Labyrinth dar und war noch etwas komplexer und deutlich 
schöner als meins hier.
Es wurde dann in diesem Buch scheinbar ein Programm entwickelt, dass 
einen Weg durch das Labyrinth bzw. von einem Punkt a zu Punkt b findet.
Ich selbst besitze einen kleinen Roboter eine sogenannte "Robolaus" die 
auf einem Amtel Board ( 
http://www.krause-robotik.de/service/download/atmel/kr-mega32-16v23.pdf 
) basiert.
Mein Traum wäre es jetzt, dass ich dem Roboter einen "Rahmen" einer 
bestimmten Größe vorgebe (z.B. 2x2m) und wenn ich ihn dann in ein 
abgegrenztes Feld dieser Größe stelle, erkundet er selbstständig den 
Raum und "markiert" jedes Hindernis, auf das er stößt. Günstig wäre es, 
wenn er mir diese "Karte" dann ausgeben (sprich an den Computer senden) 
könnte, vielleicht auch während der Fahrt.  bzw, dass er anhand der 
Daten die er sammelt sich selbst einen Weg durch den Raum bahnen kann, 
ohne an einem dieser Objekte anzustoßen.

Meine Frage ist nicht, wie ich die Hindernisse erkenne und aus den 
Sensoren (Ultraschall, IR, ...) Daten auslese, sondern mir geht es um 
Folgendes:
- Wie definiere ich den Rahmen für diese Erkundungsfahrt? Und brauche 
ich den überhaupt?
- Wie kann ich eine Markierung setzen und wie kann ich sie beim 
weiterfahren wieder auslesen um nicht noch einmal auf dasselbe Hindernis 
zu prallen.
- Wie kann ich Daten an den PC senden/empfangen?
- und vor allem: ist meine Idee überhaupt umsetzbar?

Ich weiß: viele Fragen auf einmal... sry!
Paul

von TestX .. (xaos)


Lesenswert?

ne karte mit ultraschall, ir...hm joa irgendwie geht das wird aber 
unschön...besorg dir nen SIG 2d laserscanner, damit kann man dann auch 
was anfangen ;)
ansonsten ist das kein großés problem..wenn du ein abgeschlossenes 
gebiet hast brauchst du keinen rahmen zu definieren oder ähnliches (denk 
nur an die größe der karte...). markierungen etc setzt du, in der aus 
den daten erzeugten, umgebungskarte.
senden/empfangen über zB wlan, bluetooth, funktransceiver (RFM12 etc)..

von Karl H. (kbuchegg)


Lesenswert?

Und noch was.
Ehe du das ganze mit realer Hardware machst, probier es am PC aus. So 
ein Labyrinth in einem 2D-Feld ist schon ein guter Ansatz.

> Wie kann ich eine Markierung setzen
Gar nicht. Dein Robbi baut sich intern eine Karte seiner Umgebung auf. 
Im Grunde muss er während der Erkundungsfahrt genau den Inhalt dieses 2D 
Arrays rausfinden, den du ihm im ersten Schritt bei deinen Versuchen auf 
dem PC vorgibst.

Auch wenn du davon träumst: Fang in kleinen Schritten an. Eine 
Teilaufgabe nach der anderen.

von STK500-Besitzer (Gast)


Lesenswert?

Sowas haben wird damals in der Schule im Informatikunterricht in Pascal 
programmiert:
Ein Labyrinth als Array erzeugt (Rahmen, Hindernisse).
Da haben wir einen Roboter "reingesetzt", der nach vorne, links und 
rechts gucken konnte (und immer in dieser Reihenfolge nach dem weg 
gesucht hat)
Er ist dann immer in die Richtung "gefahren", in der zuerst kein 
Hindernis war. Wenn alle Richtungen getestet waren, bewegte er sich zur 
vorhergehenden Position und testete die übrigen Richtungen. Irgendwann 
hatte er das Zeil erreicht.
"Einfaches" Beispiel für "Trial'n'Error" und Rekursion.

von Rolf Magnus (Gast)


Lesenswert?

Das entspricht einer einfachen Tiefensuche:
http://de.wikipedia.org/wiki/Tiefensuche

von Karl H. (kbuchegg)


Lesenswert?

STK500-Besitzer schrieb:

> Er ist dann immer in die Richtung "gefahren", in der zuerst kein
> Hindernis war. Wenn alle Richtungen getestet waren, bewegte er sich zur
> vorhergehenden Position und testete die übrigen Richtungen. Irgendwann
> hatte er das Zeil erreicht.
> "Einfaches" Beispiel für "Trial'n'Error" und Rekursion.

Sowas hab ich auch immer gerne meinen Schülern im Kapitel Rekursion als 
Aufgabe gegeben. Der Titel war "Wie kommt die Maus zum Käse"
Die eigentliche Suche ist rekursiv ein paar Zeilen lang und wenn man 
Rekursionen verstanden hat, eigentlich sehr simpel. Aber bis man das 
Vertrauen hat, dass diese paar Zeilen zusammen mit der Rekursion das 
Problem lösen können, das ist ein langwieriger Prozess :-)

Ach ja, was ich sagen wollte: Man bezeichnet das auch als 
'Backtracking'. Versuch einfach mal eine Richtung. Wenns klappt: super. 
Wenns nicht klappt, versuch eine andere wenns noch eine gibt.
Ist ein sehr mächtiges Werkzeug, das jeder in seinem Wekzeugkasten 
vorrätig haben sollte. Die Programmiersprache Prolog baut in 
wesentlichen Grundzügen darauf auf.

von Klaus W. (mfgkw)


Lesenswert?

Als Zusatzaufgabe kann man dann gleich mit dazugeben, ob der Stack
dafür auch reicht.
Also überschlagen, wieviele Byte auf dem Stack pro Ebene benötigt
werden und wie tief die Rekursion maximal gehen kann.
Sonst ist die Rekursion schnell mal die ganz böse Rekursion.

von Peter S. (wuhu)


Lesenswert?

Wow. Danke erst einmal. Ich versuche mich jetzt zunächst daran eure 
Vorschläge zu überdenken und dann werde ich euch sicher noch einmal mit 
Fragen zu diesem Thema belästigen. Danke!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.