Ankunft zu Hause, Umzug von teamohnename.de und Github Repository + Wiki

Donnerstag sind wir dann ziemlich müde, aber gesund und voller fantastischer neuer Eindrücke zu Hause angekommen. Der Flug mit der Boeing 777-300ER selbst war schon ziemlich anstrengend und schlaflos sowieso, aber wir mussten ja auch noch aus Hamburg mit dem Zug nach Hause kommen. In Osnabrück wurden wir dann um 1 Uhr nachts von unseren Familien willkommen gehießen.
Freitagabend gab es dann eine super schöne Willkommensfeier mit Familie und Freunden. Hierfür möchten wir uns auch noch einmal ganz herzlich bei unseren Familien bedanken!

Wie einige vielleicht schon bemerkt haben, ist dieser Blog umgezogen von der ursprünglichen Domain teamohnename.de zu meiner privaten Domain. Dieser Schritt hätte zum Einen so oder so passieren sollen (da der Blog nicht auf Dauer auf teamohnename.de weiterlaufen kann/soll), zum Anderen aber, weil wir seit einigen Tagen massivst mit Spam zu kämpfen hatten. Vor einer Woche wurde ein Werbeartikel unter Daniels Namen veröffentlicht. Wir gehen davon aus, dass dies über eine Sicherheitslücke im WordPress System passiert ist. Dabei scheint auch Schadsoftware auf den Server eingespielt worden zu sein, der willkürlich Spam E-Mails gesendet hat. Aufgefallen ist dies durch E-Mails, die nicht zugestellt werden konnten, für die wir dann eine Warnung bekommen haben (selbst das waren noch knapp 3000 täglich). Wir haben deshalb alle Inhalte von teamohnename.de gelöscht und das System hier neu aufgesetzt. Hier kann der Blog dann auch auf Dauer bleiben. Bald richte ich dann vielleicht mal einen privaten Blog ein, auf dem ich zwischendurch mal immer etwas über aktuelle Projekte schreibe. Mal sehen, wie das zeitlich so passt.

Außerdem haben wir ja gesagt, dass wir unsere RoboCup Software auf github veröffentlichen wollen – das haben wir nun auch gemacht. Alles ist hier verfügbar:

https://github.com/Diphthong/rcj2015/

Wir haben hier auch ein relativ umfangreiches Wiki eingerichtet:

https://github.com/Diphthong/rcj2015/wiki

Wir freuen uns, wenn wir dadurch einigen Teams helfen können und natürlich auch, wenn unsere Ansätze weiter verfolgt werden können. Außerdem würden wir uns freuen, wenn auch andere Teams ihre Software auf Github veröffentlichen.

Tag 8: Setup

Der Wettbewerb beginnt immer mit einem Setup Tag, an dem der Roboter ausführlich getestet und auf die Parcours am Wettbewerb angepasst werden kann. Der Wettbewerb findet dieses Jahr im Hefei Sports Center, einem Sportgelände (konkret bei uns einer Basketballhalle) von den olympischen Spielen, statt. Die Parcours hier sehen etwas massiver aus und die Fliesen sind etwas kleiner als in der Schule, das ist aber kein Problem. Die Wände lassen sich in den Boden stecken.

Der Roboter selbst scheint soweit zu funktionieren, wir können zumindest aktuell keine Probleme feststellen.
Als Opfer werden Peltierelemente verwendet (eine richtig gute Idee, so heizen die Opfer nicht auf die andere Seite durch). Die Detektion ist also sehr einfach.
Die anderen Teams sind vom Niveau her schon ziemlich hoch, wir kennen hier auch viele noch vom letzten Jahr, die sich teilweise erheblich verbessert haben (hier sind besonders die Kroaten und das andere Team aus Deutschland zu nennen).
Es wird insgesamt acht Wertungsläufe geben (heute drei, morgen drei und übermorgen zwei), wobei die besten sieben gewertet werden. Danach kommt der Superteam Wettbewerb, bei dem wir mit einem anderen Team zusammen eine neue Aufgabe lösen müssen, die 24 Stunden vorher veröffentlicht wurde.
Mal sehen, wie es läuft 😉

Crowdfundingkampagne auf Indiegogo

Es sind nun nur noch 6 Wochen bis zur WM in China und wir sind fleißig auf der Suche nach Sponsoren.

Wir versuchen es dieses Jahr das erste mal mit Crowdfunding. Ein Versuch ist es auf jeden Fall Wert, vielleicht klappt es ja und ansonsten hilft uns jeder noch so kleine Betrag!

Wie es weitergeht…

Zunächst einmal müssen wir uns dafür entschuldigen, dass es jetzt sei Monaten keine Neuigkeiten von uns gab… Wir haben mal versprochen, dass wir öfters bloggen würden, aber daraus ist leider nichts geworden. :(

Wir befinden uns aktuell in der Endphase unserer Schulzeit, in drei Monaten werden wir unser Abitur schreiben. Es bleibt recht wenig Freizeit und oft vergisst man dann auch einfach, mal zu bloggen. Wir hoffen, ihr versteht das.

Wir waren allerdings nicht ganz untätig, im Gegenteil 😀 Wir haben bereits mehrfach von unserer Facharbeit berichtet. Ziel ist es, den Schülern in der Oberstufe eine selbstständige, wissenschaftliche Arbeitsweise zu vermitteln. Ich habe mir dabei mit dem Thema „Entwicklung und Implementation eines Algorithmus zur Selbstortung eines autonomen Rettungsroboters“ die Erweiterung der Software unseres Roboters als Ziel gesetzt und wurde dafür mit dem Dr. Hans-Riegel-Fachpreis ausgezeichnet. Die Arbeit findet ihr hier auch als Download.

Nach der erfolgreichen Teilnahme am RoboCup waren wir uns nicht sicher, wie genau es weitergehen soll. Wir wussten, dass das Abitur im nächsten Jahr anstand und unter Umständen fallen die deutschen Meisterschaften genau auf die Abiturtermine. Nachdem sich diese Vermutung nur halb bewahrheitet hat (der Wettbewerb ist von donnerstags bis sonntags, Daniels Chemieabitur ist am Freitag – am Montag danach schreiben wir Erdkundeabi und ich am Mittwoch Physik), haben wir uns dennoch dafür entschieden, teilzunehmen. Der Roboter funktioniert schließlich nahezu einwandfrei, lediglich ein paar Bugs müssen behoben werden. Bei den deutschen Meisterschaften wird nach den 2014er Regeln gespielt, auch die Hardware muss so nicht angepasst werden. Außerdem: Was wir zwei Tage vor den Prüfungen nicht können, kann man sowieso nicht mehr lernen. Wir werden also guten Gewissens erneut (ein letztes Mal) am Wettbewerb teilnehmen, natürlich mit dem Ziel der Qualifikation zur WM in Hefei. :)

Ursprünglich wollte ich meine Facharbeit so bei Jugend-Forscht einreichen, habe mich dann aber immer mehr mit dem Thema der Arbeit beschäftigt, bis ich den Roboter um einen leistungsfähigeren Controller und einen Laserscanner erweitert habe. Mehr dazu wann anders.

Als nächstes steht die Vorqualifikation in Oldenburg vom 4. bis zum 6. Februar an. Die Software des Roboters muss minimal optimiert werden – besonders der Untergrundsensor hat bei der WM Probleme bereitet. Wir werden sehen, was wir tun können und hier berichten.

Zwischenstand zum Beginn der Fußball WM

Die Fußball WM in Brasilien beginnt heute offiziell und es dauert nur 36 Tage, bis die RoboCup WM beginnt. Hier ein aktueller Zwischenstand:

Wir nun nicht mehr auf die Kamera (CMUcam) angewiesen, die uns zuletzt ja noch einige Probleme bereitet hat. Sie wird aber dennoch auf jeden Fall eingebaut bleiben, wir sind uns sicher, dass wir sie bald noch gebrauchen könnten (selbst, wenn es nur für die Erkennung der Sackgassen ist (läuft ja jetzt über einen einfachen Infrarot Helligkeitssensor (IR Phototransistor und High Power IR LED), der auf den Boden gerichtet ist)). Implementiert haben wir außerdem und können von unserer To-Do Liste streichen:

  • Fehlerhafter Entfernungssensor:
    Wir haben ein paar neue Infrarotentfernungssensoren bestellt und den Sensor ausgetauscht. Nach einer zusätzlichen Neukalibration aller Sensoren (angepasst auf den neuen Roboter) liefern alle Sensoren perfekte Werte mit einer Genauigkeit von bis zu 1mm. Man merkt deutlich, dass der Roboter zielsicherer und exakter durch das Labyrinth fährt.
  • Kollisionserkennung 2.0:
    Auch hier konnten wir Fortschritte verzeichnen: Dank der neu kalibrierten Sensoren kann der relative Winkel (d.h. wir berechnen keinen absoluten Winkel in Grad sondern haben eine Zahl, die proportional zu einem Winkel ist, diesem aber nicht entspricht; Eine Umrechnung sparen wir uns, weil das nicht nötig ist), mit dem der Roboter zur Wand steht, sehr exakt bestimmt werden. Die zusätzliche Kollisionserkennung funktioniert so, wie wir uns das vorgestellt haben.
    Zudem haben wir die Ultraschallsensoren softwareseitig auf eine maximale Distanz von 30cm begrenz, weiter funktionieren diese nicht zuverlässig und weiter müssen wir auch nicht sehen können. Wir müssen ja nur erkennen, ob da außerhalb des Sichtfeldes der IR Sensoren etwas steht. Das funktioniert auch sehr gut.
    Getestet werden muss aber auch hier noch einiges.
  • Erkennung der Checkpoints:
    Wenn der Wert des Untergrundsensors nach der Geradeausfahrt (Positionswechsel) unter einem bestimmten Schwellwert liegt, steht der Roboter auf einem Checkpoint (silberne Fliese). Diese Position wird zwischengespeichert. Wenn der Roboter nun hochgehoben wird (Erkennung über einen nach unten gerichteten Sharp IR Entfernungssensor), wird dies erkannt und der Roboter setzt sich automatisch an den letzten Checkpoint zurück und fährt weiter, kurz nachdem er wieder abgesetzt wird. Wenn noch kein Checkpoint gespeichert wurde, setzt sich der Roboter zurück zur Startfliese.
  • Hindernisse:
    Hier haben wir seeeeeehr viel getestet, konnten aber noch keine brauchbaren Ergebnisse erzielen. Eine Idee war, dass der Roboter, wenn er ein Hindernis direkt vor ihm vermutet, einen Scan macht, indem er sich auf der Stelle dreht. Das sah dann so aus:
    Diese Scans sahen erstaunlich gut aus, gescheitert ist es dann letztlich an der Weiterverarbeitung der Informationen. Wir wollten eine Hough-Transformation implementieren (wenn diese ein Ergebnis liefert, also sicher eine Linie vor dem Roboter identifizieren kann, ist da kein Hindernis, sondern eine Wand, wenn der Algorithmus kein Ergebnis liefert und die Punkte irgendwie verstreut liegen, befindet sich ein Hindernis vor dem Roboter und bei gar keinen Messwerten ist da nichts vor dem Roboter), aber so richtig (zuverlässig) hat das alles nicht funktioniert und zu viel Zeit wollten wir in diese Idee auch nicht stecken, war nur auf jeden Fall sehr interessant anzusehen und dieses Ergebnis zeigt auch, dass es ohne Laserscanner möglich ist, genaue Informationen über die Umgebung zu bekommen, die auch ohne Probleme in eine Karte mit einer Auflösung von z.B. 1cm eingetragen werden könnten, vorausgesetzt, man hat genug Rechenleistung und Arbeitsspeicher. Aber das ist noch Zukunftsmusik 😀

    Mal sehen, ob uns da noch was einfällt…

  • Bei dem Abwurf der Rescuekits haben wir auch noch nicht sooo viele Fortschritte gemacht – einzelne Opfer können schon in die Karte eingezeichnet werden, Kits werden aktuell aber noch immer abgeworfen. Das sollte aber kein so großes Problem werden.

Es ist also noch einiges zu tun. Wir schreiben aktuell einige Klausuren, wahrscheinlich wird es also in den nächsten zwei Wochen nicht so richtig weitergehen, aber danach werden wir nochmal richtig Gas geben :)

Tag 4: Deutsche Meisterschaften „German Open“ in Magdeburg: Finale und Siegerehrung

Der vierte Tag – langsam wurde es spannend. Wir waren zwar schon ziemlich sicher auf dem 2. Platz (damit sich das geändert hätte, hätten wir einen sehr schlechten letzten Lauf und ein anderes Team einen sehr guten Lauf abliefern müssen), bei den Plätzen unter dem zweiten Platz sah es aber schon etwas enger aus.

Wir haben nichts mehr am Roboter geändert und nur noch auf unseren Lauf gewartet. Dieser sah zunächst sehr gut aus – alle Opfer wurden korrekt erkannt – der Roboter hat sich dann aber an einem Hindernis aufgehangen. Normalerweise fängt unsere Kollisionserkennung sowas ab, die Dose befand sich aber genau im Toten Winkel unseres dafür zuständigen Sensors. Der Roboter hat dann natürlich seine Position in der Karte verloren und wir haben abgebrochen – warum genau wissen wir selbst nicht, wahrscheinlich in der Aufregung? Wir hätten auf jeden Fall den Roboter neu in den Parcours setzen können und hätten den Startbonus noch bekommen können. Aber das änderte wie gesagt nichts an unserer Platzierung. Nochmal passiert uns sowas aber nicht 😉

Zwischenzeitlich dachten wir dann doch, dass uns ein anderes Team überholen könnte, aber da es über das Zeitlimit von 8 Minuten kam, konnte auch hier der Startbonus nicht in Anspruch genommen werden.

Letztlich sind wir dann, wie vermutet, auf dem 2. Platz gelandet. Insgesamt ärgern wir uns schon etwas darüber, da wir, wenn wir die Opfer zu Beginn des Wettbewerbs nicht (falsch) erkannt hätten, sogar 1. werden können (erstaunlicherweise waren wir schneller als der 1. Platz, der in Hannover noch schneller war als wir). Aber egal, wir sind voll und ganz zufrieden mit unserer Platzierung.

Wahrscheinlich haben wir uns somit für die WM in Brasilien qualifiziert, die Quoten wurden allerdings noch nicht veröffentlicht, sicher ist das also noch nicht. :/

Die Fotos aus Magdeburg haben wir ins Webalbum hochgeladen, auch zu finden in der Galerie.

Tag 3: Deutsche Meisterschaften „German Open“ in Magdeburg: Zwei Wertungsläufe

Heute sind wir sehr zuversichtlich auf gute Ergebnisse bei den Wertungsläufen in den Wettbewerb gegangen. Wir haben vor dem ersten Wertungslauf heute wieder einige sehr spezielle Situationen getestet, die wahrscheinlich aber nicht so bei den deutschen Meisterschaften in einem Wertungslauf zu bewältigen werden

Beim Testen haben wir einige Bugs gefunden, die im Wesentlichen etwas mit der Rampe zu tun hatten. Diese Bugs konnten wir aber recht schnell beseitigen. Zudem haben wir die Zeilenkamera wieder ins Programm aufgenommen und auch dort einen weiteren Bug beseitigt, der unter bestimmten Situationen auftritt, wenn die Kamera die schwarze Fläche einmal nicht erkennt und der Roboter somit über den Untergrundsensor die Sackgasse erkennen muss.

Beim ersten Wertungslauf heute haben wir alle Opfer bis auf eines erkannt. Das hatte wieder etwas damit zu tun, dass die Opfer bei den Parcours hier etwas zu hoch für uns befestigt waren. Das Problem hatten wir auch schon gestern, wir haben die Sensoren da allerdings einfach etwas nach oben gebogen und bei Tests im Testparcours schien alles zu funktionieren.
Letztlich haben wir die Sensoren dann über Distanzbolzen erhöht und hatten im insgesamt dritten Wertungslauf gar keine Probleme und konnten die volle Punktzahl erzielen.

Somit dürften wir ziemlich sicher auf dem 2. Platz landen (sicher ist aber noch nichts 😉 ). Wie viele Teams sich für die WM qualifizieren, werden wir wahrscheinlich erst nächste Woche erfahren. Es bleibt also spannend!

Tag 1 + 2: Deutsche Meisterschaften „German Open“ in Magdeburg: Setup und erster Wertungslauf

Nachdem wir gestern planmäßig um 13:00 Uhr in Magdeburg angekommen sind, haben wir erst unser Gepäck in die nur 5min vom Bahnhof entfernt liegende Jugendherberge gebracht, da die Messehalle erst um 14:00 Uhr für die Teilnehmer öffnete.

Wir haben dann die ganze Zeit getestet, getestet, getestet, ganz besonders kritische Situationen mit Hindernisse, die dieses Jahr das erste mal bei deutschen Meisterschaften zu Einsatz kamen. Darauf waren wir so nicht vorbereitet, da die Hindernisse aber zumindest hier nur aus Flaschen, die in der Mitte von Foyers stehen, bestehen, stellen sie kein großes Problem für unseren Roboter dar. Selbst, wenn nur 20cm Platz zwischen Hindernis und Wand sind, findet der Roboter irgendwie seinen Weg dadurch und die Karte stimmt trotzdem noch überein.

Zuversichtlich sind wir dann in den zweiten Tag gestartet. Die Wettbewerbsarena wurde extrem stark ausgeleuchtet, da sich erstmals eine Kamera und ein großer Bildschirm über der Arena befand, um den Zuschauern das Verfolgen des Geschehens im Parcours zu erleichtern. Auf dem Wettbewerbsparcours durften wir sogar zwei Stunden vorher noch testen, wobei sich dann herausgestellt hat, dass diese extreme Beleuchtung unsere Sackgassenerkennung über die Zeilenkamera stark beeinträchtigt. Problem 1 war, dass zum Einen relativ starke Kontraste durch die Beleuchtung entstanden (Schatten/Licht), die unter Umständen als Sackgasse erkannt wurden. Zudem war das Licht stellenweise einfach so hell, dass die Kamera schlichtweg überfordert war und überbelichtet, was sich daran bemerkbar macht, dass die Werte extrem springen (die Kamera verlangt eine noch kürzere Belichtungszeit, was aber nicht mehr möglich ist). Die einzige Lösung war, unsere Erkennung der schwarzen Flächen auf den Backup-IR-Sensor umzustellen, der sich unter dem Roboter befindet. Dieser liefert sehr, sehr zuverlässige Werte, wir benutzen ihn normalerweise nur, um zu erkennen, wenn ein Schwellwert für die Zeilenkamera falsch eingestellt wurde. Leider haben wir in den zwei Stunden, die uns bis zu unseren Wertungslauf noch übrig geblieben sind, keine funktionierende Lösung gefunden, um ein Befahren der schwarzen Flächen zu vermeiden, weshalb wir für diesen einen Wertungslauf immer, wenn wir eine Sackgasse erkannt haben, drei Wände in die Karte eingezeichnet, damit der Roboter nicht durch die Sackgasse fährt. Zurückzuführen ist der Fehlschlag der Implementation darauf, dass unsere komplette Software darauf ausgelegt ist, die schwarzen Fliesen gar nicht erst befahren zu müssen. Deshalb mussten wir leider so ein bisschen pfuschen…

Der Wertungslauf brachte uns dann beinahe volle Punktzahl; Leider haben wir nicht sorgfältig genug kalibriert und ein Opfer somit nicht erkannt und ein Opfer falsch erkannt. Aktuell dürften wir somit auf dem zweiten Platz liegen (wahrscheinlich bekommen wir dazu heute Abend beim Social Event noch nähere Informationen). Insgesamt gibt es vier Wertungsläufe, wobei die besten drei gewertet werden.

Nach dem Wertungslauf haben wir uns dann nochmal an den Untergrundsensor gesetzt und konnten ihn recht bald erfolgreich am Roboter zum Laufen bringen. Die starke Beleuchtung wird, soweit wir heute verstanden haben, morgen allerdings ausgeschaltet werden und wir werden wahrscheinlich wieder unsere Zeilenkamera nutzen. Eventuell bleiben wir aber auch erst bei dem unteren Sensor, da er wie erwähnt sehr zuverlässig funktioniert.

Aufgrund der langsamen Internetverbindung können wir momentan leider keine Fotos hochladen, die folgen wie nach Hannover wahrscheinlich Sonntag. :)

Zeilenkamera: Fortschritte

Nachdem wir nun mit unserem Navigationsalgorithmus und der Kartenerstellung mit dem neuen Roboter erhebliche Fortschritte erzielen konnten, haben wir uns noch einmal die Zeilenkamera vorgenommen.

Zuletzt hatten wir massive Timingprobleme, die uns letztendlich auch dazu veranlasst haben, einen Scheduler zu verwenden. Nach dem zweiten Programmieranlauf funktioniert die Kamera nun optimal. Im Wesentlichen gibt es nun den Task für die Kamera, in dem in einer Statemachine die Kamera initialisiert wird und das Bild belichtet wird. Wenn die Belichtungszeit, die am Ende jeder Aufnahme mithilfe eines Referenzpixels, der immer auf ein weißes Stück Papier gerichtet ist, ermittelt wurde, abgelaufen ist, wird eine Variable auf einen bestimmten Wert gesetzt. In dem Timer Interrupt, der unabhängig vom Scheduler und wesentlich schneller (mit 8kHz) aufgerufen wird, in dem die Anlogeingänge ausgelesen und aus 5 Messungen eines Analogeingangs der Median gebildet wird, wird kontrolliert, ob die Variable gesetzt wurde. Wenn sie gesetzt wurde, wird nun zum Analog Eingang geschaltet, an dem die Kamera angeschlossen ist und so lange die Werte gemessen, bis die Kamera einmal ausgelesen wurde (nach jedem gemessenen Wert wird eine Funktion aufgerufen, in der der Kamera mitgeteilt wird, dass der aktuelle Pixel ausgelesen wurde und somit zum nächsten Pixel geschaltet werden kann). Wir lesen nur jeden vierten Pixel der Kamera aus, da wir die volle Auflösung von 128 Pixeln nicht benötigen. Das Auslesen der Analogwerte dauert insgesamt
(1/8000)  *5           *(128/4)                        = 20ms
Freq.       Median   Auflösung der Kamera
Plus im schlimmsten Fall einer Belichtungszeit von 100ms = 120ms. Die Auswertung der Analogeingänge liegt dann immer noch im Rahmen, da die Sharp IR Entfernungssensoren ihren Ausgang sowieso nur alle 39ms aktualisieren.
Normalerweise liegt die Belichtungszeit um 60ms. Wenn es zu dunkel wird, wird immer noch automatisch die LED dazu geschaltet.

Als nächstes werden wir das Ergebnis der Kamera auswerten, weiterverarbeiten, das Ergebnis in unsere Kartenerstellung mit einbeziehen und die Kamera intensiv testen, sodass wir hoffentlich danach eine präzise Sackgassenfrüherkennung haben.

Wahrscheinlich werden wir allerdings direkt unter den Roboter einen zusätzlichen Sensor bauen, der die Sackgassen 100%ig zuverlässig erkennt, dann allerdings erst, wenn der Roboter in die Sackgasse gefahren ist, was insofern problematisch ist, dass die Sackgassenmarkierung beweglich ist, der Roboter sie also unter Umständen beim Befahren verschiebt und sich somit selbst den Weg zubaut. Aber so weit wird es wahrscheinlich nie kommen. 😉