Hallo Miteinander,
hier der Source-Code. Eigentlich wolte ich den ja bis morgen nach dem Wettbewerb zurückhalten, aber was solls:
Code:
#include "asuro.h" // bitte die neue Datei benutzen
// asuro.h und asuro.c vom 31.03.05
#define aus MotorDir(BREAK,BREAK)
#define go {MotorSpeed(150,150);MotorDir(FWD,FWD);}
#define backturn { MotorSpeed(150,250);MotorDir(RWD,RWD);Msleep(1000);}
/*************************************************************************************
ASURO discovers your apartment
program made by stochri july, 2005
*************************************************************************************/
int speed()
{
int rightspeed,leftspeed;
int leftold,rightold;
Encoder_Set(0,0); // reset encoder
leftold=encoder[LEFT];
rightold=encoder[RIGHT];
Msleep(300);
leftspeed=encoder[LEFT]-leftold;
rightspeed=encoder[RIGHT]-rightold;
//SerWrite(" speed Left,Right ",19);
//PrintInt(leftspeed);
//PrintInt(rightspeed);
return leftspeed+rightspeed;
}
int main(void)
{
int n,v,nullspeed;
Init();
Encoder_Init();
StatusLED(OFF);
SerWrite("\n\rASURO OK\n\r",8);
go;
Msleep(500);
nullspeed=speed()-10;
while(1)
{
v=speed();
SerWrite("\n\r speed ",9);
PrintInt(v);
if(v<nullspeed)
{
backturn;
go;
Msleep(500);
}
}
return 0;
}
Das Programm hat viel besser funktioniert, als ich es erwartet habe. Gestern habe ich meinen ASURO fast eine Stunde durch die Wohnung fahren lassen. Er hat so ziemlich alle Zimmer erkundet, ohne dass er irgendwo hängen geblieben ist. Übrigens auch erstaunlich, dass die Akkus so lange halten.
Ich habe mir letztes Jahr mal einen heruntergesetzten Roboterstaubsauger im Wal-Mart fuer 20 Euro gekauft. Der bleibt ziemlich oft mal irgendwo stecken. Da funtkioniert der ASURO mit dem Programm schon wesentlich besser. Der Staubsauger hat vorne 2 Schalter, die hinter einem großen Bumper installiert sind. Und meine Meinung ist, dass so ziemlich alle normallerweise für das Problem eingesetzen Sensoren ( Ultraschall, IR-Abstand, Schalter ) das Steckenbleiben des Roboters nicht verhindern können und dass das im obigen Programm angewendete Verfahren wesentlich besser funktioniert.
Das Ganze wirft auch schon einige interssante mathematische Fragestellungen auf: Wie muss ein Roboter, wenn er gegen ein Hindernis im Zimmer prallt, sich verhalten, damit er möglichst die gesamte Fläche des Raumes mindestens einmal befahren hat ( ein wichtiger Aspekt für Roboterstaubsauger ). Wäre vielleicht eine schöne Aufgabe für einen neuen Wettbewerb.
Gruss,
stochri
Lesezeichen