Abschlusspräsentation Projekt Diogenes. Vortragsablauf Benutzte Softwaretechnikmethoden GUI...

Preview:

Citation preview

AbschlusspräsentationProjekt

”Diogenes”

Vortragsablauf

Benutzte Softwaretechnikmethoden GUI Movement Wander-Funktion Map Kamera Facedetection Was nehmen wir mit?

SOFTWARETECHNIKMETHODEN

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

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

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

1) Klick auf die Map erstellt Punkt

2) Jeder Punkt → Kreis auf der Map

3) Werden in einer Liste gespeichert

4) Umrechnung in Roboterkoordinaten

5) Roboter kriegt umgerechnete Koordinaten

6) Punkte abwandern

7) Löschen der Punkte auf der Map

Beispielbild

Blaue Punkte = Wegpunkte

Roter Punkt = Roboter

Start des Wanderns über

Functions → wander the given points

Umrechnung

1) X-Wert * Skalierung

2) Y-Wert * Skalierung * -1

3) 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

DATA(points)-2920 -1880-2920 -1700-2920 -1600

LINES-2900 -514 -2901 -1881-2278 688 -2278 313-1203 279 -1204 -534

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 zoomIn() {if(zoomFactor <= 2.0){

MapCanvas.zoomFactor += 0.1;}

}

public static void zoomOut() {if(zoomFactor >= 0.5){

MapCanvas.zoomFactor -= 0.1;}

}

FACE DETECTION

Face Detection

Probleme:Probleme:

Welche Software ist für unser Projekt

die richtige?

Face Detection

Alternativen

Faint

OpenCV

Face.com

Face Detection

Entscheidung fiel auf:

Face Detection

Warum?Warum?

Faint: Faint: Läuft nur unter WindowsLäuft nur unter Windows

OpenCV: OpenCV: C++ Version kam nicht in FrageC++ Version kam nicht in FrageJava Version genügte nichtJava Version genügte nichtunseren Anforderungenunseren Anforderungen

Face.com:Face.com: Verhältnismäßig einfache Verhältnismäßig einfache Integration in unser ProjektIntegration in unser Projekt

Face Detection

FunktionsweiseFunktionsweise

Gesichtsmerkmale werden auf Face.com mit einem Label gespeichert

Vergleich der Merkmale eines übergebenen Fotos mit den gespeicherten

Face Detection

FazitFazit

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!

Recommended