Difference between revisions of "Robotnačka-06"
Line 1: | Line 1: | ||
+ | == Ú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ť | Robotnačka má na spodnej strane 6 infrasenzorov typu CNY70, ktoré sú síce iba binárne, ale dokážu rozoznať |
Latest revision as of 17:02, 3 April 2007
Ú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.
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é.