Robotický simulátor PRIA IDE: Rozdiel medzi revíziami
Zo stránky SensorWiki
Bez shrnutí editace |
Bez shrnutí editace |
||
Riadok 77: | Riadok 77: | ||
<tab name="Python"><source lang="python" style="background: LightYellow;"> | <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 2"> | |||
[[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> | </source></tab> | ||
</tabs> | </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. |
Verzia z 10:30, 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 ZPOC:
a vhodne ho pomenujeme
potom vstúpime do prostredia, ktoré sa skladá z niekoľkých častí:
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.