Hallo Miteinander,
20 Uhr ist vorbei, also dürft ihr die Ergebnisse bewerten !
Da wir nur zu zweit sind, finde ich jetzt einfach mal das Nikolaushaus von izazeba am besten.
Hier mein Code, damit ihr das ganze zu Hause auch mal probieren könnt:
das Programm hat 3 Funktionen:Code:/************************************************************************************* Programm für ASURO-Wettbewerb Nikolaushaus das Programm hat 3 Funktionen: Schalter2: Linienkallibrierung Schalter3: Drehkalibrierung, hier muss im Programm der Drehwert für den 360°Winkel auf die Eigenheiten des Asuro angepasst werden Schalter4: Start der Zeichnung (copyright ) 26.6.2005 stochri This program is free software under GNU-2-license. *************************************************************************************/ #include "asuro.h" // bitte library von weja im roboternetz benutzen // asuro.h und asuro.c vom 31.03.05 #define aus MotorDir(BREAK,BREAK) int rightspeed=141; // precalibration of stochri's ASURO int leftspeed=150; int trightspeed=131; // precalibration of stochri's ASURO int tleftspeed=150; /************************************************************************************* Calibration Routine for ASURO Motors Goal: Motorpowerregulation that ASURO goes a straight line *************************************************************************************/ void straightcalib() { Encoder_Set(0,0); // reset encoder MotorSpeed(leftspeed,rightspeed); MotorDir(FWD,FWD); Msleep(1000); aus; Msleep(500); MotorDir(RWD,RWD); Msleep(1000); aus; SerWrite("\n\r encoder Left,Right ",22); PrintInt(encoder[LEFT]); PrintInt(encoder[RIGHT]); SerWrite(" speed Left,Right ",19); PrintInt(leftspeed); PrintInt(rightspeed); Msleep(1000); // Regelung if(encoder[RIGHT]<encoder[LEFT]) rightspeed++; if(encoder[RIGHT]>encoder[LEFT]) rightspeed--; } /************************************************************************************* Calibration Routine for ASURO Motors Goal: Motorpowerregulation that ASURO goes a straight line *************************************************************************************/ void turncalib() { Encoder_Set(0,0); // reset encoderii MotorSpeed(tleftspeed,trightspeed); MotorDir(RWD,FWD); while(encoder[LEFT]<157) Msleep(1); aus; SerWrite("\n\r encoder Left,Right ",22); PrintInt(encoder[LEFT]); PrintInt(encoder[RIGHT]); SerWrite(" speed Left,Right ",19); PrintInt(tleftspeed); PrintInt(trightspeed); Msleep(1000); // Regelung if(encoder[RIGHT]<encoder[LEFT]) trightspeed+=1; if(encoder[RIGHT]>encoder[LEFT]) trightspeed-=1; } // degrees void turn(int degree) { int deg_count; deg_count=degree*155; deg_count/=360; Encoder_Set(0,0); // reset encoder MotorSpeed(tleftspeed,trightspeed); MotorDir(RWD,FWD); while(encoder[LEFT]<deg_count) Msleep(1); aus; } // distance ~mm, max 32meter void go(int distance) { int enc_count; enc_count=distance; // enc_count=distance*10000; // enc_count/=12823; Encoder_Set(0,0); // reset encoder MotorSpeed(leftspeed,rightspeed); MotorDir(FWD,FWD); while(encoder[LEFT]<enc_count) Msleep(1); aus; } #define w2vor { go(143); Msleep(500);} #define w2halbe_vor { go(71); Msleep(500);} #define vor { go(100); Msleep(500);} #define links45 { turn(180); Msleep(500);turn(135);Msleep(500);} #define links90 { turn(90); Msleep(500);} #define links135 { turn(135); Msleep(500);} void nikolaus(void) { links45; w2vor; links90; w2halbe_vor; links90; w2halbe_vor; links90; w2vor; links135; vor; links90; vor; links90; vor; links90; vor; } int main(void) { int n; Init(); Encoder_Init(); StatusLED(OFF); SerWrite("\n\r motor calibration V0.1 \n\r",28); while(1) { n=PollSwitch (); if(n==2) { SerWrite("\n\r staightcalib \n\r",18); Msleep(3000); for(n=0;n<5;n++) straightcalib(); } if(n==4) { SerWrite("\n\r turncalib \n\r",15); Msleep(3000); for(n=0;n<5;n++) turncalib(); } if(n==8) { SerWrite("\n\r nikolaus \n\r",14); Msleep(3000); nikolaus(); } StatusLED(RED); Msleep(500); StatusLED(GREEN); Msleep(500); } return 0; }
Schalter2: Linienkallibrierung
Schalter3: Drehkalibrierung, hier muss im programm der Drehwert
für den 360°Winkel auf die Eigenheiten des Asuro angepasst werden
Schalter4: Start der Zeichnung
Das Papier für die Zeichnungen habe ich im Baumarktgekauft: Papiertischtecke für 1,69 Euro.
Ich muss gestehen, das Ganze hat mich mehr Zeit gekostet als erwartet. Meiner Meinung nach handelt es sich bei der Nilolaushauszeichnung um eine ganz schön harte Nuss. Und bei mir hat es auch erst nach einigen Kalibrierversuchen geklapt. Soweit ich informiert bin, haben sich schon ganze Forschungsabteilungen an der Odometrieproblematik aufgerieben.
Wer´s nicht glaubt, kann es gerne mal testen.
Ein großes Problem ist beispielsweise, dass man die Motoren während der Fart schwer regeln kann, damit eine gerade Linie entsteht und bei der Drehung hängt der Schlupf des Asuro von der Unterlage und der Andruckkraft des Stiftes ab.
Wie wars bei Dir izazeba ? Ich hab gesehen, Du konntest die kleinen Kreise an den Ecken vermeiden.
Gruss,
stochri







Zitieren

Lesezeichen