Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
projektews2013:lagemaro:start:fnfsn [2014/03/07 19:16] philippkueckes |
projektews2013:lagemaro:start:fnfsn [2016/01/21 12:45] (aktuell) |
||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | <file C++ Robo_Läuft.ino> | + | <file C++ figuren_nachfahren_fernsteuerung_sendet_nicht.ino> |
+ | |||
+ | import diewald_PS3.PS3; | ||
+ | import diewald_PS3.constants.*; | ||
+ | import diewald_PS3.logger.PS3Logger; | ||
+ | import oscP5.*; | ||
+ | import netP5.*; | ||
+ | import java.awt.Color; | ||
+ | OscP5 oscP5; | ||
+ | Fernsteuerung fernsteuerer; | ||
+ | Bildanalysator farbPunktFinder; | ||
+ | Umgebungswertschaetzer wertschaetzer; | ||
+ | Routenplaner routenplaner; | ||
+ | Navigator navigator; | ||
+ | NetAddress myRemoteLocation; | ||
+ | PS3 ps3; | ||
+ | PImage img; | ||
+ | |||
+ | //deklarierung einiger Variablen | ||
+ | int toleranz=15; | ||
+ | //Größe des auf dem Monitor erscheinenden Bildes | ||
+ | int size_x = 640; | ||
+ | int size_y = 480; | ||
+ | //Damit wird das Farbsystem nach dem die Punkte gesucht werden festgelegt. (1 für HSV sonst rgb) | ||
+ | int auswahl=2; | ||
+ | //Gibt an der wie vielte Punkt der Route angefahren wird | ||
+ | int zaehler = 0; | ||
+ | //Das Aufzeichnen der Route fängt erst an wenn diese Variable auf false gesetzt wird | ||
+ | boolean stop = true; | ||
+ | // die fernsteuerung kann gestarted werden, indem diese Variable auf true gesetzt wird | ||
+ | boolean fernsteuerung = false; | ||
+ | boolean kalibrierung = false; | ||
+ | int stift = 1; | ||
+ | |||
+ | // "class" definiert einen neuen typen (sowas wie int oder float) | ||
+ | |||
+ | |||
+ | |||
+ | public void setup() { | ||
+ | //die Geschwindigkeit mit der die Bilder neu geladen werden wird festgelegt | ||
+ | frameRate(20); | ||
+ | //die Objekte werden definiert | ||
+ | farbPunktFinder = new Bildanalysator(); | ||
+ | fernsteuerer= new Fernsteuerung(); | ||
+ | routenplaner = new Routenplaner(); | ||
+ | navigator = new Navigator(); | ||
+ | wertschaetzer = new Umgebungswertschaetzer(); | ||
+ | oscP5 = new OscP5(this, 12000); | ||
+ | // die IP-adresse des Arduinos muss ausgewählt werden | ||
+ | myRemoteLocation = new NetAddress("192.168.0.102", 8000); | ||
+ | PS3Logger.TYPE.DEBUG .active(true); | ||
+ | PS3Logger.TYPE.ERROR .active(true); | ||
+ | PS3Logger.TYPE.INFO .active(true); | ||
+ | PS3Logger.TYPE.WARNING.active(true); | ||
+ | |||
+ | size(size_x, size_y); | ||
+ | |||
+ | println("PS3.getCameraCount() = " + PS3.getCameraCount()); | ||
+ | |||
+ | ps3 = PS3.create( 0 ); | ||
+ | ps3.init(VIDEO_MODE.VGA, COLOR_MODE.COLOR_PROCESSED, 60); | ||
+ | ps3.start(); | ||
+ | ps3.setLed(true); | ||
+ | img = createImage(ps3.getWidth(), ps3.getHeight(), ARGB); | ||
+ | // die Kameraeinstellungen werden festgelegt | ||
+ | ps3.setParameter(PS3_PARAM.EXPOSURE, 20); | ||
+ | delay(10); | ||
+ | ps3.setParameter(PS3_PARAM.GAIN, 5); | ||
+ | delay(10); | ||
+ | ps3.setParameter(PS3_PARAM.WHITEBALANCE_BLUE, 80); | ||
+ | delay(10); | ||
+ | ps3.setParameter(PS3_PARAM.WHITEBALANCE_RED, 150); | ||
+ | delay(10); | ||
+ | ps3.setParameter(PS3_PARAM.WHITEBALANCE_GREEN, 150); | ||
+ | delay(10); | ||
+ | // die automatische Korrektur wird ausgeschaltet | ||
+ | ps3.setParameter(PS3_PARAM.AUTO_WHITEBALANCE, 0); | ||
+ | delay(10); | ||
+ | ps3.setParameter(PS3_PARAM.AUTO_EXPOSURE, 0); | ||
+ | delay(10); | ||
+ | ps3.setParameter(PS3_PARAM.AUTO_GAIN, 0); | ||
+ | delay(10); | ||
+ | } | ||
+ | |||
+ | public void draw() { | ||
+ | //holt das aktuelle Bild von der Kamera und speichert es in img ab | ||
+ | assignPixels(ps3, img); | ||
+ | //malt das Bild | ||
+ | image(img, 0, 0); | ||
+ | img.loadPixels(); | ||
+ | wertschaetzer.schaetzeUmgebungswert(img); | ||
+ | if (kalibrierung == false) { | ||
+ | farbPunktFinder.kalibriereFarben(img); | ||
+ | } | ||
+ | else if (fernsteuerung == true) { | ||
+ | fernsteuerer.steuere(); | ||
+ | } | ||
+ | else { | ||
+ | //Wenn eine Taste gedrückt wird, wird geprüft ob es | ||
+ | if (keyPressed==true) { | ||
+ | if (key =='k') { | ||
+ | //wenn die Taste k gedrückt wurde, kommt man wieder in die Kalibrierungsschleife | ||
+ | kalibrierung=false; | ||
+ | } | ||
+ | if (key =='n') { | ||
+ | //wenn die Taste n gedrückt wurde, werden die bisher gespeicherten Punkte gelöscht | ||
+ | routenplaner.loescheRoute (true); | ||
+ | //Das Abfahren der Route beginnt wieder am ersten Punkt | ||
+ | zaehler = 0; | ||
+ | stift=1; | ||
+ | } | ||
+ | if (key =='b') { | ||
+ | routenplaner.loescheRoute (false); | ||
+ | } | ||
+ | if (key == 'u') { | ||
+ | farbPunktFinder.erhoeheToleranz(); | ||
+ | } | ||
+ | if (key == 'd') { | ||
+ | farbPunktFinder.senkeToleranz(); | ||
+ | } | ||
+ | if (key == 's') { | ||
+ | stop = true; | ||
+ | println("Bild gestoppt"); | ||
+ | } | ||
+ | if (key == 'w') { | ||
+ | stop = false; | ||
+ | println("Das Bild kann jetzt erweitert werden"); | ||
+ | } | ||
+ | if (key == 'l') { | ||
+ | routenplaner.loeschePunkte(); | ||
+ | } | ||
+ | if (key == 'h') { | ||
+ | routenplaner.fuegePunkteHinzu(); | ||
+ | } | ||
+ | if (key == 'm') { | ||
+ | fernsteuerung= true; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | //die drei LEDs werden gesucht und falls sie existieren auf dem Bildschirm dargestellt | ||
+ | farbPunktFinder.findePunkte(img); | ||
+ | farbPunktFinder.zeichnePunkte(); | ||
+ | //die Route wird, falls möglich erweitert und auf dem Bildschirm dargestellt | ||
+ | routenplaner.erweitereRoute(); | ||
+ | routenplaner.zeichneRoute(); | ||
+ | //println(sqrt(sq(farbPunktFinder.gruenposition.x-farbPunktFinder.blauposition.x)+sq(farbPunktFinder.gruenposition.y-farbPunktFinder.blauposition.y))); | ||
+ | if (zaehler < routenplaner.punktfolge.size()) { | ||
+ | if (navigator.messeEntfernung(zaehler)==true) { | ||
+ | if (zaehler < routenplaner.punktfolge.size()-1) { | ||
+ | zaehler++; | ||
+ | //Wenn der Abstand zwischen zwei Punkten der Route kleiner ist, als ein bestimmter Wert, soll zwischen diesen Punkten gemalt werden | ||
+ | if (sqrt(sq(routenplaner.punktfolge.get(zaehler-1).x-routenplaner.punktfolge.get(zaehler).x)+sq(routenplaner.punktfolge.get(zaehler-1).y-routenplaner.punktfolge.get(zaehler).y))<100) { | ||
+ | stift = 0; | ||
+ | } | ||
+ | else { | ||
+ | stift = 1; | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | //Die Winkel und Abstand werden berechnet und an den Arduino geschickt | ||
+ | navigator.sendeDaten(zaehler); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | |||
+ | public void assignPixels(PS3 ps3, PImage img) { | ||
+ | img.loadPixels(); | ||
+ | ps3.getFrame(img.pixels); | ||
+ | img.updatePixels(); | ||
+ | } | ||
+ | |||
+ | public void dispose() { | ||
+ | PS3.shutDown(); | ||
+ | } | ||
</file> | </file> |