Janari bila

Basoko bizimodua ez da erraza: egunero janari bila atera behar, elikagai eta pozoiaren artean ezberdintzen ikasi, lehiakideei aurrea hartu, amildegi arriskutsuetatik erori gabe ibili… biziraupenak pertzepzio eta akziorako gaitasun finak eskatzen ditu.

Robotak jarriko ditugu biziraupenerako lehia gogor horretan. Basoa, marra beltzez zehaztutako eremuaren barnealdea izango da. Kontuz, marra beltza zeharkatuz gero akabo! Amildegitik behera joango litzateke robota.

Basoan janaria topatu behar du robotak. Adi baina, kolore berdekoa elikagai ona den aren, gorria pozoia da.

Robotaren egitekoa ahalik eta elikagai gehien biltzea izango da. Bi modutara egin dezake: bata topatutako janaria zuzenean marra beltzetik kanpora ateraz; eta bestea, zailagoa, etxean (irudiko karratu urdina) utziz bildutakoa.

Puntuazioa:

  • Marra beltzetik kanpora ateratako janari (berde kolorekoa) bakoitzeko: 2 puntu.
  • Abiapuntuko karratuan utzitako janari bakoitzeko: 4 puntu.
  • Bildutakoa (marratik kanpo edo karratuan) pozoia bada: -4

eremua3 minutu iraungo du biltzeak. Puntu gehien lortzen duen robota izango da irabazle.

Objektuak ekidin II

Talka-sentsoreak erabiliz ezin izan dugu ekidin robotak objektuen kontra talka egitea. Ultrasoinu-sentsoreekin, aldiz, bai. Moldatu dezagun, beraz, gure objektuak ekiditeko programa, objektuekin talka egin baino lehen itzuri egin dezan. Hona estrategia: Objekturen bat detektatuz gero 30 cm baino gutxiagora, biratuz ausaz ezker edo eskuinera.

Lehenbizi, ultrasoinu-sentsorea gehitu behar diogu Xibot robotari. Horretarako, jarraitu instrukzioei.

Hartu tarte bat eta ahalegindu zaitez zeure kabuz inplementatzen portaera. Ondoren konpara ezazu guk hemen emandako soluzioarekin. Antzekoak al dira?

Programa: objEkidin2.nxc

Braitenberg-en ibilgailuak

1984. urtean, Valentino Braitenberg neurozientzialariak (1926-), Max Planck Institute for Biological Cybernetics erakundeko zuzendari zelarik, liburu labur bezain interesgarria argitaratu zuen: Vehicles: Experiments in Synthetic Psychology. Bertan, ingurunearekin elkarrekintzan diharduten sistemei buruz pentsarazten digu Braitenberg-ek. Erakutsi nahi duena zera da, portaera sinpleetatik abiatuta irits litekeela portaera konplexuagoetara, adimenduntzat onar genitzakeenetara, ingurune konplexuekin harremanetan jartzean.

Bere ideiak ilustratzeko, Braitenberg-ek izaki itxurako ibilgailuak aurkezten ditu, gradualki konplexutasun mailan irabazten doazenak, baina guztiak ere osagai mekaniko eta elektriko sinplez eginak. Ibilgailu horietako bakoitzak portaera adimendun bat imitatzen du, eta imitatzen duen portaeraren izena hartu. Azpimarragarria da ez zituela ibilgailu hauek eraiki, aitzitik, diseinatu eta haien portaera idatziz deskribatzera mugatu zen.

Braitenberg-ek erakusten duena zera da: oinarrizko mekanismoekin eraikiak izan arren, ibilgailuak portaera konplexuak erakusteko gai direla, kanpoko begirale batek portaera adimendun gisa deskribatuko lituzkeen portaerak, hain zuzen ere: lotsa, beldurra, erakarpena, zalantza. . . Bere ideiak eztabaida-iturri izan diren arren, ezin ukatuzkoa da Adimen Artifizialaren oinarrizko ikerketan izan duen eragina.

LEGO robotak erabiliz, ibilgailurik sinpleenetakoa inplementatuko dugu: 2 argi-sentsore eta 2 motor dauzkan ibilgailua. Sentsore eta motorren arteko lotura gurutzatua da, hau da, ezkerreko argi-sentsorea eskuineko motorrarekin konektatua dago, eta  eskuineko sentsorea aldiz ezkerreko motorrarekin

Nolakoa ote da ibilgailu honen portaera?

braitenberg-illust

Hona braitenberg.nxc programa:

// Braitenberg-2a.nxc
//
// 1 sentsorea eta A motorra robotaren ezker aldean
// 4 sentsorea eta C motorra robotaren eskuin aldean

// ALDAKETA INTERESGARRIA: INGURUNEKO ARGIA NEURTU ETA 
// HORTIK ABIATZEN DEN PROGRAMA

#define EZK_ARGI S1
#define ESK_ARGI S4
#define EZK_MOTOR OUT_A
#define ESK_MOTOR OUT_C

task main()
{

  // Sentsoreen irakurketak
  int eskuinArgia;
  int ezkerArgia;

  // Eskuinaldeko argi sentsoreanhasieratu
  SetSensorType(EZK_ARGI, SENSOR_TYPE_LIGHT_INACTIVE);
  SetSensorMode(EZK_ARGI, SENSOR_MODE_PERCENT);
  ResetSensor(EZK_ARGI);

  // Ezkerraldeko argi sentsorea hasieratu
  SetSensorType(ESK_ARGI, SENSOR_TYPE_LIGHT_INACTIVE);
  SetSensorMode(ESK_ARGI, SENSOR_MODE_PERCENT);
  ResetSensor(ESK_ARGI);

  while(true){
    // argi sentsoreak irakurri
    eskuinArgia = Sensor(ESK_ARGI);
    ezkerArgia = Sensor(EZK_ARGI);

    // Robota mugiarazi
    OnFwd(ESK_MOTOR, eskuinArgia);
    OnFwd(EZK_MOTOR, ezkerArgia);
  }

}

 

Koloreen bidez robota gidatuz

Koloreen bidez gidatu daitekeen robota jarriko dugu martxan. Horretarako, lehenbizi, kolore-sentsorea gehituko diogu Xibot robotari. Jarraitu sentsoreak gehitzeko instrukzioak, baina ultrasoinuaren ordez, kolore-sentsorea jarriz.

Robota gidatzea erraza izango da. Robotak koloreei erantzun beharko die:

  • Berdea: aurrera
  • Gorria: gelditu
  • Urdina: ezkerretara
  • Horia: eskuinera
  • Zuria: atzera
  • Beltza: ezer ez

Koloreak bistaratzen dituen programa oinarri gisa hartu eta moldatu robota nahieran gidatzeko.

Objektuak ekidin

Autonomia maila minimo bat daukan robota programatu nahi dugu: ingurunean noraezean ibiltzeko gai izango dena eta objekturen batekin talka eginez gero, atzera egin eta batera edo bestera biratzen jakingo duena. Ezker/eskuin birak ausaz burutuko ditu. Ataza burutzeko, lehenbizi, talka-sentsorea gehitu behar diogu Xibot robotari (xibot-sentsoreak). Egiaztatu talka-sentsorea 1 portuan konektatu dugula.

Algoritmoa:

while (true) {
Aurrera_bi_motorrak
   if(Objektua_detektatu) {
      Atzera_bi_motorrak
      Biratu_esk_ezk_ausaz
   }
Itxoin_denbora;
}

Programa jaisteko: objEkidin.nxc

Nabigatu LEGO NXT robotekin: abante!

Aurten ere robotikari buruzko ikastaroa izango dugu UEUn. Oinarrizko ikastaroa izan arren, nabigazioa izango du ardatz aurtengoak.

 Nabigazioa oinarrizko gaitasuna da robot mugikorrentzat: etxeko lurzorua garbitzen duen Roomba xurgagailu ezagunetik hasi eta Marte planeta esploratzen ari den Curiosity roboteraino, ingurunean beren bidea topatzeko estrategiak behar dituzte robotek.

 Burutu beharreko atazaren arabera (etxeko lurzorua garbitu, planeta ezezagun bat esploratu), maila desberdinetan garatuko da nabigazioa: objektuak ekidin, helburuak identifikatu, ingurunea arakatu, mapak eraiki, etab.

Ikastaroaren helburua nagusia, robotikan lehen pausuak eman nahi dituenari abiapuntua eskaintzea da, robota diseinatu, muntatu eta programatzeko beharrezko ezagutzak eskainiz. Baina robotikara hurbiltzeko moduak ugariak direnez, aurten, nabigazioan jarriko dugu arreta berezia. LEGO Mindstorms NXT kaxa robotikoa erabiliko dugu robotak eraikitzeko; eta hauek programatzeko berriz, NXC lengoaia.

Behetik gorako estrategia jarraituz, robotaren sentsore eta motorrak baliatuko ditugu oinarrizko nabigazio gaitasunetatik hasi, eta gradualki, konplexutasun handiagoko nabigazio teknikak garatzeko.

Abante!

Zapi-jokoa

Zapi-joko ezagunaren bertsio robotikoa inplementatuko dugu. Azpiko irudiaren antzeko joko zelaian, robotak alde banatan kokatuko ditugu, eta erdian lata bat. Roboten egitekoa izango da marra jarraituz lata dagoen punturaino iritsi, hura hartu eta berriro hasierako puntura itzultzea. Helburua, aurkariak harrapatua izan gabe latarekin abiapuntura iristea da.

Benetako joko-zelaiak eta irudikoak ez dute zertan berdin berdinak izan, hurbilpen bat baino ez da. Ibilbideak bihurguneak eta zuzenguneak izango ditu.

Puntuak honela banatuko dira:

1 puntu–> lata dagoen punturaino iristea

2 puntu–> lata harrapatzea matxardarekin

3 puntu–> Abiapuntura iristea lata eta guzti

2 puntu–>aurkaria harrapatzea, harek lata gureak baino lehenago hartu badu

Zorte on denoi!

Marra-jarraitzailea

Lurrean marra beltzez zirkuitu bat marraztu eta hari jarraituko dion robota garatuko dugu. Robotikako hastapenetan landu ohi den proiektu klasiko bezain interesgarria da berau, aurrera begira erabilgarri suertatuko zaizkigun kontzeptu interesgarriak aurkezteko aproposa. Aurrera, bada!

Lehenbizi, zehaztu dezagun ataza: zinta isolatzaile beltzez (1 cm-ko zabalera) lurzoruan zirkuitu bat marraztu, eta robotak marra beltzari jarraituko dio, ahalik azkarren, baina bidetik atera gabe. Zirkuituak bira zorrotzak eta leunak izan ditzake alde batera zein bestera.

Nola egin, argi-sentsore bakarra erabiliz, robotak marra beltza jarraitu dezan?

Hona estrategia bat: marra beltzaren ertzari jarraitu, azpiko irudiak erakusten duen moduan. Metodo honen abantaila nagusia, marrari jarraitzeko zein aldetara biratu behar dugun jakitean datza. Demagun, marra beltzaren eskuineko ertzari jarraitu nahi diogula: argi-sentsoreak marra beltza detektatuz gero eskuinera biratu, gainazal zuria detektatuz gero ezkerrera. Sigi-saga mugituz, beltzetik zurira eta zuritik beltzera, robotak marraren ezkerreko ertzari jarraituko lioke. Estrategia honek ibilbide zuzenetarako bezala balio du birak emateko ere.

Lurzorua marra-beltzetik bereizteko, muga-balioa ezarri behar dugu. Irakurketak burutu bi gainazaletan (lurzoru arrunta eta marra-beltza). Hona gure emaitzak (egokitu zuen ingurunera):

Marra_beltza: 80

Lurzoru _arrunta: 30

Muga-balio gisa, batezbestekoa har dezakegu (80 + 30)/2 = 55. Balio hori baino balio txikiagoak irakurtzean, marra beltzaren gainean gaudela pentsatuko dugu, eta hortik gorako balioekin, aldiz, gainazal zuriaren gainean. Batera eta bestera biratuz, marraren ertzari jarraituz sigi-saga mugituko da robota.

 

Txaloei erantzun

Objektuak ekiditen dituen robotaren aldaera da honakoa: txalo jo bakoitzean atzera egin eta norabidez aldatuko du robotak. Soinu-sentsorea gehituko diogu 2 etiketadun portuan (talka-sentsorea bere horretan utzi, ez dugu-eta erabiliko).

Programa ‘Objektuak ekidin’ programaren berdina da kasik, 2 portuan soinu-sentsorea konektatu besterik ez dugu egin behar. Soinu-sentsoreak muga-balio bat gainditzen duenean (guk zehaztutakoa), robotak atzerantz egin eta norabidez aldatuko du.

Nola zehaztu muga-balioa? Gogoan izan soinu-sentsoreak 50-90 dB arteko soinuak detektatzen dituela, hau da, gizakiaren entzumen-gaitasunari egokitutako tartean lan egiten du. Baina balioak, 0-100 artean itzultzen ditu, 0 soinurik ez eta 100 soinu maximoa izanik.
Beraz, frogak egin beharko dituzue soinu-sentsorearekin, txalo bati dagokion muga-balioa finkatzeko.

Egin proba ea zer moduz dabilen. Robot interesgarriagoa izango genuke, soinu- eta talka-sentsoreak konbinatuz gero. Hau da, robotak atzera egin eta biratuko luke, baldin eta objekturen batekin talka egin edo txalo-hotsa entzungo balu. Zeure esku uzten dugu azken aldaera honen programazioa.

Hona txalo.nxc programa:

#define BI_MOTOR    OUT_AC	// Bi gurpilak
#define EZK_MOTOR   OUT_C	// Ezker gurpila
#define ESK_MOTOR   OUT_A	// Eskuin gurpila
#define SOINU       S2     	// Soinu sentsorea 2. portuan
#define ABD         50		// Abiadura
#define ATZERA_DENB 300		// Atzera denb.
#define BIRA_DENB   500   	// Bira denb.
#define MUGA        60		// Soinu muga

task main()
{
SetSensorSound(SOINU);	//Soinu sentsorea 2. sarreran

while (true)  		// Begizta infinitua
{
   OnFwd(BI_MOTOR, ABD);	// 2 motorrak aurrera
   if (SENSOR_2 > MUGA)		// Soinuak muga gainditu
   {
      OnRev(OUT_AC, ABD);	// Atzera
      Wait(ATZERA_DENB);
      if (Random() >= 0)	// ezk-esk biratu ausaz
      {
         OnFwd(EZK_MOTOR, ABD);
      }
      else
      {
         OnFwd(ESK_MOTOR, ABD);
      }
      Wait(BIRA_DENB + Random(BIRA_DENB));

   }
}
}