Főoldal › Robotika › Programozási segédanyagok

ROBOTIKA · SEGÉDANYAGOK

Programozási segédanyagok

A Robotcsapat leckéi, kódrészletei és építési ötletei egy helyen — a szakkörhöz és otthoni gyakorláshoz. LEGO SPIKE Prime, SPIKE App 3.

LÉPÉSRŐL LÉPÉSRE

Leckék

Junior · 11–15 év

Leckék – Python

Ö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.

  • 0. Szótár – mit jelentenek a szavak?
  • 1. Elindul és megáll
  • 2. Pontos távolság fokokkal
  • 3. Kanyarodás
  • 4. Pontos fordulás giroszkóppal
  • 5. Saját parancsok és mini pálya
Elementary · 8–12 év

Leckék – Word Blocks

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.

  • 0. START és a segédblokkok
  • 1. EGYENES · 2. FORDUL
  • 3. Igazodás falhoz és vonalhoz
  • 4. VONALKÖVET · 5. KAR · 6. SZÍNOLVAS
  • Hangolási tábla, emelő-vivő technika, egy futam váza

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

Kódrészletek

Python · Junior

Előre és hátra centiméterben

A cm_fok függvény a centit kerékfokra váltja (17,6 cm = 360°), az elore és a hatra erre épül.

Kód megtekintése
# 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)
Python · Junior

Giroszkópos fordulás

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.

Kód megtekintése
# 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)
Python · Junior

A teljes parancskészlet („alap” fájl)

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.

Kód megtekintése
# 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)
Word Blocks · Elementary

EGYENES – giroszkóppal

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.

Recept megtekintése
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)
Word Blocks · Elementary

FORDUL – abszolút irányra

Nem „ennyi fokot fordul”, hanem egy irányba áll be: messziről gyorsan, a cél közelében lassan, 1°-on belül.

Recept megtekintése
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-et
Word Blocks · Elementary

VONALKÖVET

A vonal szélét követi a színszenzorral. Előtte kalibráljátok a fekete–fehér határt!

Recept megtekintése
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 meg

A 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

Építsünk versenyrobotot!

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.

Kezdésnek ajánlott

A – Kompakt doboz

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.

  • Előnye: helyben fordul, stabil, minden feladattípushoz jó
  • Hátránya: kevés hely a második szerkezetnek
Stabil

B – Hosszú tengelytáv

Kb. 20 cm hosszú, a támasz messze hátul, a kerekek elöl a kar alatt.

  • Előnye: egyenesen nagyon stabil, emeléskor nem bukik előre
  • Hátránya: nagyobb fordulókör, szűk helyen nehezebb
Haladó

C – Kétoldalas robot

Elöl emelőkar, hátul toló vagy szállítórekesz a második motorral.

  • Előnye: tolatva is dolgozik: egy út alatt két feladat
  • Hátránya: nehezebb kiegyensúlyozni, több tervezést kér

A jó versenyrobot 10 szabálya

  1. Belefér a kockába. Induláskor a robot a szerkezetekkel és kábelekkel együtt beférjen egy 25 × 25 × 25 cm-es kockába.
  2. Merev, mint egy tégla. Semmi ne hajoljon, ne nyikorogjon. Merevíts háromszögekkel és keresztirányú gerendákkal.
  3. Két egyforma hajtómotor. A kerék közvetlenül a motoron legyen, ne fogaskerekeken át.
  4. A kerék tengelye két oldalon megfogva. Különben terhelés alatt megdől, és a robot elhúz.
  5. Súly középen és alul. A hub laposan, szilárdan rögzítve, a hajtókerekek közelében.
  6. Három pont a talajon. Két hajtókerék + egy sima, lekerekített támasz.
  7. Szenzorok mindig ugyanott. A színszenzor elöl, 0,5–1 cm-re a szőnyeg fölött, mereven.
  8. Helyet a szerkezeteknek. Elementaryban összesen 4, Juniorban 5 motor lehet a robotban.
  9. Rendben tartott kábelek. Ne érjenek a kerékhez, ne akadjanak bele a pályaelemekbe.
  10. Minden elérhető. Az indítógomb kívül; az akku kivehető anélkül, hogy szétszednéd a robotot.

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.