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
 
(17 medziľahlých úprav od rovnakého používateľa nie je zobrazených.)
Riadok 6: Riadok 6:
</tabs>
</tabs>
-->
-->
[[Súbor:priaIDE05.png]]


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:
<CENTER>[[Súbor:priaIDE02.png|350px]]&nbsp;&nbsp;[[Súbor:priaIDE03.png|350px]]</CENTER>
potom už vstúpime do prostredia, ktoré sa skladá z niekoľkých častí, opísaných na nasledovnom obrázku:
<CENTER>[[Súbor:priaIDE04.png|750px|center]]</CENTER>
Teraz skúsime program trocha rozšíriť o jeden pohyb naviac a potom vypíšeme
do konzoly stav senzorov.


<tabs>
<tabs>
<tab name="Simulator 1"><source lang="">
<tab name="Simulator 1">
 
[[Súbor:priaIDE05.png]]
[[Súbor:priaIDE05.png]]
</source></tab>
 
 
</tab>
<tab name="Python"><source lang="python" style="background: LightYellow;">
<tab name="Python"><source lang="python" style="background: LightYellow;">


Riadok 42: Riadok 57:
</source></tab>
</source></tab>
</tabs>
</tabs>
Po stlačení <FONT COlor="green">▶</FONT> 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č.
<CENTER>[[Súbor:priaIDE06.png|450px]]</CENTER>
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:
<tabs>
<tab name="Simulator 2">
[[Súbor:priaIDE07.png]]
</tab>
<tab name="Python"><source lang="python" style="background: LightYellow;">
while hedgehog.get_analog(5) >= 200:
  hedgehog.commands(
    hedgehog.move_motor_cmd(0, 1000),
    hedgehog.move_motor_cmd(1, 1000),
  )
</source></tab>
</tabs>
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).
<tabs>
<tab name="Simulator 3">
[[Súbor:priaIDE08.png]]
</tab>
<tab name="Python"><source lang="python" style="background: LightYellow;">
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),
)
</source></tab>
</tabs>
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.
{| style="padding:0 0.5em;"|
<!-- Right column 3 orange -->
| style="width:70%; vertical-align:top; border:1px solid #fad67d; background:#faf6ed;"|
<div style="border-bottom:1px solid #fad67d; background:#faecc8; padding:0.2em 0.5em; font-size:110%; font-weight:bold;">'''Úloha 1:'''</div>
<div style="border-bottom:1px solid #fad67d; padding:0.4em 1em 1em;">
Vypracujte program v robotickom simulátore na kompletné povysávanie miestnosti. <BR>
Hotový program spustite v simulátore a po splnení úlohy spravte screenshot na ktorom bude ZRETEĽNE vidno koncový stav v simulátore ako aj CELÝ a JASNÝ 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.
<CENTER>[[Súbor:priaIDE10.png|750px|center]]</CENTER>
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 ([https://www.youtube.com/watch?v=XwQzhn6HOfw 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 ([https://www.youtube.com/watch?v=8EQUf5FLpq0 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.
<CENTER>[[Súbor:priaIDE11.png|750px|center]]</CENTER>
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.
<tabs>
<tab name="Simulator 4">
[[Súbor:priaIDE12.png]]
</tab>
<tab name="Python"><source lang="python" style="background: LightYellow;">
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),
    )
</source></tab>
</tabs>
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).
{| style="padding:0 0.5em;"|
<!-- Right column 3 orange -->
| style="width:70%; vertical-align:top; border:1px solid #fad67d; background:#faf6ed;"|
<div style="border-bottom:1px solid #fad67d; background:#faecc8; padding:0.2em 0.5em; font-size:110%; font-weight:bold;">'''Úloha 2:'''</div>
<div style="border-bottom:1px solid #fad67d; padding:0.4em 1em 1em;">
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 CELKOM ZRETEĽNE vidno váš program a tiež koncový stav v simulátore.
Odovzdajte v Classsrome a získate príslušný počet bodov.
|}
[[Category: Základy počítačov]]

Aktuálna revízia z 14:39, 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 ZRETEĽNE vidno koncový stav v simulátore ako aj CELÝ a JASNÝ 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 CELKOM ZRETEĽNE vidno váš program a tiež koncový stav v simulátore. 
Odovzdajte v Classsrome a získate príslušný počet bodov.