LÉPÉSRŐL LÉPÉSRE
Öt rövid, egymásra épülő lecke. A végére Pythonban indítjátok, megállítjátok, pontos távolságra viszitek és giroszkóppal fordítjátok a robotot. Minden program soronként el van magyarázva.
Saját blokkok (My Blocks) receptjei szóblokkos programozáshoz. Ezekből minden küldetés összerakható – mindegyik után egy próbával, amivel megmérhetitek a pontosságot.
Ezek alapozó építőkövek, nem kész versenymegoldások: a WRO szabálya szerint a versenyprogramot a csapatnak magának kell megírnia.
MÁSOLD, PRÓBÁLD KI
A cm_fok függvény a centit kerékfokra váltja (17,6 cm = 360°), az elore és a hatra erre épül.
# Előre és hátra centiméterben (5. lecke) – a main-t te írod hozzá
from hub import port, motion_sensor
import motor_pair
import runloop
KEREK_KERULET = 17.6
def cm_fok(cm):
return int(cm * 360 / KEREK_KERULET)
async def elore(cm, seb=300):
await motor_pair.move_for_degrees(motor_pair.PAIR_1, cm_fok(cm), 0, velocity=seb)
async def hatra(cm, seb=300):
await motor_pair.move_for_degrees(motor_pair.PAIR_1, -cm_fok(cm), 0, velocity=seb)A robot addig fordul, amíg a hub giroszkópja a kért szöget nem méri – kerékcsúszástól függetlenül.
# Giroszkópos fordulás (4–5. lecke) – a main-t te írod hozzá
from hub import port, motion_sensor
import motor_pair
import runloop
async def gyro_fordul(szog, seb):
motion_sensor.reset_yaw(0)
await runloop.sleep_ms(100)
motor_pair.move_tank(motor_pair.PAIR_1, seb, -seb)
while abs(motion_sensor.tilt_angles()[0]) < szog * 10:
await runloop.sleep_ms(5)
motor_pair.stop(motor_pair.PAIR_1)
async def jobbra(szog):
await gyro_fordul(szog, 150)
async def balra(szog):
await gyro_fordul(szog, -150)Minden csapat ezt másolja be az új programjai elejére, a saját beállított értékeivel. Bal motor: E, jobb motor: F.
# 5. lecke: saját parancskészlet
from hub import port, motion_sensor
import motor_pair
import runloop
KEREK_KERULET = 17.6
def cm_fok(cm):
return int(cm * 360 / KEREK_KERULET)
async def elore(cm, seb=300):
await motor_pair.move_for_degrees(motor_pair.PAIR_1, cm_fok(cm), 0, velocity=seb)
async def hatra(cm, seb=300):
await motor_pair.move_for_degrees(motor_pair.PAIR_1, -cm_fok(cm), 0, velocity=seb)
async def gyro_fordul(szog, seb):
motion_sensor.reset_yaw(0)
await runloop.sleep_ms(100)
motor_pair.move_tank(motor_pair.PAIR_1, seb, -seb)
while abs(motion_sensor.tilt_angles()[0]) < szog * 10:
await runloop.sleep_ms(5)
motor_pair.stop(motor_pair.PAIR_1)
async def jobbra(szog):
await gyro_fordul(szog, 150)
async def balra(szog):
await gyro_fordul(szog, -150)Saját blokk: menet közben méri az eltérést, és arányosan visszakormányoz. A recept alapján rakjátok össze blokkokból.
EGYENES (cm, seb, irány)
B relatív pozíciója legyen 0 (set relative position to 0)
CÉLFOK = cm × 360 / KERÜLET
ismételd, amíg abs(B relatív pozíciója) > CÉLFOK (repeat until)
HIBA_SZÁMOL irány
KORR = HIBA × 2 (KP_EGYENES, hangolandó)
induljon: bal = seb + KORR, jobb = seb - KORR (start moving at % % speed)
állj meg (stop moving)Nem „ennyi fokot fordul”, hanem egy irányba áll be: messziről gyorsan, a cél közelében lassan, 1°-on belül.
FORDUL (cél)
HIBA_SZÁMOL cél
ismételd, amíg abs(HIBA) < 1
HIBA_SZÁMOL cél
S = HIBA × 0.7 (KP_FORDUL, hangolandó)
ha S > 40 akkor S = 40 (legnagyobb sebesség)
ha S < -40 akkor S = -40
ha (S > 0) és (S < 10) akkor S = 10 (legkisebb sebesség:
ha (S < 0) és (S > -10) akkor S = -10 e nélkül megállna a cél előtt)
induljon: bal = S, jobb = -S
állj meg
várj 0.15 mp-etA vonal szélét követi a színszenzorral. Előtte kalibráljátok a fekete–fehér határt!
VONALKÖVET (cm, seb) – a vonal bal szélét követi a C szenzorral
B relatív pozíciója legyen 0
CÉLFOK = cm × 360 / KERÜLET
ismételd, amíg abs(B relatív pozíciója) > CÉLFOK
HIBA = (C fényvisszaverés) - HATÁR
KORR = HIBA × 0.4 (KP_VONAL, hangolandó)
induljon: bal = seb + KORR, jobb = seb - KORR
állj megA Python-fájlt a SPIKE App 3-ban egy új, Python típusú projektbe másold. Ami a leckében új, azt érdemes magadnak begépelni: így tanulod meg.
ÉPÍTSD MEG
A WRO-ban futam közben nem nyúlhatsz a robothoz, ezért egyetlen robotnak kell minden feladatot megoldania 2 perc alatt. Három alvázötlet – válassz egyet, és tedd a sajátoddá. Mindháromnál a két közepes motor hajt, a nagy motor emel.
Kb. 16 × 18 cm; hub laposan középen, hajtókerekek a robot közepén, hátul csúszó támasz, elöl 1–2 színszenzor és a karmotor.
Kb. 20 cm hosszú, a támasz messze hátul, a kerekek elöl a kar alatt.
Elöl emelőkar, hátul toló vagy szállítórekesz a második motorral.
Tipp: nem kell elsőre tökéletesnek lennie. A jó csapatok 3–4-szer átépítik az alvázat, amíg el nem érik a pontosságot – ezért mérünk minden alkalommal.
KÜLSŐ FORRÁSOK