KURZ: Vyhledávač IR signálů

KAPITOLY

MOŽNOSTI PRAKTICKÉHO VYUŽITÍ

Vyhledávač infračervených signálů slouží k detekci směru, ze kterého vychází zdroj vysílání infračerveného signálu. Můžeme ho proto využít v úlohách, ve kterých budeme mít takovýto zdroj k dispozici. Nejčastěji se ovšem tento modul využívá v robotickém fotbale. Ten se hraje se speciálním infračerveným míčem, který obsahuje vysílač infračervených signálů. Robot tak díky vyhledávači IR signálů detekuje směr, odkud signál přichází a může reagovat na změnu pozice míče. Jeho úkolem je poté vsítit soupeři branku. Pro robotický fotbal se samozřejmě nepoužívá pouze vyhledávač IR signálů. Při řešení této úlohy je důležité zohlednit i další aspekty. Například směr k soupeřově brance, který určujeme kompasovým senzorem. Detekce stěn hracího pole pomocí ultrazvukového senzoru a podobně.

VYUŽITÍ vyhledávače IR signálů

Na jednoduchém příkladu si ukážeme, jak by robot mohl pomocí vyhledávače IR signálů reagovat na změnu polohy infračerveného míče v robotickém fotbale. Pokusíme se vytvořit program, díky kterému se robot v případě, že se infračervený míč bude nacházet přímo před ním, krátce, ale prudce rozjede a posune tak míč směrem k soupeřově brance.

NXT-G

Detekce polohy míče

Při vytváření programu je nejprve důležité si rozmyslet, co všechno musíme ošetřit. Robot se musí pohybovat tak, aby zjistil, kde se nachází míč. Jakmile se míč bude nacházet přímo před ním, tedy ve výseči číslo 5 vyhledávače, musí zareagovat. Adekvátní reakcí bude prudký pohyb vpřed, kterým se pokusí "kopnout" do míče.

Krok 1 - Vyhledávání míče

První krok, který zrealizujeme, bude to, aby robot dokázal rozlišit, jestli se před ním nachází míč či nikoliv. Zjišťovat bude tuto skutečnost tak, že se bude točit kolem své osy. Nejprve použijeme dva bloky MotorDragged Motor. Jeden pro motor A a druhý pro motor B. Zvolíme příslušné porty, ke kterým jsou připojeny a každému z nich nastavíme opačné otáčení. Jeden se bude otáčet vpřed a druhý vzad. Rychlost otáčení jsme zvolili 50%. Tento pohyb bude prováděn stále dokola.

Dále musí robot zjistit, jestli se před ním nenechází infračervený míč. Použijeme tedy blok IRSeekerV2Dragged IR Seeker Sensor v2. Nyní budeme ověřovat, zda se míč nenachází přímo před senzorem, tedy v sektoru číslo 5. Ověříme, jakou hodnotu vrací senzor na výstupu IRDirection IRDirection. Tento výstup přivedeme na vstup bloku FPNumericComparisonDragged Compare, kde budeme porovnávat, zda je tato hodnota rovna 5.

V současné situaci by ověření proběhlo pouze jednou a program by skončil. My ale chceme, aby ověřování probíhalo neustále. Všechny čtyři bloky tak umístíme do cyklu LoopBig Loop. Jeho řízení bude prováděno pomocí hodnoty logického datového typu (Logic). Ukončení tohoto cyklu tak bude závislé na splnění podmínky uvnitř (IRDirection = 5). Pokud bude splněna podmínka, cyklus se ukončí a program pokračuje dále. Výstup Result bloku FPNumericComparisonDragged Compare tak přivedeme na konektor cyklu. 

detekce mice vyhledavani

 
Krok 2 - Reakce

Náš robot už nyní dokáže zjistit, zda se před ním nachází infračervený míč či nikoliv. Nyní musí pouze zareagovat, pokud bude míč přímo před ním. Při splnění podmínky musí "kopnout" do míče. Použijeme blok MoveDragged Move, zvolíme příslušné motory, směr vpřed a pohyb trvající půl vteřiny. Ještě před tento blok ale umístíme dva bloky MotorDragged Motor, které budou zastavovat motory A a B. Při okamžitém přechodu z rotačního pohybu v prudký pohyb vpřed by se totiž mohlo stát, že robot díky setrvačnosti v pohybu infračervený míč mine.

Aby robot i po prvním "kopnutí" pokračoval v hraní fotbalu, musíme ještě všechny bloky umístit do cyklu LoopBig Loop, u kterého nastavíme nekonečné provádění.

 

Výsledný program

Po správné realizaci jednotlivých kroků by měl program vypadat tak, jak vidíte na obrázku. Tento program není kompletním řešením pro realizaci robotického fotbalu. Pro správné řešení bychom museli použít i další moduly a vyřešit mnoho dalších situacích. Tento program slouží pouze jako demonstrace funkce vyhledávače IR signálů

IR seeker priklad

 

Program ke stažení

Stažení ve formátu .rbt

RobotC

DETEKCE POLOHY MÍČE

Při řešení programu v programovacím prostředí RobotC musíme nejprve deklarovat vyhledávač IR signálů. Následně je důležité programově zapsat konstrukt, díky kterému robot detekuje infračervený míč. Na závěr musí robot provést "kopnutí" do míče.

Krok 1 - Deklarace senzoru

Stejně jako v jiných úlohách, ve kterých použijeme některý ze senzorů, tak i v tomto musíme nejprve vyhledávač IR signálů nadeklarovat. Deklaraci je možné zapsat buďto ručně nebo pomocí průvoce deklarací. Deklarace se skládá klíčového slova #pragma a příkazu config(), který obsahuje čtyři parametry. První označuje, že se jedná o senzor (Sensor). Druhý označuje port, ke kterému je senzor připojen (S1-S4). Třetí parametr je volitelný a uživatel si zde volí název senzoru, který bude posléze používat v programu. Poslední je standardizovaný název senzoru (sensorHiTechnicIRSeeker1200).

 
#pragma config(Sensor, S1, vyhledavac, sensorHiTechnicIRSeeker1200)
 
 
Krok 2 - Reakce

Nyní již můžeme začít s vytváření programu. Nejprve musíme zajistit, aby robot dokázal rozlišit, zda se před ním nachází infračervený míč či nikoliv. Konkrétně musí být umístěn ve výseči číslo 5 přímo před senzorem. Použijeme podmínku if(), jejíž parametr v závorce bude, že hodnota zjištěná senzorem bude rovna 5 (SensorValue(vyhledavac) == 5). V tomto okamžiku musí ustat veškerý pohyb robota, to znamená, že oběma motorům přiřadíme nulovou rychlost. Tento úkon jsme nastavili pouze na krátký časový úsek (200 milisekund). Následně se prudce rozjede kupředu. Vteřinu pojedou oba motory vpřed rychlostí 75%.

 
if (SensorValue(vyhledavac) == 5)
 {
   motor[motorA]=0;
   motor[motorB]=0;
   wait1Msec(200);
   motor[motorA]=75;
   motor[motorB]=75;
   wait1Msec(1000);
 }
 
 
Krok 3 - Detekce míče

Po zjištění, že se před robotem nachází infračervený míč, do něj musí robot "kopnout". Kopnutí jsme provedli příkazem motor[]. Podobným způsobem provedeme i detekci míče. Robot se bude při detekování otáčet kolem své osy tak dlouho, dokud míč nenajde. Za podmínku if() vložíme else a použijeme opět dva příkazy motor[] pro motory A a B. Oběma nastavíme rychlost 20% pro otáčení, ovšem každému opačným směrem.

 
 motor[motorA]=20;
 motor[motorB]=-20;
 

 

Výsledný program

Po správné realizaci jednotlivých kroků byste měli dojít k úspěšnému vytvoření úlohy. Nesmíme zapomenout na to, že celý kód musí být umístěný v nekonečném cyklu while(). Hotový program můžete vidět níže.

 
#pragma config(Sensor, S1, vyhledavac, sensorHiTechnicIRSeeker1200)
// deklarace senzoru
 
task main()
{
while(true)
{
 // otaceni a detekce mice
 if (SensorValue(vyhledavac) == 5)
 {
   motor[motorA]=0;
   motor[motorB]=0;
   wait1Msec(200);
   motor[motorA]=75;
   motor[motorB]=75;
   wait1Msec(1000);
 }
 else
 {
   motor[motorA]=20;
   motor[motorB]=-20;
 }
}
}
 

 

Program ke stažení

Stažení ve formátu .c

1 1 1 1 1 1 1 1 1 1 Hodnocení 0.00 (0 hodnocení)

Nemáte oprávnění přidat komentář.
Komentáře mohou přidávat pouze registrovaní uživatelé, kteří neporušují pravidla diskuze.