Difference between revisions of "Krúžok Robotiky na GJH"

From RoboWiki
Jump to: navigation, search
Line 46: Line 46:
 
  {
 
  {
 
   SetSensorType(S1, SENSOR_TYPE_LIGHT_ACTIVE);
 
   SetSensorType(S1, SENSOR_TYPE_LIGHT_ACTIVE);
 +
  SetSensorMode(S1, SENSOR_MODE_PERCENT);
 +
  ResetSensor(S1);
 +
 
   while (1)
 
   while (1)
 
   {
 
   {
     if (S1 < 48)  
+
     if (Sensor(S1) < 48)  
 
     {
 
     {
 
       OnFwd(OUT_A, 75);
 
       OnFwd(OUT_A, 75);
Line 107: Line 110:
  
 
  SetSensorType(S1,jeden_z_tychto_typov);
 
  SetSensorType(S1,jeden_z_tychto_typov);
 +
SetSensorMode(S1,SENSOR_MODE_PERCENT);
 +
ResetSensor(S1);
 +
 +
Ak nechceme hodnoty 0-100, môžeme použiť iný mód, jeden z nasledujúcich:
 +
 +
SENSOR_MODE_RAW priama "surová" hodnota od 0 do 1023
 +
SENSOR_MODE_BOOL 0 alebo 1
 +
SENSOR_MODE_EDGE počíta koľkokrát prejde senzor z 0 do 1 alebo z 1 do 0
 +
SENSOR_MODE_PULSE počíta koľkokrát prejde senzor z 0 do 1 a nasäť
 +
SENSOR_MODE_PERCENT hodnota 0 až 100
 +
SENSOR_MODE_FAHRENHEIT stupňe F (pre tepelný snímač)
 +
SENSOR_MODE_CELSIUS stupne C (pre tepelný snímač)
 +
SENSOR_MODE_ROTATION počet otáčok (pre RCX otáčkový snímač)
  
Senzory HiTechnic na snímanie IR lotpy, farby a naklonenia, smeru (kompasový) sa nastavujú
+
Senzory HiTechnic na snímanie IR lotpy, farby, naklonenia a smeru (kompasový) sa nastavujú
 
ako keby boli ultrazvukový senzor.
 
ako keby boli ultrazvukový senzor.

Revision as of 10:57, 26 April 2008

Krúžok robotiky sa zaoberá stavbou a programovaním robotov zo stavebníc LEGO NXT. Učíme sa programovací jazyk NXC. V máji sa chceme zúčastniť na turnaji RoboCup Junior Slovensko v Banskej Bystrici a na jeseň na súťaži First LEGO League.

Pozri stránku RoboCup Junior Slovensko, kde sú aj pravidlá súťažných kategórií Záchranár, Futbal a Tanec robotov.


Stretnutie 22.4.2008

  • Nainštalovali sme si programovací jazyk NXC s prostredím BricX

(treba stiahnuť súbor test_release.zip, rozbaliť ho a spustiť). USB driver: download

  • Napísali sme prvý program pre robota, pomocou ktorého prejde o kúsok vpred:
task main()
{
  OnFwd(OUT_AC, 75);
  Wait(1000);
  Float(OUT_AC);
}

Prvý riadok zapne motory na portoch A a C na rýchlosť 75 (najväčšia rýchlosť je 100). Druhý riadok počká 1 sekundu (ale motory sú už zapnuté, takže robot ide 1s vpred). Tretí riadok vypne motory na portoch A a C.

  • Potom si krúžkari sami zmenili program tak, aby robot prešiel do štvorca, použili sme

pritom príkaz:

OnRev(OUT_AC, 75);

ktorý zapne motor v spätnom chode (rýchlosťou 75 - tú môžeme samozrejme meniť).

Videli sme, že bolo zložité vyladiť dĺžku čakania pri zatáčaní a preto sme využili príkaz

RotateMotor(OUT_A, 75, 45);

ktorý spôsobí, že motor na porte A sa otočí len o 45 stupňov a potom zastane - využíva pritom otáčkové snímače, ktoré sú zabudované do motorov.

  • Napokon sme na papieri fixkou nakreslili čiaru a naprogramovali sme robota tak, aby

chodil do kola po čiare (keď sme konečne našli správne príkazy :). Tu je výsledný program:

int s;
task main()
{
  SetSensorType(S1, SENSOR_TYPE_LIGHT_ACTIVE);
  SetSensorMode(S1, SENSOR_MODE_PERCENT);
  ResetSensor(S1);
  while (1)
  {
    if (Sensor(S1) < 48) 
    {
      OnFwd(OUT_A, 75);
      Float(OUT_C);
    }
    else
    {
      OnFwd(OUT_C, 75);
      Float(OUT_C);
    }
  }
}

Program najskôr nastaví typ senzora na porte 1 (čiže S1) na aktívny svetelný senzor. Potom opakuje donekonečna (lebo podmienka 1 je vždy splnená) jeden jednoduchý test: ak je intenzita odrazeného svetla menšia ako 45, robot je na čiernej čiare a má zatáčať vpravo. V opačnom prípade je robot na bielom papieri a má zatáčať vľavo. Takto robot sleduje hranu čiary medzi bielou a čiernou... Tento program treba prispôsobiť podľa toho, aká tmavá je čiara (hodnota 48 v podmienke) a podľa toho, na ktorých portoch má robot pripojené motory a ktorým smerom sú otočené (t.j. vymeniť časti podmienok).

Kruzok gjh sledovanie ciary.jpg

Spoločné stretnutia pre všetkých zaújemcov budú pokračovať každý týždeň v utorok o 14.

Stretnutie 24.4.2008

int s;
task main()
{
  SetSensorType(S1, SENSOR_TYPE_LOWSPEED);
  ClearScreen();
  while(1)
  {
    ClearScreen();
    NumOut(10,10,SensorUS(S1));
    Wait(500);
  }
}

Typy senzorov:

SENSOR_TYPE_TOUCH        tlakový snímač (tlačidlo)
SENSOR_TYPE_TEMPERATURE  tepelný snímač (doplnkový senzor)
SENSOR_TYPE_LIGHT        svetelný snímač zo stavebnice RCX
SENSOR_TYPE_ROTATION     otáčkový snímač zo stavebnice RCX
SENSOR_TYPE_LIGHT_ACTIVE svetelný NXT snímač v aktívnom režime
SENSOR_TYPE_LIGHT_INACTIVE svetelný NXT snímač v pasívnom režime (dióda nesvieti)
SENSOR_TYPE_SOUND_DB     zvukový snímač
SENSOR_TYPE_SOUND_DBA    zvukový snímač (iné jednotky)
SENSOR_TYPE_LOWSPEED     ultrazvukový snímač

Snímače sa v programe čítajú pomocou "premenných" S1 - S4, ale ultrazvukový snímač sa číta pomocou SensorUS(S1) - SensorUS(S4).

Na začiatku programu treba snímače nastaviť pomocou príkazu:

SetSensorType(S1,jeden_z_tychto_typov);
SetSensorMode(S1,SENSOR_MODE_PERCENT);
ResetSensor(S1);

Ak nechceme hodnoty 0-100, môžeme použiť iný mód, jeden z nasledujúcich:

SENSOR_MODE_RAW	priama "surová" hodnota od 0 do 1023
SENSOR_MODE_BOOL	0 alebo 1
SENSOR_MODE_EDGE	počíta koľkokrát prejde senzor z 0 do 1 alebo z 1 do 0
SENSOR_MODE_PULSE	počíta koľkokrát prejde senzor z 0 do 1 a nasäť
SENSOR_MODE_PERCENT	hodnota 0 až 100
SENSOR_MODE_FAHRENHEIT	stupňe F (pre tepelný snímač)
SENSOR_MODE_CELSIUS	stupne C (pre tepelný snímač)
SENSOR_MODE_ROTATION	počet otáčok (pre RCX otáčkový snímač)

Senzory HiTechnic na snímanie IR lotpy, farby, naklonenia a smeru (kompasový) sa nastavujú ako keby boli ultrazvukový senzor.