User Manual
115
Příklad 10: Konečný stavový automat, část 2
Adresář: <RP6Examples>\RP6BaseExamples\Example_05_Move_04_FSM2\
Soubor: RP6Base_Move_04_FSM2.c
POZOR: Robot se bude v tomto programu pohybovat!
Nyní vyzkoušíme konečný stavový automat s pohyblivým robotem! Program je skutečně
jednoduchý. Nejdříve bliká LED 5. Přitom robot po nás požaduje: “Můžete, prosím, někdo
stisknout levý nárazník?”. Když to uděláte, přesune se RP6 asi o 15 cm dozadu a začne blikat
stavová LED 2. Obvykle nyní předpokládáte, že někdo stiskne pravý nárazník, který způsobí, že
se robot opět přesune 15 cm dopředu
a cyklus se spustí od začátku.
Struktura konečného stavového automatu není nijak zvláštní. Je velmi podobná prvnímu
příkladu, který jste viděli výše, kde bylo v programu napsáno “START Stav1 Stav2...”, ale je
rozšířen přidáním několika podmíněných výrazů. V případě, že robot čeká, než se dokončí
pohyb, používají dva stavy volání funkce “isMovementComplete()”. Uvnitř těchto stavů, program
dále provádí jednoduché části kódu, kde pomocí stopek přepíná LED v intervalu 500ms. Tato
část může být samozřejmě nahrazená libovolnou posloupností kódu – třeba běžícím světlem
z příkladu 1.
Můžeme popsat řadu stránek o konečných stavových automatech a podobných tématech, ale
jak jsme již uvedli – tento materiál je pouze příručka a ne referenční kniha konečných stavových
automatů. A tak raději přejdeme k dalším ukázkovým programům…
Příklad 11: Řízené chování robotu
Adresář: <RP6Examples>\RP6BaseExamples\Example_05_Move_04\
Soubor: RP6Base_Move_04.c
POZOR: Robot se bude v tomto programu pohybovat!
Předchozí příklady automatů vedou k následujícímu programu, který implementuje jednoduché
řízení chování robotu. Pro zjednodušení používáme pouze dva způsoby chování. V dalších
příkladech budeme základní program postupně rozšiřovat, až se vytvoří jednoduché chování
hmyzu. První krok vytvoří náš “hmyz” pouze se dvěma malými snímači, které hlásí kolize.
První dva způsoby chování se nazývají “Projížďka” a “Únik”. Chování “Projížďka” pouze říká
robotu “jeď dopředu” a nedělá žádné další aktivity. Samozřejmě můžeme přidat další věci, tj.
občasné projíždění zatáček nebo zrychlování a zpomalování podle napětí baterie. Kvůli
modularitě strukturovaného programu radíme raději navrhnout samostatný program, který bude
zahrnovat toto chování.
Na rozdíl od “Projížďky” je chování “Únik” docela složité a bude aktivní, jakmile nárazníky zjistí
kolizi. Podle toho, který nárazní se stlačí, robot couvne o několik centimetrů zpět, natočí se a
následně se vrátí k řízení chování “Projížďka”.
Tuto strukturu můžeme vyjádřit jednoduchým diagramem:
Pomocí “Supresor” S chování “Únik” potlačí výstup chování “Projížďka” a systému vnutí řízení
motorů vlastními povely. Obvykle má “Únik” vyšší prioritu než “Projížďka”.