Liste der Anhänge anzeigen (Anzahl: 1)
Asuro Simulieren
Hier gibt es einen Robotersimulator in Java, der einen Asuro simuliert.
Man kann den Code für den Asuro im Simulator in Java schreiben. Der Code für den Roboter findet sich im File "AsuroProgramm.java".
Das sieht dann Beispielsweise so aus:
Code:
/*******************************************************************************************
*
* Beispielprogramm für Asuro Simulator
*
*
* Blinken und im Kreis fahren
*
*
* Bedienhinweis:
* Zum Ausführen des Programms muss das File in "AsuroProgramm.java" umbenannt
* werden. Danach muss das Programm compiliert werden. Das geht in der Kommandozeile
* mit "javac AsuroProgramm.java" oder durch anklicken des Batch-Files "makeprog.bat"
* Gestartet wird der Simulator dann durch anklicken von "start.bat".
*
* robo.fr, May 2010
*
*******************************************************************************************/
private void blinken(int k)
{
int n;
for(n=0;n<k;n++)
{
asuro.MSleep(500);
asuro.StatusLED(LedColor.GREEN);
asuro.MSleep(500);
asuro.StatusLED(LedColor.OFF);
}
}
public void asuroMain()
{
blinken(2);
asuro.SerPrint("Asuro Simulator ready !!");
while(true)
{
// Motoren einstellen: linker Motor etwas schneller
asuro.MotorSpeed(100,100);
asuro.MotorDir(AsuroMotor.FWD,AsuroMotor.FWD);
// so lange fahren, bis Hindernis kommt
while(asuro.PollSwitch()==0);
asuro.PrintInt(asuro.PollSwitch());
asuro.StatusLED(LedColor.RED);
// zurückfahen
asuro.MotorDir(AsuroMotor.RWD,AsuroMotor.RWD);
asuro.MSleep(500);
asuro.StatusLED(LedColor.OFF);
// drehen
asuro.MotorDir(AsuroMotor.FWD,AsuroMotor.RWD);
asuro.MSleep(500);
// Motoren ausschalten
asuro.MotorDir(AsuroMotor.BREAK,AsuroMotor.BREAK);
blinken(1);
}
}
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo robo.fr,
tolles Programm, dass Du da geschrieben hast, insbesondere weil man die Spielarena beliebig gestalten kann!
Hab etwas damit rumgespielt, und den Code um eine Kollisionserkennung erweitert, sodass der Robi nicht durch eine Wand fahren kann, selbst wenn er das will. Dazu wird der Roboter in ein seperates Bitmap gezeichnet und die Pixel mit den Pixeln des hintergrundbildes verglichen. Bei einer Kollision bleibt der Roboter einfach stehen, ansonsten wird seine Position auf den neu berechneten Wert gesetzt.
Damit die Bewegungen nicht mehr so zackig sind, haben beider Rädes der Roboters jetzt jeweils eine eigene tatsächliche Geschwindigkeit. Diese passt sich bei jedem Bewegungsschritt der Soll-Geschwindigkeit aus MotorSpeed() stück für stück an, sodass der Eindruck von Trägheit entsteht. Der Anpassungsfaktor (Robot.accel_fact) kann frei eingestellt werden.
Cool wäre es, wenn man auch die Helligkeitssensoren simulieren könnte, damit auch Linienverfolgung möglich wäre.
MfG Mark
Edit: die Helligkeitssensoren funktionieren jetzt auch, es wird die durchschnittliche Helligkeit der Pixel eines 3x3 Blocks des Hintergrundbildes berechnet. Wände zur Kollisionserkennung müssen Rot sein, ansonsten werden sie nicht als solche erkannt.
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Mark,
Deine Erweiterungen finde ich sehr gut. Ich habe die einzelnen Methoden von Dir kommentiert und mit Kommentaren versehen. Deinen Nickname habe ich in die Beschreibungen eingetragen.
Für eine Erweiterung des Simulators wäre es meiner Meinung nach sehr toll, wenn man mehrere Roboter oder Gegenständer simulieren könnte. Dann wäre es möglich simulierte Roboterwettkämpfe zu machen.
Man könnte vielleicht so etwas wie diesen Wettkampf simulieren:
http://www.youtube.com/watch?v=oscbdxMhX_4
Was hältst Du davon?