Das Programm
Posted on Mai 20th, 2014
Den Code unseres Programms haben wir bis zur Austrian Open in C# mit der Monobrick Firmware geschrieben. Gleichzeitig mit dem Umstieg von dem EV3 auf einen NXT haben wir natürlich auch die Programmiersprache gewechselt. Nun schreiben wir unseren Code wir in reinem C unter der Programmierumgebung RobotC. Die Logik unseres Programms ist im Folgenden gleich wie unser Programm strukturiert, in einem Kapitel (in einer Funktion) pro Aufgabe:
Linie folgen
Um der Linie zu folgen verwenden wir 3 Lichtsensoren. Sollte einer der Sensoren am Rand schwarz feststellen und gleichzeitig der mittlere Sensor kein schwarz sehen, dreht sich der Roboter in die Richtung in der er am Rand das schwarz gesehen hat.
Ausnahmen
Sollte sich der Roboter länger als eine bestimmte Zeit in eine Richtung drehen, dreht er sich zurück und genau gleich weit in die andere Richtung (für eventuelle Fehlerkennung). Für den Fall, dass 2 Sensoren oder mehr die Linie sehen, lies einfach weiter.
Kreuzung erkennen
Die Kreuzung erkennt der Roboter, indem er falls er mit 2 nebeneinanderliegenden der 3 Lichtsensoren schwarz sieht sich wieder in die Richtung des äußeren Sensors der schwarz gesehen hat dreht, doch falls die Kreuzungsrichtung anders eingestellt sein sollte und er mit dem Lichtsensor auf der anderen Seite während des Drehens schwarz sieht, dreht er sich wieder zurück.
Ausnahmen
Wenn alle 3 Lichtsensoren schwarz sehen fährt er etwas nach vor und dreht sich dann sofort um etwa 40° in die Richtung in die die Kreuzung eingestellt ist. Nach der ersten Drehung dreht er sich noch weiter bis er mit dem mittleren Sensor schwarz sieht (die 40° sind notwendig um sicherzustellen das der Roboter nicht fälschlicherweise direkt nach vor weiterfährt (im Fall einer Kreuzung mit 3 Abzweigungen)
Lücke passieren
Sollte der Roboter mit keinem der Sensoren schwarz sehen, dreht er sich in die Richtung in der er zuletzt schwarz gesehen hat. Falls er sich dann um mehr als circa 80° gedreht hat, handelt es sich logischerweise um eine Lücke und er fährt etwas geradeaus und dreht sich dann wieder zurück bis er mit dem mittleren Sensor die Linie erkennt. Danach fährt er mit einem leichten Drall in die Richtung in die er sich zurückgedreht hat vorwärts und passiert die Lücke bis er schwarz sieht.
Ausnahmen
Sollte der Roboter mit allen drei Sensoren weiß sehen aber bei der Drehung nach weniger als 80° wieder schwarz erkennen, handelt es sich um eine Fehlmessung und er geht in das normale Programm zurück und folgt der Linie.
Hindernis umfahren
Unser Roboter umfährt das Hindernis, indem er sich, falls der an der Vorderseite angebrachte Touch-Sensor gedrückt wird, um 90° in die Richtung dreht bei der die Ultraschall-Sensoren an der Seite einen höheren Wert sehen(weiter von der Wand entfernt). Nun fährt er solange um das Hindernis herum, wie er mit allen Sensoren Weiß sieht. Sollte er mit einem davon Schwarz sehen, fährt er etwas gerade aus, und dreht sich dann wiederum um 90° um weiter der Linie zu folgen.
Rampe hinauf / hinunterfahren
Die Rampe bewältigen wir indem wir, sollte der Roboter mit allen 3 Sensoren weiß sehen (Lückenprogramm) zuerst die Werte des Neigungssensors messen. Sollte der Sensor mehr als eine gewisse Neigung erkennen, fahren wir zuerst eine Zeit lang zurück um uns an der Wand hinter der Rampe auszurichten und danach mit einem leichten Drall die Rampe hinauf, wodurch wir zwar an der Wand schrammen, durch ein Stützrad auf der Seite aber kein Problem haben die Rampe trotzdem zu bewältigen. Das System fürs hinunterfahren ist im Wesentlichen gleich, nur das die Messung der Neigungssensoren im Fall von 3 schwarzsehenden Lichtsensoren auftritt (T – Kreuzung).
Dose finden
Die Dose finden wir indem wir bei Erkennung des Dosenraums (nach der Rampe) in die Mitte des Raums fahren und auf dem Weg dorthin eventuellen Hindernissen ausweichen. Dort drehen wir uns im Kreis und vergleichen die Werte unseres Infrarot-Sensors mit denen der Ultraschall Sensoren. Sollten diese nicht in einem gewissen Verhältnis sein, ist es die Dose (reflektierendes Material). Wenn sie erkannt ist, drehen wir uns um 180° und fahren zur Dose die wir mit der hinten angebrachten Zange nehmen.
Dose “retten”
Wir “retten” die Dose in dem wir nachdem das Finden erfolgt ist einfach an der Wand entlangfahren, bis wir die schwarze Ecke erkennen, dort drehen wir uns und stellen die Dose ab.