Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

projektews2013:lagemaro:start:fnfsn
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();
}
projektews2013/lagemaro/start/fnfsn.txt · Zuletzt geändert: 2016/01/21 12:45 (Externe Bearbeitung)