ROBOTIKA 1. BEADANDÓ
2001/2002 tanév I. szemeszter



FELADAT
MEGOLDÁS ( HARDVER )
MEGOLDÁS ( SZOFTVER )
PROGRAMKÓD
ELÔNYÖK
HÁTRÁNYOK
VIDEÓ FELVÉTELEK
KÉSZÍTÔK

FELADAT :
Feladatunk egy olyan robot készítése volt, amely képes végighaladni egy kijelölt úton.
Útvonal alatt egy
- megfelelô szélességû
- tetszôlegesen kanyarodó
- a padlózat színétôl jelentôs mértékben eltérô színû
csíkot értünk.
A mi esetünkben az út színe sötét, a hátter színe világos.

MEGOLDÁS ( HARDVER ) :
A megépített robot egy 3-kerekû autó.
A két elsô nagy kereket két külön motor hajtja, a hátsó kis kerék pedig szabadon mozog.
A roboton elôl a két kerék elôtt fényérzekelô is van, továbbá elôl középen egy nyomásérzekelô, aminek megnyomása a robot megállását eredményezi.

MEGOLDÁS ( SZOFTVER ) :
Az inicializálós részben állítjuk be a szoftver paramétereit (sebességek), illetve az érzékelôk fajtáit. Ezt követôen egy ciklus fut addig, amíg a nyomásérzékelô nem érzékel nyomást.
A fényérzékelôk jeleit folyamatosan olvasva az alábbi esetek lehetnek: balra fordulás, jobbra fordulás, egyenesen elôre.
Igazából a két érzékelô értékének eltérését vizsgáljuk, azaz -20-nál kisebb, +20-nál nagyobb, vagy -20 és +20 közötti értékeket.
A fordulásnál a belsô kerekek hátramenetben a külsôk elôremenetben mennek.

A feladatot megvalósító programkódrészlet:
innen is letölthetô



#define LSENSOR SENSOR_3
#define RSENSOR SENSOR_2
#define MSENSOR SENSOR_1
#define LENGINE OUT_C
#define RENGINE OUT_B
#define LIGHTS  OUT_A

int CarSpeedL, CarSpeedR, RoadColor, BackColor;

void OwnChangeCarSpeed()
{
   SetPower(LENGINE, abs(CarSpeedL));
   if(CarSpeedL<0) 
      Rev(LENGINE);
   else
      Fwd(LENGINE);
   SetPower(RENGINE, abs(CarSpeedR));
   if(CarSpeedR<0) 
      Rev(RENGINE);
   else
      Fwd(RENGINE);
}

void OwnInitialize()
{
   SetSensor(LSENSOR, SENSOR_LIGHT);
   SetSensor(MSENSOR, SENSOR_TOUCH);
   SetSensor(RSENSOR, SENSOR_LIGHT);
   SetSensorMode(LSENSOR, SENSOR_MODE_RAW);
   SetSensorMode(MSENSOR, SENSOR_MODE_BOOL);
   SetSensorMode(RSENSOR, SENSOR_MODE_RAW);
   SetPower(LIGHTS,7);

   CarSpeedL = 0;
   CarSpeedR = 0;
   RoadColor = MSENSOR;
   BackColor = (RSENSOR-LSENSOR)/2;
   On(LENGINE);
   On(RENGINE);
   On(LIGHTS);
}

void OwnDestroy()
{
   Off(LENGINE);
   Off(RENGINE);
   Off(LIGHTS);
}

void Futtat()
{
   int GoSpeed, TurnSpeedFwd, TurnSpeedRev, Difference;
/* Parameterek beallitasa */
   GoSpeed      =  9;
   TurnSpeedFwd =  9;
   TurnSpeedRev = -9;
   Difference   =  5;
   OwnInitialize();
   CarSpeedL = GoSpeed;
   CarSpeedR = GoSpeed;
   OwnChangeCarSpeed();
   while(MSENSOR==0)
   {
/* Balra fordul */
      if(RSENSOR+Difference-LSENSOR>20)
      {
         CarSpeedL = TurnSpeedRev;
         CarSpeedR = TurnSpeedFwd;
         OwnChangeCarSpeed();
      }
/* Jobbra fordul */
      if(LSENSOR-RSENSOR-Difference>20)
      {
         CarSpeedL = TurnSpeedFwd;
         CarSpeedR = TurnSpeedRev;
         OwnChangeCarSpeed();
      }
/* Egyenesen megy */
      if(abs(LSENSOR-RSENSOR)<=20)
      {
         CarSpeedL = GoSpeed;
         CarSpeedR = GoSpeed;
         OwnChangeCarSpeed();
      }
   }
   OwnDestroy();
}

task main()
{
   Futtat();
}



A ROBOT ELÔNYEI :
- kb. 90 foknál nagyobb szögû kanyarokkal ellátott úton gyorsan es megbízhatóan halad
- egyszerû szoftver
- egyszerû hardver


A ROBOT HÁTRÁNYAI :
- az éles kanyarokat nem tudja bevenni
- ha egyszer elhagyta a pályát, akkor nem képes visszatérni
- nem érzékeli a különbséget a között, ha mindkét érzékelô az út mellett van vagy az úton van (ez utóbbi éles kanyar esetén lehet)

VIDÓ FELVÉTELEK :
Video 4.avi (2815K)
Video 5.avi (11283K)
.

KESZÍTETTÉK :
Baksa Klára
Kovács Gábor Zsolt
Rózsai Máté
Terray Tamás