Wie der Titel schon sagt fange ich gerade an ein Robotersimulationsprogramm zu schreiben. Vorstellen tu ich mir das ganze so:
Es gibt ein Grafisches Programm in dem man neue Maps laden , Roboter grund-konfiguieren und die Simulation starten kann.
Die Map besteht aus einer Datei in dem ein array[x][y] Mappoints(simulierte 10cm*10cm oder 20*20) gespeichert ist. Auf einem Point können verschiedene Objekte sein, z.B. einfach ein Gegenstand/Hinderniss, Mauern
aber auch Lichtquellen, Geräuschquellen und was mir später noch so einfällt. Jeder Point hat dadurch auch verschieden Parameter wie helligkeit, Lautstärke, höhe des Objekts usw. Map größen wird es zwei oder drei geben. Mindestens eine 5m*5m große für einen Raum und eine 20m*20m für mehrere Räume.
Später stelle ich mir zu der Mapdatei noch ein mapname Programm vor mit eigener KI, das die Map aktuallisiert. So könnten z.B. Menschen in der Karte herum gehen, Lichter gehen an und aus gehen usw.
Jeder Roboter wird ein eigenständiges Programm werden das mit dem Grafischen Programm kommuniziert, und Position sowie Sensordaten übermittelt.
Auf dem Roboter werden reale Sensoren simuliert, max. Sharp IR Sensoren mit 80cm, mit 150cm und US Sensoren mit 6m Reichweite jeweils max. 8Stck. Sicher wird es noch nen Helligkeitsradar, und Lautstärkenradar (viell. primitiv nur 4 Richtungen) zur auswahl geben. Wahrscheinlich auch einen IR Radar aus 4Stck. Sharp´s 150cm Sensoren.
Einen Roboter wird jeder schreiben können der grundlagen in C kann.
Im Grafischen Programm wählt man aus welche Sensoren auf seinem Roboter alles an sein sollen, anschließend erstellt es eine robotername_status Datei(in der ist gespeichert welche Sensoren an sind) und eine robotername.c in der eine robi_init() am Anfang immer aufgerufen wird. In robi_init() werden verschiedene Threads gestartet um die Position und Sensoren mit hilfe einer Karte zu aktuallisieren, und um die aktuelle Position usw. dem Grafischen Programm mitzuteilen.
Nach der robi_init() kommt nun der Persönliche Code. Mit verschiedenen Funktionen kann man nun seinen eigenen Roboter programmieren.
Also Funtkionen wie.
get_sensor_x()
get_kompass();
roboter_stop()
roboter_geradeaus(geschwindigkeit)
roboter_drehung(X Grad)
usw.
In der robi_init() wird auch ein Thread gestartet der überprüft ob das nächste Kommando ausgeführt werden kann oder ober er z.B. vor einer Wand steht und nicht weiter kann. Dieser Thread benutzt aber nicht die Sensorwerte sonder die Karte selbst.
Im Grafischen Programm wird der Roboter angezeigt mit den aktuellen Sensorwerten. Fast ziemlich sicher wird man auf einen Button drücken können um ein Fenstern zu starten in dem der Roboter in der Karte herumfährt.
Soviel zu meinen Vorstellungen und ich hoffe man konnnte mich verstehen.
Mein ziel ist es, möglichst realistisch zu simulieren ( nicht die Graphik), sodas man die KI vielleicht später auf echte Roboter übertragen kann.
Schreiben tu ich das ganze mit C unter Linux (Ubuntu) und benutze gtk-2.0 und die glib für das Grafische Programm. Für den Roboter wird rein Ansi-C benutzt. Bis jetzt habe ich nur das Grafische Grundprogramm und eine Teil der robi_init() für das eigentliche Roboterprogramm. Bis jetzt kann man einen Roboter erstellen und auswählen welche Sensoren an sein sollen, ihn abspeichern (bis jetzt nur robiname_stat) und anschließen wieder laden. Ein Mapladen Dialog ist vorhanden wobei biss jetzt nur angezeigt wird was man für eine Datei ausgewählt hat. Es wird sicher noch einige Zeit dauern bis eine erste Funktionsfähige Version da ist, da für mich vieles ganz neu ist/war (gkt-2.0,glib, X-Programmierung, Threadprogrammierung), und ich nur darüber gelesen hatte. Aber ich hab zur Zeit viel Freizeit, da ich gerade keine Schule oder sonstiges habe.
Wenn jemand sich denkt wieso nicht unter Windows, ich mag VisualStudio nicht, ich mag die Ungarische Notation nicht. Wobei es auch möglich ist gkt Programme unter Windows auszuführen.
Ich hab den Thread im Open Source Forum aufgemacht da ich, sobald eine lauffähige Version enstanden ist den Sourc Code hier veröffentliche. Oder auch schon früher wenn jemand interesse hat oder aus sonst einem Grund. Hoffentlich wurde es jetzt nicht zu lange.
Gruß Muraad