Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
projektews2013:lagemaro:start:navi [2014/03/07 19:17] philippkueckes angelegt |
projektews2013:lagemaro:start:navi [2016/01/21 12:45] (aktuell) |
||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | <file C++ Robo_Läuft.ino> | + | <file C++ Navigator.ino> |
+ | class Navigator { | ||
+ | boolean messeEntfernung(int nummer) { | ||
+ | // misst die Enfernung zwischen dem Roboter und dem momentan anzufahrenden Punkt | ||
+ | if ((sqrt(sq(routenplaner.punktfolge.get(nummer).x-farbPunktFinder.blauposition.x)+sq(routenplaner.punktfolge.get(nummer).y-farbPunktFinder.blauposition.y)))<20) { | ||
+ | return true; | ||
+ | } | ||
+ | // der momentan anzufahrende Punkt wird mit zwei Ellipsen makiert | ||
+ | else { | ||
+ | stroke(255, 0, 0); | ||
+ | ellipse(routenplaner.punktfolge.get(nummer).x, routenplaner.punktfolge.get(nummer).y, 5, 10 ); | ||
+ | ellipse(routenplaner.punktfolge.get(nummer).x, routenplaner.punktfolge.get(nummer).y, 10, 5 ); | ||
+ | return false; | ||
+ | } | ||
+ | } | ||
+ | void sendeDaten(int nummer) { | ||
+ | boolean sinnvoll; | ||
+ | // es sollen nur dann ein Wert gesendet werden, wenn die richtigen LEDs gefunden wurden. | ||
+ | // wenn der Abstand zwischen den LEDs zu groß ist, kann das nicht stimmen | ||
+ | if ((sqrt(sq(farbPunktFinder.gruenposition.y-farbPunktFinder.blauposition.y)+sq(farbPunktFinder.gruenposition.x-farbPunktFinder.blauposition.x)))<50) { | ||
+ | sinnvoll = true; | ||
+ | } | ||
+ | else { | ||
+ | sinnvoll = false; | ||
+ | } | ||
+ | //float massstab= 4/(sqrt(sq(farbPunktFinder.gruenposition.y-farbPunktFinder.blauposition.y)+sq(farbPunktFinder.gruenposition.x-farbPunktFinder.blauposition.x))); | ||
+ | //der Winkel wird berechnet | ||
+ | if (farbPunktFinder.gruenposition.qualitaet==true && farbPunktFinder.blauposition.qualitaet==true&&sinnvoll==true) { | ||
+ | float beta = atan2((routenplaner.punktfolge.get(nummer).y-farbPunktFinder.blauposition.y), (routenplaner.punktfolge.get(nummer).x-farbPunktFinder.blauposition.x)); | ||
+ | float gamma = atan2((farbPunktFinder.gruenposition.y-farbPunktFinder.blauposition.y), (farbPunktFinder.gruenposition.x-farbPunktFinder.blauposition.x)); | ||
+ | float winkel=beta-gamma; | ||
+ | if (winkel>PI) { | ||
+ | winkel=winkel-2*PI; | ||
+ | } | ||
+ | if (winkel<-PI) { | ||
+ | winkel= winkel+2*PI; | ||
+ | } | ||
+ | //der Abstand wird berechnet | ||
+ | float abstand= (sqrt(sq(routenplaner.punktfolge.get(nummer).y-farbPunktFinder.blauposition.y)+sq(routenplaner.punktfolge.get(nummer).x-farbPunktFinder.blauposition.x)))/2.6; | ||
+ | //Abstand, Winkel und Information über den Stift werden an den Arduino gesendet | ||
+ | OscMessage winkelMessage = new OscMessage("/someFloat"); | ||
+ | OscMessage abstandMessage = new OscMessage("/someInt"); | ||
+ | OscMessage stiftMessage = new OscMessage("stift"); | ||
+ | |||
+ | stiftMessage.add(stift); | ||
+ | winkelMessage.add(winkel); // add a float to the osc message | ||
+ | abstandMessage.add(abstand); // add a float to the osc message | ||
+ | println("send"+winkel); | ||
+ | println("send"+abstand); | ||
+ | println("send stift "+stift); | ||
+ | if (abstand>2) { | ||
+ | // send the message | ||
+ | oscP5.send(winkelMessage, myRemoteLocation); | ||
+ | delay(100); | ||
+ | oscP5.send(abstandMessage, myRemoteLocation); | ||
+ | delay(100); | ||
+ | oscP5.send(stiftMessage, myRemoteLocation); | ||
+ | delay(100); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | // die festgelegten Werte über Winkel, Abstand und Stift werden an den Arduino gesendet | ||
+ | void sende(float winkel, float abstand) { | ||
+ | println("sende winkel = "+winkel); | ||
+ | println("sende abstand = "+abstand); | ||
+ | OscMessage winkelMessage = new OscMessage("/someFloat"); | ||
+ | OscMessage abstandMessage = new OscMessage("/someInt"); | ||
+ | OscMessage stiftMessage = new OscMessage("stift"); | ||
+ | |||
+ | stiftMessage.add(stift); | ||
+ | winkelMessage.add(winkel); // add a float to the osc message | ||
+ | abstandMessage.add(abstand); | ||
+ | |||
+ | oscP5.send(winkelMessage, myRemoteLocation); | ||
+ | delay(100); | ||
+ | oscP5.send(abstandMessage, myRemoteLocation); | ||
+ | delay(100); | ||
+ | } | ||
+ | } | ||
</file> | </file> |