FB Informatik Prof. Dr. R.Nitsch Programmieren 2 Future Car Projekt Reiner Nitsch

Slides:



Advertisements
Ähnliche Präsentationen
Programmieren 1 – Kontrollstrukturen Teil 2
Advertisements

der Universität Oldenburg
Abstrakte Klassen Basisklassen sollten in der Regel sehr allgemein sein. Oft ist es nicht notwendig, dass Objekte dieser generellen Basisklassen angelegt.
Objektorientierte Programmierung
Konzepte objektorientierter Systeme
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
Prof. Dr. W. Conen 15. November 2004
Einführung in die Programmierung Zusammenfassung
Dr. Andreas Winter Sommersemester 2007 Einführung in die Software-Entwicklung © Institut für Informatik Programmier-Richtlinien vgl. auch
Prof. Dr.-Ing. habil. B. Steinbach - Informatik / Softwaretechnologie und Programmierungstechnik - Institut für Informatik Verteilte Software - Java -
Programmieren 2 Future Car Projekt Praktikum 6 - Graphen
Programmieren 2 Future Car Projekt Praktikum 6
Programmieren 2 Future Car Projekt Praktikum 6
FB Informatik Prof. Dr. R.Nitsch Programmieren 2 Future Car Projekt Praktikum 6 - Graphen Reiner Nitsch - Speichern von Graphen -
Java: Objektorientierte Programmierung
Java: Grundlagen der Objektorientierung
Polymorphie (Vielgestaltigkeit)
FOR Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
DO...WHILE Anweisung.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Algorithmen und Datenstrukturen
Algorithmen und Datenstrukturen
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 5 Polymorphismus Sommersemester 2003 Lars Bernard.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Praxis-Repetitorium JAVA zusätzliche, ergänzende Lehrveranstaltung
Christian Schindelhauer
Objektorientierte Programmierung
UML Begleitdokumentation des Projekts
Einführung in die Programmierung Wintersemester 2013/14 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
SH Wydenhof Ebikon Radfahrertest Ebikon.
University of Applied Sciences Übung Objektorientierte Programmierung II Dipl.-Inf. (FH) Markus Vogler.
auf die Praktische Radfahrprüfung
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung Wintersemester 2010/11 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Informatik 1 Letzte Übung.
1.3 Klassen und Beziehungen
1.3 Klassen und Beziehungen
C-Einstieg. Agenda 1Vorbereitung 2Aufbau eines Programms 2.1Header 2.2 Methoden 2.3Main 3Datentypen & Variablen 4Operatoren(+, -, *, /) 5Logik 5.1IF 5.2Switch.
Prof. Dr. Walter F. Tichy Dr. Matthias Müller Sommersemester 2006 Empirische Softwaretechnik.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Purga - Scriptengine Ein Einblick.
Informatik III Christian Schindelhauer Wintersemester 2006/07
Polymorphie (Vielgestaltigkeit). Wenn eine Methode, wie z.B. print für verschiedene Programmteile steht (und z.B. einmal Objekte verschiedener Klassen.
Lehrstuhl für Elektrotechnik Prof. Dr.-Ing. Dr. h.c. N. Fliege Lehrstuhl für Praktische Informatik IV Prof. Dr. Wolfgang Effelsberg Diplomvortrag MIRP.
Übung Informatik I exercise01. 2 Inhaltsübersicht Nachbesprechung Übung 1 Individuelle Fragen/Bemerkungen.
A Workshop About this chapter General description Units Time Schedule
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 5. Vorlesung WS 2002/2003.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Thomas H. Kolbe Einführung in die Programmierung mit Java 9. Vorlesung WS 2001/2002.
BA Stuttgart, Technische Informatik, SW-Engineering, Objektorientierter Entwurf April 2007 Seite 1 Objektorientierter Entwurf (OOD) Beispiel: Generator.
Java Programme nur ein bisschen objektorientiert.
Objektorientierte Programmierung Was ist das eigentlich ?
Tutorium Software-Engineering SS14 Florian Manghofer.
Venusspiegel und Marsschild
 Präsentation transkript:

FB Informatik Prof. Dr. R.Nitsch Programmieren 2 Future Car Projekt Reiner Nitsch

FB Informatik Prof. Dr. R.Nitsch Projekt FutureCar 2 FutureCar-Projekt - Einführung Ein FutureCar (FC) ist ein autonomes fahrerloses Fahrzeug, das im Straßenverkehr selbständig fahren kann, ohne dabei mit anderen FutureCars zusammen zu stoßen. Allgemeine Vorgaben/Einschränkungen: Die FCWelt soll rechteckig sein. Sie ist unterteilt in virtuelle Parzellen (s. Abbildung). In diesen gibt es zunächst nur Strassen (' '), Häuser ('#') und FutureCars. Alle Strassen sind zweispurig und verlaufen senkrecht zueinander. Sie werden begrenzt durch Häuser. Für den ersten Entwurf verwenden Sie die rechts abgebildete FCWelt. Alle FCs haben ein Kennzeichen (A bis Z) und haben eine Breite/Länge von 1 Parzelle (=Schreibstelle auf Konsole). FCs 1 Parzelle (=Schreibstelle auf Konsole). Die FCs fahren parzellenweise weiter. FCs sind mit einem Laser-Scanner ausgerüstet, der die umgebenden Parzellen im Bereich seines Sichtfeldes abtasten und u.a. den dort festgestellten Hindernisse die Merkmale "TRAVERSABLE", "NOTTRAVERSABLE", "MOBILE" und "UNDEF" zuordnen kann. ######################################## # # C # #D ####### ##E #### ######## ##### # # ####### ## ####E ######## ##### # # ####### ## #### ######## ##### # # ####### ## ############## ##### # # ## ## # # ## ## A # # ####### ######## ######## ##### # # ####### F # ######## ##### # # ####### # ######## ##### # # ################# ######## ##### # # ## # # # ## # B # # ####### ################## ##### # # ####### ######## ######## ##### # # # ## # # ################# ######## ##### # # ####### ######## ######## ##### # # # # ####### ################## ##### # # ####### ######## ######## ##### # # ########################################

FB Informatik Prof. Dr. R.Nitsch Projekt FutureCar 3 FutureCar-Projekt - Einführung FCs verfügen über einen Autopiloten, der die Informationen des Laser-Scanners verwendet, um sich in der FCWelt zu orientieren. Ausser geradeaus zu fahren können FCs rechts/links Abbiegen und wenden. Der Autopilot jedes FC arbeitet im Modus "Blaue Reise", d.h. in jeder Parzelle wählt er aus den möglichen Fahrtrichtungswechseln zufällig einen aus. Um einen realistischen Verkehrsfluss zu simulieren entscheidet der Autopilot häufiger gerade aus zu fahren (falls möglich). Die Rechts-oder-Links-Entscheidung wird mit gleicher Häufigkeit getroffen ("Fahrt ins Blaue"). Gewendet wird nur bei längerem Stillstand wegen zu hoher Verkehrsdichte (Stau) und in Sackgassen. Für FCs gelten folgende Verkehrsregeln: –Rechtsfahrgebot –Rechts vor Links –Beim Wenden und Links-Abbiegen hat der Gegenverkehr Vorfahrt. –Nur Parzellen ohne feste Hindernisse (TRAVERSABLE) dürfen befahren werden. –Zusammenstöße sind natürlich verboten. Diese Bedingung ist durch geeignete Zusicherungen mittels assert vor jeder Weiterfahrt zu überwachen. ######################################## # # C # #D ####### ##E #### ######## ##### # # ####### ## ####E ######## ##### # # ####### ## #### ######## ##### # # ####### ## ############## ##### # # ## ## # # ## ## A # # ####### ######## ######## ##### # # ####### F # ######## ##### # # ####### # ######## ##### # # ################# ######## ##### # # ## # # # ## # B # # ####### ################## ##### # # ####### ######## ######## ##### # # # ## # # ################# ######## ##### # # ####### ######## ######## ##### # # # # ####### ################## ##### # # ####### ######## ######## ##### # # ########################################

FB Informatik Prof. Dr. R.Nitsch Projekt FutureCar 4 Allgemeine Hinweise und Empfehlungen Treffen Sie realitätsnahe Design-Entscheidungen Beispiele: –Das Auto hat einen Scanner, nicht umgekehrt. –Der Fahrer (=Autopilot) trifft die Richtungsentscheidungen, ein Navi gibt nur Empfehlungen. –Der Fahrer fährt das Auto und nicht der Scanner Achten Sie auf ein sorgfältiges Design. Sorgfältig designte Software –läßt sich leicht an neue/andere Anforderungen anpassen –ist leicht skalierbar –unterstützt Wiederverwendung von Code und/oder nutzt wiederverwendbare Codeteile –gute Dokumentation Ihrer Entscheidungen und Algorithmen (Schlecht dokumentierte Software ist fast wertlos, da sie kaum wartbar ist. Nachlässigkeiten haben Sie selbst auszubaden!) –… (siehe Vorlesung "Objektorientierte Analyse und Design" ) Ausblicke –selbst lenkende Linienbusse mit fest vorgegebener Fahrstrecke –selbst lenkende Limousinen, die auf kürzestem Weg zu vorgegebenen Zielen navigieren –Die optische Darstellung der Straßenkarte kann angepasst werden (z.B. statt # für Gebäude oder farbige Konsole). –Ein- und Ausgabe eines kompletten Simulationsstatus mittels Dateioperationen

FB Informatik Prof. Dr. R.Nitsch Projekt FutureCar 5 Praktikum 1 - class World class World { private: std::string name; int height, width; char parcels [MAXHEIGHT][MAXWIDTH]; // oder vector parcels; public: void create(const std::string& name="FC-City") ; char getID(const Location& loc); void setID(const Location& loc, const char& id ); } ostream& operator<<(ostream& os, const World& w); Location? Darstellung von FCWelt-Objekten wird sich wahrscheinlich ändern. Neue Objekte (z.B. Bäume) können hinzu kommen. Konsequenzen für Entwurf? ######################################## # # ####### ##E #### ######## ##### # # ####### ## #### ######## ##### # # ####### ## ############## ##### # # ## ## # # ####### ######## ######## ##### # # ####### # ######## ##### # # ################# ######## ##### # # ## # # # ####### ################## ##### # # ####### ######## ######## ##### # # # ## # # ################# ######## ##### # # ####### ######## ######## ##### # # # # ####### ################## ##### # # ####### ######## ######## ##### # # ########################################

FB Informatik Prof. Dr. R.Nitsch Projekt FutureCar 6 Praktikum 1 - class World - Testanwendung #include "ID.h"; typedef char Ikon; int main() { World world; world.create("FC-City"); cout << world << endl; cout << "Testsuite for class World\n"; cout << "\tWorld::getwidth\t" << (world.getWidth()==40 ? "PASSED":"FAILED") << endl; cout << "\tWorld::getHeight\t" << (world.getHeight()==33 ? "PASSED":"FAILED") << endl; cout << "\tWorld::getID\t" << ( ( world.getID(Location( 3, 3)==Ikon('#') && world.getID(Location(-1,-1)==Ikon('#') && world.getID(Location(50,50)==Ikon('#') ) ? "PASSED" : "FAILED") << endl; world.setID(Location(1,1), ID('Z')); cout << "\tWorld::setID\t" << (world.getID(Location(1,1))==Ikon('Z') ? "PASSED":"FAILED") << endl; return 0; ######################################## # # ####### ##E #### ######## ##### # # ####### ## #### ######## ##### # # ####### ## ############## ##### # # ## ## # # ####### ######## ######## ##### # # ####### # ######## ##### # # ################# ######## ##### # # ## # # # ####### ################## ##### # # ####### ######## ######## ##### # # # ## # # ################# ######## ##### # # ####### ######## ######## ##### # # # # ####### ################## ##### # # ####### ######## ######## ##### # # ########################################

FB Informatik Prof. Dr. R.Nitsch Projekt FutureCar 7 Praktikum 1 - Scanner Scanner haben ein begrenztes Sichtfeld (Fielf of view) Scanner haben eine begrenzte Entfernungsauflösung Scanner tasten ihre Umgebung nach Objekten ab Scanner identifizieren die gefundenen Objekte (Strasse, Haus, Fahrzeugkennzeichen, …) Scanner für Fahrzeuge können für die gefundenen Objekte Merkmale (Traits) extrahieren (TRAVERSABLE, NONTRAVERSABLE, MOBILE, … )

FB Informatik Prof. Dr. R.Nitsch Projekt FutureCar 8 Praktikum 1 - class Scanner Codierung der Richtung A N=0 E=90 S=180 W=270 Wie kann man - rechts abbiegen - links abbiegen kodieren? enum Direction { N=0, E=90, S=180, W=270, UNKNOWN=-1 }; Sichtfeldadrressierung für alle 4 Fahrtrichtungen Nord Ost Süd West Implementierung des Sichtfelds? Implementierung scanForID?

FB Informatik Prof. Dr. R.Nitsch Projekt FutureCar 9 Praktikum 1 - class Scanner - Implementation ID Scanner::scanForID(…) { switch (dir) { case N: switch(fieldOfView) { case 0: return world.getID[loc.x-2, loc.y-2]; case 1: return world.getID[loc.x-1, loc.y-2]; … } case E: switch(fieldOfView) { case 0: return world.getID[loc.x+2, loc.y-2]; case 1: return world.getID[loc.x-2, loc.y-1]; … case S: … } Nord Ost

FB Informatik Prof. Dr. R.Nitsch Projekt FutureCar 10 Praktikum 1 - class Scanner - Testanwendung World world; void main() { world.create("testUnit_Scanner"); Scanner sc; bool passed = true; for(int fieldOfView =0; fieldOfView<20; ++ fieldOfView) if( sc.scanForID(fieldOfView, N, Location( 5, 3)).getIkon() != char('A'+ fieldOfView) ) passed=false; for(int fieldOfView =0; fieldOfView <20; ++ fieldOfView) if( sc. scanForID(fieldOfView, W, Location(14,3)).getIkon() != char('A'+ fieldOfView)) passed=false; for(int fieldOfView =0; fieldOfView <20; ++ fieldOfView) if( sc. scanForID(fieldOfView, E, Location(20,3)).getIkon() != char('A'+ fieldOfView)) passed=false; for(int fieldOfView =0; fieldOfView <20; ++ fieldOfView) if( sc. scanForID(fieldOfView, S, Location(28,2)).getIkon() != char('A'+ fieldOfView)) passed=false; cout << "\tScanner:: scanForID \t\t" << ( passed ? "PASSED" : "FAILED: FieldOfView addressing error" ) << endl;, bool isThrownException = false; try { sc. scanForID ( 21, S, Location(28,2)).getIkon(); } catch (const std::out_of_range&) { isThrownException=true; } cout << "\tScanner:: scanForID \t\t" << (isThrownException ? "PASSED" : "FAILED: Exception not thrown") << endl; } FahrtrichtungFC-Ort ######################################## # ABCDE EJOT PKFA TSRQP # # FGHIJ DINS QLGB ONMLK # # KLMNO CHMR RMHC JIHGF # # PQRST BGLQ SNID EDCBA # # AFKP TOJE # # ########################################

FB Informatik Prof. Dr. R.Nitsch Projekt FutureCar 11 Prinzip des kleinsten Wissens Principle of Least Knowledge – talk only to your immediate friends! Begründung: Im obigen Test-Programm findet man öfter die Anweisung sc.scanForID( fieldOfViewNo, N, Location(x,y)).getIkon(); (a.k.a. Law of Demeter or "use only one dot" rule ) Nachteil: Nutzer des Scanners (z.B. Klasse AutoPilot) müssen auch die Schnittstelle der ID-Klasse kennen. Besser: Scanner-Schnittstelle erweitern um sc.scanForIkon( fieldOfViewNo, N, Location(x,y)); Nur noch 1 dot-Operator!

FB Informatik Prof. Dr. R.Nitsch Projekt FutureCar 12 Praktikum 1 - FutureCars Objekte dieser Klasse kennen ihre aktuelle Position der FCWelt (loc), ihre aktuelle Fahrtrichtung (dir) und natürlich ihr Kennzeichen (id), d.h. das Symbol, mit dem sie in der FCWelt dargestellt sind

FB Informatik Prof. Dr. R.Nitsch Projekt FutureCar 13 Praktikum 1 - class FutureCar - Testanwendung (Auszug) World world; // Globales Objekt (hier sinnvoll) void main(void) { world.create(""); char c; FCCompact fc(ID('A'), Location(2,1), W); cout << world; while(true) { fc.step(); cout << world; fc.setDir(S); for( int i=0; i< 7; ++i) { fc.step(); cout << world; } fc.setDir(E); for( int i=0; i<10; ++i) { fc.step(); cout << world; } fc.setDir(N); for( int i=0; i< 7; ++i) { fc.step(); cout << world; } fc.setDir(W); for( int i=0; i< 9; ++i) { fc.step(); cout << world; } if(_kbhit()) {// Checks the console for keyboard input (include ) // more: c = _getch(); // Gets a character from the console without echo // break; // beendet Endlosschleife } } // END while(true) } 1 Parzelle nach West ab jetzt Richtung Süd 7 Parzellen nach Süd ab jetzt Richtung Ost 10 Parzellen nach Ost ab jetzt Richtung Nord 7 Parzellen nach Nord ab jetzt Richtung West 9 Parzellen nach Nord Wenn zwischenzeitlich eine bel. Taste gedrückt wurde … … hole das Zeichen vom Eingabepuffer