Striche zählen in Java/leJOS mit NXT
Hallo, ich möchte einen Roboter programmieren der einer Line folgt.
Soweit bin ich auch bereits anschliessend soll er allerdings auf eine Kreuzung fahren, sich komplett drehen und dabei zählen wie viele Ausgänge es gibt. Danach soll er sich per Zufall für einen der Wege entscheiden und diesen weiterfahren.
Habt ihr Ideen wie man das lösen kann?
LG Max
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.
Bei Schritt 2 muss er sich einmal komplett drehen, daher musst du iwie kontrollieren wann er ganz rum ist.
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.
Kreuzungen sind in etwa rechtwinklig und es ist schwarzes Isolierband oder ähnliches auf weißem Papier. Das ganze soll per Lichtsensor erkannt werden
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(); } } }