Abschlusspräsentation Projekt ”Diogenes”
Vortragsablauf Benutzte Softwaretechnikmethoden GUI Movement Wander-Funktion Map Kamera Facedetection Was nehmen wir mit?
SOFTWARETECHNIK METHODEN
Softwaretechnik im Projekt Methoden: Vorgenommen: Unified Process Ausgeartet in: Extreme Programming
Softwaretechnik im Projekt Funktionalität des Programms im Vordergrund Einfache Bedienung
Softwaretechnik im Projekt Gruppenkommunikation über Facebook Google:Code als Repository
Aufwandsschätzung Top-Down Zeitpunkt Abgabe war klar Teilaufgaben verteilt um Termin einzuhalten
Gantt-Diagramm
Verwendete Testmethoden Sporadische Tests Konstruktive Nur getestet worauf User Einfluss hat Final: Walkthrough
GUI
GUI – Was ist uns wichtig? Übersichtliche GUI Wenig Unterbäume Einfach zu bedienen/selbsterklärend
Idee Wenig Pop-ups Klar strukturiertes Menü Viele Informationen auf einen Blick
Alte GUI
Neue Funktionen Manuelle Steuerungsoptionen Switch zwischen Roboter und Kamerasteuerung Map angepasst
Neue Funktionen Präsentationsmodus auf Roboter Roboter wird auf Map dargestellt Option für Facedetection
Wegrationalisierte Funktionen Koordinatenangabe
Finale GUI
Probleme bei der GUI Position der Teilfenster Auswahl Layout Hängen während Befehle ausgeführt werden
MOVEMENT
Movement ...wo wir waren: MoveTo MoveForward/Backward TurnLeft/Right Wander
Movement WRPCommands zur Anfrage einer Bewegung: GOTO_XY MOVE_BACKWARD MOVE_FORWARD TURN_LEFT TURN_RIGHT Movement
Movement Entwickeln von Workarounds mit GOTO_XY 1 Woche später: Nicht machbar 2 Wochen später: Bugfix! (WRPServer-1.1.0)
Movement ...war ein Zeitfresser! Grundfunktionalität verstehen (Doku?) Rumprobieren Fehlersuche am falschen Ende Workarounds – Code für die Tonne Movement
WANDER-FUNKTION
Wander Funktion Punkte durch klicken auf die Map festlegen Ausgewählte Punkte in der Map darstellen Umrechnung Panel ↔ Roboterkoordinaten Einzelne Punkte auf der Karte abwandern Darstellung bei Zoom und Scroll anpassen
Ablauf Klick auf die Map erstellt Punkt Jeder Punkt → Kreis auf der Map Werden in einer Liste gespeichert Umrechnung in Roboterkoordinaten Roboter kriegt umgerechnete Koordinaten Punkte abwandern Löschen der Punkte auf der Map
Beispielbild Blaue Punkte = Wegpunkte Roter Punkt = Roboter Start des Wanderns über Functions → wander the given points
Umrechnung X-Wert * Skalierung Y-Wert * Skalierung * -1 Mapverschiebung mit einrechnen +/- Verschiebung * Skalierung
MAP
Map Visualisierung Problemstellung: Wie visualisiert man angegebene Punkte & Linien im Textformat für eine GUI. 2 Ansätze: Ein Bild davon erstellen Direkt auf dem Panel zeichnen LINES -2900 -514 -2901 -1881 -2278 688 -2278 313 -1203 279 -1204 -534 DATA(points) -2920 -1880 -2920 -1700 -2920 -1600
Ansatz: Bild erstellen Punkte und Linien werden dem Graphics(2D) Objekt eines BufferedImage's hinzugefügt. for (MapLine ml : lines){ g.drawLine((int)ml.getP1().getX(), (int)ml.getP1().getY()*-1, (int)ml.getP2().getX(), (int)ml.getP2().getY()*-1 ); } for (MapPoint mp : points){ g.drawLine((int)mp.getX(), (int)mp.getY()*-1, (int)mp.getX()+5), ((int)mp.getY()*-1
Ansatz: Bild erstellen Generell gute Idee, aber Probleme! Map Koordinaten != GUI Koordinaten Bild Koordinaten ggf. != GUI Koordinaten → hoher Aufwand, evtl. nicht performant. Ebenfalls Probleme beim skalieren/zoomen → Bild für jedes zoomen neu erstellen? Keine gute Idee → wurde verworfen
Ansatz: Direkt auf dem Panel zeichnen Gleiche Vorgehensweise wie Bild erstellen Unterschied: paintComponent Methode des Panels wird überschrieben und dort die Linien und Punkte gezeichnet. Vorteile: → Map Koordinaten ~ Panel/GUI Koordinaten → Einheitliches skalieren mit wenig Aufwand möglich
Ansatz: Direkt auf dem Panel zeichnen Resultat:
Problem – große Map, kleineres Sichtfeld Maps können teilweise sehr groß sein Verhältnis Mapgröße ↔ GUI Fenster teilweise schlecht Lösung: → MapPanel zoomable machen Zoomfaktor einführen, kein Zoom → Zoomfaktor 1.0 In der paintComponent() Methode muss dann der zoomfaktor auf die x & y Werte multipliziert werden. public static void zoomOut() { if(zoomFactor >= 0.5){ MapCanvas.zoomFactor -= 0.1; } public static void zoomIn() { if(zoomFactor <= 2.0){ MapCanvas.zoomFactor += 0.1; }
FACE DETECTION
Welche Software ist für unser Projekt Face Detection Probleme: Welche Software ist für unser Projekt die richtige?
Face Detection Alternativen Faint OpenCV Face.com
Entscheidung fiel auf: Face Detection Entscheidung fiel auf:
Face Detection Warum? Faint: Läuft nur unter Windows OpenCV: C++ Version kam nicht in Frage Java Version genügte nicht unseren Anforderungen Face.com: Verhältnismäßig einfache Integration in unser Projekt
Face Detection Funktionsweise Gesichtsmerkmale werden auf Face.com mit einem Label gespeichert Vergleich der Merkmale eines übergebenen Fotos mit den gespeicherten
Face Detection Fazit In dem Sinne keine Face Detection Passender: Face Recognition
Was nehmen wir mit?
Was nehmen wir mit? Wichtige Erkenntnisse: API gut dokumentieren! Erst denken -> dann programmieren = riesige Zeitersparnis!
Was nehmen wir mit? - gute Kommunikation in der Gruppe wichtig!