Operácie

Robotický simulátor PRIA IDE: Rozdiel medzi revíziami

Zo stránky SensorWiki

Balogh (diskusia | príspevky)
Bez shrnutí editace
Balogh (diskusia | príspevky)
Bez shrnutí editace
Riadok 9: Riadok 9:
Simulátor sa nachádza na adrese https://ide.pria.at
Simulátor sa nachádza na adrese https://ide.pria.at


Najprv si treba založiť nový projekt, alebo vytvoriť kópiu z niektorého už existujúceho. My na úvod použijeme projekt ZPOC, ktorý si vhodne pomenujeme:  
Najprv si treba založiť nový projekt, alebo vytvoriť kópiu z niektorého už existujúceho. My na úvod použijeme projekt '''ZPOC1: vysavac''', ktorý si vhodne pomenujeme:  


<CENTER>[[Súbor:priaIDE02.png|350px]]&nbsp;&nbsp;[[Súbor:priaIDE03.png|350px]]</CENTER>
<CENTER>[[Súbor:priaIDE02.png|350px]]&nbsp;&nbsp;[[Súbor:priaIDE03.png|350px]]</CENTER>

Verzia z 14:22, 27. november 2022


Simulátor sa nachádza na adrese https://ide.pria.at

Najprv si treba založiť nový projekt, alebo vytvoriť kópiu z niektorého už existujúceho. My na úvod použijeme projekt ZPOC1: vysavac, ktorý si vhodne pomenujeme:

  

potom už vstúpime do prostredia, ktoré sa skladá z niekoľkých častí, opísaných na nasledovnom obrázku:


Teraz skúsime program trocha rozšíriť o jeden pohyb naviac a potom vypíšeme do konzoly stav senzorov.


import math

hedgehog.commands(
  hedgehog.move_motor_cmd(0, 1000),
  hedgehog.move_motor_cmd(1, 1000),
)
sleep(1)

hedgehog.commands(
  hedgehog.brake_cmd(0),
  hedgehog.brake_cmd(1),
)
hedgehog.commands(
  hedgehog.move_motor_cmd(0, 1000),
  hedgehog.move_motor_cmd(1, -1000),
)
sleep(1)

hedgehog.commands(
  hedgehog.brake_cmd(0),
  hedgehog.brake_cmd(1),
)

print(''.join([str(x) for x in ['SEN: ', round(hedgehog.get_analog(4)), ' / ', round(hedgehog.get_analog(5)), ' / ', round(hedgehog.get_analog(6))]]))

Po stlačení sa robot posunie, pootočí a vypíše stav svojich troch predných senzorov. Na nasledujúcom obrázku je stav po treťom spustení programu. Ľavý senzor detekuje prekážku vo vzdialenosti 2458, stredný a pravý nevidia až do konca svojho rozsahu (4000) nič.

Teraz by už nemalo byť ťažké pomocou testovania stredného senzora napísať program, ktorý dovolí robotovi priamočiary pohyb až po najbližšiu prekážku:

while hedgehog.get_analog(5) >= 200:
  hedgehog.commands(
    hedgehog.move_motor_cmd(0, 1000),
    hedgehog.move_motor_cmd(1, 1000),
  )

Rovnako môžeme na detekciu prekážky použiť aj nárazník (senzor číslo 8) a aby mohol vysávať aj ďalej, môžeme po detekcii prekážky trocha cúvnuť a otočiť sa iným, náhodným smerom. Takto to budeme opakovať donekonečna (treba doplniť slučku WHILE).

import random

while hedgehog.get_digital(8):
  hedgehog.commands(
    hedgehog.move_motor_cmd(0, 1000),
    hedgehog.move_motor_cmd(1, 1000),
  )

hedgehog.commands(
  hedgehog.move_motor_cmd(0, -1000),
  hedgehog.move_motor_cmd(1, -1000),
)
sleep(1)

hedgehog.commands(
  hedgehog.brake_cmd(0),
  hedgehog.brake_cmd(1),
)

hedgehog.commands(
  hedgehog.move_motor_cmd(0, 1000),
  hedgehog.move_motor_cmd(1, -1000),
)

sleep(random.random())

hedgehog.commands(
  hedgehog.brake_cmd(0),
  hedgehog.brake_cmd(1),
)

Po chvíli isto prídete na to, že robot často ostane zaseknutý medzi nábytkom. Preto treba jeho pohyb zabezpečiť kombináciou viacerých senzorov. To už je však vaša úloha.

Úloha 1: Vypracujte program v robotickom simulátore na kompletné povysávanie miestnosti.
Hotový program spustite v simulátore a po splnení úlohy spravte screenshot na ktorom bude vidno koncový stav v simulátore ako aj váš program. Odovzdajte v Classsrome a získate 2 body.


Na riešenie druhej úlohy si znova spravíme lokálnu kópiu úlohy ZPOC 2: Parkovanie, ktorou sa nám nahrá aj nové prostredie pre robota.

V prostredí sa nachádzajú tri garáže, ich číslo zároveň určuje počet bodov, ktoré môžete získať. Ak naprogramujete robota len pomocou na pevno zadaných pohybov a trafíte tak do garáže 2, dostanete 2 body. Ak použijete senzory na navigáciu po čiare ktorými trafíte do garáže 3, dostanete 3 body (ukážka). Ak naviac zdetekujete dopravnú značku a vhodne odbočíte, ďalej po čiare trafíte až do garáže 4, dostanete 4 body (ukážka). Auto musí byť v garáži zaparkované "pekne" teda nie zarazené do steny. Nie je možné kombinovať úlohy, teda napr. nemôžete prísť do garáže 4 bez pomoci senzorov.

Na detekciu čiary použite senzory č. 0 (celkom vľavo), 1 (vľavo), 2 (vpravo) a 3 (celkom vpravo). Senzory detekujú čiaru (log. 1) na bielom podklade (log. 0). Ukážkový základ programu, ktorý sa vám do prostredia nahrá detekuje biely podklad. Za predpokladu, že čiara je presne medzi nimi (0-0) sa bude robot pohybovať rovno vpred. V prípade, že čiara uhne bokom, jeden zo senzorov ju zdetekuje (1) a robot sa zastaví. Vaša úloha potom spočíva v doprogramovaní tak, aby robot zabočil príslušným smerom a pokračoval tak v sledovaní čiary.

while True:
  if not hedgehog.get_digital(1) and not hedgehog.get_digital(2):
    hedgehog.commands(
      hedgehog.move_motor_cmd(0, 1000),
      hedgehog.move_motor_cmd(1, 1000),
    )
  else:
    hedgehog.commands(
      hedgehog.brake_cmd(0),
      hedgehog.brake_cmd(1),
    )


Na detekciu odbočky - červená dopravná značka - môžete použiť pravý senzor vzdialenosti (č. 6) a na správne zaparkovanie vo vnútri všetky tri senzory vzdialenosti (4, 5 a 6).

Úloha 2: Vypracujte program v robotickom simulátore na zaparkovanie vozidla do garáže. Hotový program spustite v simulátore a po splnení úlohy spravte screenshot na ktorom bude vidno koncový stav v simulátore ako aj váš program. Odovzdajte v Classsrome a získate príslušný počet bodov.