View
216
Download
0
Category
Preview:
Citation preview
Lehrstuhl für Datenverarbeitung
Fakultät für Elektro- und Informationstechnik
Technische Universität München
Leistungskurs C++
Einführung
Martin Gottwald, Stefan Röhrl und
Martin Knopp
16. Oktober 2018
Folie 1/24 LK C++: Einführung Martin Gottwald, Stefan Röhrl und Martin Knopp 16. Oktober 2018
Lehrstuhl für Datenverarbeitung
Fakultät für Elektro- und Informationstechnik
Technische Universität München
Das Team
Martin Gottwald
Martin.Gottwald@tum.de
Büro Z943
Stefan Röhrl
Stefan.Roehrl@tum.de
Büro Z947
Martin Knopp
Martin.Knopp@tum.de
Büro Z934
Folie 2/24 LK C++: Einführung Martin Gottwald, Stefan Röhrl und Martin Knopp 16. Oktober 2018
Lehrstuhl für Datenverarbeitung
Fakultät für Elektro- und Informationstechnik
Technische Universität München
Was machen wir im Leistungskurs?
Roboter spielen „Hockey“
Versionsverwaltung mit git
Buildsystem cmake
Ubuntu Linux (Bash!)
Robot Operating System
C++ ist Pflicht (kein „rospy“)
Der ROS „navigation stack“
ist nicht erlaubt
→ es ist euer Projekt
Folie 3/24 LK C++: Einführung Martin Gottwald, Stefan Röhrl und Martin Knopp 16. Oktober 2018
Lehrstuhl für Datenverarbeitung
Fakultät für Elektro- und Informationstechnik
Technische Universität München
Was machen wir im Leistungskurs?
Videodemonstration
Folie 4/24 LK C++: Einführung Martin Gottwald, Stefan Röhrl und Martin Knopp 16. Oktober 2018
Lehrstuhl für Datenverarbeitung
Fakultät für Elektro- und Informationstechnik
Technische Universität München
Bewertung
Hausaufgaben: 30%I 2 StückI 2 Wochen BearbeitungszeitI EinzelarbeitI Diskussion in der Gruppe
erwünscht!I Aber: kein Copy-n-Paste!I H1 im laufe des Tages verfügbar
Abschlusspräsentation: 20%I am Ende des HauptprojektsI GruppenvortragI verwendete Ansätze, Ideen,
Probleme, …
Hauptprojekt: 50%I Spielt der Roboter im Rahmen der
Regeln?I Erfüllt der Roboter die minimalen
Anforderungen?I Ist der Code wartbar?I Sind alle Gruppenmitglieder
beteiligt (→ git-Aktivität)?I …
Was nicht zählt:I Performance, Speicherverbrauch,
etc.I Ausgang des Turniers:
1. Platz: 1.0, 2. Platz: 1.3, …
Folie 5/24 LK C++: Einführung Martin Gottwald, Stefan Röhrl und Martin Knopp 16. Oktober 2018
Lehrstuhl für Datenverarbeitung
Fakultät für Elektro- und Informationstechnik
Technische Universität München
Zeitplan (cf. Moodle)
15.10
22.10
29.10
5.11
12.11
19.11
26.11
3.12
10.12
17.12
24.12
31.12
7.1
14.1
21.1
28.1 4.2
11.2
18.2
Leistungskurs C++ WS 18/19
Turnier
05.02.19
Weihnachtsferien
Fixplatz
Vergabe
16.10.18
Feedback
Gespräch 1
04.12.18
Feedback
Gespräch 2
04.12.18
Abschluss-
Präsentation
29.01.19
Noten-
gespräche
06-08.02.19
H1 Abgabe
30.10.18
17:00
H2 Abgabe
13.11.18
17:00
Hauptprojekt
Kick-Off
13.11.18
Gastvortrag
ITK
08.01.19
Gastvortrag
ITK
15.01.19
Folie 6/24 LK C++: Einführung Martin Gottwald, Stefan Röhrl und Martin Knopp 16. Oktober 2018
Lehrstuhl für Datenverarbeitung
Fakultät für Elektro- und Informationstechnik
Technische Universität München
Gruppeneinteilung
Nicht die Folie anschauen sondern einen Gruppenplatz ergattern!
Folie 7/24 LK C++: Einführung Martin Gottwald, Stefan Röhrl und Martin Knopp 16. Oktober 2018
Lehrstuhl für Datenverarbeitung
Fakultät für Elektro- und Informationstechnik
Technische Universität München
Nützliches
LDV-Webseite zum Kurs http://www.ldv.ei.tum.de/lehre/leistungskurs-c/I HausaufgabenI VorlesungsfolienI Weitere Downloads (Virtuelle Maschine, etc.)I Buch „A Gentle Introduction to ROS“
ROS-Wiki → Nutzt es, vorallem die Tutorials!
Tutoren, die euch vor Ort bei Problemen weiterhelfen
Tutoren findet ihr im Praktikumsraum -1981 (Zeitplan auf der LDV Seite)
Schickt eure Fragen an cpp-tutor@ldv.ei.tum.de
Folie 8/24 LK C++: Einführung Martin Gottwald, Stefan Röhrl und Martin Knopp 16. Oktober 2018
Lehrstuhl für Datenverarbeitung
Fakultät für Elektro- und Informationstechnik
Technische Universität München
Eure Verpflichtungen
Meldet Probleme sobald sie auftauchen!I Wenn euer PC nicht will, geht zu den Tutoren!I Stimmt die Chemie in eurer Gruppe nicht dann informiert uns!I Teile werden brechen, wir haben 3D-Drucker und endlosen Ersatz!
Verwendung von gitI Wir müssen am Ende die Arbeitsverteilung bewerten könnenI Wenn ihr keine commits im Hauptprojekt habt ist das „verdächtig“I git ist Pflicht für die Abgabe der Hausaufgaben (später mehr)I Die Verwendung von git ist Teil der Note!
Überprüft regelmäßig den Moodlekurs und lest euere EmailsI Wir akzeptieren nicht als Ausrede ”Das habe ich nicht mitbekommen”I Wir gehen davon aus, dass Emails via Moodle / TUMonline von euch gelesen
werden
Folie 9/24 LK C++: Einführung Martin Gottwald, Stefan Röhrl und Martin Knopp 16. Oktober 2018
Lehrstuhl für Datenverarbeitung
Fakultät für Elektro- und Informationstechnik
Technische Universität München
Die Hardware: Turtlebot
Wäre fast ein Staubsauger
geworden
Nvidia Jetson TK1
Asus Xtion Pro Live
(Kinect Klon)
LIDAR (360°, 1° Auflösung)
Odometrie und Gyroskop
Bumper vorne, links und
rechts
Klippensensor
Folie 10/24 LK C++: Einführung Martin Gottwald, Stefan Röhrl und Martin Knopp 16. Oktober 2018
Lehrstuhl für Datenverarbeitung
Fakultät für Elektro- und Informationstechnik
Technische Universität München
Die Hardware: Nvidia Jetson TK1
Quad-Core ARM
Cortex-A15
2GB RAM, 16GB Flash
Nvidia Kepler GPU, 192
CUDA-Recheneinheiten
USB 3.0, WLAN, …
Folie 11/24 LK C++: Einführung Martin Gottwald, Stefan Röhrl und Martin Knopp 16. Oktober 2018
Lehrstuhl für Datenverarbeitung
Fakultät für Elektro- und Informationstechnik
Technische Universität München
Entwicklungsumgebung
Ubuntu Linux (z.Z. 16.04 LTS)
(bis zu) 15 Praktikumsrechner
zentral administriert
Für High Performance Computing
(HPC) geeignet
Gerne auch eigene Notebooks
Support nur für Probleme, die auf
den Praktikumsrechnern
reproduzierbar sind
Warnung: Die HPC Rechner werden vom Lehrstuhl verwendet, wer einen
Neustart verursacht fliegt aus dem Kurs!
Folie 12/24 LK C++: Einführung Martin Gottwald, Stefan Röhrl und Martin Knopp 16. Oktober 2018
Lehrstuhl für Datenverarbeitung
Fakultät für Elektro- und Informationstechnik
Technische Universität München
ROS – The Robot Operating SystemWas ist ROS nicht?
eigenständige Programmiersprache
Entwicklungsumgebung
Was ist ROS dann?
Bibliothek für C++ oder Python
Erweiterung für CMake
Bietet Abstraktion und Modularisierung
Erlaubt die einfache Erstellung Verteilter Systeme mit Message Passing
(aber kein „echtes“ MPI!)
Diverse vorgefertigte Module für Hardware und Algorithmen
Tool für Visualisierung
Folie 13/24 LK C++: Einführung Martin Gottwald, Stefan Röhrl und Martin Knopp 16. Oktober 2018
Lehrstuhl für Datenverarbeitung
Fakultät für Elektro- und Informationstechnik
Technische Universität München
ROS: Warum nicht was anderes?
Open Source
Der de-facto-StandardI Industriell genutzt / unterstütztI sehr viele Algorithmen sind verfügbar und getestetI viele Hersteller (z.B. Robopeak vom Lidar) stellen ROS Code zur VerfügungI teilweise auch aktuelle VeröffentlichungenI gute Unterstützung verschiedener Plattformen
ModularisierungI Multi-Agent SystemeI FernsteuerungenI Austausch einzelner Teile
Folie 14/24 LK C++: Einführung Martin Gottwald, Stefan Röhrl und Martin Knopp 16. Oktober 2018
Lehrstuhl für Datenverarbeitung
Fakultät für Elektro- und Informationstechnik
Technische Universität München
ROS: Testmöglichkeiten
Austausch von Teilen (z.B. Navigationsalgorithmen, Simulatoren)
Aufnahme und Wiedergabe von Sensordaten (ROS-bags)
beides ist nahtlos eingebunden
keine Codeänderungen nötig
Folie 15/24 LK C++: Einführung Martin Gottwald, Stefan Röhrl und Martin Knopp 16. Oktober 2018
Lehrstuhl für Datenverarbeitung
Fakultät für Elektro- und Informationstechnik
Technische Universität München
ROS-Konzepte: Der Laufzeitgraph
Peer-to-Peer Netzwerk von Prozessen
Zentraler Master (roscore)
Knoten (nodes)
Synchrone Kommunikation (services)
Asynchrones Streaming (topics)
Parameterspeicher (Teil des Masters, z.B. für Konfigurationsdaten)
Folie 16/24 LK C++: Einführung Martin Gottwald, Stefan Röhrl und Martin Knopp 16. Oktober 2018
Lehrstuhl für Datenverarbeitung
Fakultät für Elektro- und Informationstechnik
Technische Universität München
ROS-Konzepte: Die Knoten (Nodes)
Konten machen die eigentliche ArbeitI Ansteuerung von HardwareI NavigationI BilderkennungI EntscheidungsbäumeI …
ROS ist sehr fein-granular angelegt → typischerweise viele Knoten
Ein ROS-Knoten nutzt immer eine ROS-Clientbibliothek, z. B. roscpp oder
rospy
Eigenständiges kompiliertes Programm im Sinne von C++: Jeder node
besitzt genau ein intmain(int argc, char *argv[]){ ... }
Folie 17/24 LK C++: Einführung Martin Gottwald, Stefan Röhrl und Martin Knopp 16. Oktober 2018
Lehrstuhl für Datenverarbeitung
Fakultät für Elektro- und Informationstechnik
Technische Universität München
ROS-Konzepte: Der Masterserver (roscore)
Namensauflösung
Informationen über den Laufzeitgraphen
Ohne Master könnten sich die Knoten nicht finden und keine Nachrichten
austauschen
Speichert angebotene Topics, Services und registrierte Knoten
Folie 18/24 LK C++: Einführung Martin Gottwald, Stefan Röhrl und Martin Knopp 16. Oktober 2018
Lehrstuhl für Datenverarbeitung
Fakultät für Elektro- und Informationstechnik
Technische Universität München
ROS-Konzepte: Nachrichten
Alle Kommunikation erfolgt über Nachrichten (messages)
Datenstruktur aus Primitivtypen oder anderen messages
Primitivtypen umfassen Integer, Gleitkommazahlen, Boolean, etc.
Arrays sind möglich
Im Prinzip wie structs in C++
Folie 19/24 LK C++: Einführung Martin Gottwald, Stefan Röhrl und Martin Knopp 16. Oktober 2018
Lehrstuhl für Datenverarbeitung
Fakultät für Elektro- und Informationstechnik
Technische Universität München
ROS-Konzepte: Asynchrones Streaming (topics)
Nodes verschicken Nachrichten durch Publikation unter einem bestimmten
Thema
Thema (topic) spezifiziert den Inhalt der Nachricht
Nodes, die bestimmte Daten benötigen, abonnieren das entsprechende
Thema (subscribe)
Vergleichbar mit einem stark typisierten KanalI Jeder Kanal hat einen NamenI Jeder kann sich mit dem Kanal verbinden und Nachrichten empfangen oder
versendenI Aber nur wenn er sich an die Typvorgaben hält
Nicht-blockierend!
Folie 20/24 LK C++: Einführung Martin Gottwald, Stefan Röhrl und Martin Knopp 16. Oktober 2018
Lehrstuhl für Datenverarbeitung
Fakultät für Elektro- und Informationstechnik
Technische Universität München
ROS-Konzepte: Synchrone Kommunikation (services)
Request-/Reply-Modell
Nachrichtenstruktur ist paarweise definiert
Vergleichbar mit einem Remote Procedure Call
Knoten A bietet einen Dienst an
Knoten B benutzt diesen Dienst indem er eine Anfrage an A schickt und auf
die Antwort wartet
Blockierend!
Folie 21/24 LK C++: Einführung Martin Gottwald, Stefan Röhrl und Martin Knopp 16. Oktober 2018
Lehrstuhl für Datenverarbeitung
Fakultät für Elektro- und Informationstechnik
Technische Universität München
ROS-Konzepte: Topics vs. Services
Node
Node
Node
TopicPublication
Subscr
iption
Subscription
Node
Publica
tion
Node Publication
m:n-Kommunikation
Nicht-blockierend
Keine Garantie das Nachricht
verarbeitet wird
Node Node
Service invocation
Response
1:1-Kommunikation
Blockierend
Es gibt definitiv einen Zuhörer
Feedback falls Kommunikation
dennoch scheitert
Folie 22/24 LK C++: Einführung Martin Gottwald, Stefan Röhrl und Martin Knopp 16. Oktober 2018
Lehrstuhl für Datenverarbeitung
Fakultät für Elektro- und Informationstechnik
Technische Universität München
Hausaufgabe 1 (cf. Moodle)Ziel: Schreibt in „turtlesim“ mit der Schildkröte eure Initialen auf den Boden
Deadline: 30. Oktober, 17:00
Nutzt die ROS-TutorialsI „Creating a ROS Package“I „Simple Publisher and Subscriber (C++)“I „turtlesim tutorials“I …
Legt einen neuen branch anI wählt als Name „h1_vorname_nachname“I nach der Deadline wird eine Kopie des
branch erstelltI dies ist die offizielle ”Abgabe”
Bei Problemen: Fragt nach!
Folie 23/24 LK C++: Einführung Martin Gottwald, Stefan Röhrl und Martin Knopp 16. Oktober 2018
Lehrstuhl für Datenverarbeitung
Fakultät für Elektro- und Informationstechnik
Technische Universität München
Bis nächste Woche
Folie 24/24 LK C++: Einführung Martin Gottwald, Stefan Röhrl und Martin Knopp 16. Oktober 2018
Recommended