Dobrodružstvá s robotom

So stavebnicami LEGO Education Spike Prime sme zažili tieto štyri dobrodužstvá:
  1. Čudá a prieskumník
    Objavovali sme "čierne čudá" (senzory, snímače): senzor sily/dotykový senzor, ultrazvukový senzor na meranie vzdialenosti, farebný senzor/senzor intenzity odrazeného svetla). Zostrojili sme roboty s "differential drive" podvozkom (dve kolieska, každé poháňané svojim motorom + oporná gulička vzadu). Naprogramovali sme "prieskumníka" - robot sa pohybuje vpred až po prekážku, pred ňou zastane, zacúva, otočí sa do iného smeru a pokračuje znovu od začiatku:

    Čo sme sa tu naučili:
    1. blok "wait until" - program na tomto riadku čaká, až kým sa zadaná podmienka nesplní. Po splnení podmienky pokračuje príkazom na ďalšom riadku.
    2. používame dva druhy pohybových príkazov: prvý typ iba rozbehne motory (start moving) a program hneď pokračuje ďalším riadkom
    3. ak je zadaná vzdialenosť (čas, otáčky, stupne), tak program nepokračuje ďalej, kým sa pohyb celý nevykoná a na konci toho pohybu robot zastane
    4. pri otáčaní určujeme "prudkosť otáčania" - 100% znamená, že robot sa otáča na mieste, 0 znamená, že sa vôbec neotáča, iba sa pohybuje vpred, 30% (alebo iné percento zakrivenia) znamená, že sa pohybuje po príslušne prudko zatáčajúcej kružnici
  2. Pes
    Riešili sme problém robotického psa: ak je "pán" príliš blízko, pes cúva, aby naňho pán nestúpil, ak je pán príliš ďaleko, robot/pes sa pohybuje za ním, ak je tak akurát (20-50 cm), robot sedi na mieste a čaká, čo pán urobí, aby mohol zareagovať jedným alebo druhým spôsobom. Jedno možné riešenie:

    Čo sme sa tu naučili:
    1. na rozdiel od wait-until, príkaz if-then, alebo if-then-else na nič nečaká a testuje sa iba vtedy, keď je práve program na danom riadku, cyklus forever teda neustále opakuje telo cyklu znova a znova
    2. viacero podmienok if-then-else vieme zoradiť do vnorenej štruktúry
              if (podmienka) then 
                  ...príkazy...   // prípad 1
              else 
                  if (podmienka) then 
                      ...príkazy...  // prípad 2
                  else 
                      ...príkazy     // prípad 3
      
      čiže pomocou "dvojprípadového" if-then-else vieme takto testovať ľubovoľne veľa navzájom vylučujúcich sa prípadov - vždy do posledného else pridáme ďalší if-then-else
      
  3. Medzi dvomi čiarami
    Využili sme farebný senzor v režime intenzity odrazeného svetla (vracia percentá 0-100% - koľko svetla sa odrazí, čo je vhodné využiť napríklad na detekciu čiar na stole/podlahe, naprogramovali sme robota, aby jazdil medzi dvomi čiarami:

    Čo sme sa tu naučili:
    1. bez použitia krátkeho čakania (wait 1 sekund) program nefungoval, lebo keď sa robot dostal na prvú čiaru, podmienky vo wait-until boli splnené a cyklus sa začal neustále opakovať, robot dostával rýchlo zasebou príkazy "choď vpred", "choď vzad" a výsledok bol náhodný, preto po zmene smeru na čiare program musí počkať, kým sa robot z príslušnej čiary nedostal von
    2. hranicu intenzity odrazeného svetla nastavíme tak, aby bola približne uprostred hodnoty, ktorú senzor prečíta na čiare a na stole (môže byť trochu vyššia - potom robot zachytáva čiaru "skôr")
  4. Jazda po čiare
    Napokon sme naprogramovali jazdenie po čiare, čo sa dá urobiť viacerými rôznymi spôsobmi... Jeden zo spôsobov je, že robot nesleduje čiaru, ale jej okraj (rozhranie medzi čiernou čiarou a svetlým stolom), čiže v prípade, že je na čiare točí do jednej strany (a pohybuje sa pritom vpred) a ak je mimo čiary, točí do druhej strany (a pohybuje sa pritom vpred). Podľa toho, aké prudké zákruty na dráhe sú je potrebné zvoliť príslušnú prudkosť otáčania. Ak vymeníme vľavo a vpravo - program bude stále fungovať, ale bude sa pohybovať po druhom okraji čiary.

    Čo sme sa tu naučili:
    1. Niekedy aj prekvapujúco jednoduchý program využívajúci triviálnu lokálnu interakciu/pravidlo vedie k užitočnému zložitému správaniu, ktoré by sme vopred neočakávali (tento princíp sa niekedy označuje emergencia - emergentné správanie)
    2. Program sme rozšírili, aby robot pri sledovaní prekážky nenabúral, zastal, trúbil a počkal, kým prekážka zmizne a potom pokračoval v sledovaní čiary
A dnes sa konečne dostávame k Vášmu vlastnému projektu. Môže to byť Vaša vlastná myšlienka, potrebné je, aby robot využíval nejaký senzor, cykly, podmienky - aby nebol celkom triviálny. Ak potrebujete inšpiráciu, tu je niekoľko nápadov:
(môžete na projekty kliknúť a prečítať si viac...)

    jednoduchšie:

  1. gimbal - robot bude mať "rukoväť" s dvoma motormi, ktoré umožnujú nakláňať riadiacu jednotku v dvoch osiach, program bude neustále čítať gyroskop (pitch, roll) a pomocou motorov vyrovnávať kocku tak, aby bola neustále vodorovne.
  2. lyžiar - robota položíme náhodne otočeného na naklonenú rovinu, sám sa otočí smerom do kopca, vyjde navrch kopca (ktorý zistí pomocou senzora), tam sa otočí a "zjachá" nadol (spodok kopca tiež nájde senzorom)
  3. električka - robot bude pomocou farebného senzora jazdiť po čiare a na miestach označených červenou páskou bude zastavovať - ako električka na zastávkach
  4. riadenie farebnými kockami - robot bude reagovať na rôzne farebné kocky rôznymi pohybmi - napr. zelená: kúsok vpred, modrá: otoč sa vpravo, žltá: otoč sa vľavo, atď.
  5. pozdĺžne parkovanie - ultrazvukový senzor smeruje vpravo vzhľadom na pohyb robota a hľadá vhodné miesto na zaparkovanie, keď ho nájde tak tam zaparkuje.

  6. pre bádateľov:

  7. kalkulačka s čiarami - na podlahe budú dva úseky s priečnymi čiarami, oddelené dlhšou medzerou. Robot zistí počty čiar v oboch úsekoch (A,B) a na displeji postupne zobrazí čísla A, B a (A+B)
  8. programovanie farebnými kockami - podobne ako riadenie farebnými kockami, ale celú postupnosť kociek najskôr robotovi ukážeme, ten si ju zapamätá a potom ju naraz celú vykoná
  9. výpočet plochy pôdorysu krabice - robot má smerom vpravo namontovaný ultrazvukový senzor, obíde krabicu a na displeji zobrazí pôdorys jej plochy :-)
  10. kalkulačka s ultrazvukom - pred ultrazvukovým senzorom mávame rukou, robot spočíta počet mávnutí (2x - čísla A,B) a potom vypíše čísla A, B a (A+B)

  11. pre fajnšmekrov:

  12. záznam rytmu - pomocou dotykového senzora "naťukáme nejaký rytmus", robot si ho zapamätá a potom odpípa celý naspäť.