Subversion Repositories svnkaklik

Compare Revisions

No changes between revisions

Regard whitespace Rev 4 → Rev 5

/roboti/istrobot/callis/CARA.xls
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/Callis.bak
0,0 → 1,202
// Soutezni robot pro Istrobot 2004
// $Archive: /Lego/Callis/callis.nqc $
// $Date: 27.04.04 21:19 $
// $Revision: 23 $
 
#define THRESHOLD 50 // rozhodovaci uroven mezi cernou a bilou
#define ML OUT_A // Motory
#define MR OUT_C
#define FL OnFwd(ML) // Vpred
#define FR OnRev(MR)
#define BL OnRev(ML) // Vzad
#define BR OnFwd(MR)
#define RSENSOR SENSOR_3 // Senzory na caru
#define LSENSOR SENSOR_1
#define BUMPER SENSOR_2 // Senzor na cihlu
#define MEZERA 38 // jak se muze jet dlouho bez cary
#define COUVEJ 70 // kolik se ma couvat po detekci diry
#define CIKCAK 40 // kolik se ma jet cik/cak
#define PRES_DIRU 35 // jak predpokladame velkou diru
 
#define L 0 // left
#define R 1 // right
#define S 2 // straight
 
#define STOP Off(ML + MR); Wait(10); // zastav 8
 
int movement; // smer minuleho pohybu
int line; // na ktere strane byla detekovana cara
int dira; // pocitadlo pro nalezeni preruseni cary
int n; // pomocna promena pro cyklus FOR
 
 
void cikcak() // Hledani cary
{
n=CIKCAK/2; // poprve hned zatoc opacne, nez se jelo pred detekci diry
switch(movement) // zmenime smer zataceni
{
case L:
FL; BR; // doprava
movement=R; // poznamenej kam jedem
line=L; // kdyz prejedem, tak bude cara vlevo
break;
case R:
FR; BL; // doleva
movement=L; // poznamenej kam jedem
line=R; // kdyz prejedem, tak bude cara vpravo
break;
}
 
while(true) // jed cik-cak, dokud nenajdes caru
{
if ((THRESHOLD < RSENSOR) || (THRESHOLD < RSENSOR)) // je cara ?
{
STOP;
break;
};
if (CIKCAK < n++) // Jedeme uz dost dlouho cik? Pak jed cak.
{
n=0;
STOP;
switch(movement) // zmenime smer zataceni
{
case L:
FL; BR; // doprava
movement=R; // poznamenej kam jedem
line=L; // kdyz prejedem, tak bude cara vlevo
break;
case R:
FR; BL; // doleva
movement=L; // poznamenej kam jedem
line=R; // kdyz prejedem, tak bude cara vpravo
break;
}
}
}
}
 
task main()
{
PlaySound (SOUND_DOUBLE_BEEP);
Wait(100); // 1s
SetSensor(RSENSOR,SENSOR_LIGHT); // senzor na caru modry pravy
SetSensor(LSENSOR,SENSOR_LIGHT); // senzor na caru modry levy
SetSensor(BUMPER,SENSOR_TOUCH); // sensor na prekazku
 
SetPower (ML,OUT_FULL); // vykon motoru
SetPower (MR,OUT_FULL);
movement=R;
line=S;
dira=0;
cikcak(); // toc se, abys nasel caru
FL; FR; // vpred
 
// Sledovani cary
while(true)
{
if(BUMPER) // je cihla?
{
PlaySound(SOUND_DOWN);
objizdka(); // objed cihlu
}
 
if (THRESHOLD < RSENSOR) // Cara pod pravym senzorem
{
dira=0; // nuluj pocitadlo diry, protoze jsme videli caru
line=R; // zaznamenej, kdes videl caru
FL; FR; // rovne
continue;
}
 
if (THRESHOLD < LSENSOR) // Cara pod levym senzorem
{
dira=0; // nuluj pocitadlo diry, protoze jsme videli caru
line=L; // zaznamenej, kdes videl caru
FL; FR; // rovne
continue;
}
 
// oba senzory mimo caru
 
if (0==dira) // v prvnim cyklu po ztrate cary zacneme zahybat
// v ostatnich cyklech nedelame nic (pro urychleni snimani)
{
switch(line) // kdyz nevidis caru, tak jed tam, kdes ji videl naposled
{
case L:
Off(ML); // doleva
movement=L; // poznamenej kam jedes
break;
case R:
Off(MR); // doprava
movement=R; // poznamenej kam jedes
break;
};
dira++; // zvets pocitadlo diry, aby to pristi cyklus tudy neslo
continue; // co nejrychleji se vrat na snimani cary
}
 
if (MEZERA < dira++) // nejedeme uz moc dlouho bez cary?
{
dira=0;
PlaySound (SOUND_FAST_UP);
switch(movement) // kam se jelo ?
{
case L:
Off(ML); // couvej doprava
BR;
Wait(COUVEJ+10);
movement=R;
break;
case R:
BL; // couvej doleva
Off(MR);
Wait(COUVEJ);
movement=L;
break;
}
PlaySound(SOUND_CLICK);
STOP; // konec couvani
FL; FR; // rovne pres diru
Wait(PRES_DIRU);
STOP;
cikcak(); // najdi caru
FR; FL; // vpred
} // dira
} // while(true)
}
 
void objizdka()
{
BL; BR; // zacouvej
Wait(15);
STOP;
 
cikcak(); // vyrovnej se na caru
cikcak(); // radeji 3x, aby se vyrovnaly setrvacne sily
cikcak();
 
BL; FR; Wait(22); // vlevo
STOP;
FL; FR; Wait(65); // rovne
STOP;
FL; BR; Wait(22); // vpravo
STOP;
FL; FR; Wait(77); // rovne
STOP;
FL; BR; Wait(22); // vpravo
STOP;
FL; FR;
Wait(20); // kousek rovne
// rovne, dokud nenarazis na caru
while(THRESHOLD > RSENSOR); // pravej senzor, protoze cihla je vpravo
STOP;
BL; FR; // toc se doleva, dokud nenarazis na caru
while(THRESHOLD > LSENSOR); // levej senzor, protoze cara je urcite vlevo
STOP;
line=R; // caru predpokladame vpravo, kdybysme ji prejeli
dira=0;
FL; FR; // vpred
}
/roboti/istrobot/callis/Callis.nqc
0,0 → 1,202
// Soutezni robot pro Istrobot 2004
// $Archive: /Lego/Callis/callis.nqc $
// $Date: 27.04.04 22:51 $
// $Revision: 24 $
 
#define THRESHOLD 50 // rozhodovaci uroven mezi cernou a bilou
#define ML OUT_A // Motory
#define MR OUT_C
#define FL OnFwd(ML) // Vpred
#define FR OnRev(MR)
#define BL OnRev(ML) // Vzad
#define BR OnFwd(MR)
#define RSENSOR SENSOR_3 // Senzory na caru
#define LSENSOR SENSOR_1
#define BUMPER SENSOR_2 // Senzor na cihlu
#define MEZERA 38 // jak se muze jet dlouho bez cary
#define COUVEJ 70 // kolik se ma couvat po detekci diry
#define CIKCAK 40 // kolik se ma jet cik/cak
#define PRES_DIRU 35 // jak predpokladame velkou diru
 
#define L 0 // left
#define R 1 // right
#define S 2 // straight
 
#define STOP Off(ML + MR); Wait(10); // zastav 8
 
int movement; // smer minuleho pohybu
int line; // na ktere strane byla detekovana cara
int dira; // pocitadlo pro nalezeni preruseni cary
int n; // pomocna promena pro cyklus FOR
 
 
void cikcak() // Hledani cary
{
n=CIKCAK/2; // poprve hned zatoc opacne, nez se jelo pred detekci diry
switch(movement) // zmenime smer zataceni
{
case L:
FL; BR; // doprava
movement=R; // poznamenej kam jedem
line=L; // kdyz prejedem, tak bude cara vlevo
break;
case R:
FR; BL; // doleva
movement=L; // poznamenej kam jedem
line=R; // kdyz prejedem, tak bude cara vpravo
break;
}
 
while(true) // jed cik-cak, dokud nenajdes caru
{
if ((THRESHOLD < RSENSOR) || (THRESHOLD < RSENSOR)) // je cara ?
{
STOP;
break;
};
if (CIKCAK < n++) // Jedeme uz dost dlouho cik? Pak jed cak.
{
n=0;
STOP;
switch(movement) // zmenime smer zataceni
{
case L:
FL; BR; // doprava
movement=R; // poznamenej kam jedem
line=L; // kdyz prejedem, tak bude cara vlevo
break;
case R:
FR; BL; // doleva
movement=L; // poznamenej kam jedem
line=R; // kdyz prejedem, tak bude cara vpravo
break;
}
}
}
}
 
task main()
{
PlaySound (SOUND_DOUBLE_BEEP);
Wait(100); // 1s
SetSensor(RSENSOR,SENSOR_LIGHT); // senzor na caru modry pravy
SetSensor(LSENSOR,SENSOR_LIGHT); // senzor na caru modry levy
SetSensor(BUMPER,SENSOR_TOUCH); // sensor na prekazku
 
SetPower (ML,OUT_FULL); // vykon motoru
SetPower (MR,OUT_FULL);
movement=R;
line=S;
dira=0;
cikcak(); // toc se, abys nasel caru
FL; FR; // vpred
 
// Sledovani cary
while(true)
{
if(BUMPER) // je cihla?
{
PlaySound(SOUND_DOWN);
objizdka(); // objed cihlu
}
 
if (THRESHOLD < RSENSOR) // Cara pod pravym senzorem
{
dira=0; // nuluj pocitadlo diry, protoze jsme videli caru
line=R; // zaznamenej, kdes videl caru
FL; FR; // rovne
continue;
}
 
if (THRESHOLD < LSENSOR) // Cara pod levym senzorem
{
dira=0; // nuluj pocitadlo diry, protoze jsme videli caru
line=L; // zaznamenej, kdes videl caru
FL; FR; // rovne
continue;
}
 
// oba senzory mimo caru
 
if (0==dira) // v prvnim cyklu po ztrate cary zacneme zahybat
// v ostatnich cyklech nedelame nic (pro urychleni snimani)
{
switch(line) // kdyz nevidis caru, tak jed tam, kdes ji videl naposled
{
case L:
Off(ML); // doleva
movement=L; // poznamenej kam jedes
break;
case R:
Off(MR); // doprava
movement=R; // poznamenej kam jedes
break;
};
dira++; // zvets pocitadlo diry, aby to pristi cyklus tudy neslo
continue; // co nejrychleji se vrat na snimani cary
}
 
if (MEZERA < dira++) // nejedeme uz moc dlouho bez cary?
{
dira=0;
PlaySound (SOUND_FAST_UP);
switch(movement) // kam se jelo ?
{
case L:
Off(ML); // couvej doprava
BR;
Wait(COUVEJ+10);
movement=R;
break;
case R:
BL; // couvej doleva
Off(MR);
Wait(COUVEJ);
movement=L;
break;
}
PlaySound(SOUND_CLICK);
STOP; // konec couvani
FL; FR; // rovne pres diru
Wait(PRES_DIRU);
STOP;
cikcak(); // najdi caru
FR; FL; // vpred
} // dira
} // while(true)
}
 
void objizdka()
{
BL; BR; // zacouvej
Wait(15);
STOP;
 
cikcak(); // vyrovnej se na caru
cikcak(); // radeji 3x, aby se vyrovnaly setrvacne sily
cikcak();
 
BL; FR; Wait(22); // vlevo
STOP;
FL; FR; Wait(65); // rovne
STOP;
FL; BR; Wait(22); // vpravo
STOP;
FL; FR; Wait(77); // rovne
STOP;
FL; BR; Wait(21); // vpravo
STOP;
FL; FR;
Wait(20); // kousek rovne
// rovne, dokud nenarazis na caru
while(THRESHOLD > RSENSOR); // pravej senzor, protoze cihla je vpravo
STOP;
BL; FR; // toc se doleva, dokud nenarazis na caru
while(THRESHOLD > LSENSOR); // levej senzor, protoze cara je urcite vlevo
STOP;
line=R; // caru predpokladame vpravo, kdybysme ji prejeli
dira=0;
FL; FR; // vpred
}
/roboti/istrobot/callis/Callis_NQC.PDF
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/Callis_R.bak
0,0 → 1,203
// Soutezni robot pro Istrobot 2004
// Objeti cihly vpravo
// $Archive: /Lego/Callis/Callis_R.nqc $
// $Date: 27.04.04 20:52 $
// $Revision: 3 $
 
#define THRESHOLD 50 // rozhodovaci uroven mezi cernou a bilou
#define ML OUT_A // Motory
#define MR OUT_C
#define FL OnFwd(ML) // Vpred
#define FR OnRev(MR)
#define BL OnRev(ML) // Vzad
#define BR OnFwd(MR)
#define RSENSOR SENSOR_3 // Senzory na caru
#define LSENSOR SENSOR_1
#define BUMPER SENSOR_2 // Senzor na cihlu
#define MEZERA 38 // jak se muze jet dlouho bez cary
#define COUVEJ 70 // kolik se ma couvat po detekci diry
#define CIKCAK 40 // kolik se ma jet cik/cak
#define PRES_DIRU 35 // jak predpokladame velkou diru
 
#define L 0 // left
#define R 1 // right
#define S 2 // straight
 
#define STOP Off(ML + MR); Wait(10); // zastav 8
 
int movement; // smer minuleho pohybu
int line; // na ktere strane byla detekovana cara
int dira; // pocitadlo pro nalezeni preruseni cary
int n; // pomocna promena pro cyklus FOR
 
 
void cikcak() // Hledani cary
{
n=CIKCAK/2; // poprve hned zatoc opacne, nez se jelo pred detekci diry
switch(movement) // zmenime smer zataceni
{
case L:
FL; BR; // doprava
movement=R; // poznamenej kam jedem
line=L; // kdyz prejedem, tak bude cara vlevo
break;
case R:
FR; BL; // doleva
movement=L; // poznamenej kam jedem
line=R; // kdyz prejedem, tak bude cara vpravo
break;
}
 
while(true) // jed cik-cak, dokud nenajdes caru
{
if ((THRESHOLD < RSENSOR) || (THRESHOLD < RSENSOR)) // je cara ?
{
STOP;
break;
};
if (CIKCAK < n++) // Jedeme uz dost dlouho cik? Pak jed cak.
{
n=0;
STOP;
switch(movement) // zmenime smer zataceni
{
case L:
FL; BR; // doprava
movement=R; // poznamenej kam jedem
line=L; // kdyz prejedem, tak bude cara vlevo
break;
case R:
FR; BL; // doleva
movement=L; // poznamenej kam jedem
line=R; // kdyz prejedem, tak bude cara vpravo
break;
}
}
}
}
 
task main()
{
PlaySound (SOUND_DOUBLE_BEEP);
Wait(100); // 1s
SetSensor(RSENSOR,SENSOR_LIGHT); // senzor na caru modry pravy
SetSensor(LSENSOR,SENSOR_LIGHT); // senzor na caru modry levy
SetSensor(BUMPER,SENSOR_TOUCH); // sensor na prekazku
 
SetPower (ML,OUT_FULL); // vykon motoru
SetPower (MR,OUT_FULL);
movement=R;
line=S;
dira=0;
cikcak(); // toc se, abys nasel caru
FL; FR; // vpred
 
// Sledovani cary
while(true)
{
if(BUMPER) // je cihla?
{
PlaySound(SOUND_DOWN);
objizdka(); // objed cihlu
}
 
if (THRESHOLD < RSENSOR) // Cara pod pravym senzorem
{
dira=0; // nuluj pocitadlo diry, protoze jsme videli caru
line=R; // zaznamenej, kdes videl caru
FL; FR; // rovne
continue;
}
 
if (THRESHOLD < LSENSOR) // Cara pod levym senzorem
{
dira=0; // nuluj pocitadlo diry, protoze jsme videli caru
line=L; // zaznamenej, kdes videl caru
FL; FR; // rovne
continue;
}
 
// oba senzory mimo caru
 
if (0==dira) // v prvnim cyklu po ztrate cary zacneme zahybat
// v ostatnich cyklech nedelame nic (pro urychleni snimani)
{
switch(line) // kdyz nevidis caru, tak jed tam, kdes ji videl naposled
{
case L:
Off(ML); // doleva
movement=L; // poznamenej kam jedes
break;
case R:
Off(MR); // doprava
movement=R; // poznamenej kam jedes
break;
};
dira++; // zvets pocitadlo diry, aby to pristi cyklus tudy neslo
continue; // co nejrychleji se vrat na snimani cary
}
 
if (MEZERA < dira++) // nejedeme uz moc dlouho bez cary?
{
dira=0;
PlaySound (SOUND_FAST_UP);
switch(movement) // kam se jelo ?
{
case L:
Off(ML); // couvej doprava
BR;
Wait(COUVEJ+10);
movement=R;
break;
case R:
BL; // couvej doleva
Off(MR);
Wait(COUVEJ);
movement=L;
break;
}
PlaySound(SOUND_CLICK);
STOP; // konec couvani
FL; FR; // rovne pres diru
Wait(PRES_DIRU);
STOP;
cikcak(); // najdi caru
FR; FL; // vpred
} // dira
} // while(true)
}
 
void objizdka()
{
BL; BR; // zacouvej
Wait(15);
STOP;
 
cikcak(); // vyrovnej se na caru
cikcak(); // radeji 3x, aby se vyrovnaly setrvacne sily
cikcak();
FL; BR; Wait(23); // vpravo
STOP;
FL; FR; Wait(65); // rovne
STOP;
BL; FR; Wait(23); // vlevo
STOP;
FL; FR; Wait(75); // rovne
STOP;
BL; FR; Wait(23); // vlevo
STOP;
FL; FR;
Wait(20); // kousek rovne
// rovne, dokud nenarazis na caru
while(THRESHOLD > LSENSOR); // levej senzor, protoze cihla je levo
STOP;
FL; BR; // toc se doprava, dokud nenarazis na caru
while(THRESHOLD > RSENSOR); // pravej senzor, protoze cara je urcite vpravo
STOP;
line=L; // caru predpokladame vlevo, kdybysme ji prejeli
dira=0;
FL; FR; // vpred
}
/roboti/istrobot/callis/Callis_R.nqc
0,0 → 1,203
// Soutezni robot pro Istrobot 2004
// Objeti cihly vpravo
// $Archive: /Lego/Callis/Callis_R.nqc $
// $Date: 27.04.04 20:52 $
// $Revision: 3 $
 
#define THRESHOLD 50 // rozhodovaci uroven mezi cernou a bilou
#define ML OUT_A // Motory
#define MR OUT_C
#define FL OnFwd(ML) // Vpred
#define FR OnRev(MR)
#define BL OnRev(ML) // Vzad
#define BR OnFwd(MR)
#define RSENSOR SENSOR_3 // Senzory na caru
#define LSENSOR SENSOR_1
#define BUMPER SENSOR_2 // Senzor na cihlu
#define MEZERA 38 // jak se muze jet dlouho bez cary
#define COUVEJ 70 // kolik se ma couvat po detekci diry
#define CIKCAK 40 // kolik se ma jet cik/cak
#define PRES_DIRU 35 // jak predpokladame velkou diru
 
#define L 0 // left
#define R 1 // right
#define S 2 // straight
 
#define STOP Off(ML + MR); Wait(10); // zastav 8
 
int movement; // smer minuleho pohybu
int line; // na ktere strane byla detekovana cara
int dira; // pocitadlo pro nalezeni preruseni cary
int n; // pomocna promena pro cyklus FOR
 
 
void cikcak() // Hledani cary
{
n=CIKCAK/2; // poprve hned zatoc opacne, nez se jelo pred detekci diry
switch(movement) // zmenime smer zataceni
{
case L:
FL; BR; // doprava
movement=R; // poznamenej kam jedem
line=L; // kdyz prejedem, tak bude cara vlevo
break;
case R:
FR; BL; // doleva
movement=L; // poznamenej kam jedem
line=R; // kdyz prejedem, tak bude cara vpravo
break;
}
 
while(true) // jed cik-cak, dokud nenajdes caru
{
if ((THRESHOLD < RSENSOR) || (THRESHOLD < RSENSOR)) // je cara ?
{
STOP;
break;
};
if (CIKCAK < n++) // Jedeme uz dost dlouho cik? Pak jed cak.
{
n=0;
STOP;
switch(movement) // zmenime smer zataceni
{
case L:
FL; BR; // doprava
movement=R; // poznamenej kam jedem
line=L; // kdyz prejedem, tak bude cara vlevo
break;
case R:
FR; BL; // doleva
movement=L; // poznamenej kam jedem
line=R; // kdyz prejedem, tak bude cara vpravo
break;
}
}
}
}
 
task main()
{
PlaySound (SOUND_DOUBLE_BEEP);
Wait(100); // 1s
SetSensor(RSENSOR,SENSOR_LIGHT); // senzor na caru modry pravy
SetSensor(LSENSOR,SENSOR_LIGHT); // senzor na caru modry levy
SetSensor(BUMPER,SENSOR_TOUCH); // sensor na prekazku
 
SetPower (ML,OUT_FULL); // vykon motoru
SetPower (MR,OUT_FULL);
movement=R;
line=S;
dira=0;
cikcak(); // toc se, abys nasel caru
FL; FR; // vpred
 
// Sledovani cary
while(true)
{
if(BUMPER) // je cihla?
{
PlaySound(SOUND_DOWN);
objizdka(); // objed cihlu
}
 
if (THRESHOLD < RSENSOR) // Cara pod pravym senzorem
{
dira=0; // nuluj pocitadlo diry, protoze jsme videli caru
line=R; // zaznamenej, kdes videl caru
FL; FR; // rovne
continue;
}
 
if (THRESHOLD < LSENSOR) // Cara pod levym senzorem
{
dira=0; // nuluj pocitadlo diry, protoze jsme videli caru
line=L; // zaznamenej, kdes videl caru
FL; FR; // rovne
continue;
}
 
// oba senzory mimo caru
 
if (0==dira) // v prvnim cyklu po ztrate cary zacneme zahybat
// v ostatnich cyklech nedelame nic (pro urychleni snimani)
{
switch(line) // kdyz nevidis caru, tak jed tam, kdes ji videl naposled
{
case L:
Off(ML); // doleva
movement=L; // poznamenej kam jedes
break;
case R:
Off(MR); // doprava
movement=R; // poznamenej kam jedes
break;
};
dira++; // zvets pocitadlo diry, aby to pristi cyklus tudy neslo
continue; // co nejrychleji se vrat na snimani cary
}
 
if (MEZERA < dira++) // nejedeme uz moc dlouho bez cary?
{
dira=0;
PlaySound (SOUND_FAST_UP);
switch(movement) // kam se jelo ?
{
case L:
Off(ML); // couvej doprava
BR;
Wait(COUVEJ+10);
movement=R;
break;
case R:
BL; // couvej doleva
Off(MR);
Wait(COUVEJ);
movement=L;
break;
}
PlaySound(SOUND_CLICK);
STOP; // konec couvani
FL; FR; // rovne pres diru
Wait(PRES_DIRU);
STOP;
cikcak(); // najdi caru
FR; FL; // vpred
} // dira
} // while(true)
}
 
void objizdka()
{
BL; BR; // zacouvej
Wait(15);
STOP;
 
cikcak(); // vyrovnej se na caru
cikcak(); // radeji 3x, aby se vyrovnaly setrvacne sily
cikcak();
FL; BR; Wait(23); // vpravo
STOP;
FL; FR; Wait(65); // rovne
STOP;
BL; FR; Wait(23); // vlevo
STOP;
FL; FR; Wait(75); // rovne
STOP;
BL; FR; Wait(23); // vlevo
STOP;
FL; FR;
Wait(20); // kousek rovne
// rovne, dokud nenarazis na caru
while(THRESHOLD > LSENSOR); // levej senzor, protoze cihla je vlevo
STOP;
FL; BR; // toc se doprava, dokud nenarazis na caru
while(THRESHOLD > RSENSOR); // pravej senzor, protoze cara je urcite vpravo
STOP;
line=L; // caru predpokladame vlevo, kdybysme ji prejeli
dira=0;
FL; FR; // vpred
}
/roboti/istrobot/callis/Callis_R_rovne.bak
0,0 → 1,203
// Soutezni robot pro Istrobot 2004
// Objeti cihly vpravo
// $Archive: /Lego/Callis/Callis_R.nqc $
// $Date: 27.04.04 20:52 $
// $Revision: 3 $
 
#define THRESHOLD 50 // rozhodovaci uroven mezi cernou a bilou
#define ML OUT_A // Motory
#define MR OUT_C
#define FL OnFwd(ML) // Vpred
#define FR OnRev(MR)
#define BL OnRev(ML) // Vzad
#define BR OnFwd(MR)
#define RSENSOR SENSOR_3 // Senzory na caru
#define LSENSOR SENSOR_1
#define BUMPER SENSOR_2 // Senzor na cihlu
#define MEZERA 38 // jak se muze jet dlouho bez cary
#define COUVEJ 70 // kolik se ma couvat po detekci diry
#define CIKCAK 40 // kolik se ma jet cik/cak
#define PRES_DIRU 35 // jak predpokladame velkou diru
 
#define L 0 // left
#define R 1 // right
#define S 2 // straight
 
#define STOP Off(ML + MR); Wait(10); // zastav 8
 
int movement; // smer minuleho pohybu
int line; // na ktere strane byla detekovana cara
int dira; // pocitadlo pro nalezeni preruseni cary
int n; // pomocna promena pro cyklus FOR
 
 
void cikcak() // Hledani cary
{
n=CIKCAK/2; // poprve hned zatoc opacne, nez se jelo pred detekci diry
switch(movement) // zmenime smer zataceni
{
case L:
FL; BR; // doprava
movement=R; // poznamenej kam jedem
line=L; // kdyz prejedem, tak bude cara vlevo
break;
case R:
FR; BL; // doleva
movement=L; // poznamenej kam jedem
line=R; // kdyz prejedem, tak bude cara vpravo
break;
}
 
while(true) // jed cik-cak, dokud nenajdes caru
{
if ((THRESHOLD < RSENSOR) || (THRESHOLD < RSENSOR)) // je cara ?
{
STOP;
break;
};
if (CIKCAK < n++) // Jedeme uz dost dlouho cik? Pak jed cak.
{
n=0;
STOP;
switch(movement) // zmenime smer zataceni
{
case L:
FL; BR; // doprava
movement=R; // poznamenej kam jedem
line=L; // kdyz prejedem, tak bude cara vlevo
break;
case R:
FR; BL; // doleva
movement=L; // poznamenej kam jedem
line=R; // kdyz prejedem, tak bude cara vpravo
break;
}
}
}
}
 
task main()
{
PlaySound (SOUND_DOUBLE_BEEP);
Wait(100); // 1s
SetSensor(RSENSOR,SENSOR_LIGHT); // senzor na caru modry pravy
SetSensor(LSENSOR,SENSOR_LIGHT); // senzor na caru modry levy
SetSensor(BUMPER,SENSOR_TOUCH); // sensor na prekazku
 
SetPower (ML,OUT_FULL); // vykon motoru
SetPower (MR,OUT_FULL);
movement=R;
line=S;
dira=0;
cikcak(); // toc se, abys nasel caru
FL; FR; // vpred
 
// Sledovani cary
while(true)
{
if(BUMPER) // je cihla?
{
PlaySound(SOUND_DOWN);
objizdka(); // objed cihlu
}
 
if (THRESHOLD < RSENSOR) // Cara pod pravym senzorem
{
dira=0; // nuluj pocitadlo diry, protoze jsme videli caru
line=R; // zaznamenej, kdes videl caru
FL; FR; // rovne
continue;
}
 
if (THRESHOLD < LSENSOR) // Cara pod levym senzorem
{
dira=0; // nuluj pocitadlo diry, protoze jsme videli caru
line=L; // zaznamenej, kdes videl caru
FL; FR; // rovne
continue;
}
 
// oba senzory mimo caru
 
if (0==dira) // v prvnim cyklu po ztrate cary zacneme zahybat
// v ostatnich cyklech nedelame nic (pro urychleni snimani)
{
switch(line) // kdyz nevidis caru, tak jed tam, kdes ji videl naposled
{
case L:
Off(ML); // doleva
movement=L; // poznamenej kam jedes
break;
case R:
Off(MR); // doprava
movement=R; // poznamenej kam jedes
break;
};
dira++; // zvets pocitadlo diry, aby to pristi cyklus tudy neslo
continue; // co nejrychleji se vrat na snimani cary
}
 
if (MEZERA < dira++) // nejedeme uz moc dlouho bez cary?
{
dira=0;
PlaySound (SOUND_FAST_UP);
switch(movement) // kam se jelo ?
{
case L:
Off(ML); // couvej doprava
BR;
Wait(COUVEJ+10);
movement=R;
break;
case R:
BL; // couvej doleva
Off(MR);
Wait(COUVEJ);
movement=L;
break;
}
PlaySound(SOUND_CLICK);
STOP; // konec couvani
FL; FR; // rovne pres diru
Wait(PRES_DIRU);
STOP;
cikcak(); // najdi caru
FR; FL; // vpred
} // dira
} // while(true)
}
 
void objizdka()
{
BL; BR; // zacouvej
Wait(15);
STOP;
 
cikcak(); // vyrovnej se na caru
cikcak(); // radeji 3x, aby se vyrovnaly setrvacne sily
cikcak();
FL; BR; Wait(23); // vpravo
STOP;
FL; FR; Wait(65); // rovne
STOP;
BL; FR; Wait(23); // vlevo
STOP;
FL; FR; Wait(75); // rovne
// STOP;
// BL; FR; Wait(23); // vlevo
// STOP;
// FL; FR;
// Wait(20); // kousek rovne
// rovne, dokud nenarazis na caru
while(THRESHOLD > LSENSOR); // levej senzor, protoze cihla je levo
STOP;
FL; BR; // toc se doprava, dokud nenarazis na caru
while(THRESHOLD > RSENSOR); // pravej senzor, protoze cara je urcite vpravo
STOP;
line=L; // caru predpokladame vlevo, kdybysme ji prejeli
dira=0;
FL; FR; // vpred
}
/roboti/istrobot/callis/Callis_R_rovne.nqc
0,0 → 1,203
// Soutezni robot pro Istrobot 2004
// Objeti cihly vpravo
// $Archive: /Lego/Callis/Callis_R.nqc $
// $Date: 27.04.04 20:52 $
// $Revision: 3 $
 
#define THRESHOLD 50 // rozhodovaci uroven mezi cernou a bilou
#define ML OUT_A // Motory
#define MR OUT_C
#define FL OnFwd(ML) // Vpred
#define FR OnRev(MR)
#define BL OnRev(ML) // Vzad
#define BR OnFwd(MR)
#define RSENSOR SENSOR_3 // Senzory na caru
#define LSENSOR SENSOR_1
#define BUMPER SENSOR_2 // Senzor na cihlu
#define MEZERA 38 // jak se muze jet dlouho bez cary
#define COUVEJ 70 // kolik se ma couvat po detekci diry
#define CIKCAK 40 // kolik se ma jet cik/cak
#define PRES_DIRU 35 // jak predpokladame velkou diru
 
#define L 0 // left
#define R 1 // right
#define S 2 // straight
 
#define STOP Off(ML + MR); Wait(10); // zastav 8
 
int movement; // smer minuleho pohybu
int line; // na ktere strane byla detekovana cara
int dira; // pocitadlo pro nalezeni preruseni cary
int n; // pomocna promena pro cyklus FOR
 
 
void cikcak() // Hledani cary
{
n=CIKCAK/2; // poprve hned zatoc opacne, nez se jelo pred detekci diry
switch(movement) // zmenime smer zataceni
{
case L:
FL; BR; // doprava
movement=R; // poznamenej kam jedem
line=L; // kdyz prejedem, tak bude cara vlevo
break;
case R:
FR; BL; // doleva
movement=L; // poznamenej kam jedem
line=R; // kdyz prejedem, tak bude cara vpravo
break;
}
 
while(true) // jed cik-cak, dokud nenajdes caru
{
if ((THRESHOLD < RSENSOR) || (THRESHOLD < RSENSOR)) // je cara ?
{
STOP;
break;
};
if (CIKCAK < n++) // Jedeme uz dost dlouho cik? Pak jed cak.
{
n=0;
STOP;
switch(movement) // zmenime smer zataceni
{
case L:
FL; BR; // doprava
movement=R; // poznamenej kam jedem
line=L; // kdyz prejedem, tak bude cara vlevo
break;
case R:
FR; BL; // doleva
movement=L; // poznamenej kam jedem
line=R; // kdyz prejedem, tak bude cara vpravo
break;
}
}
}
}
 
task main()
{
PlaySound (SOUND_DOUBLE_BEEP);
Wait(100); // 1s
SetSensor(RSENSOR,SENSOR_LIGHT); // senzor na caru modry pravy
SetSensor(LSENSOR,SENSOR_LIGHT); // senzor na caru modry levy
SetSensor(BUMPER,SENSOR_TOUCH); // sensor na prekazku
 
SetPower (ML,OUT_FULL); // vykon motoru
SetPower (MR,OUT_FULL);
movement=R;
line=S;
dira=0;
cikcak(); // toc se, abys nasel caru
FL; FR; // vpred
 
// Sledovani cary
while(true)
{
if(BUMPER) // je cihla?
{
PlaySound(SOUND_DOWN);
objizdka(); // objed cihlu
}
 
if (THRESHOLD < RSENSOR) // Cara pod pravym senzorem
{
dira=0; // nuluj pocitadlo diry, protoze jsme videli caru
line=R; // zaznamenej, kdes videl caru
FL; FR; // rovne
continue;
}
 
if (THRESHOLD < LSENSOR) // Cara pod levym senzorem
{
dira=0; // nuluj pocitadlo diry, protoze jsme videli caru
line=L; // zaznamenej, kdes videl caru
FL; FR; // rovne
continue;
}
 
// oba senzory mimo caru
 
if (0==dira) // v prvnim cyklu po ztrate cary zacneme zahybat
// v ostatnich cyklech nedelame nic (pro urychleni snimani)
{
switch(line) // kdyz nevidis caru, tak jed tam, kdes ji videl naposled
{
case L:
Off(ML); // doleva
movement=L; // poznamenej kam jedes
break;
case R:
Off(MR); // doprava
movement=R; // poznamenej kam jedes
break;
};
dira++; // zvets pocitadlo diry, aby to pristi cyklus tudy neslo
continue; // co nejrychleji se vrat na snimani cary
}
 
if (MEZERA < dira++) // nejedeme uz moc dlouho bez cary?
{
dira=0;
PlaySound (SOUND_FAST_UP);
switch(movement) // kam se jelo ?
{
case L:
Off(ML); // couvej doprava
BR;
Wait(COUVEJ+10);
movement=R;
break;
case R:
BL; // couvej doleva
Off(MR);
Wait(COUVEJ);
movement=L;
break;
}
PlaySound(SOUND_CLICK);
STOP; // konec couvani
FL; FR; // rovne pres diru
Wait(PRES_DIRU);
STOP;
cikcak(); // najdi caru
FR; FL; // vpred
} // dira
} // while(true)
}
 
void objizdka()
{
BL; BR; // zacouvej
Wait(15);
STOP;
 
cikcak(); // vyrovnej se na caru
cikcak(); // radeji 3x, aby se vyrovnaly setrvacne sily
cikcak();
FL; BR; Wait(23); // vpravo
STOP;
FL; FR; Wait(60); // rovne
STOP;
BL; FR; Wait(23); // vlevo
STOP;
FL; FR; Wait(75); // rovne
// STOP;
// BL; FR; Wait(23); // vlevo
// STOP;
// FL; FR;
// Wait(20); // kousek rovne
// rovne, dokud nenarazis na caru
while(THRESHOLD > LSENSOR); // levej senzor, protoze cihla je levo
STOP;
FL; BR; // toc se doprava, dokud nenarazis na caru
while(THRESHOLD > RSENSOR); // pravej senzor, protoze cara je urcite vpravo
STOP;
line=L; // caru predpokladame vlevo, kdybysme ji prejeli
dira=0;
FL; FR; // vpred
}
/roboti/istrobot/callis/Callis_log.bak
0,0 → 1,173
// Soutezni robot pro Istrobot 2004
// $Archive: /Lego/Callis/Callis_log.nqc $
// $Date: 9.05.04 6:34 $
// $Revision: 1 $
 
#define THRESHOLD 50 // rozhodovaci uroven mezi cernou a bilou
#define ML OUT_A // Motory
#define MR OUT_C
#define FL OnFwd(ML) // Vpred
#define FR OnRev(MR)
#define BL OnRev(ML) // Vzad
#define BR OnFwd(MR)
#define RSENSOR SENSOR_3 // Senzory na caru
#define LSENSOR SENSOR_1
#define BUMPER SENSOR_2 // Senzor na cihlu
#define MEZERA 38 // jak se muze jet dlouho bez cary
#define COUVEJ 70 // kolik se ma couvat po detekci diry
#define CIKCAK 40 // kolik se ma jet cik/cak
#define PRES_DIRU 35 // jak predpokladame velkou diru
 
#define L 0 // left
#define R 1 // right
#define S 2 // straight
 
#define STOP Off(ML + MR); Wait(10); // zastav 8
 
int movement; // smer minuleho pohybu
int line; // na ktere strane byla detekovana cara
int dira; // pocitadlo pro nalezeni preruseni cary
int n; // pomocna promena pro cyklus FOR
 
task main()
{
PlaySound (SOUND_DOUBLE_BEEP);
Wait(100); // 1s
SetSensor(RSENSOR,SENSOR_LIGHT); // senzor na caru modry pravy
SetSensor(LSENSOR,SENSOR_LIGHT); // senzor na caru modry levy
SetSensor(BUMPER,SENSOR_TOUCH); // sensor na prekazku
SetEvent(L, LSENSOR, EVENT_TYPE_HIGH);
SetEvent(R, RSENSOR, EVENT_TYPE_HIGH);
 
SetPower (ML,OUT_HALF); // vykon motoru
SetPower (MR,OUT_HALF);
movement=R;
line=S;
dira=0;
cikcak(); // toc se, abys nasel caru
FL; FR; // vpred
CreateDatalog(1000);
 
// Sledovani cary
while(true)
{
 
monitor( EVENT_MASK(L) | EVENT_MASK(R) )
{
FL; FR; // rovne
}
catch (EVENT_MASK(L))
{
line=L; // zaznamenej, kdes videl caru
n=-dira;
AddToDatalog(n);
dira=0; // nuluj pocitadlo diry, protoze jsme videli caru
}
catch (EVENT_MASK(R))
{
line=R; // zaznamenej, kdes videl caru
n=dira;
AddToDatalog(n);
dira=0; // nuluj pocitadlo diry, protoze jsme videli caru
}
 
// oba senzory mimo caru
 
if (0==dira) // v prvnim cyklu po ztrate cary zacneme zahybat
// v ostatnich cyklech nedelame nic (pro urychleni snimani)
{
switch(line) // kdyz nevidis caru, tak jed tam, kdes ji videl naposled
{
case L:
Off(ML); // doleva
movement=L; // poznamenej kam jedes
break;
case R:
Off(MR); // doprava
movement=R; // poznamenej kam jedes
break;
};
dira++; // zvets pocitadlo diry, aby to pristi cyklus tudy neslo
continue; // co nejrychleji se vrat na snimani cary
}
 
if (MEZERA < dira++) // nejedeme uz moc dlouho bez cary?
{
dira=0;
PlaySound (SOUND_FAST_UP);
switch(movement) // kam se jelo ?
{
case L:
Off(ML); // couvej doprava
BR;
Wait(COUVEJ+10);
movement=R;
break;
case R:
BL; // couvej doleva
Off(MR);
Wait(COUVEJ);
movement=L;
break;
}
PlaySound(SOUND_CLICK);
STOP; // konec couvani
FL; FR; // rovne pres diru
Wait(PRES_DIRU);
STOP;
cikcak(); // najdi caru
FR; FL; // vpred
} // dira
} // while(true)
}
 
 
void cikcak() // Hledani cary
{
n=CIKCAK/2; // poprve hned zatoc opacne, nez se jelo pred detekci diry
switch(movement) // zmenime smer zataceni
{
case L:
FL; BR; // doprava
movement=R; // poznamenej kam jedem
line=L; // kdyz prejedem, tak bude cara vlevo
break;
case R:
FR; BL; // doleva
movement=L; // poznamenej kam jedem
line=R; // kdyz prejedem, tak bude cara vpravo
break;
}
 
while(true) // jed cik-cak, dokud nenajdes caru
{
if ((THRESHOLD < RSENSOR) || (THRESHOLD < RSENSOR)) // je cara ?
{
STOP;
break;
};
if (CIKCAK < n++) // Jedeme uz dost dlouho cik? Pak jed cak.
{
n=0;
STOP;
switch(movement) // zmenime smer zataceni
{
case L:
FL; BR; // doprava
movement=R; // poznamenej kam jedem
line=L; // kdyz prejedem, tak bude cara vlevo
break;
case R:
FR; BL; // doleva
movement=L; // poznamenej kam jedem
line=R; // kdyz prejedem, tak bude cara vpravo
break;
}
}
}
}
 
 
/roboti/istrobot/callis/Callis_log.nqc
0,0 → 1,184
// Soutezni robot pro Istrobot 2004
// $Archive: /Lego/Callis/Callis_log.nqc $
// $Date: 9.05.04 6:34 $
// $Revision: 1 $
 
#define THRESHOLD 50 // rozhodovaci uroven mezi cernou a bilou
#define ML OUT_A // Motory
#define MR OUT_C
#define FL OnFwd(ML) // Vpred
#define FR OnRev(MR)
#define BL OnRev(ML) // Vzad
#define BR OnFwd(MR)
#define RSENSOR SENSOR_3 // Senzory na caru
#define LSENSOR SENSOR_1
#define BUMPER SENSOR_2 // Senzor na cihlu
#define MEZERA 38 // jak se muze jet dlouho bez cary
#define COUVEJ 70 // kolik se ma couvat po detekci diry
#define CIKCAK 40 // kolik se ma jet cik/cak
#define PRES_DIRU 35 // jak predpokladame velkou diru
 
#define L 0 // left
#define R 1 // right
#define S 2 // straight
 
#define STOP Off(ML + MR); Wait(10); // zastav 8
 
int movement; // smer minuleho pohybu
int line; // na ktere strane byla detekovana cara
int dira; // pocitadlo pro nalezeni preruseni cary
int n; // pomocna promena pro cyklus FOR
 
task main()
{
PlaySound (SOUND_DOUBLE_BEEP);
Wait(100); // 1s
SetSensor(RSENSOR,SENSOR_LIGHT); // senzor na caru modry pravy
SetSensor(LSENSOR,SENSOR_LIGHT); // senzor na caru modry levy
SetSensor(BUMPER,SENSOR_TOUCH); // sensor na prekazku
SetEvent(L, LSENSOR, EVENT_TYPE_PRESSED);
SetEvent(R, RSENSOR, EVENT_TYPE_PRESSED);
 
SetPower (ML,OUT_HALF); // vykon motoru
SetPower (MR,OUT_HALF);
movement=R;
line=S;
dira=0;
// cikcak(); // toc se, abys nasel caru
//!!! FL; FR; // vpred
CreateDatalog(1000);
 
// Sledovani cary
while(true)
{
 
monitor( EVENT_MASK(L) | EVENT_MASK(R) )
{
//!!! FL; FR; // rovne
Wait(1);
}
catch (EVENT_MASK(L))
{
SetUserDisplay(2, 1);
PlaySound(SOUND_CLICK);
Wait(50);
line=L; // zaznamenej, kdes videl caru
n=-dira;
// AddToDatalog(n);
dira=0; // nuluj pocitadlo diry, protoze jsme videli caru
}
catch (EVENT_MASK(R))
{
SetUserDisplay(3, 1);
PlaySound(SOUND_LOW_BEEP);
Wait(50);
line=R; // zaznamenej, kdes videl caru
n=dira;
// AddToDatalog(n);
dira=0; // nuluj pocitadlo diry, protoze jsme videli caru
}
SetUserDisplay(1, 1);
Wait(50);
 
/*
// oba senzory mimo caru
 
if (0==dira) // v prvnim cyklu po ztrate cary zacneme zahybat
// v ostatnich cyklech nedelame nic (pro urychleni snimani)
{
switch(line) // kdyz nevidis caru, tak jed tam, kdes ji videl naposled
{
case L:
Off(ML); // doleva
movement=L; // poznamenej kam jedes
break;
case R:
Off(MR); // doprava
movement=R; // poznamenej kam jedes
break;
};
dira++; // zvets pocitadlo diry, aby to pristi cyklus tudy neslo
continue; // co nejrychleji se vrat na snimani cary
}
 
if (MEZERA < dira++) // nejedeme uz moc dlouho bez cary?
{
dira=0;
PlaySound (SOUND_FAST_UP);
switch(movement) // kam se jelo ?
{
case L:
Off(ML); // couvej doprava
BR;
Wait(COUVEJ+10);
movement=R;
break;
case R:
BL; // couvej doleva
Off(MR);
Wait(COUVEJ);
movement=L;
break;
}
PlaySound(SOUND_CLICK);
STOP; // konec couvani
FL; FR; // rovne pres diru
Wait(PRES_DIRU);
STOP;
cikcak(); // najdi caru
FR; FL; // vpred
} // dira
*/
 
} // while(true)
}
 
 
void cikcak() // Hledani cary
{
n=CIKCAK/2; // poprve hned zatoc opacne, nez se jelo pred detekci diry
switch(movement) // zmenime smer zataceni
{
case L:
FL; BR; // doprava
movement=R; // poznamenej kam jedem
line=L; // kdyz prejedem, tak bude cara vlevo
break;
case R:
FR; BL; // doleva
movement=L; // poznamenej kam jedem
line=R; // kdyz prejedem, tak bude cara vpravo
break;
}
 
while(true) // jed cik-cak, dokud nenajdes caru
{
if ((THRESHOLD < RSENSOR) || (THRESHOLD < RSENSOR)) // je cara ?
{
STOP;
break;
};
if (CIKCAK < n++) // Jedeme uz dost dlouho cik? Pak jed cak.
{
n=0;
STOP;
switch(movement) // zmenime smer zataceni
{
case L:
FL; BR; // doprava
movement=R; // poznamenej kam jedem
line=L; // kdyz prejedem, tak bude cara vlevo
break;
case R:
FR; BL; // doleva
movement=L; // poznamenej kam jedem
line=R; // kdyz prejedem, tak bude cara vpravo
break;
}
}
}
}
 
 
/roboti/istrobot/callis/FAQ.htm
0,0 → 1,8
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN">
<!-- saved from url=(0032)http://www.robotika.sk/mains.htm -->
<HTML><HEAD><TITLE>Slovenská verzia</TITLE>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-2">
<META content="MSHTML 6.00.2800.1400" name=GENERATOR></HEAD><FRAMESET border=0
frameSpacing=0 frameBorder=0 cols=137,*><FRAME name=menu
src="FAQ_soubory/menus.htm" frameBorder=0 noResize scrolling=no><FRAME name=telo
src="FAQ_soubory/poradna.htm" frameBorder=0 noResize></FRAMESET></HTML>
/roboti/istrobot/callis/FAQ_soubory/menus.htm
0,0 → 1,99
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0032)http://www.robotika.sk/menus.htm -->
<HTML><HEAD><TITLE></TITLE>
<META http-equiv=Content-Type content="text/html; charset=windows-1250">
<META content="MSHTML 6.00.2800.1400" name=GENERATOR>
<SCRIPT language=JavaScript>
<!--
function fwLoadMenus() {
if (window.fw_menu_0) return;
window.fw_menu_0 = new Menu("root",115,21,"Verdana, Arial, Helvetica, sans-serif",12,"#ffff00","#ffffff","#000099","#0066ff");
fw_menu_0.addMenuItem("Novinky","window.open('./contest/novinky.html', 'telo');");
fw_menu_0.addMenuItem("Pravidl&aacute;","window.open('./contest/pravidla.html','telo');");
fw_menu_0.addMenuItem("Roboti","window.open('./contest/roboti.html','telo');");
fw_menu_0.addMenuItem("Poradna","window.open('./contest/poradna.html','telo');");
fw_menu_0.addMenuItem("Arch&iacute;v","window.open('./contest/archive/index.html','telo');");
fw_menu_0.fontWeight="normal";
fw_menu_0.hideOnMouseOut=true;
 
fw_menu_0.writeMenus();
} // fwLoadMenus()
 
//-->
</SCRIPT>
 
<SCRIPT language=JavaScript1.2 src="menus_soubory/fw_menu.js"></SCRIPT>
 
<SCRIPT language=javascript>
<!--
active = new Image(135,80);
active.src = "enveron.jpg";
inactive = new Image(135,80);
inactive.src = "enverof.jpg";
//-->
</SCRIPT>
</HEAD>
<BODY text=#000000 vLink=#ff00ff aLink=#ff0000 link=#0000ff leftMargin=0
background=menus_soubory/fuga1.gif topMargin=0 marginheigh="0" marginwidth="0">
<SCRIPT language=JavaScript1.2>fwLoadMenus();</SCRIPT>
 
<TABLE cellSpacing=0 cellPadding=0 width=135 border=0><!-- fwtable fwsrc="Untitled" fwbase="menu.gif" fwstyle="Dreamweaver" fwdocid = "742308039" fwnested="0" -->
<TBODY>
<TR>
<TD><IMG height=15 alt="" src="menus_soubory/fuga.gif" width=135
border=0></TD></TR>
<TR>
<TD><A onmouseover="window.status='';return true"
href="http://www.robotika.sk/novinky.htm" target=telo><IMG height=40
alt=Novinky src="menus_soubory/novinky.jpg" width=135 border=0></A></TD></TR>
<TR>
<TD><A onmouseover="window.status='';return true"
href="http://www.robotika.sk/domov.htm" target=telo><IMG height=40
alt="O nás" src="menus_soubory/onas.jpg" width=135 border=0></A></TD></TR>
<TR>
<TD><A onmouseover="window.status='';return true"
href="http://www.robotika.sk/projects/projekty.htm" target=telo><IMG
height=40 alt=Projekty src="menus_soubory/pro.jpg" width=135
border=0></A></TD></TR><!-- Publikacie v menu su disabled
<TR>
<TD><IMG SRC="pub.jpg" WIDTH="135" HEIGHT="40" BORDER="0" ALT=""></TD>
</TR>
-->
<TR>
<TD><A onmouseover="window.status='';return true"
href="http://www.robotika.sk/holls/2003/index.html" target=telo><IMG
height=40 alt="Robotické prázdniny" src="menus_soubory/pra.jpg" width=135
border=0></A></TD></TR><!-- Na chvilu vymenime odkazy
<TR>
<TD><A HREF="contest/novinky.html" TARGET="telo" onMouseOver="window.status='';return true"><IMG SRC="menu_r2_c1.gif" WIDTH="135" HEIGHT="40" BORDER="0" ALT="Sutaz"></A></TD>
</TR>
-->
<TR>
<TD><A onmouseover="window.status='';return true"
href="http://www.robotika.sk/contest/index.html" target=telo><IMG
height=40 alt=Sutaz src="menus_soubory/menu_r2_c1.gif" width=135
border=0></A></TD></TR>
<TR>
<TD><A onmouseover="window.status='';return true"
href="http://www.robotika.sk/forum/messageboard.php" target=telo><IMG
height=40 alt="Diskusné fórum" src="menus_soubory/forum.jpg" width=135
border=0></A></TD></TR>
<TR>
<TD><A onmouseover="window.status='';return true"
href="http://www.robotika.sk/kontakt.htm" target=telo><IMG height=40
alt=Kontakt src="menus_soubory/kon.jpg" width=135 border=0></A></TD></TR>
<TR>
<TD><A onmouseover="window.status='';return true"
href="http://www.robotika.sk/linky.htm" target=telo><IMG height=40
alt="Zaujímavé adresy" src="menus_soubory/lin.jpg" width=135
border=0></A></TD></TR>
<TR>
<TD><IMG height=15 alt="" src="menus_soubory/fuga.jpg" width=135
border=0></TD></TR>
<TR>
<TD><A
onmouseover="inactive.src=active.src; window.status='English version';return true"
onmouseout="inactive.src='enverof.jpg'; window.status=''"
href="http://www.robotika.sk/maine.htm" target=_parent><IMG height=80
alt="" src="menus_soubory/enverof.jpg" width=135 border=0
name=inactive></A></TD></TR></TBODY></TABLE></BODY></HTML>
/roboti/istrobot/callis/FAQ_soubory/menus_soubory/enverof.jpg
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/FAQ_soubory/menus_soubory/forum.jpg
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/FAQ_soubory/menus_soubory/fuga.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/FAQ_soubory/menus_soubory/fuga.jpg
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/FAQ_soubory/menus_soubory/fuga1.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/FAQ_soubory/menus_soubory/fw_menu.js
/roboti/istrobot/callis/FAQ_soubory/menus_soubory/kon.jpg
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/FAQ_soubory/menus_soubory/lin.jpg
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/FAQ_soubory/menus_soubory/menu_r2_c1.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/FAQ_soubory/menus_soubory/novinky.jpg
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/FAQ_soubory/menus_soubory/onas.jpg
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/FAQ_soubory/menus_soubory/pra.jpg
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/FAQ_soubory/menus_soubory/pro.jpg
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/FAQ_soubory/poradna.htm
0,0 → 1,438
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0043)http://www.robotika.sk/contest/poradna.html -->
<HTML><HEAD><TITLE>Istrobot - poradna</TITLE>
<META http-equiv=Content-Type content="text/html; charset=windows-1250"><LINK
title="Orange Style for Istrobot" href="poradna_soubory/istrobot.css"
type=text/css rel=StyleSheet>
<META content="MSHTML 6.00.2800.1400" name=GENERATOR></HEAD>
<BODY>
<P align=center>[<A
href="http://www.robotika.sk/contest/novinky.html">Novinky</A>] [<A
href="http://www.robotika.sk/contest/pravidla.html">Pravidlá</A>] [<A
href="http://www.robotika.sk/contest/roboti.html">Roboti</A>] [Poradòa] [<A
href="http://www.robotika.sk/contest/archive/index.html">Archív</A>]
<P><A name=top></P>
<H1>Poradòa</H1></A>
<P>Na tejto stránke nájdete odpovede od našich odborníkov na najèastejšie
otázky, ktoré nám v súvislosti so súažou posielate. Odpovede na technické
otázky možno nájdete aj na niektorej z mnohých robotických stránok na internete,
ktorá sa zaoberá podobnou problematikou. Tie najzaujímavejšie sme pre vás
zozbierali na samostatnej stránke <A
href="http://www.robotika.sk/contest/links.html">Odkazy</A>.
<P><B>Obsah</B>
<OL>
<LI><A
href="http://www.robotika.sk/contest/poradna.html#organizacne">Organizaèné
problémy</A>
<LI><A href="http://www.robotika.sk/contest/poradna.html#pravidla">Otázky
týkajúce sa pravidiel</A>
<LI><A href="http://www.robotika.sk/contest/poradna.html#technicke">Technické
problémy</A>
<LI><A href="http://www.robotika.sk/contest/poradna.html#hladame">H¾adáme
odpoveï</A>
<LI><A href="mailto:balogh@elf.stuba.sk">Posla otázku</A> </LI></OL>
<P>
<UL><A name=organizacne>
<H2>Organizaèné problémy</H2></A>
<LI><I>Preèo ISTROBOT?</I>
<P>Latinský názov Bratislavy je Istropolis, preto Istro + robot. Okrem toho je
to jediná takáto súaž v bývalých "East European" krajinách, takže tiež
<I>Eastrobot</I> [ístrobot].
<HR>
 
<P></P>
<LI><I>Na internete sme nasli program a je tam na stredu pisane: Prezentacia
na Cofaxe. Co to presne znamena? Velmi radi by sme tam isli, ale ako by to
bolo z ubytovanim?</I>
<P>To znamená, že generálny sponzor Datalan, by rád vo svojomo stánku na
výstave Cofax ukázal nejakých robotov. Ak máte záujem predvies sa aj tu,
dajte mi vedie a zabzpeèíme predåženie ubytovania a stravy a všetko ostatné.
Nejaký èas budte predvádza a potom sa samozrejme môžete poobzera aj po
výstave.
<P></P>
<LI><I>Robota asi nesthnem dokonèi, preto radšej neprídem.</I>
<P>Ja by som na Vašom mieste nehádzal hneï flintu do žita. Aj vlani prišiel
jeden úèastník, ktorý napokon ani neodštartoval. Podstatné je prís a skúsi.
Ak máte konštrukciu hotovú, potom neverím, že by ste nieèo nedoprogramovali.
<P>Deò pred súažou bude dráha k dispozícii na testovanie, takže ak by ste
prišli na dva dni, možno by sa ešte všelièo dalo odladi. Nemusíte vyhra, ale
aspoò to skúsi, aj keï budete posledný, svet sa nezrúti. Aspoò ale získate
skúsenosti a na budúci rok vyhráte ;-)
<P>
<HR>
 
<LI><I>Potøebuji vìdìt, co vše je hrazeno a co vše si musím hradit sám. Buïte
tak laskav a toto mi sdìlte.</I>
<P>Organizátori vám preplatia cestovné, ubytovanie a zrejme aj stravu. Jediný
problém môže by s cestovným, neviem urèite, èi ho preplatíme v Kè, alebo len
Sk.
<P>
<HR>
 
<LI><I>Môžem jedného robota prihlási do viacerých kategórií?</I>
<P>Áno, môžete.
<P>
<HR>
 
<LI><I>Budeme si môc dráhu vyskúša?</I>
<P>Áno, dráhy sú prístupné verejnosti. Nie je na nich ale súažný tvar dráhy.
Presný pravidelný termín bude uvedený neskôr, zatia¾ pod¾a dohody.
<P>Dráha bude okrem toho k dispozícii na testovanie deò pred súažou, takže ak
prídete na oba dni, možno ešte všelièo doladíte.
<P>Bratislavèania majú výhodu, môžu zaèa testova už dnes.
<P>
<HR>
 
<HR>
 
<LI><I>Da sa zabezpecit nejake lacne ubytovanie?</I>
<P>Ano, malo by byt zadarmo (ale len pre sutaziacich, nie pre vsetkych co vas
pridu povzbudzovat). Potom este mozem zohnat nejake ubytko na intraku, stoji
okolo 250,-Sk/noc, ale to bude jasnejsie az v marci.
<P>
<HR>
 
<LI><I>Mohli by ste poslat nejaku oficialnu pozvanku na skolu, aby sme sa
mohli uvolnit z vyucovania kvoli testovaniu?</I>
<P>Hm. Ak vam staci papierova verzia toho co je na www.robotika.sk tak to
mozem poslat, (napiste mi adresu kam), pripadne si sami nieco napiste, poslite
mi to a ja tam dam peciatku a take nezmysly.
<P>
<HR>
 
<LI><I>Da sa dohodnut na termine testovania?</I>
<P>Da.
<P>
<HR>
 
<LI><I>Kolko ludi si mozme doniest do publika(viete ked vyhra zavisi od sily
potlesku)?</I>
<P>Kolko chcete, kapacita miestnosti je 300 ludi ;-)
<P><A name=pravidla></P>
<H2>Otázky týkajúce sa pravidiel</H2></A>
<P></P>
<LI><I>Bude svietit priame slnecne svetlo na drahu?</I>
<P>Pravidlá takúto situáciu nevyluèujú. Ale keïže súaž sa bude kona v
posluchárni, ktorá je dos tmavá a poèítame aj s premietaním na ve¾koplošnú
obrazovku, zrejme do miestnosti ve¾a slnka neprenikne.
<P>
<HR>
 
<LI><I>Dale v popisu trati uvadite, ze se budou vyskytovat ruzne prekazky,
zajima me, jake ruzne prekazky a hlavne s jakym povrchem, jake barvy a
materialu. Dale preruseni drahy bude na jakou vzdalenost a zda druhy konec
preruseni bude v ose prvniho preruseni.</I>
<P>To už by som Vám mohol rovno nakresli súažnú dráhu ;-)
<P>Dráha však nebude príliš odlišná od minulého roèníka (na stránke je jej
obrázok). Prekážku si predstavte ako tehlu (cihlu), alebo drevený špalík.
<P>Farba a rozmery sa môžu líši, takže sa na ne nespoliehajte. O tom je práve
súaž, že neviete celkom všetko a robot sa tomu musí prispôsobi...
<P>
<HR>
 
<LI><I>Co sa povazuje za nakladny robot?</I>
<P>To posudi porota. Nie je to ktovieaka definicia, ale musi vam stacit. Ak by
sme dali napriklad cenove obmedzenie, tazko by sa dokazovalo. Toto pravidlo je
urcene hlavne pre tych, ktori mozu vyuzivat relativne neobmedzene zdroje.
Napriklad ak niekto pracuje (alebo brigaduje) v pocitacovej firme, nie je
problem "pozicat" si trebars aj priemyselnu kameru a jednodoskovy priemyselny
pocitac. Takym ludom by mali porotcovia "dohovorit" aby radsej robota
predviedli vo Volnej jazde.
<P>Aj preto je dobre, aby ste mi cim skorej zacali posielat nejake popisy,
nakresy a fotky robotov, aby sme pripadne nejasnosti vyriesili cim skorej, nie
az na sutazi.
<P>
<HR>
 
<LI><I>moze byt riadeny vstavanou 486 (teda taka 486 na kolieskach)</I>
<P>Ano, moze. Ak to nie je nahodou priemyselna verzia, pripadne DIMM PC
verzia, lebo to by asi spadalo do tej kategorie "prilis nakladny". Kde by ste
na to asi vzali?
<P>
<HR>
 
<LI><I>Co znamena pojem tehla na drahe (max rozmery, vaha, material)?</I>
<P><A
href="http://www.nr.psg.sk/prezenta/wienerberger/vyrobky.html#part9">Toto je
tehla.</A>.
<P>
<HR>
 
<LI><I>mozu byt v tunely zatacky?</I>
<P>Preco nie, dobry napad.
<P>
<HR>
 
<LI><I>ake su rozmery tunelov?</I>
<P>A co vlastne bude robit vas robot? ;-)
<P>
<HR>
 
<LI><I>Moze si robot v kategorii pathfollower pri prvom a dalsom pokuse
zapamatat doteraz prejdenu drahu (teda, ci je mozne trasu najprv prejst
pomalicky a poznacit si vsetky prekazky, a potom pri druhom pokuse len tak
preletiet)? lebo to nie je v rozpore s pravidlami na stranke</I>
<P>Ano, moze. Dokonca je to tam vyslovne uvedene.
<P>
<HR>
 
<LI><I>odrazaju prekazky na drahe ultrazvuky?</I>
<P>Ano.
<P>
<HR>
 
<LI><I>Ake su podmienky na prerusene miesto?</I>
<P>Ziadne. Akurat ze nebude prilis dlhe.
<P>
<HR>
 
<LI><I>K tej volnej jazde, naozaj vitazstvo zavisi iba od sily potlesku ?</I>
<P>Ano.
<P>
<HR>
 
<LI><I>Robot sutaziaci v kategorii volna jazda musi mat tiez maximalne rozmery
25x25x25 cm ? V ramci volnej jazdy moze byt dialkovo riadeny ?</I>
<P>Nie. Ano.
<P>
<HR>
 
<LI><I>Mozem sa viacerych rocnikov sutaze zucasnit s tym istym robotom ?</I>
<P>Ano.
<P>
<HR>
 
<LI><I>Moze robot opustit nahodou (napr. chyba senzorov) na moment drahu a
hned ju najst a pokracovat v kole, alebo bude diskvalifikovany.</I>
<P>Zrejme ano, zalezi co povie porota.
<P>
<HR>
 
<LI><I>Co vsetko na trati sa da poskodit ? Vydrzia tehlicky aj naraz maleho
"buldozera" ?</I>
<P>Zoberte niekde normalnu tehlu a skuste.
<P>
<HR>
 
<LI><I>Aka podrobna ma byt dokumentacia ?</I>
<P>Dost.
<P>
<HR>
 
<LI><I>Pred prekazkou je, alebo nie je prerusena ciara ?</I>
<P>Nie je.
<P>
<HR>
 
<LI><I>Cas medzi pokusmi mozem pouzit aj na manualne naprogramovanie prip.
upravenie uz zaznamenanej drahy (robotom) ?</I>
<P>V ziadnom pripade!
<P>
<HR>
 
<LI><I>Kedy je mozne otestovat drahu a je mozne v mieste testovania pozicanie
PC monitora ?</I>
<P>Ked sa dohodneme, najblizsi termin je uvedeny v <A
href="http://www.robotika.sk/contest/novinky.htm">Novinkach</A>. Monitor sa da
pozicat.
<P>
<HR>
 
<LI><I>Moze sa stat, ked nas robot bude napr. 24 cm siroky a pri jazde po
rovnej ciare ma mozny rozkmit 2 cm do stran, ze neprejde tunelom, resp. ze ho
poskodi a bude diskvalifikovany ? </I>
<P>Nebude az taky maly...
<P>
<HR>
 
<LI><I>Pred tunelmi bude rovna draha, alebo moze byt tunel na zakrute ?</I>
<P>Nechajte sa prekvapit.
<P>
<HR>
 
<LI><I>Kto bude v publiku ?</I>
<P>Vselikto. Koho si privediete.
<P>
<HR>
 
<LI><I>Moze byt na trati viacej robotov naraz?</I>
<P>Kde by sa tam vzali?
<P>
<HR>
 
<LI><I>Ak ano mozme im skodit?</I>
<P>Ak nahodou ano, tak mozete.
<P>
<HR>
 
<LI><I>Ake su toho roku ceny?</I>
<P>Dobre ;-)
<P>
<HR>
 
<LI><I>Jaky tvar bude mit zaèátek závodní dráhy? V pravidlech na www je cosi o
kruhu ze kter`ho robot vyjí¾dí, ale na fotkách z loòsk`ho roku je jen èára,
která prost^ zaène. Jak~ start tedy bude letos?</I>
<P>Start je vzdy rovnaky. Ten kruh tam nemoze byt namalovany plnou ciarou,
lebo robot by samozrejme chytil "stopu" a jazdil dokola. Preto je ten kruh
mysleny. V skutocnosti je vyznaceny slabou ceruzkou, takze na fotke ho nie je
vidno.
<P>
<HR>
 
<LI><I>Bude mo¾no robata postavit pcímo na èáru, nebo musí b~t "vypuÒt^n" na
bíl` ploÒe a musí si èáru najít?</I>
<P>Idealny start vyzera tak, ze ho umiestnite do toho pomysleneho kruhu,
napriklad kolmo k ciare, on si ju najde a pusti sa po nej. Ale porota vlani
nemala namietky ani voci priamemu postaveniu na ciaru. KEdze sa tam este
nemeria cas, nie je to az take podstatne.
<P>Asi vas niektore odpovede neuspokojili, ale o tom je sutaz, ze robot sa
musi aj trocha samostatne rozhodovat. Ak by ste vedeli rozmery prekazok,
tunelov atd. tak mozete vsetko vopred naprogramovat a uz to nie je autonomny
robot. Takze sa nechajte prekvapit.
<P align=right><I>Richard Balogh</I>
<P><BR>
<P><A name=technicke></P>
<H2>Technické problémy</H2></A>
<P></P>
<LI><I>Nemame celkom jasno v oblasti IR snimacov, chceli by sme ich pouzit na
sledovanie drahy, a nevieme aky pocet tychto snimacov je potrebne pouzit, a
ako ich vhodne vzajomne umiestnit.</I>
<P>To, aky pocet snimacou pouzijete je vasa vec. Potrebujete aspon dva, aby
ste mohli sledovat odchylku vlavo, vpravo. Niektori pouzivaju rad (6-8)
snimacov a maju presnejsiu informaciu - skratka to musite vymysliet, o tom je
prave sutaz.
<P>Podrobnejšie odpovedá <A href="mailto:gacho@nov1.kar.elf.stuba.sk">Ing.
Juraj Gacho:</A><BR>
<P>No, co sa tyka drahy, bude to cierna ciara na bielom podklade. Ked na tu
drahu niecim zasvietite, tak z toho cierneho povrchu sa bude odrazat menej
svetla ako z bieleho - a to sa vlastne bude vyuzivat. V minulom rocniku mali
vsetky zucastnene roboty (aspon myslim) pouzite 2 snimace, jeden z nich
sledoval ciaru a jeden bielu podlahu vedla ciary. Z toho vyplyval aj
algoritmus riadenia, kedy cielom riadenia bolo chodit tak, aby jeden snimac
isiel ponad biele pasmo (podlahu) a jeden ponad cierne pasmo (ciaru). Daju sa
pouzit fototranzistory, fotodiody alebo fotorezistory, alebo je mozne pouzit
aj integrovane snimace-zvacsa IR. (v principe je jedno, ci robite s viditelnym
svetlom, alebo infracervenym). Je vhodne zabezpecit, aby bocne svetlo
nesposobovalo problemy (nejako odtienit snimace a mat vlastne osvetlenie. Ak
nieco o takychto snimacoch viete, tak vam odporucam pozriet na internete
nejake katalogove listy, alebo skocit niekde do obchodu so suciastkami a
porozpravat sa s predavacom, alebo mozete skocit za niekym na fakulte, kto sa
tym zaobera. Mozno by ste nieco nasli aj v casopise <A
href="http://www.atpjournal.sk/">AT&amp;P Journal</A>, kde uz viac ako rok
bezi serial Senzory v automatizacii (autor - Miroslav Toman). Niekde v
kniznici by ste to hadam nasli.
<P>Co sa poctu tyka, je potrebne, aby ste vedeli kde je ciara a ked ciaru
stratite, tak aby ste vedeli, ze sa nachadzate napr. vlavo alebo vpravo od
ciary. Najjednoduchsie je riesenie s dvomi snimacmi, ako som uz popisal hore.
Ale tieto by nemali byt od seba vzdialene viac ako je sirka ciary, aby sa
nestalo, ze obidvomi snimacmi idete ponad bielu podlahu a nebudete vediet, kde
je ciara, ked bude medzi snimacmi. Ale mozete mat samozrejme aj viac snimacov
a potom budete vediet, ako daleko je ciara napr. od stredu robota...
<P>
<HR>
 
<LI><I>Je vhodne na detekciu prekazky pouzit IR snimac, alebo dotykovy snimac?
Nestrati robot pri detekcii prekazky pri pouziti dotykoveho snimaca viac casu
tym, ze musi prist az k nej a dotknut sa jej? V pripade pouzitia IR snimaca by
robot prekazku zaregistroval skor a tiez by ju mohol zacat skor obchadzat?</I>
 
<P>Samozrejme, ze pri pouziti bezdotykoveh snimaca (napr IR) vyzera aj
spravanie sa robota "inteligentnejsie", ale dotykovy snimac je jednoduchsi. Je
pravda aj to, ze ked prekazku zaregistruje skor, moze ju obist s mensou
casovou stratou. No mozno sa hodi pouzit kombinaciu - aj IR aj dotykovy snimac
na prekazku.
<P>Tuto uvahu musite vyriesit sami. Mate teda pravdu, ze IR by mohlo byt
lepsie, zalezi vsak velmi aj na algoritme obchadzania.
<P>
<HR>
 
<LI><I>Bolo by mozne zvysit rychlost pohybu robota pouzitim vacsieho napajania
krokovych motorcekov (z disketovej mechaniky)?</I>
<P>Nie. Od velkosti napatia (prudu) zavisi moment krokoveho motora (KM), ale
rychlost KM v ustalenom stave zavisi od frekvencie impulzov. Zvacsenim
napajania je mozne docielit, ako som uz spominal, vacsi moment a teda aj
lepsie zrychlenie, ale na druhej strane sa zvysi spotreba.
<P>Ale musim vas upozornit, ze krokace maju iste fyzikalne obmedzenia a tak
ani frekvenciu nemozete zvysovat lubovolne. Od istej hodnoty motor tzv.
vypadava, t.j. nestiha reagovat na vsetky impulzy, teda "straca krok".
<P>
<HR>
 
<LI><I>Musime si zakladnu dosku, do ktorej osadime mikropocitac vyrobit sami,
alebo pravidla povoluju pouzitie kupenej dosky?</I>
<P>Mozete si kupit skoro vsetko, vylucene je len kupit celeho robota hotoveho.
Su (na zapade) aj take stavebnice....
<P>V sutazi ide najma o pouzity algoritmus (teda riadiaci program) a vhodnu
volbu snimacov.
<P>
<HR>
 
<LI><I>Stavam robotka na tu sutaz mobilnych robotov a mam taky napad pohanat
ho nie krokovymi motormi, ale jednosmernymi motormi( z teslackych
magnetofonov). Celkom vy to islo, prevod by som mal porieseny, ale neviem ako
sa to da riadit. Mam pouzit krokove motory, alebo mozem aj tie jednosmerne? A
ako sa daju riadit jednosmerne motory?</I>
<P>S jednosmernými motormi môžu by isté problémy, pretože ich rýchlos v
ustálenom stave (teda v stave kedy sa už rýchlos nemení) závisí okrem
vstupného napätia aj od zaaženia. V dynamickom režime (teda pri rozbiehaní a
brzdení) závisí priebeh rýchlosti tiež napr. od hmotnosti robota. Keïže
hmotnos robota ani zaaženie motora nevieme vhodne ovplyvòova, môžeme motor
riadi zmenou napájacieho napätia.
<P>Použitie jednosmerných motorov na pohon robota závisí do istej miery aj od
koncepcie podvozku robota. Ak má by robot poháòaný tak, že sa vyžaduje, aby
boli rýchlosti rôznych motorov v želanom pomere, (napr. by boli poháòané 2
kolesá každé vlastným motorom, smer zatáèania robota by bol potom odvodený od
vzájomného pomeru rýchlostí jdnotlivých motorov), použitie jednosmerných
motorov by som neodporúèal, lebo by boli potrebné snímaèe rýchlostí a
dostatoène rýchle regulátory obidvoch motorov. V tomto prípade je použitie
krokových motorov omnoho jednoduchšie.
<P>Ak by však bol na pohon robota použitý iba jeden motor a zatáèanie robota
by bolo riešené nejako inak, potom by sa dal jednosmerný motor použi napr.
tak, že by sa vstupným napätím nastavila vhodná rýchlos. Keïže by sa
zaaženie motora poèas jazdy menilo iba minimálne (nerovnosti na trati),
otáèky motora by sa tiež menili iba v malom rozsahu.
<P>A ako zmeni napájacie napätie motora? Najjednoduchším riešením je zapoji
vhodný odpor (potenciometer) do série s motorom. "Krajším" riešením je napája
motor šírkovo modulovaným napätím. Na generovanie riadiaceho signálu pre
šírkovú moduláciu je možné využi nejaký oscilátor, alebo riadiaci procesor,
pokia¾ disponuje šírkovou moduláciou alebo pulzným generátorom. Riadiaci
signál bude potom vstupom do spínacieho tranzistora, alebo, ak je potrebná
reverzácia otáèok motora, do H-mostu, cez ktorý bude motor napájaný.
<P>Na záver: Ak sa rozhodnete použi jednosmerné motory namiesto krokových,
zvolili ste si nároènejšiu, nie však neschodnú cestu. Zaèiatoèníkom by som
však odporuèil použi krokové motory.
<P>Juraj Gacho <TT>&lt;gacho@nov1.kar.elf.stuba.sk&gt;</TT>
<HR>
</LI></UL><A name=hladame>
<H2>H¾adáme odpovede:</H2></A>
<UL>
<P>
<LI><I>Kde by som našiel schémy zapojení robotov do súaže?</I>
<HR>
</LI></UL>Na otázky odpovedali pracovníci a doktoranti Katedry automatizácie FEI
STU.
<P><BR>
<P align=center>[<A
href="http://www.robotika.sk/contest/novinky.html">Novinky</A>] [<A
href="http://www.robotika.sk/contest/pravidla.html">Pravidlá</A>] [<A
href="http://www.robotika.sk/contest/roboti.html">Roboti</A>] [Poradòa] [<A
href="http://www.robotika.sk/contest/archive/index.html">Archív</A>]
<P><BR>
<P>
<HR width=500 SIZE=1>
 
<P align=center><A href="http://www.kar.elf.stuba.sk/" target=_blank><IMG
height=79 alt=KAR src="poradna_soubory/karlogo.gif" width=94 border=0></A> <A
href="http://www.datalan.sk/" target=_blank><IMG height=79 alt=DATALAN
src="poradna_soubory/datlogo3.gif" width=273 border=0></A> <A
href="http://www.microstep-mis.sk/" target=_blank><IMG height=79 alt=MS-MIS
src="poradna_soubory/mislogo.gif" width=173 border=0></A>
<P><BR>
<P>
<HR>
 
<P align=center><FONT size=-2>© 2002 Katedra automatizácie a regulácie FEI
STU<BR>Ilkovièova 3, 812 19 Bratislava <BR>Posledná zmena: 12. októbra
2002.<BR>Zodpovedný èlovek: <I><A href="mailto:balogh@elf.stuba.sk">Richard
Balogh</A></I>. </FONT></P></BODY></HTML>
/roboti/istrobot/callis/FAQ_soubory/poradna_soubory/datlogo3.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/FAQ_soubory/poradna_soubory/istrobot.css
0,0 → 1,24
BODY {
PADDING-RIGHT: 1ex; PADDING-LEFT: 1ex; FONT-SIZE: 10pt; BACKGROUND: white; PADDING-BOTTOM: 1ex; MARGIN: 1ex; COLOR: black; PADDING-TOP: 1ex; FONT-FAMILY: Verdana, Geneva, Arial, Helvetica, sans-serif
}
A:link {
FONT-WEIGHT: bold; COLOR: #ff8c1d; TEXT-DECORATION: none
}
A:visited {
FONT-WEIGHT: bold; COLOR: #ff8c3d; TEXT-DECORATION: none
}
A:hover {
FONT-WEIGHT: bold; COLOR: #ff8c2d; TEXT-DECORATION: underline
}
A:active {
FONT-WEIGHT: bold; COLOR: #ff8c2d; TEXT-DECORATION: underline
}
H1 {
FONT-WEIGHT: normal; FONT-SIZE: 3em; WIDTH: 80%; BORDER-BOTTOM: #ffd700 thin solid; FONT-STYLE: normal; FONT-VARIANT: normal
}
H2 {
FONT-WEIGHT: normal; FONT-SIZE: 2em; WIDTH: 65%; COLOR: black; BORDER-BOTTOM: #ffd700 thin solid; FONT-STYLE: normal; FONT-VARIANT: normal
}
H3 {
FONT-WEIGHT: normal; FONT-SIZE: 1.5em; WIDTH: 50%; COLOR: black; BORDER-BOTTOM: #ffd700 thin solid; FONT-STYLE: normal; FONT-VARIANT: normal
}
/roboti/istrobot/callis/FAQ_soubory/poradna_soubory/karlogo.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/FAQ_soubory/poradna_soubory/mislogo.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/Firm0309.lgo
0,0 → 1,1026
S01300003F4C49425F56455253494F4E5F4C303046
S11380006DF16DF26DF36DF46DF56DF61B8779030B
S1138010CC000D36AE00B6F0440818EE68BE0B0373
S113802040F07906828C6B86CC66790684406B8638
S1138030CC687906863C6B86CC6A79068D746B862F
S1138040CC6C790690D26B86CC6E7906BDDE6B86DD
S1138050CC706A0CBE106B0600006B86FD9018EEA7
S11380606A8ECC3718CCAC00464C7906CC006DF641
S11380707906CC065E003B9A0B877906CC005E003D
S1138080823E7906CC005E0083C67906CC005E0091
S113809085EC7906CC005E008D0C7906CC005E0080
S11380A08F3A7906CC005E00BDC0FE026A8ECC37E2
S11380B0FC035A00823AAC0346621844FA061822BA
S11380C0A406441C0C4E18666E6DCC00737D470CE0
S11380D00CD9E97F1C2943040C920C4A0A0440E0A1
S11380E0AA0644127906CC000CAD185509556F55F3
S11380F0CC665D5040087906CC047D6070706A0ED1
S1138100CC3347086A0ECC37AE014602FC016A0E36
S1138110CC64AE014602FC1F5A00823AAC04460EFF
S11381207906CC005E008F2A18CC5A00823AAC0142
S113813047045A0081D46A0ECC37AE0146445E002F
S11381403ED47906CC005E0083B67906CC005E008E
S113815085DC7906CC005E008CF47906CC005E00E8
S1138160BC2C7906CC005E00BE0019666B86FD8AC5
S11381706B86FD88FE013ECC6B06FD905D60FC04C1
S113818040507906CC005E0083B67906CC005E00D0
S113819085DC7906CC005E008CF47906CC005E00A8
S11381A0BC2C7906CC005E00BE000D766DF6790617
S11381B0700C5E003CCC0B877906CC005E008D749D
S11381C0687E460E6A0ECC36AE0146065E003ED48C
S11381D0FC044066AC1F4660FE076DF67906700A23
S11381E05E003E9E0B8718EE6A8ECC4D6A8ECC4E96
S11381F06A8ECC4F6A8ECC506A8ECC516A8ECC5229
S11382007906CC005E0084406A0ECC33AE0146246D
S113821019666DF6790600016DF66DF67906700B38
S11382205E003DE00B870B870B877906CC005E0070
S11382308D7440D4FC01400218CC5A0080666DF362
S11382406DF46DF518CC0D63AC0344280CCE1866A0
S11382500966093619556FE5003E0CCE18660966A5
S113826009366FE500440D3608CE96006EED004ADF
S11382700A0C40D4FE016EBE0060FE7F68BE5E0044
S113828014980CE46D756D746D7354706DF26DF328
S11382906DF46DF58FF8183318BB0D64AB0345040A
S11382A05A00835C0D4608BE96006E6A0038AA0325
S11382B04704AA04460E0CBE1866086E96105E00AB
S11382C01946400C0CBE1866086E96105E0019C460
S11382D068FA0D4608BE96006E6D003B6EFD000107
S11382E00CBE1866096609466F65003E6FF500020C
S11382F00CBE1866096609466F6500446FF50004F4
S11383000D4608BE96006E6D004A6EFD00060D76A1
S11383106DF60CBE1866086E96105E0014C00B87CE
S11383200CEE46300CBE1866096609466F750002ED
S11383306FE5003E0CBE1866096609466F750004B9
S11383406FE500440D4608BE96006E7D00066EED96
S1138350004A4002F3410A0B5A00829C6E4E0060B0
S113836046166A0ECC720A0E6A8ECC72AE014306B1
S1138370FE016ECE0060400618EE6A8ECC726E4E20
S1138380006247201A0E6ECE00624618FE4F6ECE73
S113839000506ECE00516ECE00526E4E0001707EC3
S11383A06ECE00017D4072700C3E8F086D756D7449
S11383B06D736D7254706DF46DF55E001A220CECE1
S11383C06D756D7454706DF26DF36DF46DF50D6330
S11383D0FD016EED00011844A40242540D36084E0E
S11383E096000C4D100D100D100D100DCD4F6EEDAF
S11383F000530D36084E9600FD4F6EED00500D36BD
S1138400084E96006EED004D0C4E18660D35084D65
S113841095006E5C0053EC086EECCC74FD016EEDBF
S1138420CC770966093619556FE500280A0440A877
S11384305E001A4A0CEA6D756D746D736D7254703A
S11384406DF06DF16DF26DF36DF46DF51B870D61DB
S11384508E2896000D6219330D36AE02B600430421
S11384605A0085C00D300910885390000D36091646
S11384706E6400500C4EEE3047140CBE100E100EFD
S1138480100E100E0C4DEDCF14DE688E40180D3614
S113849009166E6D004DEDCF0CBE100E100E100EB1
S11384A0100E14ED688D0D3609166E640053737446
S11384B046045A00857A733447606E3ECC7446088D
S11384C06E3ECC77AE01462A0C4EEE076DF6FE01E9
S11384D06DF60D368E0096205E001A4E0B870B87C4
S11384E018EE6EBECC776E3ECC74703E6EBECC740D
S11384F040266E3ECC74703E6EBECC74FE076DF6A4
S1138500FE036DF60D368E0096205E001A4E0B8724
S11385100B877906006469A6405E6E3ECC744708FA
S11385206E3ECC77AE01462A0C4EEE076DF6FE0287
S11385306DF60D368E0096205E001A4E0B870B8763
S113854018EE6EBECC776E3ECC74723E6EBECC74AA
S113855040266E3ECC74723E6EBECC74FE076DF641
S1138560FE036DF60D368E0096205E001A4E0B87C4
S11385700B877906006469A6403E7364471EFE07B4
S11385806DF6FE036DF60D368E0096205E001A4ED3
S11385900B870B87FE016EBECC77401CFE076DF681
S11385A0FE046DF60D368E0096205E001A4E0B8783
S11385B00B87FE016EBECC770B030B825A008458E6
S11385C06E1E0001727E6E9E0001687E0B876D75C3
S11385D06D746D736D726D716D7054706DF46DF5B5
S11385E05E001AB40CEC6D756D7454706DF36DF41B
S11385F06DF518DD6A8DCC806A8DCC8119556B853B
S1138600CC7A6A8DCC820D646EED005CFE016ECE78
S113861000025E001ABA0CEB18EE6ECE00346ECE79
S113862000326ECE00316ECE00356ECE00636ECE5B
S113863000640CBE6D756D746D7354706DF26DF3E2
S11386406DF46DF51B877905CC807D5071000D7537
S11386506DF50D64790630005E001FB60B870CEBD8
S11386606E7E0001731E473E6A0ECC7B731E463439
S11386706B06CC7A701E6B86CC7AFE016ECE00320D
S11386806E4E005C0A0E6ECE005CAE07450618EE18
S11386906ECE005C7906301E5E001B326F46005EB3
S11386A06FC6001240106B06CC7A721E6B86CC7AB1
S11386B018EE6ECE00326E7E0001730E475E6A0EB7
S11386C0CC7B730E46546B06CC7A700E6B86CC7AD8
S11386D07906301E5E001B326F46005E6FC60012C4
S11386E06A0ECC7B731E47286E4E005CAE044708AE
S11386F0AE054704AE0646180D4508ED9500FEFF8D
S11387006EDE004C6E4E0001707E6ECE0001400A9B
S11387106E4E0035710E6ECE0035402A6A0ECC7B4B
S1138720730E47226B06CC7A720E6B86CC7AFE47A8
S11387306ECE00506ECE00516ECE00526E4E0001D1
S1138740707E6ECE00016E7E0001732E476E6A0E3F
S1138750CC7B732E46646B06CC7A702E6B86CC7AF7
S11387607906301E5E001B326F46005E6FC6001233
S11387706A0ECC7B731E47286E4E005CAE0447081D
S1138780AE054704AE0646180D4508ED9500FEF704
S11387906EDE004C6E4E0001707E6ECE0001401AFB
S11387A0FE016ECE00316E4E005D0A0E6ECE005D8F
S11387B0AE05450618EE6ECE005D402A6A0ECC7BEF
S11387C0732E47226B06CC7A722E6B86CC7AFE47C8
S11387D06ECE00506ECE00516ECE00526E4E000131
S11387E0707E6ECE00016A0ECC80AE0147045A0042
S11387F08CDC790630185E001E4A7906CC817D60D7
S113880071006E4E006118666A0DCC8108DE960018
S11388101B06A6004604AE01473CA6004604AE0271
S1138820472CA6004604AE03471CA6004D30460460
S1138830AE04452AA6004E264604AE05422079061B
S113884030185E001B62790630185E001B627906E0
S113885030185E001B62790630185E001B626E4E93
S11388600063AE01462A6A0ECC820A0E6A8ECC825E
S1138870AE0A440A7906301A5E001B624012790679
S1138880301A5E001E4A18EE6ECE00636A8ECC82E9
S11388906E4E0034AE0146227906CC7C7D607100B8
S11388A06A0ECC7C470A790630075E001B624008DA
S11388B0790630065E001B624008790630065E00C9
S11388C01B626F46005AAE2CB61A430A7906301B57
S11388D05E001E4A403C6F46005AAE9CB618430ADE
S11388E07906301B5E001B624028FE016ECE0064D8
S11388F05E0027AC7906301B5E001B625E0027C851
S113890019665E00339A790600016FC600125A0098
S11389108CE86E4E0056AE0146206E4E0057460A55
S11389207906301C5E001B6240087906301D5E002B
S11389301B6218EE6ECE005640107906301C5E00A5
S11389401E4A7906301D5E001E4A6F4600586B05AC
S1138950CC841D56470E6B86CC84790630195E0094
S11389601B62400E6E4E00634608790630195E00A5
S11389701E4A790630095E001E4A7906300B5E00F5
S11389801E4A7906300D5E001E4A7906300E5E00DE
S11389901E4A790630115E001E4A790630145E00C4
S11389A01E4A790630085E001E4A7906300A5E00C7
S11389B01E4A7906300C5E001E4A790630105E00AD
S11389C01E4A7906300F5E001E4A790630135E0097
S11389D01E4A790630125E001E4A790630165E0081
S11389E01E4A790630155E001E4A6E4E0053737E91
S11389F04716733E470A790630105E001B62400832
S1138A007906300F5E001B626E4E0054737E47166B
S1138A10733E470A790630135E001B6240087906EC
S1138A2030125E001B626E4E0055737E4716733E15
S1138A30470A790630165E001B6240087906301535
S1138A405E001B626E4E004A4708790630095E00DC
S1138A501B626E4E004B47087906300B5E001B62AA
S1138A606E4E004C47087906300D5E001B62196695
S1138A706DF66E4E005D0B066DF6790630175E00DE
S1138A801FF20B870B876E4E005CAE0046726A0EB7
S1138A90CC7E0A0E6A8ECC7EAE02436018EE6A8EDD
S1138AA0CC7E7906CC7F7D6071006F46001079051D
S1138AB0003C5F4E790500645F4A6DF66F46001016
S1138AC07905003C5F4C6D7509650D526A0ECC7FCB
S1138AD04716790630046DF66DF27906301F5E0094
S1138AE01FF20B870B874014790630026DF66DF286
S1138AF07906301F5E001FF20B870B875A008CD655
S1138B00AE01464A790630085E001B626E4E003B99
S1138B10AEA04704AEC0461A790630036DF66F4620
S1138B2000446DF6790630015E001FF20B870B8757
S1138B304018790630026DF66F4600446DF67906EA
S1138B4030015E001FF20B870B875A008CD6AE02F1
S1138B50464A7906300A5E001B626E4E003CAEA0A7
S1138B604704AEC0461A790630036DF66F460046D8
S1138B706DF6790630015E001FF20B870B874018F3
S1138B80790630026DF66F4600466DF679063001BF
S1138B905E001FF20B870B875A008CD6AE03464A41
S1138BA07906300C5E001B626E4E003DAEA0470499
S1138BB0AEC0461A790630036DF66F4600486DF66E
S1138BC0790630015E001FF20B870B874018790687
S1138BD030026DF66F4600486DF6790630015E008E
S1138BE01FF20B870B875A008CD6AE04464A7906CF
S1138BF0300E5E001B626E4E0053737E4720790672
S1138C0030026DF66E4E0053EE0718660B066DF6D5
S1138C10790630015E001FF20B870B874016790638
S1138C2030026DF619666DF6790630015E001FF2AA
S1138C300B870B875A008CD6AE054648790630114F
S1138C405E001B626E4E0054737E4720790630022C
S1138C506DF66E4E0054EE0718660B066DF6790637
S1138C6030015E001FF20B870B8740167906300235
S1138C706DF619666DF6790630015E001FF20B87FA
S1138C800B874052AE064648790630145E001B62DC
S1138C906E4E0055737E4720790630026DF66E4E97
S1138CA00055EE0718660B066DF6790630015E0076
S1138CB01FF20B870B874016790630026DF6196692
S1138CC06DF6790630015E001FF20B870B874006B4
S1138CD018EE6ECE005C5E0027C814EB6E4E0002E8
S1138CE0727E6ECE00020CBE0B876D756D746D7353
S1138CF06D7254706DF46DF55E0027AC5E0027C88C
S1138D005E0027F40CEC6D756D7454706DF46DF5A4
S1138D100D655E0029640CECFE016EDE00337906FD
S1138D2023286FD6005A6E5E003746087906000F76
S1138D306FD6005E6F56005E6FD6001219666B86A2
S1138D40CC886A8ECC8AFE0A6A8ECC8B18EE6A8E28
S1138D50CC8C6EDE0036790600016DF6790640048F
S1138D605E00299A0B87FE026EDE00030CCE6D7541
S1138D706D7454706DF16DF26DF36DF46DF51B87C8
S1138D801B870D756DF50D62790640005E0029F2B2
S1138D900B870CE96A0ECC8BAE0A4624697646082A
S1138DA018EE6A8ECC8C40166A0ECC8C0A0E6A8E33
S1138DB0CC8C1A0EAE024306FE0B6A8ECC8B405C42
S1138DC0AE0B46266976462019666DF67906400391
S1138DD05E00299A0B8718EE6EAE0033FE0C6A8E85
S1138DE0CC8B18EE6A8ECC8C4032AE0D472CAE0C78
S1138DF0462A6976460818EE6A8ECC8C401C6A0EA8
S1138E00CC8C0A0E6A8ECC8C1A0EAE28430CFE0152
S1138E106EAE0036FE0D6A8ECC8B40006F26005E6F
S1138E2047286F2600124622790600646FA60012B6
S1138E3019666DF6790640035E00299A0B8718EED1
S1138E406EAE0033FE016EAE00360D768E026DF608
S1138E50790640015E0029F20B870CE96F76000267
S1138E606B05CC8809656B85CC886A0ECC8A0A0EA2
S1138E706A8ECC8AAE20463E0D5619440D451933F0
S1138E807904ABD45F546A0CCC8A184419336DF658
S1138E906DF50D350D46790406185F540D530D64B8
S1138EA06D756D765F566FA6005A18EE6A8ECC8A81
S1138EB019666B86CC886E2E0003727E6EAE00033C
S1138EC06F760002195519337904ABD45F54193302
S1138ED0790406185F58AE9CB618BD00B5004C283E
S1138EE0790617705E003266FE306EAE00506EAECC
S1138EF000516EAE0052FE146EAE00626E2E000182
S1138F00707E6EAE000140106E2E0057AE01460812
S1138F10790617705E0032500C9E0B870B876D75B7
S1138F206D746D736D726D7154706DF46DF55E00DA
S1138F302A620CEC6D756D7454706DF16DF26DF305
S1138F406DF46DF50D63FD016EED00040CDE6DF640
S1138F500CDE6DF60D368E0696006DF60D368E041B
S1138F6096005E0030D00B870B870B870CEA1966DE
S1138F706FB600106A8ECCC06A8ECCC26A8ECCC327
S1138F807906FFFF6B86CD086E3E00571CDE46084F
S1138F90790617705E0032506E3E0004727E6EBE1B
S1138FA000046E3E003747045A0090C418EE6EBEAB
S1138FB00057790617705E00326618EE6A8ECCC4CC
S1138FC06EBE005D6EBE00616A8ECD0618CCAC200C
S1138FD044100CCE1866096619556FE5CCC60A0C08
S1138FE040EC18CCAC03441A0D3608CE960018DDBC
S1138FF06EED00380D3608CE96006EED003B0A0C7F
S113900040E218CCAC0A444C1844A405442AFE0A95
S1139010504608CE96000D6118EE6E9ECC8E6E9E64
S1139020CE56FE1450460CCD1855095509561955FF
S11390306FE5CDF20A0440D20CCE186609667905B4
S1139040CEE26FE5CDDE0CCE186618DD6EEDCEB047
S11390500A0C40B018CCAC2742200CCE1866096626
S11390607905CEBA08CD95006FE5CD220CCE1866F1
S1139070FDF66EEDCEBA0A0C40DCFC28AC5A421266
S11390800CCE186609667905CEE26FE5CD220A0C8E
S113909040EA7906CEE26B86CDD8FDFF68ED0B067B
S11390A06B86CDD8FD0168ED0B066B86CDD818DD37
S11390B068ED0B066B86CDD86B86CDDA7906E6B9FA
S11390C06B86CDDC0CAE6D756D746D736D726D71E8
S11390D054706DF06DF16DF26DF36DF46DF58FD626
S11390E018DD6EFD00116EFD00146EFD00170D619C
S11390F06E6D0031AD0147045A0091AC18EE6E9EBE
S113910000316E9E003418AAAA0A443E6A0ECCC4EA
S1139110FD0A50E508AD95006E5ECE56AE024714CA
S11391206A0ECCC4FD0A50E508AD95006E5ECE56BD
S1139130AE0346126A0ECCC4FD0A50E508AD950094
S1139140FE016EDECE560A0A40BE18AAAA034424C3
S11391500D1608AE96006E6D004D727D6EED004DDD
S11391600D1608AE96006E6D004D706D6EED004DDF
S11391700A0A40D86E1E0001707E6E9E00016E1EAB
S1139180005D6A8ECCC418AAAA0A44200CAE1866E4
S113919009666A0DCCC4FC0A50D408AC9400094496
S11391A06F45CD726FE5CDDE0A0A40DC6E1E0035D8
S11391B06A0DCCC31CDE46045A0092806A8ECCC36E
S11391C06E1E0034463C6A0ECCC4FD0A50E56E5E49
S11391D0CE56472C18EE6A8ECEB06A0ECCC4FD0A69
S11391E050E5FE026EDECE566A0ECCC4FD0A50E592
S11391F009556F56CD726B86CDDEFE016E9E00342E
S1139200407E18EE6E9E003418AAAA0A443E6A0EE6
S1139210CCC4FD0A50E508AD95006E5ECE56AE0294
S113922047146A0ECCC4FD0A50E508AD95006E5E85
S1139230CE56AE0346126A0ECCC4FD0A50E508AD04
S11392409500FE016EDECE560A0A40BE18AAAA0395
S113925044240D1608AE96006E6D004D727D6EEDC1
S1139260004D0D1608AE96006E6D004D706D6EEDDE
S1139270004D0A0A40D86E1E0001707E6E9E0001E9
S11392800D168E5896006DF60D768E185E003426F7
S11392900B876E7E001646045A00940E6F16005E0D
S11392A06F9600120D768E186DF6FE106DF60D7623
S11392B08E1E5E0033B00B870B876E7A001AEAF7B6
S11392C0AA1046045A0093A8AAD246045A0093A8A6
S11392D0AA4546045A0093A8AA2546045A0093A80E
S11392E0AA3546045A0093A8AA7146045A0093A8C2
S11392F0AA8146045A0093A8AA6146045A0093A876
S1139300AAC146045A0093A8AA1246045A0093A874
S1139310AAE146045A0093A8AA2146045A0093A835
S1139320AAF746045A0093A8AA22477CAA51477870
S1139330AA234774AA144770AA62476CAA524768C2
S1139340AAA44764AA324760AA42475CAA134758B2
S1139350AAD14754AA334750AAA1474CAA60474808
S1139360AA204744AA404740AA50473CAA7047381D
S1139370AA154734AA654730AAB1472CAA914728B1
S1139380AA304724AA314720AA24471CAA344718E4
S1139390AA444714AA544710AA64470CAA8447084D
S11393A0AA944704AA744662AAF74704AAD24608B4
S11393B0FE016EFE001140526A0ECCC16E7D001A91
S11393C01CDE47220CDE723D6EFD001A6A8ECCC193
S11393D0170E6A8ECD0CFE016A8ECD0B6EFE001147
S11393E06EFE00144024FE016EFE0014AA20470AFB
S11393F0AAA447066A0ECD0A46106E7E001A723E73
S11394006EFE001AFE016EFE00115A0095B46E1E27
S11394100060AE0147045A0095B46A0ECCC00A0E2F
S11394206A8ECCC0AE0A450618EE6A8ECCC06A0EAF
S1139430CCC4FD0A50E56A0ECCC008ED95006E5E02
S1139440CE5646045A0095B46A0ECCC4FD0A50E5C3
S11394506A0ECCC008ED95006E5ECE56AE01460491
S11394605A0095B46A0ECCC4FD0A50E56A0ECCC00D
S113947008ED95006E5ECE56AE0346266A0ECCC04D
S11394801866096609166F65001446166A0ECCC480
S1139490FD0A50E56A0ECCC008ED9500FE026EDEB2
S11394A0CE566A0ECCC4FD0A50E56A0ECCC008ED57
S11394B095006E5ECE56AE0247045A0095B46A0E0D
S11394C0CCC4FD0A50E56A0ECCC008ED95000955E0
S11394D06F55CD740CEC184409446F44CDDE1D5413
S11394E0447C0CED185509558DDE95CD69F569550B
S11394F0685E6EFE001A697669650B0569E56E7E25
S1139500001AEE076EFE0013AE0543068EFA6EFED9
S11395100013FA016E7E001318660B060CAD185585
S11395201D564F2C0CAE186609766A0DCCC0095531
S11395306F55CDDE685C6EEC001A6A0ECCC01866FE
S113954009666F65CDDE0B056FE5CDDE0A0A40C402
S1139550FE016EFE001118EE6EFE001440566A0EF7
S1139560CCC4FD0A50E56A0ECCC008ED9500FE019E
S11395706EDECE5618EE6E9E003418AAAA0A443443
S11395806A0ECCC4FD0A50E508AD95006E5ECE5659
S1139590AE0247146A0ECCC4FD0A50E508AD95002E
S11395A06E5ECE56AE034608FE016E9E0034FA0A85
S11395B00A0A40C86E7E0011AE0147045A00BBBEC1
S11395C018EE6A8ECD0A6EFE00116EFE00106A0E51
S11395D0CD09731E470A6E7E0010710E6EFE0010D8
S11395E06A0ECD09734E470A6E7E0010710E6EFE30
S11395F000106A0ECD09736E470A6E7E0010710E5C
S11396006EFE00106B06CD087356470A6E7E00107E
S1139610710E6EFE00106E7E0010470E6B06CD08B4
S11396200966700E6B86CD08400A6B06CD08096684
S11396306B86CD086E7E001A790400727905965502
S11396406C561CE647088CFE46F65A00BBBE6F44B7
S1139650968C59400010121314151720212223242C
S11396602527303132333435374042434445505155
S113967052546061626465707172748182848590F1
S113968091929495A1A4B1B2C1D1D2E1F6F7BAE016
S1139690ADC0AA129700ACF0A80CBA6C99C2B9DCA0
S11396A0AD129C90B6CC9C1EBAF2BAD69C90B6521F
S11396B09AB8A5F0B5209A52A57EA8DCA284B41C61
S11396C0B806A6F69A04B37AB746AB98A6A2A2B691
S11396D0B2D6AEA0ACB6A7A49BB8A0E2B23CAE3062
S11396E0ABC0ADFE99DA9A149FB8B1A0AB68AD34A3
S11396F0A998BB8EAD6AA21CAF50AABCA38899FAE4
S11397006E7E001B18660CE618EE6E7D001C08DEEB
S11397109600EEF8E6010D664770FE656E9E0062E7
S11397206E7E001C733E4708FEFF6E9E0050401282
S1139730736E4708FEF76E9E00504006FE4F6E9E05
S113974000506E7E001C734E4708FEFF6E9E005153
S11397504012737E4708FEF76E9E00514006FE4F8E
S11397606E9E00516E7E001C735E4708FEFF6E9E67
S1139770005240166E7E001D730E4708FEF76E9E63
S113978000524006FE4F6E9E00526E1E0001707E17
S11397906E9E00016E7E001B18660CE618EE6E7D50
S11397A0001C08DE96006B05CD1E1D5646045A00AB
S11397B099BE6E7E001B18660CE618EE6E7D001CCA
S11397C008DE9600F2046B86CD1E79040016790536
S11397D097E66D531D6347088CFE46F65A0099B808
S11397E06F4497FA5940000000010002000402008F
S11397F00400080010002000400080009824993ADA
S11398009878987698749872987099B099A899A055
S11398109812FE4F6E9E00506E9E00516E9E005236
S11398205A0099B8790600056DF679060D486DF66B
S1139830790617735E00327C0B870B877906000567
S11398406DF67906000A6DF6790617735E00327CB0
S11398500B870B87790600146DF679060D486DF6B3
S1139860790617735E00327C0B870B875A0099B810
S11398701A021A021A021A0218AAAA0A443E6A0E04
S1139880CCC4FD0A50E508AD95006E5ECE56AE021E
S113989047146A0ECCC4FD0A50E508AD95006E5E0F
S11398A0CE56AE0346126A0ECCC4FD0A50E508AD8E
S11398B09500FE016EDECE560A0A40BEFE4F6E9E35
S11398C000506E9E00516E9E00526E9E004D6E9E24
S11398D0004E6E9E004F6A82CCC46E92005D18AA40
S11398E0AA0A44200CAE186609666A0DCCC4FC0AA8
S11398F050D408AC940009446F45CD726FE5CDDEB9
S11399000A0A40DC6A0ECCC4FD0A50E56E5ECE56EF
S11399104726FE016E9E00346A0ECCC4FD0A50E553
S1139920FE026EDECE566A0ECCC4FD0A50E5095521
S11399306F56CD726B86CDDE407E18EE6E9E00347F
S113994018AAAA0A443E6A0ECCC4FD0A50E508AD22
S113995095006E5ECE56AE0247146A0ECCC4FD0A64
S113996050E508AD95006E5ECE56AE0346126A0E03
S1139970CCC4FD0A50E508AD9500FE016EDECE565E
S11399800A0A40BEFE4F6E9E00506E9E00516E9EAF
S113999000526E9E004D6E9E004E6E9E004F40180B
S11399A0FE016A8ECD064010FE026A8ECD06400886
S11399B0FE036A8ECD06400018EE6A8ECCC15A00B2
S11399C0BBBE6E7E001B18666F96005E6F9600121B
S11399D0FE016A8ECD0A5A00BBBE6E1E005B6A8E03
S11399E0CD0D6E1E005A6A8ECD0EFE036A8ECD0B0F
S11399F0FE016A8ECD0A5A00BBBEFE016A8ECD0AF4
S1139A005A00BBBE19666F960012FE016A8ECD0A1B
S1139A105A00BBBE6E7E001B737E471AEE7F18662B
S1139A200B066A0DCCC0185509556F54CDDE196468
S1139A306FD4CDDE4018EE7F18661B066A0DCCC0CD
S1139A40185509556F54CDDE09646FD4CDDE5A0024
S1139A50BBBE6E7E001B737E472E6E7E001C186696
S1139A60FD0709661A0D46FA6E7D001BED7F08DEC0
S1139A7096000B866A0DCCC0185509556F54CDDE7F
S1139A8019646FD4CDDE402C6E7E001C1866FD0771
S1139A9009661A0D46FA6E7D001BED7F08DE9600FE
S1139AA01B866A0DCCC0185509556F54CDDE096468
S1139AB06FD4CDDE5A00BBBE6E7E001BAE00466680
S1139AC06E7E001C186609666F66CCC60D664F383C
S1139AD06E7E001C186609666F66CCC6AE00B601C1
S1139AE04C266A0ECCC018666E6DCEB00CEC1844D1
S1139AF00944094408DC94006E7E001C09666E6DFE
S1139B00CCC76ECDCE88401C6A0ECCC018666E6D74
S1139B10CEB00CEC18440944094408DC940018EE57
S1139B206ECECE88406EAE0246206A0ECCC0186659
S1139B306E6DCEB00CEC18440944094408DC940062
S1139B406E7E001C6ECECE88404AAE04462A6A0E53
S1139B50CCC018666E6DCEB00CEC184409440944B0
S1139B6008DC94006E7E001C0B060D656B06CD08A8
S1139B705F4C6ECECE88401C6A0ECCC018666E6DEB
S1139B80CEB00CEC18440944094408DC940018EEE7
S1139B906ECECE886A0ECCC018666E6DCEB00A0D3D
S1139BA06EEDCEB01A0DAD04460A0CED1855FE0349
S1139BB06EDECEB05A00BBBE6A0ECCC018666E6DA7
S1139BC0CEB00CEC18440944094408DC94006E4EF1
S1139BD0CE8746286A0ECCC06E6DCEB01A0D6EEDDF
S1139BE0CEB06E7E001B1B066A0DCCC018550955FD
S1139BF06F54CDDE09646FD4CDDE401E6A0ECCC036
S1139C006E6DCEB00CEC18440944094408DC940091
S1139C106E4ECE871A0E6ECECE875A00BBBE6A0E2B
S1139C20CCC018666E6DCEB00CEC184409440944DF
S1139C3008DC94006E4ECE8746346A0ECCC06E6D3E
S1139C40CEB01A0D6EEDCEB06E7E001C0CE618EE92
S1139C506E7D001B08DE96001B866A0DCCC018556D
S1139C6009556F54CDDE09646FD4CDDE401E6A0EF3
S1139C70CCC06E6DCEB00CEC18440944094408DC29
S1139C8094006E4ECE871A0E6ECECE875A00BBBE9F
S1139C906E7E001BEE3F7904001679059CB36C566A
S1139CA01CE647088CFE46F65A009D8E6F449CBC09
S1139CB059400000010203090A0B0C0D0E0F9D848C
S1139CC09D7E9D6A9D5A9D469D329D229D0E9CF6C9
S1139CD09CE49CD46E7E001D186609666F60CCC639
S1139CE05A009D8E6E7E001D1866096609166F6007
S1139CF000085A009D8E6E7E001E18660CE618EE53
S1139D006E7D001D08DE96000D605A009D8E6E7EED
S1139D10001D0D1508ED95006E5D005318550D508E
S1139D20406C6E7E001D1866096609166F6000445B
S1139D30405C6E7E001D0D1508ED95006E5D0038CB
S1139D4018550D5040486E7E001D0D1508ED950008
S1139D506E5D003B18550D5040346E7E001D186634
S1139D60096609166F60003E40246E7E001D0D15C5
S1139D7008ED95006E5D004A18550D5040106F10A7
S1139D800010400A6A0ECD0618660D6040006E7E13
S1139D90001C7904001479059DAE6C561CE6470836
S1139DA08CFE46F65A009E8E6F449DB659400001C3
S1139DB003090A0B0C0D0E0F9E829E789E629E4E26
S1139DC09E389E229E0E9DF69DE09DCC6E7E001FC9
S1139DD0186609666F65CCC66FF500025A009E8E40
S1139DE06E7E001F1866096609166F6500086FF518
S1139DF000025A009E8E6E7E001F0D1508ED950020
S1139E006E5D005318556FF500025A009E8E6E7EEB
S1139E10001F1866096609166F6500446FF5000295
S1139E20406C6E7E001F0D1508ED95006E5D0038C8
S1139E3018556FF5000240566E7E001F0D1508ED93
S1139E4095006E5D003B18556FF5000240406E7E34
S1139E50001F1866096609166F65003E6FF500025B
S1139E60402C6E7E001F0D1508ED95006E5D004AB6
S1139E7018556FF5000240166F1600106FF60002B9
S1139E80400C6A0ECD0618666FF60002400018EE0C
S1139E906EFE00126E7E001B128E128EEE03EE0317
S1139EA0AE0046106F7600021D604F06FE016EFE86
S1139EB00012403CAE0146106F7600021D604C0655
S1139EC0FE016EFE00124028AE0246106F760002BC
S1139ED01D604606FE016EFE00124014AE034610DD
S1139EE06F7600021D604706FE016EFE0012400000
S1139EF06E7E001247326E7E001AAE8546146A0EDC
S1139F00CCC0186609666F65CDDE0B056FE5CDDE46
S1139F1040126A0ECCC0186609666F65CDDE0B85EB
S1139F206FE5CDDE5A009FB46E7E001AAE85462AD8
S1139F306A0ECCC0186609666F66CDDE686D6EFD6C
S1139F4000200CDE18666A0DCCC0185509556F54F4
S1139F50CDDE09646FD4CDDE405A6A0ECCC01866DB
S1139F6009666F66CDDE686D6EFD00206A0ECCC09A
S1139F70186609666F65CDDE0B056FE5CDDE6A0EEA
S1139F80CCC0186609666F66CDDE686D6EFD002173
S1139F900CDE18660CE618EE6E7D002008DE9600D6
S1139FA01B066A0DCCC0185509556F54CDDE0964E3
S1139FB06FD4CDDE5A00BBBE6E7E001CAE0A4504D3
S1139FC05A00A0BA6E7E001F18660CE618EE6E7D6D
S1139FD0001E08DE96000D758D046DF56FF6000AFF
S1139FE06DF66E7E00206DF6FE015E00BC760B877A
S1139FF00B870B876EFE00150CEE47045A00A0A0D9
S113A0006A0ECCC4FD0A50E56E7E001C08ED950076
S113A01018EE6EDECE566E9E003418AAAA0A443498
S113A0206A0ECCC4FD0A50E508AD95006E5ECE56AE
S113A030AE0247146A0ECCC4FD0A50E508AD950083
S113A0406E5ECE56AE034608FE016E9E0034FA0ADA
S113A0500A0A40C86A0ECCC4FD0A50E56E7E001C94
S113A06008ED95006E7E001D6EDECC8E18EE6A8EB5
S113A070CD0DFE016A8ECCC219666DF66F760006B0
S113A0806DF6790617715E00327C0B870B87FE0133
S113A0906A8ECD1C6E7E001CCE806A8ECD1D40184B
S113A0A0FE016A8ECD0D19666DF66DF6790617718F
S113A0B05E00327C0B870B874018FE026A8ECD0D42
S113A0C019666DF66DF6790617715E00327C0B87A2
S113A0D00B87FE026A8ECD0BFE016A8ECD0A5A00F2
S113A0E0BBBE6E7E001CAE0845045A00A1F46E7E11
S113A0F0001F18660CE618EE6E7D001E08DE960042
S113A1000D758D046DF56FF6000A6DF66E7E0020F8
S113A1106DF6FE025E00BC760B870B870B876EFE26
S113A12000150CEE47045A00A1DA18EE6E9E0034B6
S113A13018AAAA0A44726A0ECCC4FD0A50E508ADF6
S113A14095006E5ECC8E6E7D001C186660D6166E11
S113A15047246A0ECCC4FD0A50E508AD95006E5E36
S113A160CE5647126A0ECCC4FD0A50E508AD9500E0
S113A170FE016EDECE566A0ECCC4FD0A50E508AD73
S113A18095006E5ECE56AE0247146A0ECCC4FD0A2C
S113A19050E508AD95006E5ECE56AE034606FE0150
S113A1A06E9E00340A0A408A18EE6A8ECD0DFE01B6
S113A1B06A8ECCC219666DF66F7600066DF6790666
S113A1C017715E00327C0B870B87FE016A8ECD1CF3
S113A1D06E7E001C6A8ECD1D4018FE016A8ECD0D68
S113A1E019666DF66DF6790617715E00327C0B8781
S113A1F00B874018FE026A8ECD0D19666DF66DF65A
S113A200790617715E00327C0B870B87FE026A8E1B
S113A210CD0BFE016A8ECD0A5A00BBBE6E7E001BBA
S113A220AE01465C6E7E001CAE0346546E7E001D7D
S113A230AE05464C6E7E001EAE0746446E7E001F81
S113A240AE0B463C18EE6A8ECD0D6A0E094D6A8E31
S113A250CD0E18EE6A8ECD0FFE016A8ECD1018EE6B
S113A2606A8ECD11FE036A8ECD1218EE6A8ECD135E
S113A270FE096A8ECD146A8ECD0BFE016A8ECD0A5C
S113A2805A00BBBE6E7E001BAE0146266E7E001CCD
S113A290AE03461E6E7E001DAE0546166E7E001E83
S113A2A0AE07460E6E7E001FAE0B4606FE016E9E86
S113A2B000375A00BBBEFE016A8ECD0A6A0ECCC2BC
S113A2C0AE0147045A00A3666E7E001C18660CE6B5
S113A2D018EE6E7D001B08DE96006FF6000E0D660C
S113A2E0473C6A0ECD1C18666F75000E1D56462637
S113A2F06E7E001D6E7D001E1CDE461218EE6A8EF8
S113A300CD0D6A0ECD1C0A0E6A8ECD1C4006FE03CE
S113A3106A8ECD0D400618EE6A8ECD0A404618EEC0
S113A3206A8ECD0D6A8ECCC26A0ECD1D737E471A1D
S113A3306A0ECCC4FD0A50E56A0ECD1DEE7F08ED11
S113A3409500FE016EDECE5640086F160058FDF6ED
S113A35068ED19666DF66DF6790617715E00327C4C
S113A3600B870B874018FE066A8ECD0D19666DF6B5
S113A3706DF6790617715E00327C0B870B87FE023F
S113A3806A8ECD0B5A00BBBE6E7E001B790400168C
S113A3907905A3A96C561CE647088CFE46F65A00BC
S113A3A0A5746F44A3B259400000010308090A0BC5
S113A3B00C0D0E0FA558A53AA516A4E6A4C0A49AA0
S113A3C0A468A450A42AA3F8A3CA6E7E001CAE20DD
S113A3D04422186609666E6DCCC76A8DCD0D6E7EFB
S113A3E0001C186609666E6DCCC66A8DCD0EFE0122
S113A3F06A8ECD0A5A00A5746E7E001CAE044426F3
S113A4001866096609166E6D00096A8DCD0D6E7E9B
S113A410001C1866096609166E6D00086A8DCD0E5B
S113A420FE016A8ECD0A5A00A5746E7E001CAE032E
S113A430441A0D1508ED95006E5E00536A8ECD0D1D
S113A44018EE6A8ECD0EFE016A8ECD0A5A00A574EE
S113A4506A0ECCC46A8ECD0D18EE6A8ECD0EFE0146
S113A4606A8ECD0A5A00A5746E7E001CAE03442683
S113A4701866096609166E6D00456A8DCD0D6E7EEF
S113A480001C1866096609166E6D00446A8DCD0EAF
S113A490FE016A8ECD0A5A00A5746E7E001CAE03BE
S113A4A0441A0D1508ED95006E5E00386A8ECD0DC8
S113A4B018EE6A8ECD0EFE016A8ECD0A5A00A5747E
S113A4C06E7E001CAE03441A0D1508ED95006E5EF9
S113A4D0003B6A8ECD0D18EE6A8ECD0EFE016A8E9B
S113A4E0CD0A5A00A5746E7E001CAE03442618667D
S113A4F0096609166E6D003F6A8DCD0D6E7E001CD7
S113A5001866096609166E6D003E6A8DCD0EFE0151
S113A5106A8ECD0A405E6E7E001CAE03441A0D1591
S113A52008ED95006E5E004A6A8ECD0D18EE6A8EB7
S113A530CD0EFE016A8ECD0A403A6E7E001C461690
S113A5406E1E00116A8ECD0D6E1E00106A8ECD0E29
S113A550FE016A8ECD0A401C6E7E001C46146A0EF3
S113A560CD066A8ECD0D18EE6A8ECD0EFE016A8E72
S113A570CD0A4000FE036A8ECD0B5A00BBBE6E7E30
S113A580001BAE0A4466FE016A8ECD0A6A0ECCC474
S113A590FD0A50E56E7E001B08ED95006E5ECE56FA
S113A5A0474A6A0ECCC4FD0A50E56E7E001B08EDD6
S113A5B09500FE026EDECE566E7E001B186609669E
S113A5C06A0DCCC4FC0A50D46E7D001B08DC9400D8
S113A5D009446F45CD726FE5CDDE6E7E001B1866B3
S113A5E018DD6EEDCEB0FE016E9E00345A00BBBE87
S113A5F06E7E001BAE0A45045A00A69EFE016A8EBA
S113A600CD0A6A0ECCC4FD0A50E56E7E001B08ED2F
S113A61095006E5ECE5647466A0ECCC4FD0A50E5E0
S113A6206E7E001B08ED95006E5ECE56AE02471896
S113A6306A0ECCC4FD0A50E56E7E001B08ED950041
S113A6406E5ECE56AE0346166A0ECCC4FD0A50E5C5
S113A6506E7E001B08ED9500FE016EDECE5618EEF0
S113A6606E9E003418AAAA0A44346A0ECCC4FD0AA9
S113A67050E508AD95006E5ECE56AE0247146A0EE4
S113A680CCC4FD0A50E508AD95006E5ECE56AE030F
S113A6904608FE016E9E0034FA0A0A0A40C85A00AF
S113A6A0BBBE18EE6E9E0034FE016A8ECD0A18AA57
S113A6B0AA0A443E6A0ECCC4FD0A50E508AD9500D2
S113A6C06E5ECE56AE0247146A0ECCC4FD0A50E547
S113A6D008AD95006E5ECE56AE0346126A0ECCC42B
S113A6E0FD0A50E508AD9500FE016EDECE560A0A5D
S113A6F040BE5A00BBBE6E7E001BAE0A45045A0023
S113A700A7A0FE016A8ECD0A0D768E046DF6196639
S113A7106DF66E7E001F6DF6FE015E00BC760B8743
S113A7200B870B876E7E001B186609666F75000425
S113A7306FE5CDDE6E7E001B186609666A0DCCC41B
S113A740FC1450D4094619556FE5CDF26A0ECCC4F9
S113A750FD0A50E56E7E001B08ED950018EE6EDED6
S113A760CE566E9E003418AAAA0A44346A0ECCC48B
S113A770FD0A50E508AD95006E5ECE56AE02471454
S113A7806A0ECCC4FD0A50E508AD95006E5ECE5647
S113A790AE034608FE016E9E0034FA0A0A0A40C857
S113A7A05A00BBBE18AAAA0A44520D768E046DF64E
S113A7B019666DF66DF2FE015E00BC760B870B87A1
S113A7C00B870CAE186609666F7500046FE5CDDE65
S113A7D06A0ECCC4FD1450E50CAE18660966096512
S113A7E019666FD6CDF26A0ECCC4FD0A50E508ADE9
S113A7F0950018EE6EDECE560A0A40AA18EE6E9E3A
S113A8000034FE016A8ECD0A5A00BBBE6E7E001B68
S113A810AE0845045A00A8D818EE6E9E003418AA53
S113A820AA0A44726A0ECCC4FD0A50E508AD95002C
S113A8306E5ECC8E6E7D001B186660D6166E472445
S113A8406A0ECCC4FD0A50E508AD95006E5ECE5686
S113A85047126A0ECCC4FD0A50E508AD9500FE010E
S113A8606EDECE566A0ECCC4FD0A50E508AD9500E6
S113A8706E5ECE56AE0247146A0ECCC4FD0A50E595
S113A88008AD95006E5ECE56AE034606FE016E9E82
S113A89000340A0A408A0D768E046DF619666DF648
S113A8A06E7E001F6DF6FE025E00BC760B870B8782
S113A8B00B876A0ECCC41866FD0309661A0D46FAA6
S113A8C06E7D001B08DE960009666F66CD22FDF6DC
S113A8D068EDFE016A8ECD0A5A00BBBE18EE6E9E6C
S113A8E0003418AAAA0A44686A0ECCC4FD0A50E5CA
S113A8F008AD95006E5ECC8E47246A0ECCC4FD0A6A
S113A90050E508AD95006E5ECE5647126A0ECCC473
S113A910FD0A50E508AD9500FE016EDECE566A0EC6
S113A920CCC4FD0A50E508AD95006E5ECE56AE026D
S113A93047146A0ECCC4FD0A50E508AD95006E5E5E
S113A940CE56AE034606FE016E9E00340A0A4094BB
S113A95018AAAA0844380D768E046DF619666DF6A9
S113A9606DF2FE025E00BC760B870B870B876A0EC6
S113A970CCC41866FD0309661A0D46FA08AE9600A3
S113A98009666F66CD22FDF668ED0A0A40C4FE0131
S113A9906A8ECD0A5A00BBBE6E7E001B730E471A28
S113A9A06E1E004DEE3F6E9E004D6E7E001BEEC08F
S113A9B06E1D004D14ED6E9D004D6E7E001B731ECA
S113A9C0471A6E1E004EEE3F6E9E004E6E7E001BBA
S113A9D0EEC06E1D004E14ED6E9D004E6E7E001B8B
S113A9E0732E471A6E1E004FEE3F6E9E004F6E7E12
S113A9F0001BEEC06E1D004F14ED6E9D004F6E1EC9
S113AA000001707E6E9E0001FE016A8ECD0A5A001E
S113AA10BBBE6E7E001B730E472A736E470C6E1E00
S113AA20004D713E6E9E004D401A737E470C6E1EA3
S113AA30004D703E6E9E004D400A6E1E004D723EEB
S113AA406E9E004D6E7E001B731E472A736E470C6C
S113AA506E1E004E713E6E9E004E401A737E470C71
S113AA606E1E004E703E6E9E004E400A6E1E004EDC
S113AA70723E6E9E004E6E7E001B732E472A736ECE
S113AA80470C6E1E004F713E6E9E004F401A737E3F
S113AA90470C6E1E004F703E6E9E004F400A6E1EA5
S113AAA0004F723E6E9E004F6E1E0001707E6E9EC1
S113AAB00001FE016A8ECD0A5A00BBBEFE016A8EF9
S113AAC0CD0A6E7E001CAE00460E6E7E001D18661A
S113AAD009666E62CCC74028AE0246066E72001D3F
S113AAE0401EAE0446146E7E001D18660B060D65EE
S113AAF06B06CD085F4C0CE2400618EE6A8ECD0A58
S113AB006A0ECD0A475EA2074F02F2070C224C02DE
S113AB1018226E7E001B730E47106E1E004DEEF859
S113AB206E9E004D142E6E9E004D6E7E001B731E95
S113AB3047106E1E004EEEF86E9E004E142E6E9E52
S113AB40004E6E7E001B732E47106E1E004FEEF8F3
S113AB506E9E004F142E6E9E004F6E1E0001707E7E
S113AB606E9E00015A00BBBE6E7E001D18666DF617
S113AB706E7E001E0CE618EE6E7D001D08DE96004B
S113AB806DF6790617735E00327C0B870B87FE0126
S113AB906A8ECD0A5A00BBBE6E7E001BAE06441CF4
S113ABA018666DF6790600FF6DF6790617725E0079
S113ABB0327C0B870B87FE016A8ECD0A5A00BBBE1E
S113ABC06E7E001BAE0345045A00ACB2FE016A8ED1
S113ABD0CD0A6E7E001CAE0046246E7E001B0D1551
S113ABE008ED950018EE6EDE00386E7E001B0D1524
S113ABF008ED950018EE6EDE003B5A00AC9CAE01E9
S113AC0046226E7E001B0D1508ED9500FE016EDEDA
S113AC1000386E7E001B0D1508ED9500FE206EDEDB
S113AC20003B4078AE0246226E7E001B0D1508EDF7
S113AC309500FE026EDE00386E7E001B0D1508EDD9
S113AC409500FEA06EDE003B4052AE0346226E7EAF
S113AC50001B0D1508ED9500FE036EDE00386E7EB8
S113AC60001B0D1508ED9500FE806EDE003B402CA8
S113AC70AE0446226E7E001B0D1508ED9500FE0401
S113AC806EDE00386E7E001B0D1508ED9500FEE0AB
S113AC906EDE003B400618EE6A8ECD0A6E7E001B07
S113ACA018660966091619556FE5004418EE6E9E7C
S113ACB000605A00BBBE6E7E001BAE03442EFE0134
S113ACC06A8ECD0A6E7E001B0D1508ED95006E7E12
S113ACD0001C6EDE003B6E7E001B186609660916BA
S113ACE019556FE5004418EE6E9E00605A00BBBE15
S113ACF06E7E001BAE034416FE016A8ECD0A6E7E84
S113AD00001B18660966091619556FE500445A00B8
S113AD10BBBE6E7E001BAE044416FE016A8ECD0AD5
S113AD206E7E001B18660966091619556FE5000842
S113AD305A00BBBE6E7E001BAE18442A6E7E001CF9
S113AD40AE3C4422FE016A8ECD0A6E7E001BFD3CA1
S113AD5050E56E7E001C08ED95006F950010790695
S113AD6017745E00339A5A00BBBE6E7E001BAE0899
S113AD70444A6A0ECCC4FD1450E56A0ECCC0186671
S113AD80096609656A0ECCC0186609666F64CDDE73
S113AD906FD4CDF26A0ECCC0186609666A0DCCC4B5
S113ADA01855FC0309551A0C46FA6E7C001B08CD95
S113ADB0950009556F54CD226FE4CDDE5A00BBBE19
S113ADC06A0ECCC0186609666A0DCCC4FC1450D453
S113ADD06A0DCCC01855095509546F45CDF26FE57D
S113ADE0CDDE6A0ECCC4FD1450E56A0ECCC01866E4
S113ADF00966096519666FD6CDF25A00BBBE6E7E30
S113AE00001BAE014226FE016A8ECD0A6E7E001B37
S113AE106E9E00576E7E001B470A790617705E000F
S113AE2032504008790617705E0032665A00BBBE85
S113AE306E7E001BAE0046206E7E001CAE20440ECB
S113AE40186609666F65CCC66FF50006400879067A
S113AE50FFFF6FF600064024AE0246186E7E001D0A
S113AE6018660CE618EE6E7D001C08DE96006FF680
S113AE70000640087906FFFF6FF600066F760006AD
S113AE800D664D186F760006AE07B6004C0EFE0137
S113AE906A8ECD0A6E7E00076E9E005C5A00BBBEB1
S113AEA06E7E001BAE0046246E7E001CAE20441A4B
S113AEB06A0ECCC01866096609166E7D001C18550A
S113AEC009556F54CCC66FE40014406AAE024622A2
S113AED06A0ECCC01866096609166E7D001D1855E9
S113AEE00CD518DD6E7C001C08CD95006FE50014B0
S113AEF04044AE04462E6A0ECCC018660966091694
S113AF006E7D001D18550CD518DD6E7C001C08CD17
S113AF1095000B056DF66B06CD085F4C6D756FD60D
S113AF20001440126A0ECCC0186609660916790529
S113AF3000016FE500146A0ECCC4FD0A50E56A0EE8
S113AF40CCC008ED9500FE036EDECE565A00BBBEA3
S113AF506E7E001BAE2045045A00B19C6E7E001C20
S113AF60790400187905AF7C6C561CE647088CFE02
S113AF7046F65A00B19C6F44AF8659400001020363
S113AF8004090A0B0C0D0E0FB17CB15EB132B1088D
S113AF90B0DAB0ACB080B04CB01EAFF6AFCAAFA060
S113AFA06E7E001DAE20441E6E7E001B1866096670
S113AFB06E7D001D185509556F54CCC66FE4CCC680
S113AFC0FE016A8ECD0A5A00B19C6E7E001DAE044D
S113AFD044206E7E001B186609666E7D001D1855A0
S113AFE0095509156F5400086FE4CCC6FE016A8E3A
S113AFF0CD0A5A00B19C6E7E001B186609666E7DF0
S113B000001E18550CD518DD6E7C001D08CD95006A
S113B0106FE5CCC6FE016A8ECD0A5A00B19C6E7EE5
S113B020001DAE0344226E7E001B186609666E7D09
S113B030001D0D1408DC94006E4C005318446FE49A
S113B040CCC6FE016A8ECD0A5A00B19C6E7E001BEE
S113B050186609666E7D001E18550CD518DD6E7CC9
S113B060001D08CD95000B056DF66B06CD085F4CF1
S113B0706D756FD6CCC6FE016A8ECD0A5A00B19C9E
S113B0806E7E001DAE0344206E7E001B18660966AA
S113B0906E7D001D1855095509156F5400446FE461
S113B0A0CCC6FE016A8ECD0A5A00B19C6E7E001D8C
S113B0B0AE0344226E7E001B186609666E7D001D79
S113B0C00D1408DC94006E4C003818446FE4CCC6B0
S113B0D0FE016A8ECD0A5A00B19C6E7E001DAE033D
S113B0E044226E7E001B186609666E7D001D0D14D9
S113B0F008DC94006E4C003B18446FE4CCC6FE019F
S113B1006A8ECD0A5A00B19C6E7E001DAE034420A7
S113B1106E7E001B186609666E7D001D1855095564
S113B12009156F54003E6FE4CCC6FE016A8ECD0A49
S113B130406A6E7E001DAE0344226E7E001B1866BC
S113B14009666E7D001D0D1408DC94006E4C004AE7
S113B15018446FE4CCC6FE016A8ECD0A403E6E7E72
S113B160001D46166E7E001B186609666F150010DA
S113B1706FE5CCC6FE016A8ECD0A40206E7E001DAE
S113B18046186E7E001B186609666A0DCD061855B2
S113B1906FE5CCC6FE016A8ECD0A40005A00BBBEE4
S113B1A06E7E001CAE0046466E7E001BAE20443C04
S113B1B06E7E001DAE2044346E7E001B1866096648
S113B1C08EC696CC69F60D65695477741EBB1E3322
S113B1D06E7D001D185509556F55CCC677751EBB7D
S113B1E01E33095469E4FE016A8ECD0A404AAE0258
S113B1F046466E7E001BAE20443C186609668EC629
S113B20096CC69F66E7D001E18550CD518DD777541
S113B2101ECC1E446E7C001D1844193309450D6470
S113B2206DF6694377731EEE1E6609356D7669E522
S113B230FE016A8ECD0A40005A00BBBE6E7E001C21
S113B240AE0046466E7E001BAE20443C6E7E001D62
S113B250AE2044346E7E001B186609668EC696CCFA
S113B26069F60D65695477741EBB1E336E7D001D2F
S113B270185509556F55CCC677751EBB1E33195426
S113B28069E4FE016A8ECD0A4048AE0246446E7EF1
S113B290001BAE20443A186609668EC696CC69F641
S113B2A06E7D001E18550CD518DD6E7C001D08CD72
S113B2B0950077751ECC1E440D646DF66943777353
S113B2C01EEE1E6619536D7669E3FE016A8ECD0A81
S113B2D040005A00BBBE6E7E001CAE00464A6E7E25
S113B2E0001BAE2044406E7E001DAE20443818661C
S113B2F009666F65CCC647286E7E001B1866096612
S113B3006E7D001D185509556F55CCC60D646F46EA
S113B310CCC65F526FC6CCC6FE016A8ECD0A40060B
S113B320FE016A8ECD0A404EAE02464A6E7E001B76
S113B330AE2044406E7E001D460E6E7E001E460802
S113B340FE016A8ECD0A402C6E7E001B18660966CB
S113B3506E7D001E18550CD518DD6E7C001D08CDC1
S113B36095000D646F46CCC65F526FC6CCC6FE0115
S113B3706A8ECD0A40005A00BBBE6E7E001CAE0031
S113B380464C6E7E001BAE2044426E7E001DAE20F5
S113B390443A6E7E001B186609668EC696CC69F622
S113B3A00D65695477741EBB1E336DF60D466E7DB4
S113B3B0001F185509556F55CCC677751ECC1E4411
S113B3C05F4A6D7569D6FE016A8ECD0A404AAE02A7
S113B3D046466E7E001BAE20443C186609668EC647
S113B3E096CC69F66E7D001E18550CD518DD6E7C62
S113B3F0001D08CD950077751ECC1E440D646DF6B6
S113B400694377731EEE1E660D365F4A6D7569D605
S113B410FE016A8ECD0A40005A00BBBE6E7E001C3F
S113B420AE0046766E7E001BAE20446A6E7E001D22
S113B430AE204462FE016A8ECD0A6E7E001D18663F
S113B44009666F65CCC6460E6E7E001B18660966DB
S113B45019556FE5CCC66E7E001D186609666F66C9
S113B460CCC60D664C106E7E001B18660966790505
S113B470FFFF6FE5CCC66E7E001D186609666F6619
S113B480CCC60D664F106E7E001B186609667905E2
S113B49000016FE5CCC65A00B51CAE02467E6E7E36
S113B4A0001BAE204474FE016A8ECD0A6E7E001E1F
S113B4B018660CE618EE6E7D001D08DE9600460E3A
S113B4C06E7E001B1866096619556FE5CCC66E7E44
S113B4D0001E18660CE618EE6E7D001D08DE960050
S113B4E00D664C106E7E001B186609667905FFFF19
S113B4F06FE5CCC66E7E001E18660CE618EE6E7DF7
S113B500001D08DE96000D664F106E7E001B186647
S113B5100966790500016FE5CCC640005A00BBBE40
S113B5206E7E001CAE0047045A00B5B26E7E001B4E
S113B530AE20447A6E7E001DAE204472FE016A8EF7
S113B540CD0A6E7E001D186609666F66CCC60D6650
S113B5504C446E7E001D186609666F66CCC6AE004C
S113B560B68046126E7E001B1866096679057FFF59
S113B5706FE5CCC6401E6E7E001B186609666E7DA4
S113B580001D185509556F55CCC6DDFFD5FF0B05B9
S113B5906FE5CCC640186E7E001B186609666E7D8A
S113B5A0001D185509556F54CCC66FE4CCC65A001B
S113B5B0B64EAE0247045A00B64E6E7E001BAE2055
S113B5C045045A00B64CFE016A8ECD0A6E7E001EFA
S113B5D018660CE618EE6E7D001D08DE96000D66FA
S113B5E04C4C6E7E001E18660CE618EE08DE9600C3
S113B5F0AE00B68046126E7E001B18660966790599
S113B6007FFF6FE5CCC640246E7E001B186609667A
S113B6106E7D001E18550CD518DD6E7C001D08CDFE
S113B6209500DDFFD5FF0B056FE5CCC6401E6E7E91
S113B630001B186609666E7D001E18550CD518DDB2
S113B6406E7C001D08CD95006FE5CCC640005A0005
S113B650BBBE6E7E001CAE0046346E7E001BAE2068
S113B660442A6E7E001DAE204422186609666F6669
S113B670CCC66E7D001B185509556F54CCC616EC0C
S113B68016646FD4CCC6FE016A8ECD0A403AAE026F
S113B69046366E7E001BAE20442C6E7E001E18665D
S113B6A00CE618EE6E7D001D08DE96006E7D001B14
S113B6B0185509556F54CCC616EC16646FD4CCC615
S113B6C0FE016A8ECD0A40005A00BBBE6E7E001C8D
S113B6D0AE0046346E7E001BAE20442A6E7E001DF2
S113B6E0AE204422186609666F66CCC66E7D001BC8
S113B6F0185509556F54CCC614EC14646FD4CCC6D9
S113B700FE016A8ECD0A403AAE0246366E7E001BBA
S113B710AE20442C6E7E001E18660CE618EE6E7D7C
S113B720001D08DE96006E7D001B185509556F54E8
S113B730CCC614EC14646FD4CCC6FE016A8ECD0A58
S113B74040005A00BBBE6E7E001C18660CE618EE64
S113B7506E7D001B08DE9600790500035F4A0D75B7
S113B7608D046DF56FF6000A6DF618EE6DF6FE03A6
S113B7705E00BC760B870B870B870CEE46726B065C
S113B780CDD66B86CDD86B06CDD86B05CDDA1D56DC
S113B790441018DD68ED6B06CDD80B066B86CDD84A
S113B7A040E46B06CDD66B86CDD8FDFF68ED6B0605
S113B7B0CDD80B066B86CDD8FD0168ED6B06CDD8D0
S113B7C00B066B86CDD818DD68ED6B06CDD80B065D
S113B7D06B86CDD818EE6A8ECD0D6F7600084708BB
S113B7E0FE016E9E0061400618EE6E9E00614006EA
S113B7F0FE016A8ECD0DFE016A8ECD0AFE026A8EAE
S113B800CD0B5A00BBBE6B06CDD86B05CDDA1D56E9
S113B81045045A00B9C819666FF600066E7E001B0F
S113B8201C6E46506E7E001CAE2044446B06CDD880
S113B8306E7D001C68ED6B06CDD80B066B86CDD8EB
S113B8406E7D001C185509556E5CCCC768EC6B0600
S113B850CDD80B066B86CDD86E7D001C18550955C6
S113B8606E5CCCC668EC6B06CDD80B066B86CDD867
S113B8705A00B96CAE0146566E7E001CAE04444AB2
S113B8806B06CDD86E7D001C8D2068ED6B06CDD87F
S113B8900B066B86CDD86E7D001C1855095509150D
S113B8A06E5C000968EC6B06CDD80B066B86CDD8B0
S113B8B06E7D001C1855095509156E5C000868EC6E
S113B8C06B06CDD80B066B86CDD85A00B96CAE0981
S113B8D046546E7E001CAE03444A6B06CDD86E7D82
S113B8E0001C8D4068ED6B06CDD80B066B86CDD859
S113B8F06E7D001C1855095509156E5C004568ECF1
S113B9006B06CDD80B066B86CDD86E7D001C185502
S113B910095509156E5C004468EC6B06CDD80B061E
S113B9206B86CDD84046AE0E463A6E7E001C46323B
S113B9306B06CDD8FD8068ED6B06CDD80B066B8603
S113B940CDD86E1D001168ED6B06CDD80B066B8645
S113B950CDD86E1D001068ED6B06CDD80B066B8636
S113B960CDD84008790600016FF600066F76000610
S113B9704654FE016A8ECD0A18EE6A8ECD0D6B0612
S113B980CDD66E6D00010A0D6EED0001460E6B06FC
S113B990CDD66E6D00020A0D6EED00026B06CDD899
S113B9A06B05CDD61956790500055F4A6B05CDDACE
S113B9B06B04CDD619455F526E9E00610CEE4606AF
S113B9C0FE016E9E0061400AFE016A8ECD0D6A8EF4
S113B9D0CD0AFE026A8ECD0B5A00BBBE6E7E001CE1
S113B9E018660CE618EE6E7D001B08DE96007905DD
S113B9F000035F4A6E7D001E18550CD518DD6E7C61
S113BA00001D08CD95006FF6000C0D567905000356
S113BA105F4A6F75000C09656FF6000A6B06CDD698
S113BA2009656B06CDDA1D6542346F76000A6DF642
S113BA306B06CDD66F75000E09566DF66A0ECD0CE9
S113BA40170E6DF6790617765E00343E0B870B876A
S113BA500B87FE016E9E00566E9E0063400AFE0137
S113BA606A8ECD0D6A8ECD0A5A00BBBEFEF76A8E71
S113BA70CD0C6E7E001BAE00463E6E7E001CAE20DA
S113BA804434186609666F66CCC60D664D286E7E12
S113BA90001C186609666F66CCC6AE00B6014C166B
S113BAA06E7E001C186609666E6DCCC76A8DCD0D5E
S113BAB0FE056A8ECD204014AE0246106E7E001C38
S113BAC06A8ECD0DFE056A8ECD204000FE026A8E80
S113BAD0CD0B5A00BBBE18EE6A8ECD065A00BBBE13
S113BAE06E7E001B6A8ECD06FE016E9E00565A00C5
S113BAF0BBBE6E7E001BAE0545045A00BB8CFE0126
S113BB006A8ECD0A6E7E001B6A0DCCC41CED477C88
S113BB1018EE6E9E003418AAAA0A443E6A0ECCC4DB
S113BB20FD0A50E508AD95006E5ECE56AE02471490
S113BB306A0ECCC4FD0A50E508AD95006E5ECE5683
S113BB40AE0346126A0ECCC4FD0A50E508AD95005A
S113BB50FE016EDECE560A0A40BE6E7E001B6E9E4D
S113BB60005D6A8ECCC418AAAA0A44200CAE1866DA
S113BB7009666A0DCCC4FC0A50D408AC940009448C
S113BB806F45CD726FE5CDDE0A0A40DC40307906A0
S113BB9000BC6DF67906CD226DF66A0ECD0C170E3B
S113BBA06DF6790617765E00343E0B870B870B879C
S113BBB0FE016E9E005618EE6A8ECD0A40006E7E1F
S113BBC00014470C6A0ECD0A4706FE056A8ECD2086
S113BBD06A0ECD20AE054632FE016E9E00566A0EF8
S113BBE0CD0B18666DF67906CD0C6DF618EE6DF674
S113BBF0790617755E00343E0B870B870B87AE4CB6
S113BC004706FE016A8ECD204004AE0146006E1E3A
S113BC100004727E6E9E00046E7E00178F2A6D757E
S113BC206D746D736D726D716D7054706DF36DF430
S113BC306DF56DF618CCAC0A44246A0ECCC4FD0A2A
S113BC4050E508CD95008D5695CE0D53683EAE0255
S113BC504704AE034604FE0168BE0A0C40D8697668
S113BC6018DD6EED00345E0036360CE40B876D751E
S113BC706D746D7354706DF06DF16DF26DF36DF460
S113BC806DF58FF66F70001AAE01461A6A0ECCC4B9
S113BC90FA0A50A66E7D001908DE8E280CEAFE0111
S113BCA06EFE0008402EAE02461A6A0ACCC4100A80
S113BCB0100A100A6E7E001908EA0B00FE016EFEDF
S113BCC000084010AE03460C88039000FA5AFE02A6
S113BCD06EFE00086E7E0008186608AE96000966BF
S113BCE06F65CD226B06CDDC6B04CDDA194609569F
S113BCF06FF500040CAD185509556F54CD226FF43F
S113BD00000219466FF600061D0644045A00BDAA37
S113BD106F7600040D656F76000219650D061956DD
S113BD2069F60D664F2A6B03CDDA1B036B01CDDA7E
S113BD3069761B0609610CAE186609666F66CD222A
S113BD401D36420A683E689E1B031B0140E84024DE
S113BD5069760D664C1E6F71000209016F73000451
S113BD606B06CDDA1D63440A683E689E0B010B0323
S113BD7040EE40006F76001C0CAD185509556F5409
S113BD80CD2269E40CA28201A25D441669760C2DD1
S113BD90185509556F54CD2209646FD4CD220A0277
S113BDA040E618EE6EFE00094006FE406EFE0009F5
S113BDB08F0A6D756D746D736D726D716D705470E5
S113BDC06DF46DF56DF65E0036920CEC6976FD014E
S113BDD06EED00050CCE0B876D756D7454706DF4AB
S113BDE06DF56DF65E0036A60CEC69766E6D000599
S113BDF0727D6EED00050CCE0B876D756D745470FD
S113BE006DF46DF55E0036AA0CEC6D756D745470AE
S113BE10446F20796F7520627974652C207768658A
S113BE206E2049206B6E6F636B3F000000000000C2
S113BE3000000000000000000000000000000000FE
S113BE4000000000000000000000000000000000EE
S113BE5000000000000000000000000000000000DE
S113BE6000000000000000000000000000000000CE
S113BE7000000000000000000000000000000000BE
S113BE8000000000000000000000000000000000AE
S113BE90000000000000000000000000000000009E
S113BEA0000000000000000000000000000000008E
S113BEB0000000000000000000000000000000007E
S113BEC0000000000000000000000000000000006E
S113BED0000000000000000000000000000000005E
S113BEE0000000000000000000000000000000004E
S113BEF0000000000000000000000000000000003E
S113BF00000000000000000000000000000000002D
S113BF10000000000000000000000000000000001D
S113BF20000000000000000000000000000000000D
S113BF3000000000000000000000000000000000FD
S113BF4000000000000000000000000000000000ED
S113BF5000000000000000000000000000000000DD
S113BF6000000000000000000000000000000000CD
S113BF7000000000000000000000000000000000BD
S113BF8000000000000000000000000000000000AD
S113BF90000000000000000000000000000000009D
S113BFA0000000000000000000000000000000008D
S113BFB0000000000000000000000000000000007D
S113BFC0000000000000000000000000000000006D
S113BFD0000000000000000000000000000000005D
S113BFE0000000000000000000000000000000004D
S113BFF0000000000000000000000000000000003D
S90380007C
/roboti/istrobot/callis/Kopie (2) - callis_1.nqc
0,0 → 1,192
#define THRESHOLD 44 // rozhodovaci uroven mezi cernou a bilou
#define FTHRESHOLD 100 // Rozhodovaci uroven dalkoveho sensoru
#define MLEFT OUT_C // Motory
#define MRIGHT OUT_A
#define RSENSOR SENSOR_1 // Sensory na caru
#define LSENSOR SENSOR_3
#define BUMPER SENSOR_2 // Dalkovy sensor
 
#define L 0 // left
#define R 1 // right
#define S 2 // straight
 
int movement; // smer minuleho pohybu
int line; // na ktere strane byla detekovana cara
int dira; // pocitadlo pro nalezeni preruseni cary
int derivace; // jak moc se bude zachovavat predesly smer
 
void Straight() // rovne
{
OnRev(MLEFT);
OnFwd(MRIGHT);
movement=S;
}
 
void Left() // doleva
{
Off(MLEFT);
OnFwd(MRIGHT);
movement=L;
}
 
void Right() // doprava
{
OnRev(MLEFT);
Off(MRIGHT);
movement=R;
}
 
task main()
{
PlaySound (SOUND_DOUBLE_BEEP);
Wait(100); // 1s
SetSensor(RSENSOR,SENSOR_LIGHT); // senzor na caru modry pravy
SetSensor(LSENSOR,SENSOR_LIGHT); // senzor na caru modry levy
// sensor na prekazku
SetSensor(BUMPER,_SENSOR_CFG(SENSOR_TYPE_LIGHT, SENSOR_MODE_RAW));
SetTxPower(TX_POWER_HI); // aby daleko videl
 
movement=S;
line=S;
dira=0;
 
start cara;
start cihla;
SetPower (MLEFT,OUT_FULL);
SetPower (MRIGHT,OUT_FULL);
}
 
task cara()
{
Straight();
while(true)
{
if (THRESHOLD < RSENSOR)
{
line=R;
dira=0;
switch(movement)
{
case L:
Right();
break;
default:
Straight();
};
}
else
if (THRESHOLD < LSENSOR)
{
line=L;
dira=0;
switch(movement)
{
case R:
Left();
break;
default:
Straight();
};
}
else
{
if (20 < dira++)
{
PlaySound (SOUND_FAST_UP);
switch(movement)
{
case L:
line=R;
Off(MLEFT); //couvej
OnRev(MRIGHT);
break;
case R:
line=L;
OnFwd(MLEFT); // couvej
Off(MRIGHT);
break;
};
Wait(50);
Straight();
Wait(5);
dira=0;
};
 
switch(line)
{
case L:
Left();
break;
case R:
Right();
break;
};
}
} // while(true)
}
 
 
task cihla() // dalkovy sensor
{
int lastlevel;
 
lastlevel = 0;
while(true)
{
SendMessage(0);
if(lastlevel > BUMPER)
{
PlaySound(SOUND_DOWN);
stop cara;
Off(MLEFT); // stop
Off(MRIGHT);
Wait(5);
OnRev(MLEFT); // do leva
OnRev(MRIGHT);
Wait(30);
Off(MLEFT); // stop
Off(MRIGHT);
Wait(5);
OnRev(MLEFT); // rovne
OnFwd(MRIGHT);
Wait(70);
Off(MLEFT); // stop
Off(MRIGHT);
Wait(5);
OnFwd(MLEFT); // do prava
OnFwd(MRIGHT);
Wait(25);
Off(MLEFT); // stop
Off(MRIGHT);
Wait(5);
OnRev(MLEFT); // rovne
OnFwd(MRIGHT);
Wait(80);
Off(MLEFT); // stop
Off(MRIGHT);
Wait(5);
OnFwd(MLEFT); // do prava
OnFwd(MRIGHT);
Wait(25);
Off(MLEFT); // stop
Off(MRIGHT);
Wait(5);
OnRev(MLEFT); // rovne
OnFwd(MRIGHT);
Wait(60);
OnRev(MLEFT); // do leva
OnRev(MRIGHT);
Wait(20);
while(THRESHOLD > RSENSOR); // toc se dokud neni cara
Off(MLEFT); // stop
Off(MRIGHT);
Wait(30);
line=R;
start cara;
}
lastlevel = BUMPER;
lastlevel -= FTHRESHOLD;
}
}
 
 
/roboti/istrobot/callis/Kopie (2) - callis_spravne motory.nqc
0,0 → 1,154
#define THRESHOLD 44 // rozhodovaci uroven mezi cernou a bilou
#define FTHRESHOLD 100 // Rozhodovaci uroven dalkoveho sensoru
#define ML OUT_A // Motory
#define MR OUT_C
#define FL OnFwd(ML) // Vpred
#define FR OnRev(MR)
#define BL OnRev(ML) // Vzad
#define BR OnFwd(MR)
#define RSENSOR SENSOR_3 // Sensory na caru
#define LSENSOR SENSOR_1
#define BUMPER SENSOR_2 // Dalkovy sensor
 
#define L 0 // left
#define R 1 // right
#define S 2 // straight
 
int movement; // smer minuleho pohybu
int line; // na ktere strane byla detekovana cara
int dira; // pocitadlo pro nalezeni preruseni cary
 
void Straight() // rovne
{
FL;
FR;
movement=S;
}
 
void Left() // doleva
{
Off(ML);
FR;
movement=L;
}
 
void Right() // doprava
{
FL;
Off(MR);
movement=R;
}
 
task main()
{
PlaySound (SOUND_DOUBLE_BEEP);
Wait(100); // 1s
SetSensor(RSENSOR,SENSOR_LIGHT); // senzor na caru modry pravy
SetSensor(LSENSOR,SENSOR_LIGHT); // senzor na caru modry levy
// sensor na prekazku
SetSensor(BUMPER,_SENSOR_CFG(SENSOR_TYPE_LIGHT, SENSOR_MODE_RAW));
SetTxPower(TX_POWER_HI); // aby daleko videl
 
SetPower (ML,OUT_FULL); // vykon motoru
SetPower (MR,OUT_FULL);
movement=S;
line=S;
dira=0;
 
start cara;
start cihla;
}
 
task cara() // sledovani cary
{
Straight();
while(true)
{
if (THRESHOLD < RSENSOR) // Cara vpravo
{
line=R; // cara zrejme bude na druhe strane
dira=0; // nuluj pocitadlo diry
switch(movement)
{
case L:
Right();
break;
default:
Straight();
};
}
else
if (THRESHOLD < LSENSOR) // Cara vlevo
{
line=L; // zaznamenej, kdes videl caru
dira=0; // nuluj pocitadlo diry
switch(movement)
{
case R:
Left();
break;
default:
Straight();
};
}
else // sensory mimo caru
{
if (20 < dira++) // nejedeme uz moc dlouho bez cary?
{
PlaySound (SOUND_FAST_UP);
switch(movement)
{
case L:
line=R; // cara zrejme bude na druhe strane
Off(ML); //couvej
BR;
break;
case R:
line=L; // cara zrejme bude na druhe strane
BL; // couvej
Off(MR);
break;
};
Wait(50); // zpet, ale ne uplne a kousek rovne
Straight();
Wait(5);
dira=0; // myslime si, ze diru jsme vyresili
};
 
switch(line) // kdyz nevidis caru, tak jed tam, kdes ji videl naposled
{
case L:
Left();
break;
case R:
Right();
break;
};
}
} // while(true)
}
 
 
task cihla() // dalkovy sensor
{
int lastlevel;
 
lastlevel = 0;
while(true)
{
SendMessage(0);
if(lastlevel > BUMPER)
{
PlaySound(SOUND_DOWN);
stop cara;
Off(ML); // zatim pouze zastav
Off(MR);
Wait(300);
start cara;
}
lastlevel = BUMPER;
lastlevel -= FTHRESHOLD;
}
}
 
 
/roboti/istrobot/callis/Kopie (3) - callis.nqc
0,0 → 1,153
#define THRESHOLD 44 // rozhodovaci uroven mezi cernou a bilou
#define FTHRESHOLD 100 // Rozhodovaci uroven dalkoveho sensoru
#define MLEFT OUT_C // Motory
#define MRIGHT OUT_A
#define RSENSOR SENSOR_1 // Sensory na caru
#define LSENSOR SENSOR_3
#define BUMPER SENSOR_2 // Dalkovy sensor
 
#define L 0 // left
#define R 1 // right
#define S 2 // straight
 
int movement; // smer minuleho pohybu
int line; // na ktere strane byla detekovana cara
int dira; // pocitadlo pro nalezeni preruseni cary
int derivace; // jak moc se bude zachovavat predesly smer
 
void Straight() // rovne
{
SetPower (MLEFT,OUT_FULL);
SetPower (MRIGHT,OUT_FULL);
OnRev(MLEFT);
OnFwd(MRIGHT);
derivace=5;
movement=S;
}
 
void Left() // doleva
{
SetPower (MLEFT,OUT_LOW);
SetPower (MRIGHT,OUT_FULL);
Off(MLEFT);
OnFwd(MRIGHT);
derivace=3;
movement=L;
}
 
void Right() // doprava
{
SetPower (MLEFT,OUT_FULL);
SetPower (MRIGHT,OUT_LOW);
OnRev(MLEFT);
Off(MRIGHT);
derivace=3;
movement=R;
}
 
task main()
{
PlaySound (SOUND_DOUBLE_BEEP);
Wait(100); // 1s
SetSensor(RSENSOR,SENSOR_LIGHT); // senzor na caru modry pravy
SetSensor(LSENSOR,SENSOR_LIGHT); // senzor na caru modry levy
// sensor na prekazku
SetSensor(BUMPER,_SENSOR_CFG(SENSOR_TYPE_LIGHT, SENSOR_MODE_RAW));
SetTxPower(TX_POWER_HI); // aby daleko videl
 
movement=S;
line=S;
dira=0;
 
// start cara;
start cihla;
 
Straight();
while(true)
{
if (THRESHOLD < RSENSOR)
{
line=R;
dira=0;
Right();
if (THRESHOLD < RSENSOR)
{
while(THRESHOLD < RSENSOR);
}
else
 
};
if (THRESHOLD < LSENSOR)
{
if (L==movement)
{
Straight();
}
else
{
line=L;
dira=0;
Left();
};
};
}
}
 
 
task cara()
{
Left();
while(true)
{
if (8 < dira++)
{
PlaySound(SOUND_DOUBLE_BEEP);
if (L==line) line=R; else line=L;
Off(MLEFT);
Off(MRIGHT);
Wait(500);
dira=0;
};
 
switch(line)
{
case S:
break;
case L:
Left();
break;
 
case R:
Right();
break;
};
// line=S;
Wait(5);
Straight();
Wait(5);
}
}
 
task cihla() // dalkovy sensor
{
int lastlevel;
 
lastlevel = 0;
while(true)
{
SendMessage(0);
if(lastlevel > BUMPER)
{
PlaySound(SOUND_FAST_UP);
stop cara;
Off(MLEFT);
Off(MRIGHT);
Wait(300);
start cara;
}
lastlevel = BUMPER;
lastlevel -= FTHRESHOLD;
}
}
 
 
/roboti/istrobot/callis/Kopie - calis.nqc
0,0 → 1,118
#define THRESHOLD 44 // rozhodovaci uroven mezi cernou a bilou
#define FTHRESHOLD 150 // Rozhodovaci uroven dalkoveho sensoru
#define RED_WHITE 60 // maximum bile na cervenem senzoru
#define MLEFT OUT_C
#define MRIGHT OUT_A
#define RSENSOR SENSOR_1
#define LSENSOR SENSOR_3
#define BUMPER SENSOR_2
 
#define L 0
#define R 1
#define S 2
 
int line;
 
task main()
{
PlaySound (SOUND_DOUBLE_BEEP);
Wait(100); // 1s
SetSensor(RSENSOR,SENSOR_LIGHT); // senzor na caru modry pravy
SetSensor(LSENSOR,SENSOR_LIGHT); // senzor na caru modry levy
SetSensor(BUMPER,_SENSOR_CFG(SENSOR_TYPE_LIGHT, SENSOR_MODE_RAW)); // senzor na prekazku
SetTxPower(TX_POWER_HI); // aby daleko videl
 
// start cihla;
// start cara;
SetPower (MLEFT,OUT_HALF);
SetPower (MRIGHT,OUT_HALF);
OnRev(MLEFT); // rozjed se vpred
OnFwd(MRIGHT);
line=S;
 
while(true)
{
if (THRESHOLD < RSENSOR)
{
line=R;
SetPower (MRIGHT,OUT_LOW);
OnRev(MLEFT);
};
if (THRESHOLD < LSENSOR)
{
line=L;
SetPower (MLEFT,OUT_LOW);
OnFwd(MRIGHT);
};
 
if ((THRESHOLD > LSENSOR)&&(THRESHOLD > RSENSOR))
{
if(L==line)
{
Off(MLEFT);
OnFwd(MRIGHT);
while(THRESHOLD > LSENSOR);
while(THRESHOLD < LSENSOR);
};
if(R==line)
{
Off(MRIGHT);
OnRev(MLEFT);
while(THRESHOLD > RSENSOR);
while(THRESHOLD < RSENSOR);
};
line=S;
SetPower (MLEFT,OUT_HALF);
SetPower (MRIGHT,OUT_HALF);
OnRev(MLEFT); // rozjed se vpred
OnFwd(MRIGHT);
}
}
}
 
task cara()
{
while(true)
{
OnRev(MLEFT); // rozjed se vpred
OnFwd(MRIGHT);
if (THRESHOLD < RSENSOR)
{
OnRev(MRIGHT);
Wait(1);
Off(MRIGHT);
};
if (THRESHOLD < LSENSOR)
{
OnFwd(MLEFT);
Wait(1);
Off(MLEFT);
};
while((THRESHOLD < RSENSOR)||(THRESHOLD < LSENSOR));
}
}
 
task cihla() // dalkovy sensor
{
int lastlevel;
 
lastlevel = 0;
while(true)
{
SendMessage(0);
if(lastlevel > BUMPER)
{
PlaySound(SOUND_FAST_UP);
stop cara;
Off(MLEFT);
Off(MRIGHT);
Wait(100);
start cara;
}
lastlevel = BUMPER;
lastlevel -= FTHRESHOLD;
}
}
 
 
/roboti/istrobot/callis/Kopie - callis.nqc
0,0 → 1,139
#define THRESHOLD 44 // rozhodovaci uroven mezi cernou a bilou
#define FTHRESHOLD 100 // Rozhodovaci uroven dalkoveho sensoru
#define MLEFT OUT_C // Motory
#define MRIGHT OUT_A
#define RSENSOR SENSOR_1 // Sensory na caru
#define LSENSOR SENSOR_3
#define BUMPER SENSOR_2 // Dalkovy sensor
 
#define L 0 // left
#define R 1 // right
#define S 2 // straight
 
int movement; // smer minuleho pohybu
int line; // na ktere strane byla detekovana cara
int dira; // pocitadlo pro nalezeni preruseni cary
int derivace; // jak moc se bude zachovavat predesly smer
 
void Straight() // rovne
{
SetPower (MLEFT,OUT_FULL);
SetPower (MRIGHT,OUT_FULL);
OnRev(MLEFT);
OnFwd(MRIGHT);
derivace=5;
movement=S;
}
 
void Left() // doleva
{
SetPower (MLEFT,OUT_LOW);
SetPower (MRIGHT,OUT_FULL);
Off(MLEFT);
OnFwd(MRIGHT);
derivace=5;
movement=L;
}
 
void Right() // doprava
{
SetPower (MLEFT,OUT_FULL);
SetPower (MRIGHT,OUT_LOW);
OnRev(MLEFT);
Off(MRIGHT);
derivace=5;
movement=R;
}
 
task main()
{
PlaySound (SOUND_DOUBLE_BEEP);
Wait(100); // 1s
SetSensor(RSENSOR,SENSOR_LIGHT); // senzor na caru modry pravy
SetSensor(LSENSOR,SENSOR_LIGHT); // senzor na caru modry levy
// sensor na prekazku
SetSensor(BUMPER,_SENSOR_CFG(SENSOR_TYPE_LIGHT, SENSOR_MODE_RAW));
SetTxPower(TX_POWER_HI); // aby daleko videl
 
movement=S;
line=S;
dira=0;
 
start cara;
start cihla;
 
while(true)
{
if (THRESHOLD < RSENSOR) {line=R; dira=0;};
if (THRESHOLD < LSENSOR) {line=L; dira=0;};
}
}
 
 
task cara()
{
Left();
while(true)
{
switch(line)
{
case S:
if (3 < dira++)
{
PlaySound(SOUND_DOUBLE_BEEP);
};
break;
case L:
switch(movement)
{
// case S:
case R:
Left();
break;
case L:
Right();
break;
};
break;
 
case R:
switch(movement)
{
// case S:
case L:
Right();
break;
case R:
Left();
break;
};
break;
};
line=S;
Wait(10);
}
}
 
task cihla() // dalkovy sensor
{
int lastlevel;
 
lastlevel = 0;
while(true)
{
SendMessage(0);
if(lastlevel > BUMPER)
{
PlaySound(SOUND_FAST_UP);
stop cara;
Off(MLEFT);
Off(MRIGHT);
Wait(300);
start cara;
}
lastlevel = BUMPER;
lastlevel -= FTHRESHOLD;
}
}
 
 
/roboti/istrobot/callis/Lego MindStorms Bumper1.htm
0,0 → 1,51
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0062)http://www.cs.uu.nl/people/markov/lego/tips/bumper1/index.html -->
<HTML><HEAD><TITLE>Lego MindStorms: Bumper1</TITLE>
<META http-equiv=Content-Type content="text/html; charset=windows-1250">
<META content="MSHTML 6.00.2800.1226" name=GENERATOR></HEAD>
<BODY background="Lego MindStorms Bumper1_soubory/back.jpg">
<TABLE>
<TBODY>
<TR vAlign=top>
<TD>
<P><IMG src="Lego MindStorms Bumper1_soubory/logo.gif"></P>
<P><A href="http://www.cs.uu.nl/people/markov/lego/index.html"><IMG
height=58 alt=[Home] src="Lego MindStorms Bumper1_soubory/homeoff.gif"
width=78 align=ABSCENTER border=0></A></P>
<P><A
href="http://www.cs.uu.nl/people/markov/lego/challenge/index.html"><IMG
height=58 alt=[Challenge]
src="Lego MindStorms Bumper1_soubory/challengeoff.gif" width=78
align=ABSCENTER border=0></A></P>
<P><A href="http://www.cs.uu.nl/people/markov/lego/rcxcc/index.html"><IMG
height=58 alt=[RcxCC] src="Lego MindStorms Bumper1_soubory/rcxccoff.gif"
width=78 align=ABSCENTER border=0></A></P>
<P><A href="http://www.cs.uu.nl/people/markov/lego/robots/index.html"><IMG
height=58 alt=[Robots] src="Lego MindStorms Bumper1_soubory/robotsoff.gif"
width=78 align=ABSCENTER border=0></A></P>
<P><A href="http://www.cs.uu.nl/people/markov/lego/tips/index.html"><IMG
height=58 alt=[Tips] src="Lego MindStorms Bumper1_soubory/tipsoff.gif"
width=78 align=ABSCENTER border=0></A></P>
<P><A href="http://www.cs.uu.nl/people/markov/lego/links/index.html"><IMG
height=58 alt=[Links] src="Lego MindStorms Bumper1_soubory/linksoff.gif"
width=78 align=ABSCENTER border=0></A></P></TD>
<TD><IMG src="Lego MindStorms Bumper1_soubory/bumper1.jpg"> <FONT
size=+4>Bumper Design</FONT>
<P><IMG src="Lego MindStorms Bumper1_soubory/divide.gif"></P>Here is a
design for a bumper. The advantages of this bumper are that it uses only
one touch sensor and still covers the whole front of the robot. Moreover,
the sensor is on when touched and off otherwise (contrary to many of the
designs that come with MindStorms. This means you can multiplex it with
other touch or light sensors on one input. It can be made from the pieces
of the Robotic Invention System. Here are the instruction:
<P><IMG src="Lego MindStorms Bumper1_soubory/step1.jpg"> <IMG
src="Lego MindStorms Bumper1_soubory/step2.jpg">
<P><IMG src="Lego MindStorms Bumper1_soubory/step3.jpg"> <IMG
src="Lego MindStorms Bumper1_soubory/step4.jpg">
<P><IMG src="Lego MindStorms Bumper1_soubory/step5.jpg"> <IMG
src="Lego MindStorms Bumper1_soubory/step6.jpg">
<P><IMG src="Lego MindStorms Bumper1_soubory/step7.jpg"> <IMG
src="Lego MindStorms Bumper1_soubory/step8.jpg">
<P><IMG src="Lego MindStorms Bumper1_soubory/divide.gif"></P>Comments to:
<ADDRESS><A href="mailto:markov@cs.uu.nl"
subject="MindStorms">markov@cs.uu.nl</A></ADDRESS></TD></TR></TBODY></TABLE></BODY></HTML>
/roboti/istrobot/callis/Lego MindStorms Bumper1_soubory/Thumbs.db
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/Lego MindStorms Bumper1_soubory/back.jpg
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/Lego MindStorms Bumper1_soubory/bumper1.jpg
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/Lego MindStorms Bumper1_soubory/challengeoff.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/Lego MindStorms Bumper1_soubory/divide.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/Lego MindStorms Bumper1_soubory/homeoff.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/Lego MindStorms Bumper1_soubory/linksoff.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/Lego MindStorms Bumper1_soubory/logo.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/Lego MindStorms Bumper1_soubory/rcxccoff.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/Lego MindStorms Bumper1_soubory/robotsoff.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/Lego MindStorms Bumper1_soubory/step1.jpg
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/Lego MindStorms Bumper1_soubory/step2.jpg
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/Lego MindStorms Bumper1_soubory/step3.jpg
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/Lego MindStorms Bumper1_soubory/step4.jpg
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/Lego MindStorms Bumper1_soubory/step5.jpg
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/Lego MindStorms Bumper1_soubory/step6.jpg
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/Lego MindStorms Bumper1_soubory/step7.jpg
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/Lego MindStorms Bumper1_soubory/step8.jpg
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/Lego MindStorms Bumper1_soubory/tipsoff.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/Lego MindStorms Drive-Steer Car.htm
0,0 → 1,57
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0068)http://www.cs.uu.nl/people/markov/lego/tips/Differential1/index.html -->
<HTML><HEAD><TITLE>Lego MindStorms: Drive-Steer Car</TITLE>
<META http-equiv=Content-Type content="text/html; charset=windows-1250">
<META content="MSHTML 6.00.2800.1226" name=GENERATOR></HEAD>
<BODY background="Lego MindStorms Drive-Steer Car_soubory/back.jpg">
<TABLE>
<TBODY>
<TR vAlign=top>
<TD>
<P><IMG src="Lego MindStorms Drive-Steer Car_soubory/logo.gif"></P>
<P><A href="http://www.cs.uu.nl/people/markov/lego/index.html"><IMG
height=58 alt=[Home]
src="Lego MindStorms Drive-Steer Car_soubory/homeoff.gif" width=78
align=ABSCENTER border=0></A></P>
<P><A
href="http://www.cs.uu.nl/people/markov/lego/challenge/index.html"><IMG
height=58 alt=[Challenge]
src="Lego MindStorms Drive-Steer Car_soubory/challengeoff.gif" width=78
align=ABSCENTER border=0></A></P>
<P><A href="http://www.cs.uu.nl/people/markov/lego/rcxcc/index.html"><IMG
height=58 alt=[RcxCC]
src="Lego MindStorms Drive-Steer Car_soubory/rcxccoff.gif" width=78
align=ABSCENTER border=0></A></P>
<P><A href="http://www.cs.uu.nl/people/markov/lego/robots/index.html"><IMG
height=58 alt=[Robots]
src="Lego MindStorms Drive-Steer Car_soubory/robotsoff.gif" width=78
align=ABSCENTER border=0></A></P>
<P><A href="http://www.cs.uu.nl/people/markov/lego/tips/index.html"><IMG
height=58 alt=[Tips]
src="Lego MindStorms Drive-Steer Car_soubory/tipsoff.gif" width=78
align=ABSCENTER border=0></A></P>
<P><A href="http://www.cs.uu.nl/people/markov/lego/links/index.html"><IMG
height=58 alt=[Links]
src="Lego MindStorms Drive-Steer Car_soubory/linksoff.gif" width=78
align=ABSCENTER border=0></A></P></TD>
<TD><IMG src="Lego MindStorms Drive-Steer Car_soubory/final.jpg"> <FONT
size=+4>Drive-Steer Car</FONT>
<P><IMG src="Lego MindStorms Drive-Steer Car_soubory/divide.gif"></P>This
mechanism is based on the adder-subtractors of <A
href="http://carol.wins.uva.nl/~leo/lego/diff.html">Leo </A>and <A
href="http://www.phred.org/~alex/lego/">Alex </A>. It must be driven by
two motors; one connected to one of the four gears on one side, and the
other connected to one of the three gears on the other side. One motor
makes the wheels move in the same direction. The other sterrs by making
the wheels move in opposite direction. My design is acccording to me
stronger than the other ones. Here are some more pictures
<P><IMG src="Lego MindStorms Drive-Steer Car_soubory/step1.jpg"> <IMG
src="Lego MindStorms Drive-Steer Car_soubory/step2.jpg">
<P><IMG src="Lego MindStorms Drive-Steer Car_soubory/step3.jpg"> <IMG
src="Lego MindStorms Drive-Steer Car_soubory/step4.jpg">
<P><IMG src="Lego MindStorms Drive-Steer Car_soubory/step5.jpg"> <IMG
src="Lego MindStorms Drive-Steer Car_soubory/final.jpg">
<P><IMG
src="Lego MindStorms Drive-Steer Car_soubory/divide.gif"></P>Comments to:
<ADDRESS><A href="mailto:markov@cs.uu.nl"
subject="MindStorms">markov@cs.uu.nl</A></ADDRESS></TD></TR></TBODY></TABLE></BODY></HTML>
/roboti/istrobot/callis/Lego MindStorms Drive-Steer Car_soubory/Thumbs.db
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/Lego MindStorms Drive-Steer Car_soubory/back.jpg
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/Lego MindStorms Drive-Steer Car_soubory/challengeoff.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/Lego MindStorms Drive-Steer Car_soubory/divide.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/Lego MindStorms Drive-Steer Car_soubory/final.jpg
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/Lego MindStorms Drive-Steer Car_soubory/homeoff.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/Lego MindStorms Drive-Steer Car_soubory/linksoff.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/Lego MindStorms Drive-Steer Car_soubory/logo.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/Lego MindStorms Drive-Steer Car_soubory/rcxccoff.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/Lego MindStorms Drive-Steer Car_soubory/robotsoff.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/Lego MindStorms Drive-Steer Car_soubory/step1.jpg
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/Lego MindStorms Drive-Steer Car_soubory/step2.jpg
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/Lego MindStorms Drive-Steer Car_soubory/step3.jpg
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/Lego MindStorms Drive-Steer Car_soubory/step4.jpg
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/Lego MindStorms Drive-Steer Car_soubory/step5.jpg
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/Lego MindStorms Drive-Steer Car_soubory/tipsoff.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/Lego Robots Tips and Tricks.htm
0,0 → 1,125
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0054)http://www.cs.uu.nl/people/markov/lego/tips/index.html -->
<HTML><HEAD><TITLE>Lego Robots: Tips and Tricks</TITLE>
<META http-equiv=Content-Type content="text/html; charset=windows-1250">
<META content="MSHTML 6.00.2800.1226" name=GENERATOR></HEAD>
<BODY background="Lego Robots Tips and Tricks_soubory/back.jpg">
<TABLE>
<TBODY>
<TR vAlign=top>
<TD>
<P><IMG src="Lego Robots Tips and Tricks_soubory/logo.gif"></P>
<P><A href="http://www.cs.uu.nl/people/markov/lego/index.html"><IMG
height=58 alt=[Home] src="Lego Robots Tips and Tricks_soubory/homeoff.gif"
width=78 align=ABSCENTER border=0></A></P>
<P><A
href="http://www.cs.uu.nl/people/markov/lego/challenge/index.html"><IMG
height=58 alt=[Challenge]
src="Lego Robots Tips and Tricks_soubory/challengeoff.gif" width=78
align=ABSCENTER border=0></A></P>
<P><A href="http://www.cs.uu.nl/people/markov/lego/rcxcc/index.html"><IMG
height=58 alt=[RcxCC]
src="Lego Robots Tips and Tricks_soubory/rcxccoff.gif" width=78
align=ABSCENTER border=0></A></P>
<P><A href="http://www.cs.uu.nl/people/markov/lego/robots/index.html"><IMG
height=58 alt=[Robots]
src="Lego Robots Tips and Tricks_soubory/robotsoff.gif" width=78
align=ABSCENTER border=0></A></P>
<P><A href="http://www.cs.uu.nl/people/markov/lego/tips/index.html"><IMG
height=58 alt=[Tips] src="Lego Robots Tips and Tricks_soubory/tipson.gif"
width=78 align=ABSCENTER border=0></A></P>
<P><A href="http://www.cs.uu.nl/people/markov/lego/links/index.html"><IMG
height=58 alt=[Links]
src="Lego Robots Tips and Tricks_soubory/linksoff.gif" width=78
align=ABSCENTER border=0></A></P></TD>
<TD><FONT size=+4>Lego Robots Tips and Tricks</FONT>
<P><IMG src="Lego Robots Tips and Tricks_soubory/divide.gif"></P>
<P>
<H2>Sensors</H2>
<H3>Putting light and touch sensors on one input</H3>It is easy to put
touch and light sensors on one sensor input. In this case better set the
sensor mode to raw. In nqc this can be done as follows: <PRE> SetSensor(SENSOR_2,_SENSOR_CFG(SENSOR_TYPE_LIGHT, SENSOR_MODE_RAW));
</PRE>Now a value below 100 is a touch sensor event. Values above this
correspond to light levels (the higher the darker).
<H3>Using the IR port for proximity detection</H3>It turns out that the
light sensor is very sensitive to the infra-red light produced by the the
IR port on the robot. To uses this, mount the light sensor above the IR
port, pointing forward. Now regularly send messages. When there is a wall
close in front of the robot, you can notice this by high intensity changes
in the reading of the light sensor (preferably in raw mode). The closer
you get, the higher the fluctuations become. After a bit of tuning you can
rather accurately predict the distance. Here is a simple <A
href="http://www.cs.uu.nl/people/markov/lego/tips/ping.nqc">nqc
program</A> to demonstrate how this works. Thanks to Dave Chen and Simen
Svale Skogsrud for finding out about this.
<H2>Design</H2>
<H3>Front and back</H3>All designs that come with Lego MindStorms use the
IR-port side of the RCX as the front. This is not a good idea because you
normally add a lot of stuff at the front, making the IR-port almost
invisible. Also, for balance reasons, it is good to put the motors under
the middle of the RCX. Finally, if you use a swivelling wheel, put it at
the back, not at the front. Pulling a swivelling wheel gives a much
straighter motion than pushing it.
<H3>Drive-Steer mechanism</H3>
<P>
<TABLE>
<TBODY>
<TR vAlign=top>
<TD><IMG src="Lego Robots Tips and Tricks_soubory/step3.jpg"> </TD>
<TD>This mechanism is based on the adder-subtractors of <A
href="http://carol.wins.uva.nl/~leo/lego/diff.html">Leo </A>and <A
href="http://www.phred.org/~alex/lego/">Alex </A>. It must be driven
by two motors; one connected to one of the four gears on one side,
and the other connected to one of the three gears on the other side.
One motor makes the wheels move in the same direction. The other
sterrs by making the wheels move in opposite direction. My design is
acccording to me stronger than the other ones. More pictures can be
found <A
href="http://www.cs.uu.nl/people/markov/lego/tips/Differential1/index.html">here</A>.
</TD></TR></TBODY></TABLE>
<H3>Double motor power</H3>
<P>
<TABLE>
<TBODY>
<TR vAlign=top>
<TD><IMG src="Lego Robots Tips and Tricks_soubory/twomotors.jpg">
</TD>
<TD>If you need extra motor power, and you have enough motors,
connect two together. You can out them both on the same output to
drive them simultaneously. This is especially good for heavy robots
or if you want your robots to go fast. I assume you can do the same
with three or more motors, but I am not sure how many you can
connect to one output. </TD></TR></TBODY></TABLE>
<H3>Bumpers</H3>
<P>
<TABLE>
<TBODY>
<TR vAlign=top>
<TD><IMG src="Lego Robots Tips and Tricks_soubory/bumper1.jpg"> </TD>
<TD>Here is bumper I designed that uses only one touch sensor.
Instructions for building it can be found <A
href="http://www.cs.uu.nl/people/markov/lego/tips/bumper1/index.html">here</A>.
</TD></TR></TBODY></TABLE>
<H2>Internals</H2>
<H3>Free memory</H3>After loading the firmware, it seems that there is
about 6K of memory available for programs. You can use the <B>RCX Command
Center</B> to free this memory when required.
<H2>Programming with SPIRIT.OCX</H2>
<H3>Using the joystick</H3>Here is an <A
href="http://www.cs.uu.nl/people/markov/lego/tips/RCXJoystick.zip">example
program</A> (in Delphi 3) of how you can use the joystick to steer the
RCX. It comes with full source and is freeware. It is a simplified
stand-alone version of the joystick window in my RCX Command Center
version 2.0.
<H3>Registering SPIRIT.OCX</H3>If you don't want to install the lego
software on your system but still use programs like the <B>RCX Command
Center</B> you must register the OCX. Copy the spirit.ocx file from the
lego Cdrom to you harddisk and use the Run command in the windows Start
menu to execute <PRE> REGSVR32.EXE spirit.ocx
</PRE>This will register the ocx on your machine. (You might need to
specify the path of the ocx in the above command.)
<H3>Bugs</H3>There is a bug in the OCX: When polling the mode of a sensor
(e.g. Poll(11,0)) you don't get the right mode but 32* the mode.
<P>There is another bug in the polling command. Polling the watch gives
you the total time in minutes, and not divided in hours and minutes as the
doc suggests. </P></TD></TR></TBODY></TABLE></BODY></HTML>
/roboti/istrobot/callis/Lego Robots Tips and Tricks_soubory/Thumbs.db
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/Lego Robots Tips and Tricks_soubory/back.jpg
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/Lego Robots Tips and Tricks_soubory/bumper1.jpg
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/Lego Robots Tips and Tricks_soubory/challengeoff.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/Lego Robots Tips and Tricks_soubory/divide.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/Lego Robots Tips and Tricks_soubory/homeoff.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/Lego Robots Tips and Tricks_soubory/linksoff.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/Lego Robots Tips and Tricks_soubory/logo.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/Lego Robots Tips and Tricks_soubory/rcxccoff.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/Lego Robots Tips and Tricks_soubory/robotsoff.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/Lego Robots Tips and Tricks_soubory/step3.jpg
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/Lego Robots Tips and Tricks_soubory/tipson.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/Lego Robots Tips and Tricks_soubory/twomotors.jpg
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/ModelHobby2004.bak
0,0 → 1,118
// Robot na MiniSumo pro Model Hobby 2004
// $Archive: /Lego/ModelHobby2004.nqc $
// $Date: 2.10.04 0:44 $
// $Revision: 3 $
 
#define THRESHOLD 65 // rozhodovaci uroven mezi cernou a bilou
#define FTHRESHOLD 100 // Rozhodovaci uroven dalkoveho sensoru
#define POHON OUT_A // Motory
#define MULETA OUT_C
#define VPRED OnFwd(POHON)
#define VZAD OnRev(POHON)
#define NAHORU OnRev(MULETA)
#define DOLU OnFwd(MULETA)
#define PREDNI SENSOR_1 // Sensory na okraj
#define ZADNI SENSOR_3
#define BUMPER SENSOR_2 // Dalkovy sensor
 
task main()
{
PlaySound (SOUND_DOUBLE_BEEP);
Wait(400); // 5s podle pravidel - prvni prodleva procedury zapas
SetSensor(PREDNI,SENSOR_LIGHT); // senzor na caru predni
SetSensor(ZADNI,SENSOR_LIGHT); // senzor na caru zadni
// sensor na prekazku
SetSensor(BUMPER,_SENSOR_CFG(SENSOR_TYPE_LIGHT, SENSOR_MODE_RAW));
 
SetTxPower(TX_POWER_HI); // aby daleko videl
 
SetPower (POHON,OUT_FULL); // vykon motoru
SetPower (MULETA,OUT_HALF);
 
start radar;
start zapas;
start nevypadni;
start toro;
}
 
task toro()
{
int i=1;
 
while(true)
{
if (i++ & 1) {DOLU;} else {NAHORU;};
Wait(50);
Off(MULETA);
Wait(200);
}
}
 
task zapas()
{
Wait(100);
while(true)
{
VZAD;
Wait(50);
Off(POHON);
Wait(100);
VPRED;
Wait(50);
Off(POHON);
Wait(100);
Off(POHON);
Wait(100);
}
}
 
task nevypadni()
{
 
while(true)
{
if (THRESHOLD > PREDNI) // Cara vpredu
{
stop zapas;
stop radar;
PlaySound (SOUND_FAST_UP);
VZAD;
Wait(50);
start radar;
start zapas;
}
else
if (THRESHOLD > ZADNI) // Cara vzadu
{
stop zapas;
stop radar;
PlaySound (SOUND_FAST_UP);
VPRED;
Wait(50);
start radar;
start zapas;
}
} // while(true)
}
 
task radar() // dalkovy sensor
{
int lastlevel;
 
lastlevel = 0;
while(true)
{
SendMessage(0);
if(lastlevel > BUMPER) // vidime robota?
{
stop zapas;
PlaySound(SOUND_DOWN);
VPRED;
Wait(50);
}
lastlevel = BUMPER;
lastlevel -= FTHRESHOLD;
}
}
 
 
/roboti/istrobot/callis/ModelHobby2004.nqc
0,0 → 1,118
// Robot na MiniSumo pro Model Hobby 2004
// $Archive: /Lego/ModelHobby2004.nqc $
// $Date: 2.10.04 10:45 $
// $Revision: 4 $
 
#define THRESHOLD 65 // rozhodovaci uroven mezi cernou a bilou
#define FTHRESHOLD 100 // Rozhodovaci uroven dalkoveho sensoru
#define POHON OUT_A // Motory
#define MULETA OUT_C
#define VPRED OnFwd(POHON)
#define VZAD OnRev(POHON)
#define NAHORU OnRev(MULETA)
#define DOLU OnFwd(MULETA)
#define PREDNI SENSOR_1 // Sensory na okraj
#define ZADNI SENSOR_3
#define BUMPER SENSOR_2 // Dalkovy sensor
 
task main()
{
PlaySound (SOUND_DOUBLE_BEEP);
Wait(400); // 5s podle pravidel - prvni prodleva procedury zapas
SetSensor(PREDNI,SENSOR_LIGHT); // senzor na caru predni
SetSensor(ZADNI,SENSOR_LIGHT); // senzor na caru zadni
// sensor na prekazku
SetSensor(BUMPER,_SENSOR_CFG(SENSOR_TYPE_LIGHT, SENSOR_MODE_RAW));
 
SetTxPower(TX_POWER_HI); // aby daleko videl
 
SetPower (POHON,OUT_FULL); // vykon motoru
SetPower (MULETA,OUT_HALF);
 
start radar;
start zapas;
start nevypadni;
start toro;
}
 
task toro()
{
int i=1;
 
while(true)
{
if (i++ & 1) {DOLU;} else {NAHORU;};
Wait(50);
Off(MULETA);
Wait(200);
}
}
 
task zapas()
{
Wait(100); // napodruhe pojedeme dele dozadu
while(true)
{
VZAD; // mateni telem
Wait(50);
Off(POHON);
Wait(100);
VPRED;
Wait(50);
Off(POHON);
Wait(100);
Off(POHON);
Wait(100);
}
}
 
task nevypadni()
{
 
while(true)
{
if (THRESHOLD > PREDNI) // Cara vpredu
{
stop zapas;
stop radar;
PlaySound (SOUND_FAST_UP);
VZAD;
Wait(50);
start radar;
start zapas;
}
else
if (THRESHOLD > ZADNI) // Cara vzadu
{
stop zapas;
stop radar;
PlaySound (SOUND_FAST_UP);
VPRED;
Wait(50);
start radar;
start zapas;
}
} // while(true)
}
 
task radar() // dalkovy sensor
{
int lastlevel;
 
lastlevel = 0;
while(true)
{
SendMessage(0);
if(lastlevel > BUMPER) // vidime robota?
{
stop zapas;
PlaySound(SOUND_DOWN);
VPRED;
Wait(50);
}
lastlevel = BUMPER;
lastlevel -= FTHRESHOLD;
}
}
 
 
/roboti/istrobot/callis/NQC FAQ.htm
0,0 → 1,445
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0046)http://www.baumfamily.org/nqc_old/doc/faq.html -->
<HTML><HEAD><TITLE>NQC FAQ</TITLE>
<META http-equiv=Content-Type content="text/html; charset=windows-1250"><!-- Copyright 1998 Dave Baum -->
<META content="MSHTML 6.00.2800.1400" name=GENERATOR></HEAD>
<BODY bgColor=#ffffff>
<H2>NQC FAQ</H2>
<H3>General</H3>
<UL>
<LI><A href="http://www.baumfamily.org/nqc_old/doc/faq.html#nqc">What is
NQC?</A>
<LI><A href="http://www.baumfamily.org/nqc_old/doc/faq.html#mindstorms">What
is LEGO MINDSTORMS?</A>
<LI><A href="http://www.baumfamily.org/nqc_old/doc/faq.html#RIS2">Does NQC
support RIS 2.0?</A>
<LI><A href="http://www.baumfamily.org/nqc_old/doc/faq.html#firmware">How can
I get the RCX 2.0 firmware?</A> </LI></UL>
<H3>NQC Compiler Usage</H3>
<UL>
<LI><A href="http://www.baumfamily.org/nqc_old/doc/faq.html#dos">I'm using
Windows, and when I click on NQC a window with some text flashes on the screen
then disappears. What's going on?</A>
<LI><A href="http://www.baumfamily.org/nqc_old/doc/faq.html#-Trcx2">I'm using
the RCX 2.0 firmware but get errors when trying to call 2.0 functions (e.g.
SetUserDisplay). What's wrong?</A>
<LI><A href="http://www.baumfamily.org/nqc_old/doc/faq.html#errors">How can I
redirect errors to a file?</A>
<LI><A
href="http://www.baumfamily.org/nqc_old/doc/faq.html#spiritinstall">Where is
Spirit.ocx? RcxCC complains that it is not installed.</A> </LI></UL>
<H3>IR Communication</H3>
<UL>
<LI><A href="http://www.baumfamily.org/nqc_old/doc/faq.html#usb">How do I get
NQC to work with my USB IR tower?</A>
<LI><A href="http://www.baumfamily.org/nqc_old/doc/faq.html#control">How do I
use a computer to control the RCX?</A>
<LI><A href="http://www.baumfamily.org/nqc_old/doc/faq.html#irusb">How do I
use the IR tower with a USB Macintosh?</A>
<LI><A href="http://www.baumfamily.org/nqc_old/doc/faq.html#irdebug">Help,
RcxCC/MacNQC/NQC can't communicate with my RCX!</A>
<LI><A href="http://www.baumfamily.org/nqc_old/doc/faq.html#irlaptop">How do I
use my computer IR port with the RCX?</A>
<LI><A href="file:///Users/dave/WebSite/nqc/doc/faq.html#irxp">How can I get
the USB IR tower to work under Win XP?</A> </LI></UL>
<H3>Miscellaneous</H3>
<UL>
<LI><A href="http://www.baumfamily.org/nqc_old/doc/faq.html#spirit">Why
doesn't NQC use the Spirit OCX?</A>
<LI><A href="http://www.baumfamily.org/nqc_old/doc/faq.html#vision">Does NQC
support Vision Command?</A>
<LI><A href="http://www.baumfamily.org/nqc_old/doc/faq.html#build">What
computers/tools/etc do you use to develop NQC?</A> </LI></UL>
<P></P>
<HR align=left>
 
<P></P>
<H3><A name=nqc></A>What is NQC?</H3>
<P>NQC (Not Quite C) is a programming language for several LEGO MINDSTORMS
products including the RCX, CyberMaster, and Scout. NQC's syntax is very similar
to the C programming langauge, so experienced C programmers (and Java
programmers) should find it very easy to get started with. Even if you aren't an
experienced programmer, NQC is relatively easy to learn.</P>
<P>The two primary reasons people move up to NQC from the standard tools (RCX
Code and Robolab) is that NQC is a textual langauge, and it is more powerful.
Graphical languages are often easier to learn (no syntax errors!) but are
generally more tedious to use than a textual langauge. The graphical metaphors
of RCX Code (and to a certain extent Robolab) also significantly limit the types
of programs you can write.</P>
<P>NQC uses the same firmware as LEGO's standard tools (RCX Code and Robolab).
This means it is possible to have RCX Code, Robolab, and NQC programs loaded
onto the RCX at the same time. NQC also benefits from the stability and user
interface (e.g. the View button) provided by the standard firmware. On the minus
side, NQC must live within the constraints of the standard firmware. For
example, since the firmware does not provide floating point support, NQC cannot
provide it either. Other altermatives for programming the RCX (notably legOS and
pbForth) do not have such restrictions.</P>
<P></P>
<HR align=left>
 
<P></P>
<H3><A name=mindstorms></A>What is LEGO MINDSTORMS?</H3>
<P>LEGO MINDSTORMS is a series of LEGO sets that use special programmable bricks
to allow construction of robots. The most versatile programmable brick is the
RCX, which can be found in the Robotics Invention System set. A simpler brick,
the Scout, can be found in the Robotics Discovery set. The simplest brick, Micro
Scout, is featured in two sets with a Star Wars theme: Droid Developer Kit, and
Dark Side Developer Kit. Even though it is the most expensive, the RCX based set
is still the best value due to the versatility of the RCX itself. The Scout is a
bit more limited, but still can be programmed (using NQC) to do some interesting
things. The Micro-Scout is extremely limited, and it useful mainly as an
accessory to another programmable brick such as the RCX or Scout. Further
information on MINDSTORMS sets can be found at the official site: <A
href="http://www.legomindstorms.com/"
target=_blank>http://www.legomindstorms.com/</A>.</P>
<P></P>
<HR align=left>
 
<P></P>
<H3><A name=RIS2></A>Does NQC Support RIS 2.0?</H3>
<P>The RCX in the RIS 2.0 is nearly identical to the 1.0 RCX. However, new
firmware is used to give the RCX some new capabilities. Fortunately for existing
RCX owners, this firmware is available for download from www.legomindstorms.com
(as part of the RIS 2.0 SDK). NQC supports this new firmware (see <A
href="http://www.baumfamily.org/nqc_old/doc/faq.html#-Trcx2">here for more
info</A>).</P>
<P>RIS 2.0 also uses a new IR tower with a USB connection (instead of the
eariler RS-232 based towers). Support for the USB tower under Windows and Mac OS
X is currently in <A
href="http://www.baumfamily.org/nqc_old/beta/index.html">beta test</A>. Support
for Mac OS 9 will be added shortly and several other people are working on Linux
support.</P>
<H3>
<HR align=left>
<A name=firmware></A>How can I get the RCX 2.0 firmware?</H3>
<P>The RCX 2.0 firmware is contained in a file named FIRM0328.LGO and is
installed on your PC when you install the standard LEGO software. It is also
installed as part of the Vision Command software and the 2.0 SDK.</P>
<P>Unfortunately, all previously mentioned sources for the firmware require
software to be installed on a Windows computer. If you are using a different
operating system, then you will need to download the earlier Beta version of the
2.0 SDK which was packaged as a .zip file rather than a full installer. This
.zip file may then be expanded to get the FIRM0328.LGO file. The SDK 2.0 Beta
can be found at <A href="http://mindstorms.lego.com/sdk2beta/default.asp"
target=_blank>http://mindstorms.lego.com/sdk2beta/default.asp</A>.</P>
<P></P>
<HR align=left>
 
<P></P>
<H3><A name=dos></A>I'm using Windows, and when I click on NQC a window with
some text flashes on the screen then disappears. What's going on?</H3>
<P>NQC is a command line based tool - normally you run it by typing an
appropriate command into an MS-DOS window. When you double-click the exe file it
launches an MS-DOS console, runs NQC within it, then since NQC finishes almost
immediately, the entire window disappears.</P>
<P>Some people prefer command line based tools because they allow you to use the
text editor of your choice, etc. It also makes for identical behavior under
Windows, Mac, and Linux. In order to use the command line version of NQC you'll
need to do two things:</P>
<P>1) Use some sort of text editor (such as Notepad) to edit and save a source
file for NQC to compile.</P>
<P>2) From an MS-DOS window type the appropriate NQC command. Its usually best
to either put all of your programs and nqc.exe in the same directory, or make
sure the directory containing NQC is in your command path. For example, to
compile and download the program "test.nqc" using the default serial port you
would type the following command:</P>
<P>nqc -d test.nqc</P>
<P>An alternative is to use the <A href="http://www.cs.uu.nl/~markov/lego/"
target=_parent>RCX Command Center</A> by Mark Overmars, which is a familiar
Windows style application that provides a front end to the NQC compiler.</P>
<P></P>
<HR align=left>
 
<P></P>
<H3><A name=-Trcx2></A>I'm using the RCX 2.0 firmware but get errors when trying
to call 2.0 functions (e.g. SetUserDisplay). What's wrong?</H3>
<P>When NQC compiles a program it needs to know what kind of programmable brick
you want it to generate code for (this is called the <I>target</I> for the
compile). By default, NQC assumes you are targetting RCX 1.0. If you want to use
RCX 2.0 features, you need to tell the compiler you are using an RCX 2.0 target.
If you are using a command line version of NQC, then add <TT>-Trcx2</TT> to the
command line:</P>
<P><TT>nqc -Trcx2 -d foo.nqc</TT></P>
<P>If you don't want to type <TT>-Trcx2</TT> all the time, then just use the
environment variable <TT>NQC_OPTIONS</TT> - NQC reads this environment variable
and inserts any options in this variable at the front of the command line. For
example, if <TT>NQC_OPTIONS</TT> was set to <TT>-Trcx2</TT> and you issued the
following command</P>
<P><TT>nqc -d foo.nqc</TT></P>
<P>NQC would behave as if you actually typed</P>
<P><TT>nqc -Trcx2 -d foo.nqc</TT></P>
<P>The specifics of setting environment variables depends on your operating
system and shell. For example, under Windows you could type the following in a
command shell:</P>
<P><TT>set NQC_OPTIONS=-Trcx2</TT></P>
<P>If you want to always use RCX 2.0, then you can make this setting permament
by editing the AUTOEXEC.BAT file and adding the above command to the end of the
file. This way, the variable will get set every time Windows is started.</P>
<P>If you are using a GUI based version of NQC (such as MacNQC), then there
should be some preference setting for the target - just make sure it is set to
"RCX 2.0". Unfortunately, RcxCC does not have an "RCX 2.0" setting, but there is
a workaround. Leave the target as "RCX" (which means RcxCC won't specify any
target information and just rely on the fact that NQC defaults to RCX), then use
the <TT>NQC_OPTIONS</TT> environment variable to specify RCX 2.0 (as described
above).</P>
<P></P>
<HR align=left>
 
<P></P>
<H3><A name=errors></A>How can I redirect errors to a file?</H3>
<P>Compile errors are written to stderr, not stdout. This is to allow the
calling program to separate errors from the program listing (-l option) that
appears on stdout. The normal redirection facility of a shell only redirects
stdout, thus the errors will still be printed to the screen. Most shells have
additional syntax that allows the stderr stream to be redirected (use
"option-&gt;" in MPW, or "2&gt;" for WinNT). I do not know of any mechanism to
redirect stderr in Win95 command.com.</P>
<P>In addition, nqcc now supports (verion 1.1 b1) the ability to route error
messages to stdout with the -E option.</P>
<P></P>
<HR align=left>
 
<P></P>
<H3><A name=spiritinstall></A>Where is Spirit.ocx? RcxCC complains that it is
not installed.</H3>
<P>NQC has never used Spirit.ocx, but RcxCC used to require Spirit.ocx for
communication with the RCX. Lego no longer supports Spirit.ocx as of RIS 2.0,
but fortunately RcxCC has been updated to no longer require it. In addition,
RcxCC has been renamed to BricxCC (due to trademark concerns from Lego). You can
download the latest version of BricxCC <A
href="http://members.aol.com/johnbinder/bricxcc.htm" target=_blank>here</A>.</P>
<P></P>
<HR align=left>
 
<P></P>
<H3><A name=usb></A>How do I get NQC to work with my USB IR tower?</H3>
<P>Presently, USB towers are only supported under Mac OS X and Windows. I will
be releasing Mac OS 9 support shortly. Some other developers are working on a
Linux solution.</P>
<P>USB support is in beta test and requires version 2.4a4 of NQC.</P>
<P><B>IMPORTANT</B>- you need to tell NQC that you want it to look for a USB
tower, otherwise it assumes you have a serial tower and uses the default serial
port for your operating system (e.g. COM1 under Windows). Add <TT>-Susb</TT> to
the command line or set the <TT>RCX_PORT</TT> environment variable to
<TT>usb</TT>. When adding a command line option, put it near the beginning of
the command:</P>
<P><TT>nqc -Susb -d test.nqc</TT></P>
<P><B>Windows only:</B> NQC uses the USB driver installed by the Lego RIS 2.0
software, so you will need to install the RIS software and run it once with the
USB tower connected in order for the driver to be correctly installed.</P>
<P><B>Mac OS X only:</B> NQC talks directly to the USB tower. There is no
driver, so you'll never see the tower show up in /dev.<BR></P>
<P><SPAN style="FONT-WEIGHT: bold">FreeBSD (unoffical port):</SPAN> As of NQC
2.5 a5, the USB tower is supported when running a FreeBSD build from 02/28/03 or
later (the upcoming FreeBSD 5.1 will work).<BR></P>
<P></P>
<HR align=left>
 
<P></P>
<H3><A name=control></A>How do I use a computer to control the RCX?</H3>
<P>There are two basic ways to do this: send raw commands to the RCX, or send
'messages' which are then listened to by a program running on the RCX.</P>
<H4>Sending Messages</H4>
<P>This is generally the simplest way to interact with the RCX. First you write
a program for the RCX that continuously checks for received messages (using the
Message() and ClearMessage() calls) and then dispatches the messages
accordingly. The messages may have any value between 1 and 255. There is no
predefined meaning for these messages - your program can do whatever it wants
with each message.</P>
<P>There are several ways to send the message. You can use another RCX (or a
Scout) by calling the SendMessage() function. You can also use the nqc command
with the -msg option, for example to send message #3:</P>
<P>nqc -msg 3</P>
<P>You can use the LEGO remote control to send messages 1, 2, or 3. It is also
possible to send the message by sending the appropriate command packet (see
below)</P>
<H4>Sending Raw Commands</H4>
<P>Sending raw commands gives you complete control over the RCX. The commands
(a.k.a. opcodes or bytecodes) and the general packet format are unofficially
documented at <A href="http://graphics.stanford.edu/~kekoa/rcx/"
target=_parent>http://graphics.stanford.edu/~kekoa/rcx/</A>. For example, to
make the RCX play system sound #3 (upward tones), you would send a two-byte
command (shown in hex):</P>
<P>51 03</P>
<P>Messages are just a specific type of command - F7 followed by the message
value, so message #4 would be the packet</P>
<P>F7 04</P>
<P>If you are using NQC, you can let NQC take care of all the details of packet
formatting, getting an acknowledgement from the RCX, and retrying if a failure
occurs. You do this with the -raw option, which takes a single parameter listing
all of the bytes (in hex format) for the command:</P>
<P>nqc -raw 5103</P>
<P>If you are writing your own program, you can build up the packet yourself. A
suitable packet (for the plays sound command) would be:</P>
<P>55 ff 00 51 ae 03 fc 54 ab</P>
<H3>
<HR align=left>
<A name=irusb></A>How do I use the IR tower with a USB Macintosh?</H3>
<P>Since a USB version of the IR tower doesn't exist (yet), you will need a USB
to serial converter (such as the Keyspan TWIN adapter). If the adapter provides
a 9-pin serial connector, then you should be able to use the standard Mindstorms
cable between the adapter and the IR tower. If the adapter provides mac-style
serial connector, then you will also need an appropriate cable as desribed <A
href="http://www.baumfamily.org/lego/macmind/cables.html">here</A>.</P>
<P><I>Note: I have heard several reports of the Palm USB adapter not working. I
am not sure if this is a problem with the adapter itself, or some unusual
interaction between it and the OS. If you have been able to use a Palm USB
adapter with MacNQC or NQC, please let me know. I would like to get a definitive
answer on whether this adapter can be made to work. Personally, I use the
Keyspan Twin adapter (USA-28X), and I've heard that both the Keyspan PDA adapter
(USA-19) and Xircom PortGear USB also work.</I></P>
<P>If you are using MacNQC, then the popup menu in the Preferences dialog box
will list all available serial ports (including those provided by USB
converters).</P>
<P>If you are using the MPW version of NQC, then you will need to specify the
serial port either on the command line (using the -S option) or in the RCX_PORT
environment variable. Both methods require that you know the name of the serial
port driver. The easiest way to make this work is to use the adapter's control
panel to configure the serial port to "emulate the printer port". This will
cause the serial port to be named "B", thus you could do either of the
following:</P>
<P><TT>nqc -SB -d foo.nqc</TT></P>
<P>or</P>
<P><TT>set -e RCX_PORT B</TT></P>
<P><TT>nqc -d foo.nqc</TT></P>
<P>If you choose the second option, the <TT>set</TT> command only needs to be
executed once per MPW session - adding it to a Startup file will make life
simpler.</P>
<H3>
<HR align=left>
<A name=irdebug></A>Help, RcxCC/MacNQC/NQC can't communicate with my RCX!</H3>
<P>In most cases, problems like this boil down to a configuration issue, bad
cable, or dead battery. Here are some troubleshooting tips.</P>
<P>If the program says it cannot open the serial port, then this is almost
certainly a configuration problem. For MacNQC, make sure you have a valid serial
port selected in the Preferences dialog box. For NQC, make sure you have
specified the appropriate serial port name (default is modem port, "B" is the
printer port, see <A
href="http://www.baumfamily.org/nqc_old/doc/faq.html#irusb">above</A> for USB
based macs). For RcxCC, I suggest trying once with auto-detection, and if that
fails, then manually set the serial port in the RcxCC program.</P>
<P>If the program reports that it cannot communicate with the IR device, then
either the program is talking to the wrong serial port (see the previous item),
or there's a problem with the cable and/or battery. Make sure you have a fresh
9v battery installed in the IR tower, and if possible use the cable supplied by
Lego.</P>
<P>If the program reports that it cannot communicate with the RCX, then
communication with the IR tower is probably OK, and the problem is between the
tower and the RCX.</P>
<UL>
<LI>Certain light sources (bright sunlight, certain projection TVs) can cause
interference...try using a towel or other item to shield the IR tower and RCX
from other light.
<LI>The tower and RCX should be about 6 inches apart. Tty the switch on the
front of the tower in both positions - some people report better success with
"near" mode, and some with "far" mode.
<LI>Make sure you have firmware downloaded into the RCX. If the display only
shows "1" on it, then firmware isn't installed yet...download the firmware
using the Lego software or the -firmware option for NQC (the firmware itself
must be copied from the Lego CD or downloaded from <A
href="http://www.legomindstorms.com/"
target=_blank>http://www.legomindstorms.com/</A>). Once the firmware is
installed you should see something like "00.00 1" on the display. </LI></UL>
<P>If you have a terminal program (e.g. HyperTerminal for Windows, Zterm for the
Mac), then you can check the IR tower directly. Open up a session to the
appropriate serial port at 2400 baud, 1 stop bit, odd parity, and 8 data bits.
Turn off local echo. Start typing a few characters. A green LED on the front of
the IR tower should light up, and the characters you typed should be echoed back
to the screen (with an occasional mistake depending on how much interference
there is).</P>
<P>If you are using the command line version of NQC, then you can have it log
any serial communication. This is helpful in trying to isolate where
communication is failing. A good general-purpose test is</P>
<P><TT>nqc -v -raw 10</TT></P>
<P>Please include the output of this test in any e-mail to me regarding IR
communication problems.</P>
<P></P>
<HR align=left>
 
<P></P>
<H3><A name=irlaptop></A>How do I use my computer IR port with the RCX?</H3>
<P>You can't. At least not easily.</P>
<P>Most computers use the IrDA protocols for IR communication. The RCX uses a
proprietary protocol developed by Lego for communication. Quite simply, these
protocols are incompatable.</P>
<H4>What about IrCom? Doesn't that let me use the IR port as a regular serial
port?</H4>
<P>Yes and no. From an application's point of view, IrCom looks like a serial
port (complete with hardware handshaking and control lines). However, the IrCom
layer actually resides on top of normal IrDA communication, so what appears to
the application to be async serial communication, is in fact a bunch of IrDA
packets getting sent back and forth. Since the RCX doesn't understand IrDA
packets, it can't understand IrCom either.</P>
<H4>What if I access the hardware directly?</H4>
<P>Even if you bypassed the IrDA protocol stacks on the computer and somehow
managed to control the hardware directly (a task that is likely to be different
for different computer vendors), it still may not be possible. The Lego
protocols encode bits using a 38kHz carrier frequency. This frequency is
generated an filtered in hardware. IrDA doesn't really use a carrier frequency,
and the actual specs on bit times provide a lot of lattitued to device
manufacturers. As a result, it is difficult to get generic IrDA hardware to
generate the required 38kHz carrier reliably. Filtering the recieve side is even
more problematic.</P>
<P>I would hesitate to say that this problem is "impossible" to solve, but
people have been asking about this for over a year, and to my knowledge no
general solution has emerged. There are, however, specialized solutions for
specific pieces of hardware (usually PDAs or other handled devices such as a
Palm III).<BR></P>
<HR align=left>
 
<H3><A name=irxp></A>How can I get the USB IR tower to work under Win XP?</H3>
<P>There appear to be some timing related difficulties when using NQC with the
USB tower under Windows XP.&nbsp; If you are having difficulty downloading
programs, open the LEGO USB Tower control panel, select the Advanced Tab, and
set the Read Timeout to 300 msec.&nbsp; This generally fixes the
problem.<BR></P>
<H3>
<HR align=left>
<A name=spirit></A>Why doesn't NQC use the Spirit OCX?</H3>
<P>The Spirit OCX is only available on the PC. My personal preference is to use
a Macintosh, so I needed to have a platform independent means for communicating
with the RCX.</P>
<H3>
<HR align=left>
<A name=vision></A>Does NQC Support Vision Command?</H3>
<P>Vision command programs run in two places...all of the image processing
software runs on the PC, then sends messages to a program running on the RCX.
The messages that are sent are ordinary RCX messages, and by using Message() and
ClearMessage(), NQC programs can respond to them. Mike Gasperi calls this "<A
href="http://www.plazaearth.com/usr/gasperi/vcsensor.htm" target=_blank>Using
Vision Command as a Smart Sensor</A>".</P>
<P>Note that I have never tried this myself (Vision Command doesn't run on Mac),
so I can't really help if things don't work as expected.</P>
<H3>
<HR align=left>
</H3>
<H3><A name=build></A>What computers/tools/etc do you use to develop NQC?</H3>
<P>All of the NQC development takes place on my Macintosh PowerBook. I use
Metrowerks CodeWarrior to write and debug the code as a Macintosh
application.</P>
<P>The Code Warrior project also has targets to build the MPW version of NQC as
well as the Win32 version. Regression tests on the compiler are done on the PPC
version of the MPW tool (via a couple of MPW scripts and a bunch of sample
programs). Some minimal testing of the Win32 version is done from within Virtual
PC - I just make sure that the build went fine and that the serial port works
since that is really the only code custom to Win32.</P>
<P>For the source release, I boot into Mac OS X, copy over the NQC source tree
and build it (using make, gcc, etc). A simple test (again just to make sure the
serial port code for Unix is working) is performed. I then use a shell script to
create a source release tree, strip out any unwanted binaries, and package the
entire thing up as a .tar.gz. Recently, I've also been packaging up a Mac OS X
binary version.</P>
<P>So there you have it...development for Mac, Windows, and Unix all done on my
trusty PowerBook.</P>
<P></P>
<HR align=left>
 
<TABLE height=24 cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD width="50%" height=17>&nbsp;<A
href="http://www.baumfamily.org/nqc_old/doc/index.html"
target=_parent>[Home]</A></TD>
<TD align=right width="50%">&nbsp;<IMG height=31
src="NQC FAQ_soubory/contact.gif" width=128 align=bottom
naturalsizeflag="3"></TD></TR></TBODY></TABLE></BODY></HTML>
/roboti/istrobot/callis/NQC FAQ_soubory/Thumbs.db
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/NQC FAQ_soubory/contact.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/P5080024.JPG
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/Thumbs.db
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/datalog.txt
0,0 → 1,67
Variable 3: 0
Variable 3: 5
Variable 3: 0
Variable 3: 0
Variable 3: 0
Variable 3: 0
Variable 3: 0
Variable 3: -15
Variable 3: 0
Variable 3: 0
Variable 3: 0
Variable 3: -6
Variable 3: 0
Variable 3: 0
Variable 3: 0
Variable 3: 0
Variable 3: 0
Variable 3: 0
Variable 3: 0
Variable 3: -11
Variable 3: 0
Variable 3: 0
Variable 3: -8
Variable 3: 0
Variable 3: 0
Variable 3: 0
Variable 3: 0
Variable 3: 0
Variable 3: 0
Variable 3: 0
Variable 3: 0
Variable 3: 0
Variable 3: 0
Variable 3: 0
Variable 3: 0
Variable 3: 0
Variable 3: 3
Variable 3: 0
Variable 3: -8
Variable 3: 0
Variable 3: 0
Variable 3: 0
Variable 3: 0
Variable 3: 0
Variable 3: 0
Variable 3: 0
Variable 3: -10
Variable 3: 0
Variable 3: 0
Variable 3: 3
Variable 3: 0
Variable 3: 0
Variable 3: -16
Variable 3: 0
Variable 3: 0
Variable 3: -17
Variable 3: 0
Variable 3: 0
Variable 3: 0
Variable 3: 0
Variable 3: 7
Variable 3: 1
Variable 3: 0
Variable 3: -3
Variable 3: 0
Variable 3: 0
Variable 3: 6
/roboti/istrobot/callis/ping.bak
0,0 → 1,43
/*
* Ping
* ====
* Adapted from a program by Dave Chen and Simen Svale Skogsrud
*
* This program assumes that the light sensor is on IN_2 and
* that it points in the same direction as the infrared connection
* on the robot. It beeps when the robot gets close to an obstacle.
* This is done by repeatedly sending IR messages. These cause a
* large fluctuation in light intensity.
*
* This is a nice mechanism to find a close by wall without bumping
* in to it.
*/
 
#define THRESHOLD 200 // Making this larger decreases the distance
 
int lastlevel;
 
task Ping()
// Constantly test whether there is a high fluctuation
{
SetSensor(SENSOR_2,_SENSOR_CFG(SENSOR_TYPE_LIGHT, SENSOR_MODE_RAW));
lastlevel = 0;
while(true)
{
SendMessage(0);
if(lastlevel > SENSOR_2)
{
// Close to something
PlaySound(1);
Wait(30);
}
lastlevel = SENSOR_2;
lastlevel -= THRESHOLD;
}
}
 
task main()
{
start Ping;
}
 
/roboti/istrobot/callis/ping.nqc
0,0 → 1,43
/*
* Ping
* ====
* Adapted from a program by Dave Chen and Simen Svale Skogsrud
*
* This program assumes that the light sensor is on IN_2 and
* that it points in the same direction as the infrared connection
* on the robot. It beeps when the robot gets close to an obstacle.
* This is done by repeatedly sending IR messages. These cause a
* large fluctuation in light intensity.
*
* This is a nice mechanism to find a close by wall without bumping
* in to it.
*/
 
#define THRESHOLD 100 // Making this larger decreases the distance
 
int lastlevel;
 
task Ping()
// Constantly test whether there is a high fluctuation
{
SetSensor(SENSOR_2,_SENSOR_CFG(SENSOR_TYPE_LIGHT, SENSOR_MODE_RAW));
lastlevel = 0;
while(true)
{
SendMessage(0);
if(lastlevel > SENSOR_2)
{
// Close to something
PlaySound(1);
Wait(30);
}
lastlevel = SENSOR_2;
lastlevel -= THRESHOLD;
}
}
 
task main()
{
start Ping;
}
 
/roboti/istrobot/callis/pokus.bak
0,0 → 1,14
#pragma reserve 0 3
int n;
task main()
{
PlaySound(SOUND_DOUBLE_BEEP);
asm{0x14, 3, 2, 10, 0}; // setv 3, constant, 10
CreateDatalog(100);
while (true)
{
AddToDatalog(n);
SetUserDisplay(n++, 0);
Wait(100);
}
}
/roboti/istrobot/callis/pokus.nqc
0,0 → 1,15
#pragma reserve 0 3
#define n @3 // VAR 3
task main()
{
PlaySound(SOUND_DOUBLE_BEEP);
// asm{0x14, 3, 2, 10, 0}; // setv 3, constant, 10
CreateDatalog(100);
while (true)
{
AddToDatalog(n);
n=n+1;
SetUserDisplay(n, 0);
Wait(100);
}
}
/roboti/istrobot/callis/reset.nqc
0,0 → 1,10
task main()
{
SetSensor (SENSOR_1, SENSOR_TOUCH);
SetSensor (SENSOR_2, SENSOR_TOUCH);
SetSensor (SENSOR_3, SENSOR_TOUCH);
Float (OUT_A);
Float (OUT_B);
Float (OUT_C);
StopAllTasks ();
}
/roboti/istrobot/callis/stopar_pravidla.htm
0,0 → 1,9
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN">
<!-- saved from url=(0032)http://www.robotika.sk/mains.htm -->
<HTML><HEAD><TITLE>Slovenská verzia</TITLE>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-2">
<META content="MSHTML 6.00.2800.1400" name=GENERATOR></HEAD><FRAMESET border=0
frameSpacing=0 frameBorder=0 cols=137,*><FRAME name=menu
src="stopar_pravidla_soubory/menus.htm" frameBorder=0 noResize
scrolling=no><FRAME name=telo src="stopar_pravidla_soubory/follower.htm"
frameBorder=0 noResize></FRAMESET></HTML>
/roboti/istrobot/callis/stopar_pravidla_soubory/follower.htm
0,0 → 1,195
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0044)http://www.robotika.sk/contest/follower.html -->
<HTML><HEAD><TITLE>Istrobot - pravidla: Stopar</TITLE>
<META http-equiv=Content-Type content="text/html; charset=windows-1250"><LINK
title="Orange Style for Robots" href="follower_soubory/istrobot.css"
type=text/css rel=StyleSheet>
<META content="MSHTML 6.00.2800.1400" name=GENERATOR></HEAD>
<BODY bgColor=white><FONT face=Helvetica,Arial size=-1>
<P align=center>[<A
href="http://www.robotika.sk/contest/novinky.html">Novinky</A>] [<A
href="http://www.robotika.sk/contest/pravidla.html">Pravidlá</A>] [<A
href="http://www.robotika.sk/contest/roboti.html">Roboti</A>] [<A
href="http://www.robotika.sk/contest/poradna.html">Poradòa</A>] [<A
href="http://www.robotika.sk/contest/archive/index.html">Archív</A>]
<P></P>
<H1>Propozície kategórie Stopár</H1><IMG height=4 alt=""
src="follower_soubory/bluelin.gif" width=500 align=top border=0>
<P><BR>
<P></P>
<H3>Súažná úloha </H3>
<P>Zostroji elektronicky riadeného autonómneho mobilného robota, ktorý prejde
po urèenej dráhe a v&nbsp;èasovom limite do cie¾a. Smer a&nbsp;trasa je daná
nama¾ovaným tmavým pruhom, na dráhe sú umiestnené rozlièné prekážky.
<P>Toto zadanie prestavuje reálnu úlohu napríklad pre automatické skladové
manipulátory a podobne.
<P></P>
<H3>Dráha</H3>Podklad dráhy bude svetlý (biely) s&nbsp;tmavou (èiernou) vodiacou
èiarou šírky 15+/-1&nbsp;mm. Celková dåžka dráhy nepresiahne 20&nbsp;m. Materiál
bude papier, drevo, linoleum alebo podobné materiály.
<P>Najmenší polomer oblúkov na trati bude 10&nbsp;cm. Celkové prevýšenie
nepresiahne 3&nbsp;cm, maximálne stúpanie a&nbsp;klesanie je 5%. Na dráhe,
podobne ako v&nbsp;reálnom svete, sa môžu vyskytova náhodné prekážky (prerušená
vodiaca èiara, prekážka na vodiacej èiare, zmena osvetlenia èiary a iné).
<P>Úlohou robota nie je nájs správnu cestu (nebudú žiadne križovatky a
odboèky), ale výhradne sledova nama¾ovanú èiaru. Na dráhe sa môže vyskytnú aj
tunel s&nbsp;minimálnym prierezom 25x25&nbsp;cm. Dráha sa poèas súaže nemení,
takže robot sa môže uèi a napr. rovné úseky pri ïalšej jazde prechádza
rýchlejšie.
<P>Robot vyštartuje z&nbsp;kruhu o&nbsp;polomere 30&nbsp;cm oznaèeného nápisom
ŠTART, za ktorým nasleduje asi 50&nbsp;cm dlhý priamy úsek, na ktorom musí nájs
stopu a nastavi sa na òu. Za týmto úsekom sa nachádza štartovacia èiara, po
prerušení svetelného lúèa (10&nbsp;mm nad povrchom dráhy) ¾ubovo¾nou èasou
robota sa zaène mera èas.
<P>Èasomiera sa zastaví po prerušení podobného lúèa na konci dráhy.
<P></P>
<H3>Èinnos robota</H3>
<P>Po umiestnení robota do štartovacieho kruhu a jeho zapnutí súažiaci nesmie
do jeho èinnosti nijakým spôsobom zasahova. Robot musí by riadený výluène
vstavanými elektronickými obvodmi.
<P>Po prekroèení štartovacej èiary robot nesmie opusti dráhu vyznaèenú tmavou
èiarou s výnimkou obchádzania prekážky. Pri pohybe nesmie zanecháva žiadne
stopy a znaèky. Na dráhe nesmie osta ani žiadna jeho súèas.
<P>Pri poškodení súažnej dráhy je robot diskvalifikovaný.
<P></P>
<H3>Rozmery a ve¾kos robota</H3>
<P>Rozmer robota nesmie v&nbsp;žiadnom smere presiahnu 25cm. Uvedomte si aj
obmedzenia dané tunelmi a polomermi oblúkov na dráhe.
<P>Minimálne rozmery nie sú obmedzené. Hmotnos nie je obmedzená.
<P></P>
<H3>Konštrukcia a materiály</H3>
<P>Na konštrukciu sa nekladú žiadne obmedzenia. Jedinou požiadavkou je to, aby
robot bol výrobkom súažiaceho (súažiacich). To nevyluèuje komerèné stavebnice
(LEGO, Fischertechnik), iba hotové výrobky.
<P></P>
<H3>Senzorika</H3>
<P>Nie sú kladené žiadne obmedzenia na typ, poèet a rozmery použitých snímaèov,
ak neporušujú iné pravidlá.
<P>Súažiaci nesmú použi žiadne vonkajšie pomôcky na zlepšenie navigácie
(nálepky, znaèky, zrkadielka,...)
<P></P>
<H3>Elektronika</H3>
<P>Žiadna èas robota nesmie pracova s&nbsp;väèším napätím ako je 24V. Celková
spotreba by nemala by viac ako 20A. Výnimky z&nbsp;tohto pravidla schva¾uje
porota. Všetky riadiace obvody musia by súèasou robota, nie je možné riadi
jeho pohyb napríklad z&nbsp;externého PC pripojeného èi už káblom, alebo
bezdrôtovo.
<P>Na použité elektronické súèiastky nie je žiadne obmedzenie.
<P>Zdroje energie sú problém súažiacich.
<P></P>
<H3>Poradie úèastníkov a priebeh súaže</H3>
<P>Poradie súažiacich bude vylosované tesne pred súažou. Úèastníci musia
absolvova predpísanú dráhu v&nbsp;poradí urèenom losovaním. Každý súažiaci
robot môže prejs dráhu trikrát vo vylosovanom poradí. Èas medzi pokusmi môže
úèastník využi na ¾ubovo¾né opravy a úpravy. Ak sa však nedostaví do 1 minúty
po výzve na štart, stráca právo absolvova pokus. V&nbsp;prípade, že sa prihlási
ve¾a súažiacich, porota môže zníži poèet pokusov, prípadne vyhlási
kvalifikaèné kolo.
<P></P>
<H3>Èasové limity</H3>
<P>Na prejdenie dráhy je stanovený èasový limit 5 minút. Po piatich minútach sa
meranie èasu zastaví a pokus sa zruší. Aj napriek tomuto handicapu však nie je
diskvalifikovaný. Zastavenie merania èasu nemá nijaký vplyv na ostatné pokusy.
<P></P>
<H3>Hodnotenie a ceny</H3>
<P>Každý prihlásený robot, ktorý prejde stanovenú dráhu, dostane diplom. Víazom
sa stane robot s&nbsp;najnižším dosiahnutým èasom zo všetkých pokusov. Okrem
toho môže porota udeli cenu za najlepšiu konštrukciu a najelegantnejšiu
konštrukciu (kapotáž).
<P></P>
<H3>Diskvalifikácia</H3>
<P>Vo všeobecnosti platí, že pri každom porušení pravidiel je robot zo súaže
vylúèený. To platí najmä v týchto situáciach:
<UL>
<LI>nebezpeèné správanie, ohrozenie bezpeènosti,
<LI>poškodenie dráhy,
<LI>ak sa robot poèas jazdy rozpadne. </LI></UL>
<P></P>
<H3>Bezpeènos</H3>
<P>Tri zákony robotiky:
<OL type=1>
<P>
<LI><B>Robot nesmie ublíži èloveku</B> alebo svojou neèinnosou dopusti, aby
bolo èloveku ublížené.
<LI><B>Robot musí poslúchnu príkaz èloveka</B>, s&nbsp;výnimkou prípadov, keï
je taký príkaz v&nbsp;rozpore s&nbsp;prvým zákonom.
<LI><B>Robot musí chráni sám seba pred znièením</B>, s&nbsp;výnimkou
prípadov, keï je to v&nbsp;rozpore s&nbsp;prvým a druhým zákonom. </LI></OL>
<P>
<DIV align=right><EM>Isaac Asimov: The Complete Robot, Nightfall Inc.,
1982.</EM> </DIV>
<P>V&nbsp;prípade, že zariadenie nebude spåòa základné bezpeènostné predpisy,
porota ho nesmie pripusti k&nbsp;súaži a nesmie dovoli jeho prevádzkovanie.
<P>Každý robot, ktorý by mohol ohrozi úèastníkov, divákov, alebo zariadenie,
bude vypnutý.
<P>
<P><BR>
<P><BR></P>
<H3>Klimatické podmienky</H3>
<P>Súaž bude prebieha v bežných klimatických podmienkach (T = 270 -
310&nbsp;K, <I>p</I> = 90 - 120&nbsp;kPa, 0 - 90% RH).
<P>Skutoènú úroveò osvetlenia scény nie je možné vopred urèi. Pred súažou bude
vyhradený èas, ktorý môžu súažiaci využi na optimálne nastavenie citlivosti
snímaèov. Organizátor nemôže zaruèi, že diváci nebudú vrha na dráhu tiene.
<P>Upozornenie: Konštruktéri si musia uvedomi, že moderné filmové a
fotografické prístroje používajú zábleskové zariadenia a infraèervené vysielaèe
na zaostrovanie. Pretože priebeh súaže bude zaznamenávaný, pri konštrukcii
treba poèíta aj s takýmito poruchovými signálmi.
<P></P>
<H3>Dokumentácia</H3>
<P>Každý súažiaci musí odovzda pred súažou dokumetáciu popisujúcu
elektroniku, koštrukciu a riadiaci algoritmus. Najlepšia forma je <TT>html</TT>,
organizátor poskytne priestor na jej uverejnenie na svojom serveri.
<P></P>
<H3>Porota</H3>
<P>Nad priebehom súaže a dodržiavaním pravidiel bdie porota.
<P>Porota je najmenej trojèlenná, skladá sa zo zástupcov fakulty, študentov a
sponzorov.
<P>Výroky poroty sú záväzné vo všetkých sporných bodoch i v&nbsp;otázkach
výkladu pravidiel.
<P></P>
<H3>Kedy a kde?</H3>
<P>Súaž bude prebieha v&nbsp;priestoroch Fakulty elektrotechniky a informatiky
na Ilkovièovej 3 v&nbsp;Bratislave 23. apríla 2003. Úèastníci budú ma možnos
otestova dráhu (pravdaže nie jej súažný tvar) v stanovených termínoch a deò
pred súažou.
<P></P>
<H3>Podpora úèastníkov</H3>
<P>Organizátor (KAR) umožní prihláseným úèastníkom pracova na zariadeniach KAR
a pod¾a možnosti ich bude pri konštrukcii podporova. Pracovníci katedry
prispejú odbornými radami, oddelenie AP poskytne vývojové prostriedky pre
procesory radu 8051.
<P>Súaž môže by doplnená ukážkami profesionálnych robotov, prípadne
demonštráciami sponzorujúcich firiem.
<P></P>
<H3>Registrácia a prihlášky</H3>
<P>Súaže sa môžu zúèastni jednotlivci a tímy (max. 5-èlenné) bez oh¾adu na vek
èi zamestnanie.
<P>Predbežnú prihlášku treba posla najneskôr do 1.&nbsp;februára 2003 na adresu
Ing. Richard BALOGH, Katedra automatizácie a regulácie, FEI STU,
Ilkovièova&nbsp;3, 812 19&nbsp;Bratislava, e-mail: <A
href="mailto:balogh@elf.stuba.sk"><TT>balogh@elf.stuba.sk</TT></A>, tel. +421 -
2 - 602 91 411. Prihlási sa je možné aj pomocou formulára na www stránke
<P align=center><A
href="http://www.robotika.sk/contest/pravidla.html#prihlaska"><TT>http://www.robotika.sk/</TT></A>
 
<P>Tam nájdete aj pravidlá, konštrukèné návody, rady, inšpiraèné obrázky a
odkazy na podobné súaže vo svete.
<P>Akáko¾vek pripomienka a podpora je vítaná. <A
href="http://www.robotika.sk/contest/pravidla.html#prihlaska"></P>
<H3>Prihláška...</H3></A>
<P><BR></FONT>
<P align=center>[<A
href="http://www.robotika.sk/contest/novinky.html">Novinky</A>] [<A
href="http://www.robotika.sk/contest/pravidla.html">Pravidlá</A>] [<A
href="http://www.robotika.sk/contest/roboti.html">Roboti</A>] [<A
href="http://www.robotika.sk/contest/poradna.html">Poradòa</A>] [<A
href="http://www.robotika.sk/contest/archive/index.html">Archív</A>]
<P><BR>
<P>
<HR>
 
<P align=center><FONT size=-2>© 2002 Katedra automatizácie a regulácie FEI
STU<BR>Ilkovièova 3, 812 19 Bratislava <BR>Posledná zmena: 19. septembra
2002.<BR>Zodpovedný èlovek: <I><A href="mailto:balogh@elf.stuba.sk">Richard
Balogh</A></I>. </FONT></P></BODY></HTML>
/roboti/istrobot/callis/stopar_pravidla_soubory/follower_soubory/bluelin.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/stopar_pravidla_soubory/follower_soubory/istrobot.css
0,0 → 1,24
BODY {
PADDING-RIGHT: 1ex; PADDING-LEFT: 1ex; FONT-SIZE: 10pt; BACKGROUND: white; PADDING-BOTTOM: 1ex; MARGIN: 1ex; COLOR: black; PADDING-TOP: 1ex; FONT-FAMILY: Verdana, Geneva, Arial, Helvetica, sans-serif
}
A:link {
FONT-WEIGHT: bold; COLOR: #ff8c1d; TEXT-DECORATION: none
}
A:visited {
FONT-WEIGHT: bold; COLOR: #ff8c3d; TEXT-DECORATION: none
}
A:hover {
FONT-WEIGHT: bold; COLOR: #ff8c2d; TEXT-DECORATION: underline
}
A:active {
FONT-WEIGHT: bold; COLOR: #ff8c2d; TEXT-DECORATION: underline
}
H1 {
FONT-WEIGHT: normal; FONT-SIZE: 3em; WIDTH: 80%; BORDER-BOTTOM: #ffd700 thin solid; FONT-STYLE: normal; FONT-VARIANT: normal
}
H2 {
FONT-WEIGHT: normal; FONT-SIZE: 2em; WIDTH: 65%; COLOR: black; BORDER-BOTTOM: #ffd700 thin solid; FONT-STYLE: normal; FONT-VARIANT: normal
}
H3 {
FONT-WEIGHT: normal; FONT-SIZE: 1.5em; WIDTH: 50%; COLOR: black; BORDER-BOTTOM: #ffd700 thin solid; FONT-STYLE: normal; FONT-VARIANT: normal
}
/roboti/istrobot/callis/stopar_pravidla_soubory/menus.htm
0,0 → 1,99
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0032)http://www.robotika.sk/menus.htm -->
<HTML><HEAD><TITLE></TITLE>
<META http-equiv=Content-Type content="text/html; charset=windows-1250">
<META content="MSHTML 6.00.2800.1400" name=GENERATOR>
<SCRIPT language=JavaScript>
<!--
function fwLoadMenus() {
if (window.fw_menu_0) return;
window.fw_menu_0 = new Menu("root",115,21,"Verdana, Arial, Helvetica, sans-serif",12,"#ffff00","#ffffff","#000099","#0066ff");
fw_menu_0.addMenuItem("Novinky","window.open('./contest/novinky.html', 'telo');");
fw_menu_0.addMenuItem("Pravidl&aacute;","window.open('./contest/pravidla.html','telo');");
fw_menu_0.addMenuItem("Roboti","window.open('./contest/roboti.html','telo');");
fw_menu_0.addMenuItem("Poradna","window.open('./contest/poradna.html','telo');");
fw_menu_0.addMenuItem("Arch&iacute;v","window.open('./contest/archive/index.html','telo');");
fw_menu_0.fontWeight="normal";
fw_menu_0.hideOnMouseOut=true;
 
fw_menu_0.writeMenus();
} // fwLoadMenus()
 
//-->
</SCRIPT>
 
<SCRIPT language=JavaScript1.2 src="menus_soubory/fw_menu.js"></SCRIPT>
 
<SCRIPT language=javascript>
<!--
active = new Image(135,80);
active.src = "enveron.jpg";
inactive = new Image(135,80);
inactive.src = "enverof.jpg";
//-->
</SCRIPT>
</HEAD>
<BODY text=#000000 vLink=#ff00ff aLink=#ff0000 link=#0000ff leftMargin=0
background=menus_soubory/fuga1.gif topMargin=0 marginheigh="0" marginwidth="0">
<SCRIPT language=JavaScript1.2>fwLoadMenus();</SCRIPT>
 
<TABLE cellSpacing=0 cellPadding=0 width=135 border=0><!-- fwtable fwsrc="Untitled" fwbase="menu.gif" fwstyle="Dreamweaver" fwdocid = "742308039" fwnested="0" -->
<TBODY>
<TR>
<TD><IMG height=15 alt="" src="menus_soubory/fuga.gif" width=135
border=0></TD></TR>
<TR>
<TD><A onmouseover="window.status='';return true"
href="http://www.robotika.sk/novinky.htm" target=telo><IMG height=40
alt=Novinky src="menus_soubory/novinky.jpg" width=135 border=0></A></TD></TR>
<TR>
<TD><A onmouseover="window.status='';return true"
href="http://www.robotika.sk/domov.htm" target=telo><IMG height=40
alt="O nás" src="menus_soubory/onas.jpg" width=135 border=0></A></TD></TR>
<TR>
<TD><A onmouseover="window.status='';return true"
href="http://www.robotika.sk/projects/projekty.htm" target=telo><IMG
height=40 alt=Projekty src="menus_soubory/pro.jpg" width=135
border=0></A></TD></TR><!-- Publikacie v menu su disabled
<TR>
<TD><IMG SRC="pub.jpg" WIDTH="135" HEIGHT="40" BORDER="0" ALT=""></TD>
</TR>
-->
<TR>
<TD><A onmouseover="window.status='';return true"
href="http://www.robotika.sk/holls/2003/index.html" target=telo><IMG
height=40 alt="Robotické prázdniny" src="menus_soubory/pra.jpg" width=135
border=0></A></TD></TR><!-- Na chvilu vymenime odkazy
<TR>
<TD><A HREF="contest/novinky.html" TARGET="telo" onMouseOver="window.status='';return true"><IMG SRC="menu_r2_c1.gif" WIDTH="135" HEIGHT="40" BORDER="0" ALT="Sutaz"></A></TD>
</TR>
-->
<TR>
<TD><A onmouseover="window.status='';return true"
href="http://www.robotika.sk/contest/index.html" target=telo><IMG
height=40 alt=Sutaz src="menus_soubory/menu_r2_c1.gif" width=135
border=0></A></TD></TR>
<TR>
<TD><A onmouseover="window.status='';return true"
href="http://www.robotika.sk/forum/messageboard.php" target=telo><IMG
height=40 alt="Diskusné fórum" src="menus_soubory/forum.jpg" width=135
border=0></A></TD></TR>
<TR>
<TD><A onmouseover="window.status='';return true"
href="http://www.robotika.sk/kontakt.htm" target=telo><IMG height=40
alt=Kontakt src="menus_soubory/kon.jpg" width=135 border=0></A></TD></TR>
<TR>
<TD><A onmouseover="window.status='';return true"
href="http://www.robotika.sk/linky.htm" target=telo><IMG height=40
alt="Zaujímavé adresy" src="menus_soubory/lin.jpg" width=135
border=0></A></TD></TR>
<TR>
<TD><IMG height=15 alt="" src="menus_soubory/fuga.jpg" width=135
border=0></TD></TR>
<TR>
<TD><A
onmouseover="inactive.src=active.src; window.status='English version';return true"
onmouseout="inactive.src='enverof.jpg'; window.status=''"
href="http://www.robotika.sk/maine.htm" target=_parent><IMG height=80
alt="" src="menus_soubory/enverof.jpg" width=135 border=0
name=inactive></A></TD></TR></TBODY></TABLE></BODY></HTML>
/roboti/istrobot/callis/stopar_pravidla_soubory/menus_soubory/enverof.jpg
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/stopar_pravidla_soubory/menus_soubory/forum.jpg
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/stopar_pravidla_soubory/menus_soubory/fuga.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/stopar_pravidla_soubory/menus_soubory/fuga.jpg
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/stopar_pravidla_soubory/menus_soubory/fuga1.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/stopar_pravidla_soubory/menus_soubory/fw_menu.js
/roboti/istrobot/callis/stopar_pravidla_soubory/menus_soubory/kon.jpg
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/stopar_pravidla_soubory/menus_soubory/lin.jpg
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/stopar_pravidla_soubory/menus_soubory/menu_r2_c1.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/stopar_pravidla_soubory/menus_soubory/novinky.jpg
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/stopar_pravidla_soubory/menus_soubory/onas.jpg
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/stopar_pravidla_soubory/menus_soubory/pra.jpg
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/stopar_pravidla_soubory/menus_soubory/pro.jpg
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/sumo.bak
0,0 → 1,60
#define THRESHOLD 44
#define POJEZD OUT_A
#define VYHAZ OUT_C
 
task main()
{
Wait(500); // 5s
SetSensor(SENSOR_2,SENSOR_LIGHT); // senzor na caru
SetSensor(SENSOR_3, SENSOR_TOUCH); // poloha vyhazovadla
SetSensorMode (SENSOR_3, SENSOR_MODE_PULSE); // koncak bude pocitat pulzy
while (true)
{
PlaySound (SOUND_CLICK);
start k_care;
Wait(1000); // 10s
stop utok;
stop k_care;
stop bumper;
}
}
 
task k_care()
{
SetPower (POJEZD,OUT_HALF/2);
OnFwd (POJEZD); // dojezd k care
while (SENSOR_2 > THRESHOLD);
Off(POJEZD);
OnRev (POJEZD);
SetPower (POJEZD,OUT_FULL);
OnFor (POJEZD, 30);
 
PlaySound (SOUND_LOW_BEEP);
start utok;
start bumper;
}
 
task utok()
{
ClearSensor (SENSOR_3);
while (SENSOR_2 > THRESHOLD); // jed, kdyz nas neco dotlaci k care
stop bumper;
SetPower (POJEZD+VYHAZ,OUT_FULL);
OnRev (POJEZD);
OnFwd(VYHAZ);
while (0 == SENSOR_3);
Off(VYHAZ);
Off(POJEZD);
 
start k_care;
}
 
task bumper()
{
Float(VYHAZ);
ClearSensor (SENSOR_3);
while (0 == SENSOR_3);
OnRev(VYHAZ+POJEZD);
Wait(50);
Off(VYHAZ+POJEZD);
}
/roboti/istrobot/callis/sumo.nqc
0,0 → 1,60
#define THRESHOLD 44
#define POJEZD OUT_A
#define VYHAZ OUT_C
 
task main()
{
Wait(500); // 5s
SetSensor(SENSOR_2,SENSOR_LIGHT); // senzor na caru
SetSensor(SENSOR_3, SENSOR_TOUCH); // poloha vyhazovadla
SetSensorMode (SENSOR_3, SENSOR_MODE_PULSE); // koncak bude pocitat pulzy
while (true)
{
PlaySound (SOUND_CLICK);
start k_care;
Wait(1000); // 10s
stop utok;
stop k_care;
stop bumper;
}
}
 
task k_care()
{
SetPower (POJEZD,OUT_HALF/2);
OnFwd (POJEZD); // dojezd k care
while (SENSOR_2 > THRESHOLD);
Off(POJEZD);
OnRev (POJEZD);
SetPower (POJEZD,OUT_FULL);
OnFor (POJEZD, 30);
 
PlaySound (SOUND_LOW_BEEP);
start utok;
start bumper;
}
 
task utok()
{
ClearSensor (SENSOR_3);
while (SENSOR_2 > THRESHOLD); // jed, kdyz nas neco dotlaci k care
stop bumper;
SetPower (POJEZD+VYHAZ,OUT_FULL);
OnRev (POJEZD);
OnFwd(VYHAZ);
while (0 == SENSOR_3);
Off(VYHAZ);
Off(POJEZD);
 
start k_care;
}
 
task bumper()
{
Float(VYHAZ);
ClearSensor (SENSOR_3);
while (0 == SENSOR_3); // jed, kdyz nekdo narazi do vyhazovace
OnRev(VYHAZ+POJEZD);
Wait(50);
Off(VYHAZ+POJEZD);
}
/roboti/istrobot/callis/sumo2.bak
0,0 → 1,98
#define THRESHOLD 44
#define POJEZD OUT_B
#define VYHAZ OUT_C
 
task main()
{
PlaySound (SOUND_DOUBLE_BEEP);
Wait(500); // 5s podle pravidel
SetSensor(SENSOR_1,SENSOR_LIGHT); // senzor na caru modry
SetSensor(SENSOR_2,SENSOR_LIGHT); // senzor na caru cerveny
SetSensor(SENSOR_3, SENSOR_TOUCH); // poloha vyhazovadla
SetSensorMode (SENSOR_3, SENSOR_MODE_PULSE); // koncak bude pocitat pulzy
while (true)
{
// kazdych 10s dojed k care a zpet do vyckavaci pozice
PlaySound (SOUND_CLICK);
start k_care;
Wait(1000); // 10s
stop k_care;
stop radar;
stop cara;
}
}
 
// udrazeni soupere, pokud drcnul do radaru nebo nas natlacil na caru
task utok()
{
stop radar;
stop cara;
PlaySound (SOUND_FAST_UP);
 
SetPower (POJEZD+VYHAZ,OUT_FULL); // plnou parou vpred
OnFwd(POJEZD);
OnRev(VYHAZ);
ClearSensor (SENSOR_3);
// tlac, dokud se radar 2x neotoci nebo je jeste videt cara
while ( (2 > SENSOR_3) || (SENSOR_2 > THRESHOLD) );
Off(VYHAZ);
Off(POJEZD);
start k_care; // po odrazeni soupere se vrat do vyckavaci pozice
stop utok;
}
 
task k_care() // najed do vyckavaci pozice
{
SetPower (POJEZD,OUT_FULL);
OnRev (POJEZD); // dojezd k care
while (SENSOR_2 < THRESHOLD);
OnFwd (POJEZD);
SetPower (POJEZD,OUT_FULL);
OnFor (POJEZD, 30); // popojed kus od cary
 
PlaySound (SOUND_DOUBLE_BEEP);
start radar;
start cara;
start cara2;
stop k_care;
}
 
task cara() // hlidani natlaceni na caru
{
while (SENSOR_2 < THRESHOLD); // utoc, kdyz nas neco dotlaci k care
start utok;
}
 
task radar() // hlidani najeti do prostoru vyhazovace
{
OnFwd(VYHAZ); // roztoceni radaru
SetPower (VYHAZ,OUT_FULL);
OnFor(VYHAZ,50);
SetPower (VYHAZ,OUT_LOW); // snizeni vykonu po roztoceni
while (true)
{
ClearSensor (SENSOR_3);
OnFwd(VYHAZ); // stouchni do radaru na 400ms
Wait(40);
Float(VYHAZ); // volnobeh
ClearTimer (0);
while (0 == SENSOR_3) // testuje se, zda se do 700ms radar otoci
{
if (Timer (0) > 7) start utok; // utoc, pokud je zablokovan radar
}
}
}
 
task cara2() // hlidani cary ze strany "radaru"
{
while (SENSOR_1 > THRESHOLD); // cekej na caru
stop radar; // vsechno zastav
stop cara;
stop k_care;
stop utok;
Off(POJEZD);
Off(VYHAZ);
start k_care; // snaz se dojet k care na druhe strane
stop cara2;
}
/roboti/istrobot/callis/sumo2.nqc
0,0 → 1,98
#define THRESHOLD 44
#define POJEZD OUT_B
#define VYHAZ OUT_C
 
task main()
{
PlaySound (SOUND_DOUBLE_BEEP);
Wait(500); // 5s podle pravidel
SetSensor(SENSOR_1,SENSOR_LIGHT); // senzor na caru modry
SetSensor(SENSOR_2,SENSOR_LIGHT); // senzor na caru cerveny
SetSensor(SENSOR_3, SENSOR_TOUCH); // poloha vyhazovadla
SetSensorMode (SENSOR_3, SENSOR_MODE_PULSE); // koncak bude pocitat pulzy
while (true)
{
// kazdych 10s dojed k care a zpet do vyckavaci pozice
PlaySound (SOUND_CLICK);
start k_care;
Wait(1000); // 10s
stop k_care;
stop radar;
stop cara;
}
}
 
// udrazeni soupere, pokud drcnul do radaru nebo nas natlacil na caru
task utok()
{
stop radar;
stop cara;
PlaySound (SOUND_FAST_UP);
 
SetPower (POJEZD+VYHAZ,OUT_FULL); // plnou parou vpred
OnFwd(POJEZD);
OnRev(VYHAZ);
ClearSensor (SENSOR_3);
// tlac, dokud se radar 2x neotoci nebo je jeste videt cara
while ( (2 > SENSOR_3) || (SENSOR_2 > THRESHOLD) );
Off(VYHAZ);
Off(POJEZD);
start k_care; // po odrazeni soupere se vrat do vyckavaci pozice
stop utok;
}
 
task k_care() // najed do vyckavaci pozice
{
SetPower (POJEZD,OUT_FULL);
OnRev (POJEZD); // dojezd k care
while (SENSOR_2 < THRESHOLD);
OnFwd (POJEZD);
SetPower (POJEZD,OUT_FULL);
OnFor (POJEZD, 50); // popojed kus od cary
 
PlaySound (SOUND_DOUBLE_BEEP);
start radar;
start cara;
start cara2;
stop k_care;
}
 
task cara() // hlidani natlaceni na caru
{
while (SENSOR_2 < THRESHOLD); // utoc, kdyz nas neco dotlaci k care
start utok;
}
 
task radar() // hlidani najeti do prostoru vyhazovace
{
OnFwd(VYHAZ); // roztoceni radaru
SetPower (VYHAZ,OUT_FULL);
OnFor(VYHAZ,50);
SetPower (VYHAZ,OUT_LOW); // snizeni vykonu po roztoceni
while (true)
{
ClearSensor (SENSOR_3);
OnFwd(VYHAZ); // stouchni do radaru na 400ms
Wait(40);
Float(VYHAZ); // volnobeh
ClearTimer (0);
while (0 == SENSOR_3) // testuje se, zda se do 700ms radar otoci
{
if (Timer (0) > 7) start utok; // utoc, pokud je zablokovan radar
}
}
}
 
task cara2() // hlidani cary ze strany "radaru"
{
while (SENSOR_1 > THRESHOLD); // cekej na caru
stop radar; // vsechno zastav
stop cara;
stop k_care;
stop utok;
Off(POJEZD);
Off(VYHAZ);
start k_care; // snaz se dojet k care na druhe strane
stop cara2;
}
/roboti/istrobot/callis/sumo_bumper.bak
0,0 → 1,152
#define THRESHOLD 44 // rozhodovaci uroven mezi cernou a bilou
#define RED_WHITE 60 // maximum bile na cervenem senzoru
#define MLEFT OUT_A
#define MRIGHT OUT_C
#define BLUE SENSOR_3
#define RED SENSOR_2
#define BBUMPER SENSOR_1
#define START_ALL start blue_bumper; start cara_cervena; start cara_modra;
 
int semafor;
 
task main()
{
PlaySound (SOUND_DOUBLE_BEEP);
Wait(500); // 5s podle pravidel
SetSensor(BLUE,SENSOR_LIGHT); // senzor na caru modry
SetSensor(RED,_SENSOR_CFG(SENSOR_TYPE_LIGHT, SENSOR_MODE_RAW)); // senzor na caru cerveny
SetSensor(BBUMPER, SENSOR_TOUCH); // naraznik modry
SetSensorMode (BBUMPER, SENSOR_MODE_BOOL); // koncak bude ...
SetPower (MLEFT,OUT_FULL);
SetPower (MRIGHT,OUT_FULL);
SetDirection(MLEFT, OUT_FWD);
SetDirection(MRIGHT, OUT_FWD);
SetTxPower(TX_POWER_HI); // aby daleko videl
 
OnFwd (MLEFT); // cuknuti na shozeni radlic
OnFwd (MRIGHT);
Wait(50);
OnRev (MLEFT);
OnRev (MRIGHT);
Wait(50); // popojed kus
Off(MLEFT);
Off(MRIGHT);
 
start blue_bumper;
start cervena;
start cara_modra;
start stochastika;
}
 
task stochastika()
{
while(true) Zatoc();
}
 
 
void GoBlue()
{
OnFwd (MLEFT);
OnFwd (MRIGHT);
Wait(300); // popojed kus
Off(MLEFT);
Off(MRIGHT);
}
 
void GoRed()
{
OnRev (MLEFT);
OnRev (MRIGHT);
Wait(300); // popojed kus
Off(MLEFT);
Off(MRIGHT);
}
 
void Obrat()
{
OnRev (MLEFT);
OnFwd (MRIGHT);
Wait(150); // popojed kus
Off(MLEFT);
Off(MRIGHT);
}
 
void Zatoc()
{
switch (Random(1))
{
case 0:
OnRev (MLEFT);
OnFwd (MRIGHT);
Wait(50);
break;
case 1:
OnFwd (MLEFT);
OnRev (MRIGHT);
Wait(50);
break;
case 2:
OnRev (MLEFT);
OnRev (MRIGHT);
Wait(70);
break;
case 3:
OnFwd (MLEFT);
OnFwd (MRIGHT);
Wait(70);
break;
}
}
 
task blue_bumper() // naraznik na modre strane
{
while(true)
{
if (1 == BBUMPER) // utoc, kdyz neco narazi do narazniku
{
stop stochastika;
PlaySound (SOUND_FAST_UP);
OnFwd (MLEFT);
OnFwd (MRIGHT);
Wait(50);
}
}
}
 
task cervena() // dalkovy sensor
{
int lastlevel;
 
lastlevel = 0;
while(true)
{
SendMessage(0);
if(lastlevel > SENSOR_2)
{
// Close to something
PlaySound(SOUND_FAST_UP);
stop stochastika;
Obrat();
start stochastika;
}
lastlevel = SENSOR_2;
lastlevel -= THRESHOLD;
}
}
 
task cara_modra() // hlidani cary
{
while(true)
{
if (BLUE < THRESHOLD) // cekej na caru
{
PlaySound (SOUND_DOUBLE_BEEP);
stop blue_bumper;
stop stochastika;
GoRed();
start blue_bumper;
start stochastika;
}
}
}
 
/roboti/istrobot/callis/sumo_bumper.nqc
0,0 → 1,153
#define THRESHOLD 44 // rozhodovaci uroven mezi cernou a bilou
#define RED_WHITE 60 // maximum bile na cervenem senzoru
#define MLEFT OUT_A
#define MRIGHT OUT_C
#define BLUE SENSOR_3
#define RED SENSOR_2
#define BBUMPER SENSOR_1
#define START_ALL start blue_bumper; start cara_cervena; start cara_modra;
 
int semafor;
 
task main()
{
PlaySound (SOUND_DOUBLE_BEEP);
Wait(500); // 5s podle pravidel
SetSensor(BLUE,SENSOR_LIGHT); // senzor na caru modry
SetSensor(RED,_SENSOR_CFG(SENSOR_TYPE_LIGHT, SENSOR_MODE_RAW)); // senzor na caru cerveny
SetSensor(BBUMPER, SENSOR_TOUCH); // naraznik modry
SetSensorMode (BBUMPER, SENSOR_MODE_BOOL); // koncak bude ...
SetPower (MLEFT,OUT_FULL);
SetPower (MRIGHT,OUT_FULL);
SetDirection(MLEFT, OUT_FWD);
SetDirection(MRIGHT, OUT_FWD);
SetTxPower(TX_POWER_HI); // aby daleko videl
 
OnFwd (MLEFT); // cuknuti na shozeni radlic
OnFwd (MRIGHT);
Wait(50);
OnRev (MLEFT);
OnRev (MRIGHT);
Wait(50); // popojed kus
Off(MLEFT);
Off(MRIGHT);
 
start blue_bumper;
start cervena;
start cara_modra;
start stochastika;
}
 
task stochastika()
{
while(true) Zatoc();
}
 
 
void GoBlue()
{
OnFwd (MLEFT);
OnFwd (MRIGHT);
Wait(300); // popojed kus
Off(MLEFT);
Off(MRIGHT);
}
 
void GoRed()
{
OnRev (MLEFT);
OnRev (MRIGHT);
Wait(300); // popojed kus
Off(MLEFT);
Off(MRIGHT);
}
 
void Obrat()
{
OnRev (MLEFT);
OnFwd (MRIGHT);
Wait(150); // popojed kus
Off(MLEFT);
Off(MRIGHT);
}
 
void Zatoc()
{
switch (Random(1))
{
case 0:
OnRev (MLEFT);
OnFwd (MRIGHT);
Wait(50);
break;
case 1:
OnFwd (MLEFT);
OnRev (MRIGHT);
Wait(50);
break;
case 2:
OnRev (MLEFT);
OnRev (MRIGHT);
Wait(70);
break;
case 3:
OnFwd (MLEFT);
OnFwd (MRIGHT);
Wait(70);
break;
}
}
 
task blue_bumper() // naraznik na modre strane
{
while(true)
{
if (1 == BBUMPER) // utoc, kdyz neco narazi do narazniku
{
stop stochastika;
PlaySound (SOUND_FAST_UP);
OnFwd (MLEFT);
OnFwd (MRIGHT);
Wait(50);
}
}
}
 
task cervena() // dalkovy sensor
{
int lastlevel;
 
lastlevel = 0;
while(true)
{
SendMessage(0);
if(lastlevel > SENSOR_2)
{
// Close to something
PlaySound(SOUND_FAST_UP);
stop stochastika;
Obrat();
Wait(50);
start stochastika;
}
lastlevel = SENSOR_2;
lastlevel -= THRESHOLD;
}
}
 
task cara_modra() // hlidani cary
{
while(true)
{
if (BLUE < THRESHOLD) // cekej na caru
{
PlaySound (SOUND_DOUBLE_BEEP);
stop blue_bumper;
stop stochastika;
GoRed();
start blue_bumper;
start stochastika;
}
}
}
 
/roboti/istrobot/callis/sumo_kaklik.nqc
0,0 → 1,158
#define THRESHOLD 44 // rozhodovaci uroven mezi cernou a bilou
#define RED_WHITE 60 // maximum bile na cervenem senzoru
#define MLEFT OUT_A
#define MRIGHT OUT_C
#define BLUE SENSOR_3
#define RED SENSOR_2
#define BBUMPER SENSOR_1
#define START_ALL start blue_bumper; start cara_cervena; start cara_modra;
 
int semafor;
 
task main()
{
PlaySound (SOUND_DOUBLE_BEEP);
Wait(500); // 5s podle pravidel
SetSensor(BLUE,SENSOR_LIGHT); // senzor na caru modry
SetSensor(RED,_SENSOR_CFG(SENSOR_TYPE_LIGHT, SENSOR_MODE_RAW)); // senzor na caru cerveny
SetSensor(BBUMPER, SENSOR_TOUCH); // naraznik modry
SetSensorMode (BBUMPER, SENSOR_MODE_BOOL); // koncak bude ...
SetPower (MLEFT,OUT_FULL);
SetPower (MRIGHT,OUT_FULL);
SetDirection(MLEFT, OUT_FWD);
SetDirection(MRIGHT, OUT_FWD);
SetTxPower(TX_POWER_HI); // aby daleko videl
 
OnFwd (MLEFT); // cuknuti na shozeni radlic
OnFwd (MRIGHT);
Wait(20);
OnRev (MLEFT);
OnRev (MRIGHT);
Wait(70); // popojed kus
Off(MLEFT);
Off(MRIGHT);
 
start blue_bumper;
start cervena;
start cara_modra;
start stochastika;
}
 
task stochastika()
{
while(true) Zatoc();
}
 
 
void GoBlue()
{
OnFwd (MLEFT);
OnFwd (MRIGHT);
Wait(300); // popojed kus
Off(MLEFT);
Off(MRIGHT);
}
 
void GoRed()
{
OnRev (MLEFT);
OnRev (MRIGHT);
Wait(300); // popojed kus
Off(MLEFT);
Off(MRIGHT);
}
 
void Obrat()
{
OnRev (MLEFT);
OnFwd (MRIGHT);
Wait(125); // popojed kus
Off(MLEFT);
Off(MRIGHT);
}
 
void Zatoc()
{
switch (Random(1))
{
case 0:
OnRev (MLEFT);
OnFwd (MRIGHT);
Wait(50);
break;
case 1:
OnFwd (MLEFT);
OnRev (MRIGHT);
Wait(50);
break;
case 2:
OnRev (MLEFT);
OnRev (MRIGHT);
Wait(70);
break;
case 3:
OnFwd (MLEFT);
OnFwd (MRIGHT);
Wait(70);
break;
}
}
 
task blue_bumper() // naraznik na modre strane
{
while(true)
{
if (1 == BBUMPER) // utoc, kdyz neco narazi do narazniku
{
stop stochastika;
PlaySound (SOUND_FAST_UP);
OnFwd (MLEFT);
OnFwd (MRIGHT);
Wait(50);
}
}
}
 
task cervena() // dalkovy sensor
{
int lastlevel;
 
lastlevel = 0;
while(true)
{
SendMessage(0);
if(lastlevel > SENSOR_2)
{
// Close to something
PlaySound(SOUND_FAST_UP);
stop stochastika;
OnRev (MLEFT);
OnRev (MRIGHT);
Wait(10); // popojed kus
Off(MLEFT);
Off(MRIGHT);
Obrat();
Wait(50);
start stochastika;
}
lastlevel = SENSOR_2;
lastlevel -= THRESHOLD;
}
}
 
task cara_modra() // hlidani cary
{
while(true)
{
if (BLUE < THRESHOLD) // cekej na caru
{
PlaySound (SOUND_DOUBLE_BEEP);
stop blue_bumper;
stop stochastika;
GoRed();
start blue_bumper;
start stochastika;
}
}
}
 
/roboti/istrobot/callis/sumo_kaklik2.bak
0,0 → 1,158
#define THRESHOLD 44 // rozhodovaci uroven mezi cernou a bilou
#define RED_WHITE 60 // maximum bile na cervenem senzoru
#define MLEFT OUT_A
#define MRIGHT OUT_C
#define BLUE SENSOR_3
#define RED SENSOR_2
#define BBUMPER SENSOR_1
#define START_ALL start blue_bumper; start cara_cervena; start cara_modra;
 
int semafor;
 
task main()
{
PlaySound (SOUND_DOUBLE_BEEP);
Wait(500); // 5s podle pravidel
SetSensor(BLUE,SENSOR_LIGHT); // senzor na caru modry
SetSensor(RED,_SENSOR_CFG(SENSOR_TYPE_LIGHT, SENSOR_MODE_RAW)); // senzor na caru cerveny
SetSensor(BBUMPER, SENSOR_TOUCH); // naraznik modry
SetSensorMode (BBUMPER, SENSOR_MODE_BOOL); // koncak bude ...
SetPower (MLEFT,OUT_FULL);
SetPower (MRIGHT,OUT_FULL);
SetDirection(MLEFT, OUT_FWD);
SetDirection(MRIGHT, OUT_FWD);
SetTxPower(TX_POWER_HI); // aby daleko videl
 
OnFwd (MLEFT); // cuknuti na shozeni radlic
OnFwd (MRIGHT);
Wait(20);
OnRev (MLEFT);
OnRev (MRIGHT);
Wait(70);
Off(MLEFT);
Off(MRIGHT);
 
start blue_bumper;
start cervena;
start cara_modra;
start stochastika;
}
 
task stochastika() // nahodne otaceni
{
while(true) Zatoc();
}
 
void GoBlue()
{
OnFwd (MLEFT);
OnFwd (MRIGHT);
Wait(300); // popojed kus
Off(MLEFT);
Off(MRIGHT);
}
 
void GoRed()
{
OnRev (MLEFT);
OnRev (MRIGHT);
Wait(300); // popojed kus
Off(MLEFT);
Off(MRIGHT);
}
 
void Obrat()
{
OnRev (MLEFT);
OnFwd (MRIGHT);
Wait(125); // popojed kus
Off(MLEFT);
Off(MRIGHT);
}
 
void Zatoc()
{
switch (Random(1))
{
case 0:
OnRev (MLEFT);
OnFwd (MRIGHT);
Wait(50);
break;
case 1:
OnFwd (MLEFT);
OnRev (MRIGHT);
Wait(50);
break;
case 2:
OnRev (MLEFT);
OnRev (MRIGHT);
Wait(70);
break;
case 3:
OnFwd (MLEFT);
OnFwd (MRIGHT);
Wait(70);
break;
}
}
 
task blue_bumper() // naraznik na modre strane
{
while(true)
{
if (1 == BBUMPER) // utoc, kdyz neco narazi do narazniku
{
stop stochastika;
PlaySound (SOUND_FAST_UP);
OnFwd (MLEFT);
OnFwd (MRIGHT);
Wait(50);
}
}
}
 
task cervena() // dalkovy sensor
{
int lastlevel;
 
lastlevel = 0;
while(true)
{
SendMessage(0);
if(lastlevel > SENSOR_2)
{
PlaySound(SOUND_FAST_UP);
stop stochastika;
OnRev (MLEFT);
OnRev (MRIGHT);
Wait(10); // popojed kus
Off(MLEFT);
Off(MRIGHT);
Obrat();
GoBlue();
start stochastika;
}
lastlevel = SENSOR_2;
lastlevel -= THRESHOLD;
}
}
 
task cara_modra() // hlidani cary
{
while(true)
{
if (BLUE < THRESHOLD) // cekej na caru
{
PlaySound (SOUND_DOUBLE_BEEP);
stop blue_bumper;
stop stochastika;
stop cervena;
GoRed();
start cervena;
start blue_bumper;
start stochastika;
}
}
}
 
/roboti/istrobot/callis/sumo_kaklik2.nqc
0,0 → 1,161
#define THRESHOLD 44 // rozhodovaci uroven mezi cernou a bilou
#define RED_WHITE 60 // maximum bile na cervenem senzoru
#define MLEFT OUT_A
#define MRIGHT OUT_C
#define BLUE SENSOR_3
#define RED SENSOR_2
#define BBUMPER SENSOR_1
#define START_ALL start blue_bumper; start cara_cervena; start cara_modra;
 
int semafor;
 
task main()
{
PlaySound (SOUND_DOUBLE_BEEP);
Wait(500); // 5s podle pravidel
SetSensor(BLUE,SENSOR_LIGHT); // senzor na caru modry
SetSensor(RED,_SENSOR_CFG(SENSOR_TYPE_LIGHT, SENSOR_MODE_RAW)); // senzor na caru cerveny
SetSensor(BBUMPER, SENSOR_TOUCH); // naraznik modry
SetSensorMode (BBUMPER, SENSOR_MODE_BOOL); // koncak bude ...
SetPower (MLEFT,OUT_FULL);
SetPower (MRIGHT,OUT_FULL);
SetDirection(MLEFT, OUT_FWD);
SetDirection(MRIGHT, OUT_FWD);
SetTxPower(TX_POWER_HI); // aby daleko videl
 
OnFwd (MLEFT); // cuknuti na shozeni radlic
OnFwd (MRIGHT);
Wait(20);
OnRev (MLEFT);
OnRev (MRIGHT);
Wait(70);
Off(MLEFT);
Off(MRIGHT);
 
Wait(20); // pockej na ustaleni narazniku
 
// rozjed tasky
start blue_bumper;
start cervena;
start cara_modra;
start stochastika;
}
 
task stochastika() // nahodne otaceni
{
while(true) Zatoc();
}
 
void GoBlue() // pojezd ve smeru modreho senzoru
{
OnFwd (MLEFT);
OnFwd (MRIGHT);
Wait(300); // popojed kus
Off(MLEFT);
Off(MRIGHT);
}
 
void GoRed() // pojezd ve smeru cerveneho senzoru
{
OnRev (MLEFT);
OnRev (MRIGHT);
Wait(300); // popojed kus
Off(MLEFT);
Off(MRIGHT);
}
 
void Obrat() // obrat o 180 stupnu
{
OnRev (MLEFT);
OnFwd (MRIGHT);
Wait(125); // popojed kus
Off(MLEFT);
Off(MRIGHT);
}
 
void Zatoc() // nahodne zatoceni, nebo popojeti
{
switch (Random(1))
{
case 0:
OnRev (MLEFT);
OnFwd (MRIGHT);
Wait(50);
break;
case 1:
OnFwd (MLEFT);
OnRev (MRIGHT);
Wait(50);
break;
case 2:
OnRev (MLEFT);
OnRev (MRIGHT);
Wait(70);
break;
case 3:
OnFwd (MLEFT);
OnFwd (MRIGHT);
Wait(70);
break;
}
}
 
task blue_bumper() // naraznik na modre strane
{
while(true)
{
if (1 == BBUMPER) // utoc, kdyz neco narazi do narazniku
{
stop stochastika;
PlaySound (SOUND_FAST_UP);
OnFwd (MLEFT);
OnFwd (MRIGHT);
Wait(50);
}
}
}
 
task cervena() // dalkovy sensor
{
int lastlevel;
 
lastlevel = 0;
while(true)
{
SendMessage(0);
if(lastlevel > SENSOR_2)
{
PlaySound(SOUND_FAST_UP);
stop stochastika;
OnRev (MLEFT);
OnRev (MRIGHT);
Wait(10); // popojed kus
Off(MLEFT);
Off(MRIGHT);
Obrat();
GoBlue();
start stochastika;
}
lastlevel = SENSOR_2;
lastlevel -= THRESHOLD;
}
}
 
task cara_modra() // hlidani cary
{
while(true)
{
if (BLUE < THRESHOLD) // cekej na caru
{
PlaySound (SOUND_DOUBLE_BEEP);
stop blue_bumper;
stop stochastika;
stop cervena;
GoRed();
start cervena;
start blue_bumper;
start stochastika;
}
}
}
 
/roboti/istrobot/callis/sumo_zataceci.bak
0,0 → 1,160
#define THRESHOLD 44 // rozhodovaci uroven mezi cernou a bilou
#define RED_WHITE 60 // maximum bile na cervenem senzoru
#define MLEFT OUT_A
#define MRIGHT OUT_C
#define BLUE SENSOR_1
#define RED SENSOR_2
#define BBUMPER SENSOR_3
#define START_ALL start blue_bumper; start cara_cervena; start cara_modra;
 
int semafor;
 
task main()
{
PlaySound (SOUND_DOUBLE_BEEP);
Wait(500); // 5s podle pravidel
SetSensor(BLUE,SENSOR_LIGHT); // senzor na caru modry
SetSensor(RED,SENSOR_LIGHT); // senzor na caru cerveny
SetSensor(BBUMPER, SENSOR_TOUCH); // naraznik modry
SetSensorMode (BBUMPER, SENSOR_MODE_BOOL); // koncak bude ...
SetPower (MLEFT,OUT_FULL);
SetPower (MRIGHT,OUT_FULL);
SetDirection(MLEFT, OUT_FWD);
SetDirection(MRIGHT, OUT_FWD);
 
k_care();
start red_bumper;
start blue_bumper;
start cara_cervena;
start cara_modra;
semafor = false;
 
ClearTimer (0);
start stochastika;
}
 
task stochastika()
{
while (true)
{
Wait(500);
if (semafor) start blue_bumper;
 
PlaySound (SOUND_CLICK);
 
OnFwd (MLEFT); // dojezd k care
OnFwd (MRIGHT); // dojezd k care
while (BLUE > THRESHOLD);
GoRed();
OnRev (MLEFT);
OnRev (MRIGHT);
Wait(100); // popojed kus
Zatoc();
 
ClearTimer (0);
}
}
 
void GoBlue()
{
OnFwd (MLEFT);
OnFwd (MRIGHT);
Wait(100); // popojed kus
Off(MLEFT);
Off(MRIGHT);
}
 
void GoRed()
{
OnRev (MLEFT);
OnRev (MRIGHT);
Wait(100); // popojed kus
Off(MLEFT);
Off(MRIGHT);
}
 
void Zatoc()
{
switch (Random(2))
{
case 0:
OnRev (MLEFT);
OnFwd (MRIGHT);
break;
case 1:
OnFwd (MLEFT);
OnRev (MRIGHT);
break;
case 2:
OnRev (MLEFT);
OnRev (MRIGHT);
}
Wait(100); // popojed kus
Off(MLEFT);
Off(MRIGHT);
}
 
void k_care() // najed do vyckavaci pozice
{
OnFwd (MLEFT); // dojezd k care
OnFwd (MRIGHT); // dojezd k care
while (BLUE > THRESHOLD);
GoRed();
OnRev (MLEFT);
OnRev (MRIGHT);
Wait(100); // popojed kus
Off(MLEFT);
Off(MRIGHT);
}
 
task red_bumper()
{
while(true)
{
while (100 != RED); // utoc, kdyz neco narazi do narazniku
PlaySound (SOUND_FAST_UP);
stop stochastika;
Zatoc();
start stochastika;
if (semafor) start blue_bumper;
}
}
 
task blue_bumper()
{
semafor = false;
while (0 == BBUMPER); // utoc, kdyz neco narazi do narazniku
PlaySound (SOUND_FAST_UP);
OnFwd (MLEFT);
OnFwd (MRIGHT);
semafor = true;
}
 
task cara_cervena() // hlidani natlaceni na caru
{
while(true)
{
while (RED < THRESHOLD || RED > RED_WHITE); // utoc, kdyz nas neco dotlaci k care
Wait(2); // kontrola za 20ms, aby se to nespletlo s naraznikem
if (RED > THRESHOLD && RED < RED_WHITE)
{
PlaySound (SOUND_DOUBLE_BEEP);
GoBlue();
}
}
}
 
task cara_modra() // hlidani cary
{
while(true)
{
while (BLUE > THRESHOLD); // cekej na caru
stop cara_cervena;
PlaySound (SOUND_DOUBLE_BEEP);
GoRed();
if (semafor) start blue_bumper;
start cara_cervena;
}
}
 
/roboti/istrobot/callis/sumo_zataceci.nqc
0,0 → 1,165
#define THRESHOLD 44 // rozhodovaci uroven mezi cernou a bilou
#define RED_WHITE 60 // maximum bile na cervenem senzoru
#define MLEFT OUT_A
#define MRIGHT OUT_C
#define BLUE SENSOR_1
#define RED SENSOR_2
#define BBUMPER SENSOR_3
#define START_ALL start blue_bumper; start cara_cervena; start cara_modra;
 
int semafor;
 
task main()
{
PlaySound (SOUND_DOUBLE_BEEP);
Wait(500); // 5s podle pravidel
SetSensor(BLUE,SENSOR_LIGHT); // senzor na caru modry
SetSensor(RED,SENSOR_LIGHT); // senzor na caru cerveny
SetSensor(BBUMPER, SENSOR_TOUCH); // naraznik modry
SetSensorMode (BBUMPER, SENSOR_MODE_BOOL); // koncak bude ...
SetPower (MLEFT,OUT_FULL);
SetPower (MRIGHT,OUT_FULL);
SetDirection(MLEFT, OUT_FWD);
SetDirection(MRIGHT, OUT_FWD);
 
// k_care();
OnFwd (MLEFT); // dojezd k care
OnFwd (MRIGHT); // dojezd k care
Wait(50);
GoRed();
 
start red_bumper;
start blue_bumper;
start cara_cervena;
start cara_modra;
semafor = false;
 
ClearTimer (0);
start stochastika;
}
 
task stochastika()
{
while (true)
{
Wait(500);
if (semafor) start blue_bumper;
 
PlaySound (SOUND_CLICK);
 
OnFwd (MLEFT); // dojezd k care
OnFwd (MRIGHT); // dojezd k care
while (BLUE > THRESHOLD);
GoRed();
OnRev (MLEFT);
OnRev (MRIGHT);
Wait(100); // popojed kus
Zatoc();
 
ClearTimer (0);
}
}
 
void GoBlue()
{
OnFwd (MLEFT);
OnFwd (MRIGHT);
Wait(100); // popojed kus
Off(MLEFT);
Off(MRIGHT);
}
 
void GoRed()
{
OnRev (MLEFT);
OnRev (MRIGHT);
Wait(100); // popojed kus
Off(MLEFT);
Off(MRIGHT);
}
 
void Zatoc()
{
switch (Random(2))
{
case 0:
OnRev (MLEFT);
OnFwd (MRIGHT);
break;
case 1:
OnFwd (MLEFT);
OnRev (MRIGHT);
break;
case 2:
OnRev (MLEFT);
OnRev (MRIGHT);
}
Wait(100); // popojed kus
Off(MLEFT);
Off(MRIGHT);
}
 
void k_care() // najed do vyckavaci pozice
{
OnFwd (MLEFT); // dojezd k care
OnFwd (MRIGHT); // dojezd k care
while (BLUE > THRESHOLD);
GoRed();
OnRev (MLEFT);
OnRev (MRIGHT);
Wait(100); // popojed kus
Off(MLEFT);
Off(MRIGHT);
}
 
task red_bumper()
{
while(true)
{
while (100 != RED); // utoc, kdyz neco narazi do narazniku
PlaySound (SOUND_FAST_UP);
stop stochastika;
GoRed();
//!!! Zatoc();
start stochastika;
if (semafor) start blue_bumper;
}
}
 
task blue_bumper()
{
semafor = false;
while (0 == BBUMPER); // utoc, kdyz neco narazi do narazniku
PlaySound (SOUND_FAST_UP);
OnFwd (MLEFT);
OnFwd (MRIGHT);
semafor = true;
}
 
task cara_cervena() // hlidani natlaceni na caru
{
while(true)
{
while (RED < THRESHOLD || RED > RED_WHITE); // utoc, kdyz nas neco dotlaci k care
Wait(2); // kontrola za 20ms, aby se to nespletlo s naraznikem
if (RED > THRESHOLD && RED < RED_WHITE)
{
PlaySound (SOUND_DOUBLE_BEEP);
GoBlue();
}
}
}
 
task cara_modra() // hlidani cary
{
while(true)
{
while (BLUE > THRESHOLD); // cekej na caru
stop cara_cervena;
PlaySound (SOUND_DOUBLE_BEEP);
GoRed();
if (semafor) start blue_bumper;
start cara_cervena;
}
}
 
/roboti/istrobot/callis/sumo_zataceci2.bak
0,0 → 1,164
#define THRESHOLD 44 // rozhodovaci uroven mezi cernou a bilou
#define RED_WHITE 60 // maximum bile na cervenem senzoru
#define MLEFT OUT_A
#define MRIGHT OUT_C
#define BLUE SENSOR_1
#define RED SENSOR_2
#define BBUMPER SENSOR_3
#define START_ALL start blue_bumper; start cara_cervena; start cara_modra;
 
int semafor;
 
task main()
{
PlaySound (SOUND_DOUBLE_BEEP);
Wait(500); // 5s podle pravidel
SetSensor(BLUE,SENSOR_LIGHT); // senzor na caru modry
SetSensor(RED,SENSOR_LIGHT); // senzor na caru cerveny
SetSensor(BBUMPER, SENSOR_TOUCH); // naraznik modry
SetSensorMode (BBUMPER, SENSOR_MODE_BOOL); // koncak bude ...
SetPower (MLEFT,OUT_FULL);
SetPower (MRIGHT,OUT_FULL);
SetDirection(MLEFT, OUT_FWD);
SetDirection(MRIGHT, OUT_FWD);
 
OnFwd (MLEFT); // cuknuti na shozeni radlic
OnFwd (MRIGHT);
Wait(50);
GoRed();
 
start red_bumper;
start blue_bumper;
start cara_cervena;
start cara_modra;
start stochastika;
}
 
task stochastika()
{
while(true) Zatoc();
}
 
 
void GoBlue()
{
OnFwd (MLEFT);
OnFwd (MRIGHT);
Wait(300); // popojed kus
Off(MLEFT);
Off(MRIGHT);
}
 
void GoRed()
{
OnRev (MLEFT);
OnRev (MRIGHT);
Wait(300); // popojed kus
Off(MLEFT);
Off(MRIGHT);
}
 
void Zatoc()
{
switch (Random(3))
{
case 0:
OnRev (MLEFT);
OnFwd (MRIGHT);
Wait(200);
break;
case 1:
OnFwd (MLEFT);
OnRev (MRIGHT);
Wait(200);
break;
case 2:
OnRev (MLEFT);
OnRev (MRIGHT);
Wait(20);
break;
case 3:
OnFwd (MLEFT);
OnFwd (MRIGHT);
Wait(20);
break;
}
}
 
void k_care() // najed do vyckavaci pozice
{
OnFwd (MLEFT); // dojezd k care
OnFwd (MRIGHT); // dojezd k care
while (BLUE > THRESHOLD);
GoRed();
OnRev (MLEFT);
OnRev (MRIGHT);
Wait(100); // popojed kus
Off(MLEFT);
Off(MRIGHT);
}
 
task red_bumper()
{
while(true)
{
if (100 == RED) // utoc, kdyz neco narazi do narazniku
{
PlaySound (SOUND_FAST_UP);
stop stochastika;
OnRev (MLEFT);
OnRev (MRIGHT);
Wait(50);
}
}
}
 
task blue_bumper()
{
while(true)
{
if (1 == BBUMPER) // utoc, kdyz neco narazi do narazniku
{
PlaySound (SOUND_FAST_UP);
stop stochastika;
OnFwd (MLEFT);
OnFwd (MRIGHT);
Wait(50);
}
}
}
 
task cara_cervena() // hlidani natlaceni na caru
{
while(true)
{
if ((RED > THRESHOLD) && (RED < RED_WHITE))
{
Wait(2);
if ((RED > THRESHOLD) && (RED < RED_WHITE))
{
PlaySound (SOUND_DOUBLE_BEEP);
stop red_bumper;
GoBlue();
start red_bumper;
start stochastika;
}
}
}
}
 
task cara_modra() // hlidani cary
{
while(true)
{
if (BLUE < THRESHOLD) // cekej na caru
{
PlaySound (SOUND_DOUBLE_BEEP);
stop blue_bumper;
GoRed();
start blue_bumper;
start stochastika;
}
}
}
 
/roboti/istrobot/callis/sumo_zataceci2.nqc
0,0 → 1,151
#define THRESHOLD 44 // rozhodovaci uroven mezi cernou a bilou
#define RED_WHITE 60 // maximum bile na cervenem senzoru
#define MLEFT OUT_A
#define MRIGHT OUT_C
#define BLUE SENSOR_1
#define RED SENSOR_2
#define BBUMPER SENSOR_3
#define START_ALL start blue_bumper; start cara_cervena; start cara_modra;
 
int semafor;
 
task main()
{
PlaySound (SOUND_DOUBLE_BEEP);
Wait(500); // 5s podle pravidel
SetSensor(BLUE,SENSOR_LIGHT); // senzor na caru modry
SetSensor(RED,SENSOR_LIGHT); // senzor na caru cerveny
SetSensor(BBUMPER, SENSOR_TOUCH); // naraznik modry
SetSensorMode (BBUMPER, SENSOR_MODE_BOOL); // koncak bude ...
SetPower (MLEFT,OUT_FULL);
SetPower (MRIGHT,OUT_FULL);
SetDirection(MLEFT, OUT_FWD);
SetDirection(MRIGHT, OUT_FWD);
 
OnFwd (MLEFT); // cuknuti na shozeni radlic
OnFwd (MRIGHT);
Wait(50);
GoRed();
 
start red_bumper;
start blue_bumper;
start cara_cervena;
start cara_modra;
start stochastika;
}
 
task stochastika()
{
while(true) Zatoc();
}
 
 
void GoBlue()
{
OnFwd (MLEFT);
OnFwd (MRIGHT);
Wait(300); // popojed kus
Off(MLEFT);
Off(MRIGHT);
}
 
void GoRed()
{
OnRev (MLEFT);
OnRev (MRIGHT);
Wait(300); // popojed kus
Off(MLEFT);
Off(MRIGHT);
}
 
void Zatoc()
{
switch (Random(3))
{
case 0:
OnRev (MLEFT);
OnFwd (MRIGHT);
Wait(200);
break;
case 1:
OnFwd (MLEFT);
OnRev (MRIGHT);
Wait(200);
break;
case 2:
OnRev (MLEFT);
OnRev (MRIGHT);
Wait(20);
break;
case 3:
OnFwd (MLEFT);
OnFwd (MRIGHT);
Wait(20);
break;
}
}
 
task red_bumper()
{
while(true)
{
if (100 == RED) // utoc, kdyz neco narazi do narazniku
{
PlaySound (SOUND_FAST_UP);
stop stochastika;
OnRev (MLEFT);
OnRev (MRIGHT);
Wait(50);
}
}
}
 
task blue_bumper()
{
while(true)
{
if (1 == BBUMPER) // utoc, kdyz neco narazi do narazniku
{
PlaySound (SOUND_FAST_UP);
stop stochastika;
OnFwd (MLEFT);
OnFwd (MRIGHT);
Wait(50);
}
}
}
 
task cara_cervena() // hlidani natlaceni na caru
{
while(true)
{
if ((RED > THRESHOLD) && (RED < RED_WHITE))
{
Wait(2);
if ((RED > THRESHOLD) && (RED < RED_WHITE))
{
PlaySound (SOUND_DOUBLE_BEEP);
stop red_bumper;
GoBlue();
start red_bumper;
start stochastika;
}
}
}
}
 
task cara_modra() // hlidani cary
{
while(true)
{
if (BLUE < THRESHOLD) // cekej na caru
{
PlaySound (SOUND_DOUBLE_BEEP);
stop blue_bumper;
GoRed();
start blue_bumper;
start stochastika;
}
}
}
 
/roboti/istrobot/callis/sumo_zataceci3.bak
0,0 → 1,155
#define THRESHOLD 44 // rozhodovaci uroven mezi cernou a bilou
#define RED_WHITE 60 // maximum bile na cervenem senzoru
#define MLEFT OUT_A
#define MRIGHT OUT_C
#define BLUE SENSOR_1
#define RED SENSOR_2
#define BBUMPER SENSOR_3
#define START_ALL start blue_bumper; start cara_cervena; start cara_modra;
 
int semafor;
 
task main()
{
PlaySound (SOUND_DOUBLE_BEEP);
Wait(500); // 5s podle pravidel
SetSensor(BLUE,SENSOR_LIGHT); // senzor na caru modry
SetSensor(RED,SENSOR_LIGHT); // senzor na caru cerveny
SetSensor(BBUMPER, SENSOR_TOUCH); // naraznik modry
SetSensorMode (BBUMPER, SENSOR_MODE_BOOL); // koncak bude ...
SetPower (MLEFT,OUT_FULL);
SetPower (MRIGHT,OUT_FULL);
SetDirection(MLEFT, OUT_FWD);
SetDirection(MRIGHT, OUT_FWD);
 
OnFwd (MLEFT); // cuknuti na shozeni radlic
OnFwd (MRIGHT);
Wait(50);
OnRev (MLEFT);
OnRev (MRIGHT);
Wait(100); // popojed kus
Off(MLEFT);
Off(MRIGHT);
 
start red_bumper;
start blue_bumper;
start cara_cervena;
start cara_modra;
start stochastika;
}
 
task stochastika()
{
while(true) Zatoc();
}
 
 
void GoBlue()
{
OnFwd (MLEFT);
OnFwd (MRIGHT);
Wait(300); // popojed kus
Off(MLEFT);
Off(MRIGHT);
}
 
void GoRed()
{
OnRev (MLEFT);
OnRev (MRIGHT);
Wait(300); // popojed kus
Off(MLEFT);
Off(MRIGHT);
}
 
void Zatoc()
{
switch (Random(3))
{
case 0:
OnRev (MLEFT);
OnFwd (MRIGHT);
Wait(20);
break;
case 1:
OnFwd (MLEFT);
OnRev (MRIGHT);
Wait(20);
break;
case 2:
OnRev (MLEFT);
OnRev (MRIGHT);
Wait(200);
break;
case 3:
OnFwd (MLEFT);
OnFwd (MRIGHT);
Wait(200);
break;
}
}
 
task red_bumper()
{
while(true)
{
if (100 == RED) // utoc, kdyz neco narazi do narazniku
{
PlaySound (SOUND_FAST_UP);
stop stochastika;
OnRev (MLEFT);
OnRev (MRIGHT);
Wait(50);
}
}
}
 
task blue_bumper()
{
while(true)
{
if (1 == BBUMPER) // utoc, kdyz neco narazi do narazniku
{
PlaySound (SOUND_FAST_UP);
stop stochastika;
OnFwd (MLEFT);
OnFwd (MRIGHT);
Wait(50);
}
}
}
 
task cara_cervena() // hlidani natlaceni na caru
{
while(true)
{
if ((RED > THRESHOLD) && (RED < RED_WHITE))
{
Wait(2);
if ((RED > THRESHOLD) && (RED < RED_WHITE))
{
PlaySound (SOUND_DOUBLE_BEEP);
stop red_bumper;
GoBlue();
start red_bumper;
start stochastika;
}
}
}
}
 
task cara_modra() // hlidani cary
{
while(true)
{
if (BLUE < THRESHOLD) // cekej na caru
{
PlaySound (SOUND_DOUBLE_BEEP);
stop blue_bumper;
GoRed();
start blue_bumper;
start stochastika;
}
}
}
 
/roboti/istrobot/callis/sumo_zataceci3.nqc
0,0 → 1,155
#define THRESHOLD 44 // rozhodovaci uroven mezi cernou a bilou
#define RED_WHITE 60 // maximum bile na cervenem senzoru
#define MLEFT OUT_A
#define MRIGHT OUT_C
#define BLUE SENSOR_1
#define RED SENSOR_2
#define BBUMPER SENSOR_3
#define START_ALL start blue_bumper; start cara_cervena; start cara_modra;
 
int semafor;
 
task main()
{
PlaySound (SOUND_DOUBLE_BEEP);
Wait(500); // 5s podle pravidel
SetSensor(BLUE,SENSOR_LIGHT); // senzor na caru modry
SetSensor(RED,SENSOR_LIGHT); // senzor na caru cerveny
SetSensor(BBUMPER, SENSOR_TOUCH); // naraznik modry
SetSensorMode (BBUMPER, SENSOR_MODE_BOOL); // koncak bude ...
SetPower (MLEFT,OUT_FULL);
SetPower (MRIGHT,OUT_FULL);
SetDirection(MLEFT, OUT_FWD);
SetDirection(MRIGHT, OUT_FWD);
 
OnFwd (MLEFT); // cuknuti na shozeni radlic
OnFwd (MRIGHT);
Wait(50);
OnRev (MLEFT);
OnRev (MRIGHT);
Wait(100); // popojed kus
Off(MLEFT);
Off(MRIGHT);
 
start red_bumper;
start blue_bumper;
start cara_cervena;
start cara_modra;
start stochastika;
}
 
task stochastika()
{
while(true) Zatoc();
}
 
 
void GoBlue()
{
OnFwd (MLEFT);
OnFwd (MRIGHT);
Wait(300); // popojed kus
Off(MLEFT);
Off(MRIGHT);
}
 
void GoRed()
{
OnRev (MLEFT);
OnRev (MRIGHT);
Wait(300); // popojed kus
Off(MLEFT);
Off(MRIGHT);
}
 
void Zatoc()
{
switch (Random(3))
{
case 0:
OnRev (MLEFT);
OnFwd (MRIGHT);
Wait(20);
break;
case 1:
OnFwd (MLEFT);
OnRev (MRIGHT);
Wait(20);
break;
case 2:
OnRev (MLEFT);
OnRev (MRIGHT);
Wait(70);
break;
case 3:
OnFwd (MLEFT);
OnFwd (MRIGHT);
Wait(70);
break;
}
}
 
task red_bumper()
{
while(true)
{
if (100 == RED) // utoc, kdyz neco narazi do narazniku
{
PlaySound (SOUND_FAST_UP);
stop stochastika;
OnRev (MLEFT);
OnRev (MRIGHT);
Wait(50);
}
}
}
 
task blue_bumper()
{
while(true)
{
if (1 == BBUMPER) // utoc, kdyz neco narazi do narazniku
{
PlaySound (SOUND_FAST_UP);
stop stochastika;
OnFwd (MLEFT);
OnFwd (MRIGHT);
Wait(50);
}
}
}
 
task cara_cervena() // hlidani natlaceni na caru
{
while(true)
{
if ((RED > THRESHOLD) && (RED < RED_WHITE))
{
Wait(2);
if ((RED > THRESHOLD) && (RED < RED_WHITE))
{
PlaySound (SOUND_DOUBLE_BEEP);
stop red_bumper;
GoBlue();
start red_bumper;
start stochastika;
}
}
}
}
 
task cara_modra() // hlidani cary
{
while(true)
{
if (BLUE < THRESHOLD) // cekej na caru
{
PlaySound (SOUND_DOUBLE_BEEP);
stop blue_bumper;
GoRed();
start blue_bumper;
start stochastika;
}
}
}
 
/roboti/istrobot/callis/tunel.JPG
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/uxas03.jpg
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/callis/vssver.scc
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property