Striche zählen in Java/leJOS mit NXT

2 Antworten

Hier wäre so der Ablauf für eine Umsetzung, musst du nur passend zu deinem Code implementieren:

1. Feststellen: Ist der Roboter auf einer Kreuzung?

2. Zählen der Ausgänge, für jeden Ausgang in einer Art Array den Dreh-Winkel zur Ursprungsposition speichern.

3. Zufallszahl entsprechend der Anzahl an Ausgängen auf die Position in dem Array

4. Winkel entnehmen

5. Entsprechend drehen und weitermachen.


TUrabbIT  23.04.2015, 20:04

Bei Schritt 2 muss er sich einmal komplett drehen, daher musst du iwie kontrollieren wann er ganz rum ist.

0

http://www.legorobotik.ch/index.php?inhalt_links=nxtSim/nav_nxtSim.inc.php&inhalt_mitte=NxtSim/lichtsensor.inc.php

[weiß nich' .. kein code, nur programflow:]

/° drehen und Ausgänge zählen: °/

while ( left < 360° ) {

    while (Sensorwert != SchwarzeLinie) {   linksdrehen(1°); left +=1;   }

    Ausgänge += 1;

}

/° per Math.random() einen aussuchen °/

Ausgang = int(Math.random() * Ausgänge);

while (int i < Ausgang) {         // i zählt erneut Ausgänge, wie vorhin "Ausgänge"

     linksdrehen(1°);

     if (Sensorwert == SchwarzeLinie) {    i +=1;   }

}

.. der nächste Ausgang wird genommen .. Problem ist nur, daß er bei der ganzen Breite eines gefundenen Ausgangs nicht dieselbe Linie endlos in winzigen Rücken (1°) weiter zählt, .. da müßte man ggf eine weiter Schleife einbauen, die das verhindert oder einfach an der Stelle ein paar Grad weiterdrehen, bis man sicher den Sensor von der Linie wieder weg hat  o h n e  bereits auf einem weiteren Ausgang zu liegen ..

So ganz ohne code, den Du schon hast und ohne zu wissen, wie die Kreuzung aussieht (rechtwinklig? unregelmäßiger Stern?) wie per Farbe? per Lichtsensor? eine mitgelieferte Robo-Arena? selbstgemalt?? ist es von außen sehr schwer blind was Genaues vorzuschlagen.



TUrabbIT  23.04.2015, 20:02

Problem ist nur, daß er bei der ganzen Breite eines gefundenen Ausgangs nicht dieselbe Linie endlos in winzigen Rücken (1°) weiter zählt

Würde ich in der Art realisieren: (Methoden müssten ggf implementiert werden oder ähnlich gelöst):

while(notfinished) {

if(checkLine()=true) { exitCount++; while(checkLine()=true) { turnRight(); } } }

0
DerVerfasser 
Fragesteller
 24.04.2015, 09:50

Kreuzungen sind in etwa rechtwinklig und es ist schwarzes Isolierband oder ähnliches auf weißem Papier. Das ganze soll per Lichtsensor erkannt werden

0