Hallo zusammen,

ich tüftele seit Oktober 06 an einem Gedanken der mich nicht mehr los lässt.

Ich plane einen Roomba Staubsaugerroboter gezielt saugen zu lassen. Damit meine ich dass er keine zufälligen Drehungen mehr durchführt wenn er irgendwo aneckt sondern nach "Plan" saugt. D.h. er merkt sich wo er schon war und berechnet den Weg zu den noch nicht gereinigten Stellen.

Ich erhoffe mir dadurch eine schnellere und effizientere Reinigungszeit.

An Hardware habe ich inzwischen alles was ich brauche.

Ich werde den Roomba um einen IR Sharp Sensor ergänzen und um einen AtMega8.

Dieser soll über die SCI Schnittstelle mit dem Roomba kommunizieren und wird "OnBoard" sein.

Aufgrund des geringen Speichers des AtMega 8 wird er nur Flächen bis MAXIMAL 144qm in seiner Karte speichern können.

Bisher habe ich in Borland C++ einige Simulationen laufen lassen um prüfen zu können ob die Routinen auch tatsächlich funktionieren.

Problematisch wird es aber dann wenn diese Algorithmen die Sharp Sensorwerte erhalten statt meiner ideal simulierten Sharp Sensorwerte.

Erste Tests zeigten zwar dass der Sharp recht zuverlässige Signale liefert, aber ich schätze der Teufel steckt wie immer im Detail. Entsprechend werden sich wohl die Odometriesensoren des Roombas verhalten.

Für die Karte habe ich mir einen Algo ausdenken müssen der ähnlich wie der A Algo arbeitet, jedoch ohne Rekursive Funktionsaufrufe (wg. Stack) und mit möglichst sehr wenig Speicher auskommt (da insgesamt nur 1024 Bytes an RAM existiert).

Grob erklärt habe ich 900 Bytes für die Karte reserviert bzw. 30x30 Felder mit je einem Byte verwendet. Wird für jedes Feld eine Fläche von 40cm Höhe/Breite angenommen (entspricht dem Durchmesser des Roomba) so entsteht hierbei eine Fläche von 30x0,4mx30x0,4m=144qm

In diesem einem Byte befinden sich zwei Bits die den Zustand eines Feldes beschreiben:

a) dieses Feld ist bereits gereinigt/überfahren worden
b) in diesem Feld befindet sich ein Hinderniss

Die restlichen sechs Bits verwende ich für einen entfernungsmerker und wird von meinem modifizierten A Algo benötigt.

Nachtrag: Im AVR Studio 4 hat die Simulation des Pathfinding bei 4 Mhz den Weg nach spätestens 754ms gefunden (ohne Compileroptimierungen). Ich denke dies ist mehr als akzeptabel.

Grüße!