Leistungskurs C++ [EI7122]
Dozent: Martin Knopp, Johannes Feldmaier
Zielgruppe: Master, 7. Semester
ECTS: 6
Umfang: 2/0/4 (SWS Vorlesung/Übung/Praktikum)
Turnus: Wintersemester
Anmeldung: In TUMonline vom 06.09.2016 bis spätestens 13.10.2016, 23:59 Uhr
Zulassungsvoraussetzungen: Kenntnisse des Grundkurses C++
Zeit & Ort: Vorlesung: Dienstag, 09:45 Uhr bis 11:15 Uhr, Z995
Praktikum: freie Zeiteinteilung
Beginn: Dienstag, 18.10.2016

Allgemeines

Randall Munroe, xkcd.com

Im Leistungskurs C++ haben interessierte Studierende die Möglichkeit, im Rahmen einer Projektarbeit im Team die Programmiersprache C++ zu erlernen. Der Leistungskurs C++ basiert auf den Grundlagen des Grundkurses C++ mit dem Ziel, das erlernte Wissen zu festigen und zu erweitern und gleichzeitig eine Brücke zu den aktuellen Forschungsthemen am Lehrstuhl zu schlagen.

Zur Projektarbeit stehen mehrere Roboter vom Typ TurtleBot 2 zur Verfügung. Mit diesen soll im Hauptprojekt ein komplexeres kollaboratives oder kompetetives Problem gelöst werden. Zu diesem Zweck gilt es, verschiedene technische Hürden zu überwinden, u.a.:

  • Umfelderkennung (Spielfeld, gegnerischer Roboter) mittels Kamera, LIDAR, ToF-Sensoren...
  • Steuerung und Regelung der Fahrmanöver
  • Navigation im Spielfeld
  • Kommunikation zwischen Robotern oder einer Schiedsrichter-Software
  • ...

Begleitend zur Projektarbeit findet an zwei Stunden pro Woche eine Vorlesung statt. Aufbauend auf den Grundlagen des Grundkurses sind u.a. folgende Themen geplant:

  • Einführung in diverse Libraries zur Steuerung der Hardware des Roboters (ROS)
  • Bildverarbeitung mit OpenCV
  • Kameraansteuerung mittels OpenCV
  • Multithreading und Multiprozessorprogrammierung
  • Buildsystem CMake

Voraussetzungen

Die erfolgreiche Teilnahme am Grundkurs C++ gilt als Zulassungsvoraussetzung für den Leistungskurs. Vergleichbare Kenntnisse sind gegebenenfalls vor Beginn des Vorlesungszeitraums in einem persönlichen Gespräch nachzuweisen.

Hausaufgaben

  • Hausaufgabe 1 (Abgabe bis zum 01.11.):
    OpenCV-Demos/Bildverarbeitung (siehe Vorlesung vom 25.10., letzte Folie)
    Bitte nutzt vorerst die Computer im -1981, Zugang mit Studentenausweis. Abgabe als Archiv an cpp-ha@ldv.ei.tum.de, bei Problemen und Fragen bitte ebenfalls verwenden.
  • Hausaufgabe 2 (keine Abgabe, bis 15.11.):
    Bitte arbeitet das untenstehende Material soweit durch, dass ihr eure eigenen Chatter-/Listener-Nodes per Launchdatei starten könnt. Wir werden das nicht explizit korrigieren, nächste Woche wird es aber eine weitere Hausaufgabe geben. Bitte kopiert auch nicht einfach nur den Code aus den Tutorials und klickt auf „Build“ bis es geht, sondern versucht ihn zu verstehen und meldet euch bei Unklarheiten.
  • Hausaufgabe 3 (Abgabe bis zum 22.11.):
    In der dritten Hausaufgabe geht es endlich darum, dass sich etwas bewegt. Arbeitet bitte die Folien zu Turtlesim durch, sowie den Quellcode zur draw_square-Node und schreibt dann eine draw_nikolaus-Node, die das Haus vom Nikolaus malt.
    Als Ergebnis solltet ihr ein my_turtle-Package haben (vgl. Folien), das turtlesim und draw_nikolaus per launch-File startet. Packt dieses Package in eine Archivdatei und gebt es in Moodle ab.
  • Hausaufgabe 4 (Abgabe bis zum 29.11.):
    Bringt Stopper das Ausweichen bei und sorgt dafür, dass er nie mehr stehen bleibt (Kollisionen bleiben verboten!): Drehung jeweils zu der Seite mit mehr Platz (Entfernung an den Randbereichen des Kollisionslidars!) Abgabe wieder als gepacktes Package mit drumherum (insb. Launchfile) per Moodle.

    Update: Anscheinend braucht die Aufgabe noch etwas mehr Klarstellung:

    • Außenbereich: Nehmt jeweils auf der linken und rechten Seite des Kollisionsscanners einen kleinen Bereich dazu (z.B. 5° oder 10° => -40° – -30°, 30° – 40°) und testet dort ebenfalls die Entfernungen. Je nachdem wo mehr Platz ist, soll der Roboter dorthin ausweichen.
    • Ausweichen: Der Roboter darf nicht kollidieren! Wenn ihr das schafft während sich der Roboter verwendet, prima. Wenn ihr das nicht zuverlässig hinbekommt und ihr lieber Zustände der Form Kollisionscheck -> drehen oder fahren -> check -> drehen oder fahren habt, auch in Ordnung.
    • welche Welt: In erster Linie sollt ihr euch den bestehenden Stopper-Code anschaun, da der unserern Roboter simuliert. Damit wäre das dann maze.world. Testet euren Code aber gerne auch noch mit anderen Welten/Beispielen, er sollte dort auch funktionieren und gibt euch zudem einen ersten Eindruck wie gut er auf neue Probleme portierbar ist.

Ergänzungen: VM, Tutorials, etc.

Download der Virtuellen Maschine (Ubunutu 14.04, ROS Indigo, QtCreator), 3.6 GB. Wir selbst verwenden VirtualBox und empfehlen es auch, da der Download im Open Virtualization Format 1.0 vorliegt, sollte es aber auch mit anderer Software funktionieren. Das Passwort für den Benutzer ros lautet ros, bitte ändert es (passwd in einer Shell eingeben), falls ihr später mit den Robotern und der VM arbeitet wäre es sonst ein leichtes, dass eure VM Teil des nächsten Botnetzes wird.

Tutorial / Skriptentwurf V.1 (Gerne auch Feedback dazu, wollt ihr sowas? Lieber ausführlicher/abstrakter/...? „Mach lieber die Vorlesung besser, statt so nen Schmarrn!“ ;) Lieber sowas wie die folgenden Folien?)

Vorlesungsfolien aus dem letzten Jahr: Publish/Subscribe, Callback-Funktionen, etc.

Dazu passend auch die Tutorials im ROS-Wiki (1.1 Beginner Level).


Weitere Vorlesungsfolien aus dem letzten Jahr zu Turtlesim, wichtig für die dritte Hausaufgabe.


my_turtle.tar.gz / Stopper
– In der Vorlesung gezeigtes C++-Beispiel für die Kombination von Klassen und Knoten. Die Datei enthält das komplettes Package „my_turtle“, passt bitte beim Entpacken/Kopieren auf, dass ihr keine eurer eigenen Dateien überschreibt, falls die genauso heißen sollten. Ebenfalls sind in der Datei die an den Turtlebot angepassten Testwelten für Stage enthalten (my_turtle/world/*.world).