Robotický simulátor PRIA IDE
Zo stránky SensorWiki
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:
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. |
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.
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. |