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:
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;
}
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
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
Lesezeichen