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!