Skip to content

Roman Dolejší - DU-14 - Line navigator#72

Open
rdolejsi wants to merge 4 commits into
Global-Classes-CZE:mainfrom
rdolejsi:du-14-line-navigator
Open

Roman Dolejší - DU-14 - Line navigator#72
rdolejsi wants to merge 4 commits into
Global-Classes-CZE:mainfrom
rdolejsi:du-14-line-navigator

Conversation

@rdolejsi
Copy link
Copy Markdown

@rdolejsi rdolejsi commented Oct 27, 2024

Při realizaci úkolu 14 jsem se zaměřil na kompletní implementaci plně rozvětvené stavové mašiny. Níže jsou základní rysy naprosto přepracovaného frameworku oproti úkolu 13:

(Uživatelské) Funkce

  • Jízda po čáře
  • Podpora ostrých úhlů (aumatická reakce a následné zatáčení)
  • Plná podpora detekce všech typů křižovatek
  • Při detekci křižovatky plně uživatelsky interaktivní, umožňuje vybrat uživateli směr, kam robot dál pojede

Struktura

  • Hlavní kód nic nedělá
  • Charakteristika chování robota je definována třídou Behavior, nastavená hlavním kódem zde
  • Hlavní kontext robota je držen ve třídě Ctx
  • Ctx drží operační parametry robota a sbírá omezenou historii změn senzorů (stav + počet cyklů, po který byl stav držen)
  • Stavová mapa je dostupná ve třídě StateMap
  • Stavy jsou děleny do souborů na generické, čáru, ostré zatáčení a křižovatky - ostré zatáčení a křižovatky se dají vypnout

Stavová mašina

  • Stavová mašina je samonosná, bez nutnosti vnějšího zásahu
  • Stavy umí implicitní a explicitní přechody mezi sebou
  • Implicitní přechody mezi stavy řídí StateMatcher - takové přechody jsou agresivní, stavy jsou schopny převzít nadvládu
  • Každý stav běží jednu z několika akcí, které umí mezi sebou přecházet (implicitně dle senzoru nebo explicitně)
  • SensorHistoryStateMatcher je schopen mrknout na historii chování robota a porovnat ji se vstupními podmínkami stavů
  • Stav umí definovat implicitní přechody do jiných stavů, které jsou pro něj povolené, jiné se stavovka neodváží vykonat
  • nestane se tedy např., že křižovatce sebere ovládání čára jen proto, že právě máme v senzorech čáru - křižovatka nemá čáru v seznamu implicitních přechodů

Podpůrné (ale důležité)

  • s tímto úkolem jsem již přešel na Pico:Ed - objemově není šance, aby se v MicroPythonu řešení vešlo do Micro:Bitu
  • vznikla kompletní hardwarová abstraktní vrstva (HAL) s implementovanout podporou jak Micro:Bitu, tak Pico:Edu
  • HAL je navržen tak, aby nespecifický kód nepotřeboval vůbec vědět, kde běží
    • všechny vyšší funkce (zobraz akci, zobraz volbu uživatele, zobraz rychlost motorů, ..) jsou na každé platformě přizpůsobeny displeji, který je k dispozici
  • samozřejmě vznikla plná podpora zobrazování stavu senzorů, piktogramů jízdy a uživatelského rozhodování

Kompilace projektu

  • nová verze build frameworku je k dispozici zde
  • vše bylo razantně přepracováno, aby byla podporována úplná autodetekce platformy (prozatím Micro:Bit či Pico:Ed)
  • build dle nalezené platformy vybere HAL implementaci (system_mbit.py nebo system_ped.py)
  • předka, co je používán hlavním kódem (System v system.py) přejmenuje na stejnou třídu s příponou Base
  • vše je spojeno dohromady a odesláno na platformu
  • tím je zajištěno, že hlavní kód v editorech bez problémů funguje včetně doplňování, ale na zařízení je nahrazen reálnou implementací

Celé chování robota je možné vidět na videu 1 nebo videu 2. Případné nepřesnosti při detekci křižovatek bude možné samozřejmě později doladit parametry ve třídě Behavior, která napovídá robotovi, které rychlé přechody má přeskočit, jak rychle se má otáčet a podobné parametry, které zásadně mění jeho chování.

Vše bylo implementováno tak, aby bylo možné celý kód bez větších problémů použít v závěrečné práci, v jejíž první části má robot poslouchat zadanou sekvenci příkazů. I proto byla pro tento úkol 14 raději zvolena interaktivita s uživatelem, aby toto řešení pro velmi pokročilé nebylo ve finále shodné s prvním finálním úkolem 😉

@rdolejsi rdolejsi changed the title DU-14 - Line navigator Roman Dolejší - DU-14 - Line navigator Oct 28, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant