Leistungskurs C++ - Einführung · LehrstuhlfürDatenverarbeitung...

24
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

Transcript of Leistungskurs C++ - Einführung · LehrstuhlfürDatenverarbeitung...

Page 1: Leistungskurs C++ - Einführung · LehrstuhlfürDatenverarbeitung FakultätfürElektro-undInformationstechnik TechnischeUniversitätMünchen LeistungskursC++ Einführung MartinGottwald,StefanRöhrlund

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

Page 2: Leistungskurs C++ - Einführung · LehrstuhlfürDatenverarbeitung FakultätfürElektro-undInformationstechnik TechnischeUniversitätMünchen LeistungskursC++ Einführung MartinGottwald,StefanRöhrlund

Lehrstuhl für Datenverarbeitung

Fakultät für Elektro- und Informationstechnik

Technische Universität München

Das Team

Martin Gottwald

[email protected]

Büro Z943

Stefan Röhrl

[email protected]

Büro Z947

Martin Knopp

[email protected]

Büro Z934

Folie 2/24 LK C++: Einführung Martin Gottwald, Stefan Röhrl und Martin Knopp 16. Oktober 2018

Page 3: Leistungskurs C++ - Einführung · LehrstuhlfürDatenverarbeitung FakultätfürElektro-undInformationstechnik TechnischeUniversitätMünchen LeistungskursC++ Einführung MartinGottwald,StefanRöhrlund

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

Page 4: Leistungskurs C++ - Einführung · LehrstuhlfürDatenverarbeitung FakultätfürElektro-undInformationstechnik TechnischeUniversitätMünchen LeistungskursC++ Einführung MartinGottwald,StefanRöhrlund

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

Page 5: Leistungskurs C++ - Einführung · LehrstuhlfürDatenverarbeitung FakultätfürElektro-undInformationstechnik TechnischeUniversitätMünchen LeistungskursC++ Einführung MartinGottwald,StefanRöhrlund

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

Page 6: Leistungskurs C++ - Einführung · LehrstuhlfürDatenverarbeitung FakultätfürElektro-undInformationstechnik TechnischeUniversitätMünchen LeistungskursC++ Einführung MartinGottwald,StefanRöhrlund

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

Page 7: Leistungskurs C++ - Einführung · LehrstuhlfürDatenverarbeitung FakultätfürElektro-undInformationstechnik TechnischeUniversitätMünchen LeistungskursC++ Einführung MartinGottwald,StefanRöhrlund

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

Page 8: Leistungskurs C++ - Einführung · LehrstuhlfürDatenverarbeitung FakultätfürElektro-undInformationstechnik TechnischeUniversitätMünchen LeistungskursC++ Einführung MartinGottwald,StefanRöhrlund

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 [email protected]

Folie 8/24 LK C++: Einführung Martin Gottwald, Stefan Röhrl und Martin Knopp 16. Oktober 2018

Page 9: Leistungskurs C++ - Einführung · LehrstuhlfürDatenverarbeitung FakultätfürElektro-undInformationstechnik TechnischeUniversitätMünchen LeistungskursC++ Einführung MartinGottwald,StefanRöhrlund

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

Page 10: Leistungskurs C++ - Einführung · LehrstuhlfürDatenverarbeitung FakultätfürElektro-undInformationstechnik TechnischeUniversitätMünchen LeistungskursC++ Einführung MartinGottwald,StefanRöhrlund

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

Page 11: Leistungskurs C++ - Einführung · LehrstuhlfürDatenverarbeitung FakultätfürElektro-undInformationstechnik TechnischeUniversitätMünchen LeistungskursC++ Einführung MartinGottwald,StefanRöhrlund

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

Page 12: Leistungskurs C++ - Einführung · LehrstuhlfürDatenverarbeitung FakultätfürElektro-undInformationstechnik TechnischeUniversitätMünchen LeistungskursC++ Einführung MartinGottwald,StefanRöhrlund

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

Page 13: Leistungskurs C++ - Einführung · LehrstuhlfürDatenverarbeitung FakultätfürElektro-undInformationstechnik TechnischeUniversitätMünchen LeistungskursC++ Einführung MartinGottwald,StefanRöhrlund

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

Page 14: Leistungskurs C++ - Einführung · LehrstuhlfürDatenverarbeitung FakultätfürElektro-undInformationstechnik TechnischeUniversitätMünchen LeistungskursC++ Einführung MartinGottwald,StefanRöhrlund

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

Page 15: Leistungskurs C++ - Einführung · LehrstuhlfürDatenverarbeitung FakultätfürElektro-undInformationstechnik TechnischeUniversitätMünchen LeistungskursC++ Einführung MartinGottwald,StefanRöhrlund

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

Page 16: Leistungskurs C++ - Einführung · LehrstuhlfürDatenverarbeitung FakultätfürElektro-undInformationstechnik TechnischeUniversitätMünchen LeistungskursC++ Einführung MartinGottwald,StefanRöhrlund

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

Page 17: Leistungskurs C++ - Einführung · LehrstuhlfürDatenverarbeitung FakultätfürElektro-undInformationstechnik TechnischeUniversitätMünchen LeistungskursC++ Einführung MartinGottwald,StefanRöhrlund

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

Page 18: Leistungskurs C++ - Einführung · LehrstuhlfürDatenverarbeitung FakultätfürElektro-undInformationstechnik TechnischeUniversitätMünchen LeistungskursC++ Einführung MartinGottwald,StefanRöhrlund

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

Page 19: Leistungskurs C++ - Einführung · LehrstuhlfürDatenverarbeitung FakultätfürElektro-undInformationstechnik TechnischeUniversitätMünchen LeistungskursC++ Einführung MartinGottwald,StefanRöhrlund

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

Page 20: Leistungskurs C++ - Einführung · LehrstuhlfürDatenverarbeitung FakultätfürElektro-undInformationstechnik TechnischeUniversitätMünchen LeistungskursC++ Einführung MartinGottwald,StefanRöhrlund

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

Page 21: Leistungskurs C++ - Einführung · LehrstuhlfürDatenverarbeitung FakultätfürElektro-undInformationstechnik TechnischeUniversitätMünchen LeistungskursC++ Einführung MartinGottwald,StefanRöhrlund

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

Page 22: Leistungskurs C++ - Einführung · LehrstuhlfürDatenverarbeitung FakultätfürElektro-undInformationstechnik TechnischeUniversitätMünchen LeistungskursC++ Einführung MartinGottwald,StefanRöhrlund

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

Page 23: Leistungskurs C++ - Einführung · LehrstuhlfürDatenverarbeitung FakultätfürElektro-undInformationstechnik TechnischeUniversitätMünchen LeistungskursC++ Einführung MartinGottwald,StefanRöhrlund

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

Page 24: Leistungskurs C++ - Einführung · LehrstuhlfürDatenverarbeitung FakultätfürElektro-undInformationstechnik TechnischeUniversitätMünchen LeistungskursC++ Einführung MartinGottwald,StefanRöhrlund

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