Rampe und wie es weiter geht

Nachdem wir durch die Tiefensuche die Effizienz und Zuverlässigkeit des Roboters extrem steigern konnten, haben wir einige weitere kleinere Bugs beseitigt, darunter einige, die etwas mit der Rampe zu tun hatten.

Zum Einen werden nun auch die schwarzen Fliesen, die nicht vom Roboter überquert werden dürfen, richtig von der Tiefensuche umfahren. Diese wurden zu Beginn nicht richtig als nicht-befahren Fliesen vom Roboter erkannt (wir markieren ja jede befahrene Fliese, die schwarzen Flächen wurden nicht befahren, nicht markiert und die Tiefensuche dachte nun, das wäre die nächstgelegene, unbesuchte Fliese, der Roboter konnte aber keine Route dort hin finden (dürfen ja nicht befahren werden) und startete deshalb nach kurzer Zeit neu). Jetzt funktioniert das aber soweit. Auch der Ersatzsensor, der eingreift, wenn die Kamera versagt, funktioniert sehr gut und sehr zuverlässig.

Die Rampe sollte diese Saison universeller in die Karte eingezeichnet werden können, als letztes Jahr (da haben wir die Rampe einfach anhand der Position des Roboters erkannt; Das hat auch gut funktioniert, aber dieses Jahr sollte es ja egal sein, wo der Roboter startet; da kann man sowas deshalb nicht machen). Die Rampe wird nun mithilfe des Orientierungssensors erkannt und in die Karte eingezeichnet, unabhängig von der Position des Roboters. Der Roboter erkennt, wenn die Rampe zu Ende ist und wechselt in die obere Ebene des Speichers der Karte und macht dort normal weiter. Wenn er wieder runterfahren will, wird das nicht erneut über den Neigungssensor erkannt, sondern über die gespeicherte Position der Karte.
Wir betrachten die Rampe in der Karte als Verbindung der Ebenen. Wenn wir an einer Stelle in der Karte, an der sich die Rampe befindet, z.B. bei der Nachbarfliese abfragen, ob der Roboter dort bereits war, wird direkt der Wert der Fliese des oberen Rampenendes zurückgegeben. Auch, wenn wir den Roboter eine Fliese geradeaus fahren lassen und er dabei die Rampe überqueren muss, wird das wirklich nur als eine Fliese geradeaus gesehen. Die Rampe wird also quasi ignoriert und stellt im Programm eine Sprunganweisung zur nächsten Ebene dar.
Außerdem ist es nun möglich, den Roboter in der oberen Ebene starten zu lassen (wichtig, falls er, warum auch immer, oben neu starten sollte). Dann werden in der Karte die obere und untere Ebene vertauscht, wenn er die Rampe befahren hat.

Im Prinzip haben wir nun einen Wettbewerbsfähigen Roboter, von uns aus könnte es heute losgehen. :)
Als nächstes werden wir uns etwas damit beschäftigen, Hindernisse in die Karte einzuzeichnen und diese zu umfahren. Hindernisse können eine beliebige Form und Größe haben, sind aber mindestens 20cm groß und haben mindestens vier Ecken. Sie können überall platziert, es ist aber gewährleistet, dass der Roboter noch einen Weg um die Hindernisse finden kann. Ein Hindernis kann also auch so aussehen:

 

 

 

 

 

 

Wir haben schon einen Plan, wie wir sie in der Karte einzeichnen, aber dazu mehr, wenn wir den umgesetzt haben.

Im letzten Artikel haben wir auch etwas von Selbstortung erwähnt. An unserer Schule stehen die Facharbeiten an und ich werde mich etwas näher damit beschäftigen, einen Algorithmus zu entwickeln, der zum Einen erkennen kann, wenn die Position des Roboters nicht mehr mit der Karte übereinstimmt und zum Anderen ggf. sich selbst in der Karte wiederfindet und dann mit der Opfersuche weitermacht. Auch dazu aber mehr, wenn es soweit ist.