Robotnačka-06

From RoboWiki
Jump to: navigation, search

Úloha 6: Nespadni!

Napíšte program, ktorý zabezpecí náhodný pohyb Robotnacky vo vnútri bielej plochy ohranicenej ciernymi pásmi.

Robotnačka má na spodnej strane 6 infrasenzorov typu CNY70, ktoré sú síce iba binárne, ale dokážu rozoznať tmavý a svetlý podklad, po ktorom sa robot pohybuje. Ak je daný bit 0, senzor je nad svetlou plochou, logická 1 znamená tmavú farbu. Aj v prípade, že daný senzor sa nenachádza nad stolom, ale vytrca von, jeho hodnota je 1.


Zavolaním príslušnej funkcie ( short stav = robot_getsensors(r); ) získame stav senzorov v jednom bajte, kde je spodných 6 bitov významných. Priradenie senzorov k jednotlivým bitom je na obrázku 36. V manuuálnom ovládacom režime je možné stav senzorov získat po stlacení tlacidla Sensors, prípadne je možné zadat špeciálnu podmienku, pri ktorej sa zastaví pohyb robota.

RobotnackaSensors.png Obr. 35: Senzory - pohlad zhora. Najvyššie dva bity sú vynulované.


Podmienené vykonávanie príkazov

Senzormi môžeme podmienit, resp. zakázat vykonanie pohybových príkazov. Robot nepretržite sleduje splnenie senzorovej podmienky a v prípade, že je splnená, zastaví vykonávanie aktuálneho príkazu. Podmienka sa skladá z troch 6-bitových konštánt, ktoré reprezentujú bitové masky, aplikované na aktuálny stav senzorov. Tieto masky sa používajú s operáciami XOR, OR a AND nasledovne:

( (s XOR x) AND o > 0 ) OR ( (s XOR x) AND a == a ) AND (s + a > 0)

Císlo x urcuje, ktoré bity najprv invertujeme. Invertuje sa stav tých senzorov, pre ktoré je príslušný bit v x = 1.

Císlo o je maska OR, teda ak hociktorý zo senzorov, ktoré sú v o = 1, podmienka je splnená. Podobne, ak všetky senzory, ktorých zodpovedajúci bit v a je 1 sú aktívne, podmienka je splnená. Ak sú konštanty o aj a obe nulové, podmienka nebude použitá.

Príklady:

Podmienka je splnená, ak sa hociktorý zo senzorov dostane mimo bielej plochy: x = 0, o = 63, a = 0. Ak sa robot pohybuje po ciernej ciare (log. 1 na piatom senzore S4) a chceme, aby zastal ked ciara skoncí, musíme nastavit podmienku takto: x = 16, o = 0, a = 16

Poznámka: V niektorých verziách firmware Robotnacky je z dôvodu šetrenia energiou meranie stavu senzorov umožnené len pri pohybe. Ak robot stojí, napájanie senzorov je vypnuté.