Seit geraumer Zeit arbeite ich daran, einen Roboter aufzubauen. Dieser soll zentral durch einen Computer gesteuert werden. Im ersten Schritt wird die Steuerung noch statisch vorgegeben sein. Ziel ist es aber, dass eine Art KI die Steuerung vornimmt.
Die Hardware für den Roboter ist aktuell Folgende:
Die Hardware ist ein "Scarab Robot Kit" von Playtastic(TM). Erkennt dieser Roboter ein Hinderniss (mechanisch), so können Bewegungen über Jumper definiert werden. Für jede Reaktion sind zwei Aktionen definierbar. Das ist recht praktisch, da ich mich daher nicht um die Bewegungen selbst kümmern muss, sondern um die Logik, wie sich der Roboter zurecht finden kann. Zuerst habe ich den mechanischen Sensor ausgetauscht durch einen Ultraschall-Sensor.
Fehler: natürlich muss der Widerstand raus - ansonsten fällt die Spannung darüber ab - und der Eingang bekommt gar nichts mit ... also Eingang kurzschliessen.
Die Software ist (selbstverständlich) in Java geschrieben und nutzt eine MySql - Datenbank als Backend. Die Kommunikation über die parallele Schnittstelle erfolgt die Parport - Bibliothek.
Alternativ ist es auch vorgesehen, die Kommunikation über die Adio.sys - Controllerkarte zu realisieren. Hierfür ist es aber nötig, die Bibliothek an Linux anzupassen und neu zu kompilieren. Damit würde die Kommunikation via JNI die ADIO.sys Bibliothek geschehen.
Die Stromversorgung wird über die USB - Schnittstelle realisiert. Der Roboter läuft zwar standardmäßig mit 4 AAA - Batterien, welche zusammen 6 Volt bringen. Mit 5 Volt bewegt sich der Roboter aber auch vorwärts - wenn auch ab und zu scheinbar etwas langsamer.
Die Bewegungen werden in Form eines Textfiles eingelesen und nach Bedarf nacheinander abgearbeitet. Dies ist der Fall, sobald durch den Ultraschallsensor ein Hinderniss erkannt wird. Durch die ansteigende Spannungsdifferenz wird ein Relais geschaltet, welches an einem Eingangspin vom Parallelport den Pegel auf HIGH schaltet. Dieser Eingang wird durch regelmäßiges Polling abgefragt (konfigurierbar).
Nach jedem Polling wird der Status am Eingang ausgewertet, in die Datenbank geschrieben und eine evtl. Richtungsänderung initiiert. Ich habe mich für das Polling entschieden, da ich zukünftig auch eine Aktion ausführen möchte, wenn eigentlich keine Aktion nötig wäre.
- möglichst schnell vorankommen
- die Umgebung möglichst genau analysieren
Ich habe mich für die zweite Strategie entschieden. Damit kann ich einen definierten Raum in x Schritten erkunden und die Ergebnisse visualisieren. Ziel ist es also, einen geeigneten Algorithmus zu finden, mit dem ich die Funktionen realisieren kann.
Angedacht habe ich dabei den folgenden Ablauf:
- In der Datenbank wird geprüft, ob die Position und damit die nachfolgende Bewegung bekannt ist. xmin = xpos - threshold xmax = xpos + threshold ymin = ypos - threshold ymax = ypos + threshold
- Der Wertebereich soll die ganzen Ergebnisse relativieren und die Fehlertoleranz erhöhen.
- In einem Wertebereich kann es durchaus mehrere Einträge geben. Relevant für die Betrachtung ist ebenfalls die aktuelle Richtung.
- Threshold muss so gewählt werden, dass die Bewegung im Raum möglichst effektiv ist.
- Das Ergebnis ist dann die Basis für den Entscheidungsbaum.
- Anbinden einer Rules Engine