PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Ultraschall und Wegspeicherung



ffmboy
16.12.2009, 10:50
Hallo,

hab ein kleines Projekt für den Asuro als Aufgabe bekommen!

Folgendes soll der Asuro machen:
1. Fahren ( ob geradeaus oder quer ist unwichtig)
2. Das erste Hindernis soll umfahren werden.
3. Vor dem 2 Hindernis so der Asuro stehen bleiben, eine 180 Grad
drehung machen
4. Dann den Kürzesten Weg zum Ausgangspunkt zurückfahren und dort stehen bleiben!

Die Punkte 1-3 sollten ja kein Problem darstellen!
Über den Punkt 4 hab ich mir schon einige gedanken (nur Gedanken) gemacht:
-könnte man den Asuro eine unsichtbare Fläche (Spielfeld, Arena ( 2x2 Meter)) einprogrammieren, ein Koordinatensystem oder so ähnliches?
So dass er dann weiß wo er sich befindet und den Kürzessten Weg zum (bsp. Punkt) 0/100 wieder zurückfährt!!
habe aber selber irgendwie Zweifel, dass es funktioniert da der Speicher warscheinlich zu klein dafü ist, lass mich aber gerne besseren Belehren!
-falls das obere Beispiel nicht geht, oder zu umständlich wäre, würde es auch ein einfaches Wegspeicherúngs System tun, also dass er sich den Fahrweg ab dem start Merkt, und nach der 180Grad Drehung den gespeicherten Weg so abfährt, dass er am Ausgangspunkt wieder ankommt ( Die Lenkung sollte man ja dabei beachten müsste umgekehrt abgerufen werden, also wenn er auf dem hinweg 3 sekunden nach linkst gefahren ist sollte er auf dem Rückweg 3 sekunden nach rechts fahren )!


Und was meint Ihr ist das ganze mit dem Zurückfahren Überhaupt möglich?? und in ca 50 Arbeitsstunden machbar?
Hab das Ganze als 4 SemesterWochenStunden Projekt bekommen und würde es neben meinem Praktikum machen!

Dann Wollte ich nochmal nach dem Stand der Software erkundigen.
Das was ich hier im Forum gefunden habe ist vom Jahr 2007 bzw. 2008 nun wollte ich mal fragen welche Software, Compiler, Flashtool, Datenbank, Bibliothek ich benutzen sollte bzw. welche auf dem Heutigen Stand der Technik zu gebrauchen sind!

Ich danke euch für euere Hilfe.

Mit freundlichen Grüßen
Viktor

ranke
16.12.2009, 11:57
Möglicherweise ist die Aufgabenstellung so zu verstehen, dass sich der Asuro am Wendepunkt so dreht, dass er (sofern keine Hindernisse im Weg sind) auf gerader Linie zum Startpunkt zurückfährt. Dafür müsste er dann nur den Winkel zwischen der aktuellen Ausrichtung und der dem Startpunkt kennen, den er sich zu jedem Zeitpunkt während der Hinfahrt aus den aktuellen Odometriedaten rechnen und aktualisieren kann.

ffmboy
16.12.2009, 12:12
Also die Aufgabestellung! Ist schon oben richtig beschrieben also er umfährt das erste hinderniss vor dem 2 bleibt er stehen dreht um 180grad und fährt dann auf dem kürzesten weg wieder zurück mit oder ohne Hindernisse!!

Thund3r
16.12.2009, 17:58
Hallo

Ich hab mir dazu auch schonmal was überlegt.
Versuch es doch mal mit einem 2dimensionalen
Array (double feld[100][100];)

dort sagst du dann zB 1 heißt frei 2 ist ein hindernis und 3 ist die aktuelle position des robos.
Alles setzt du dann am Anfang auf 1 und jedesmal wenn der Robo auf ein hindenris trifft setzt du das aktuelle feld = 2. So müsste der Robo dann auch zB wissen wie weit das nächste hindernis oder so entfernt ist da er ja (grob) seine aktuelle position kennt.

Gruß Thund3r

Valen
17.12.2009, 00:23
Hmm, 100*100* die anzahl von bits in einem double variabele. Und wieviel speicher hat unsere Asuro? Was genau sol es speichern eigentlich.

Ist auch nicht effizient. Die meiste platz im arena sind leer. Die abgelegte weg und drehungen messen mit odometrieweg und umwandeln im 'dead reckoning' (weiss nicht wie das auf 's deutsch lautet) coordinaten. Dan nur die x,y daten speichern wobei er etwas angestosen hat und weg gekehrt ist. 100 strukturen (c-sprache "struct") der die x und y coordinaten speicher mus Asuro schon erinnern können. Das schwierigste ist aber die genaue odometrie messungen. Die positions genauwichkeit wachst standig mit jeder centimeter bewegung und drehung.

mare_crisium
17.12.2009, 05:29
Thund3r,

so ein grosses zweidimensionales Array (100x100) braucht ffmboy nur, wenn er eine Karte des Weges erstellen muss. Wenn's aber nur darum geht, den kürzesten Weg zurückzufahren, dann braucht er nur den aktuellen Ort des Asuro im Speicher zu halten ;-) . Wie man den ausrechnet (Koppelnavigation, wie Valen schon schrijvt) und wie's mit der Genauigkeit der Odometrie beim Asuro aussieht, darüber hat SternThaler hier im Forum sehr ausführlich berichtet.

Wenn dem Asuro auf dem Rückweg wieder Hindernisse im Weg stehen, dann reicht's ja aus, wenn er sie nach derselben Methode umgeht, wie auf der Hinfahrt. Nur muss er jetzt zwischen Hindernisumgehung und Zielfahrt koordinieren. Das geht z.B. indem er, während er dem Hindernis ausweicht, alle paar Sekunden versucht, die Fahrtrichtung wieder in Richtung zum Zielpunkt zu drehen. Das ist viel einfacher zu programmieren, als wenn er sich den Rückweg aus einer Karte berechnen muss (A* Algorithmus) :-) !

mare_crisium

ranke
17.12.2009, 07:19
Ich finde die Aufgabenstelling unklar. Der kürzeste Rückweg kann nur gefunden werden, wenn das Gelände bekannt ist. Man wird ja beim Rückweg ziemlich zwangsläufig wieder auf das erste Hindernis treffen, da kennt man aber nur einen Weg herum (den man beim Hinweg gefahren ist). Man weiss nicht, ob es anders herum nicht vielleicht kürzer gewesen wäre. Oder impliziert die Aufgabenstellung, dass der kürzeste Rückweg bereits bei der Hinfahrt gefunden werden soll (also beide Wege um das erste Hindernis erforscht werden sollen)?
Ich würde da beim Aufgabensteller nochmal nachhaken, wie das gemeint ist.

ffmboy
17.12.2009, 11:03
Thund3r,

so ein grosses zweidimensionales Array (100x100) braucht ffmboy nur, wenn er eine Karte des Weges erstellen muss. Wenn's aber nur darum geht, den kürzesten Weg zurückzufahren, dann braucht er nur den aktuellen Ort des Asuro im Speicher zu halten ;-) . Wie man den ausrechnet (Koppelnavigation, wie Valen schon schrijvt) und wie's mit der Genauigkeit der Odometrie beim Asuro aussieht, darüber hat SternThaler hier im Forum sehr ausführlich berichtet.

Wenn dem Asuro auf dem Rückweg wieder Hindernisse im Weg stehen, dann reicht's ja aus, wenn er sie nach derselben Methode umgeht, wie auf der Hinfahrt. Nur muss er jetzt zwischen Hindernisumgehung und Zielfahrt koordinieren. Das geht z.B. indem er, während er dem Hindernis ausweicht, alle paar Sekunden versucht, die Fahrtrichtung wieder in Richtung zum Zielpunkt zu drehen. Das ist viel einfacher zu programmieren, als wenn er sich den Rückweg aus einer Karte berechnen muss (A* Algorithmus) :-) !

mare_crisium


Danke erstmal an alle,

finde deinen Beitrag sehr interessant (von Valen auch konnte aber nicht alles verstehen nobody ist Perfect)!
So wie ich deinen Beitrag verstanden habe wäre es möglich den Asuro so zu Programmieren????
Ist eigentlich auch das was ich mir vorgestellt habe!!
Wollte eigentlich eine Bestätigung haben, dass es irgendwie funktionieren würde!
Könntest du mir vielelicht noch den link zum Beitrag Von SternThaler angeben bin zwar auf der suche danach falls ich den aber net finde!
Danke

oberallgeier
17.12.2009, 11:55
... mir vielelicht noch den link zum Beitrag Von SternThaler angeben bin zwar auf der suche danach ...Ich habe grad die beiden wichtigen vor ner knappen Stunde hier gepostet. (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=475747&sid=b9f890e8309e0cd605e359b21fb65d39#475747)

PS - nicht zum Lesen gedacht: ... so ein grosses zweidimensionales Array (100x100) ...Solche "Überlegungen" sind immer für die Katz, wenn man nicht zusammen mit einem Stück Papier und einem Bleistift überlegt. Wobei Papier und Bleistift bei genau diesem Beispiel garnicht notwendig wären: schon ein array double [10][10] frisst beim asuro 80 % des Speichers - und den Sinn von double für Flags verstehe ich eh nicht.

Thund3r
17.12.2009, 14:56
Hallo

Ja gut dann nimmt man halt int [10][10];
es geht ja hier ersmal um eien möglichkeit der lösung wobei ich die antwort
von mare_crisium für die aufgabenstellung(sofern richtig verstanden) doch besser finde. meine lösung ist dann wohl besser für eine ganze kartografierung o.ä.

Gruß Thund3r

ffmboy
17.12.2009, 16:12
@Thund3r

am anfang wollte ich es ja auch so machen mit einem Koordinatensystem(bzw einer karte) es würde aber einfach viel zu viel speicher benötigen was ich mir schon gedacht habe!

Danke

Thund3r
17.12.2009, 18:05
Hallo

Hm ja das ist das Problem was es zu lösen gilt.
Vielleicht könnte man eine Karte ja so erstellen die dem Weg das Asuros angepasst wird also wenn der Asuro nur eine "kurze" strecke fährt wird nur unmittelbar diese (bzw direkte umgebung) gespeichter(kleiner oder vielleicht soger 1dimensionaler array). wird die strecke länger bzw größer wird die karte erweitert (2d array angefangen bei [2][2] zB und wird nach bedarf erweiter auf zB [5][6] o.ä.)

Gruß Thund3r