Hogyan érdemes Python robot fejlesztő környezetre váltani

Amikor 3 éve a Blokkolók csapat blokkokkal való programozásról Python-ra váltott, elég kellemetlen helyzetbe kerültem (hiszen én javasoltam a váltást). Az átállás nagyon egyszerűnek tűnt, csak Pythont kell választani a Lego fejlesztői programban, megtanítani az eddig használt blokkok python megfelelőit … Hát, elég nagy tévedés volt, és nem a Python miatt (Akkor már két éve tanítottam pár fiúnak Minecraft Python programozást, és Python „játék-fejlesztést”). Az IDE (programozó felület) gyengeségeit ugyan meg lehetett kerülni és később kicsit javítottak is rajta, de nagyon lassan működött minden. És a csapat nem látott semmilyen előnyt a Pythonra váltásból. Ezután VS code-ban írt kódból használtuk a beépített micropython API-t. Ez így már gyorsabb volt, de nagyon sok plusz programkódot igényelt a pontos mozgáshoz. Idén szeptemberben kezdtük el használni a Pybricks-et és ez végre egy olyan megoldás, amivel szerintem oda lehet állni a gyerekek elé, hogy „Váltsunk Python-ra!”

Már régóta tervezem, hogy csinálok egy összehasonlítást a Lego Spike/Robot Inventor fent említett Python programozási lehetőségeiről. De mivel alapos, valós felhasználást összehasonlító példákkal akartam ezt megtenni, mindig elnapolódott. Tegnap az FLL Tatabányai fordulóján eldöntöttem, hogy nem várhat tovább, hogy legalább az összehasonlítás „győztesét” megosszam és ezzel esetleg segítsem más csapatok (és csapat vezetők) munkáját.

Pybricks

A Pybrick Python programozása ingyenes, és nyílt forráskódú ( tehát az is marad 🙂 ). A blokkokkal programozáshoz regisztrálni és gondolom fizetni kell, de ezzel nincs semmilyen tapasztalatunk.

A fejlesztő környezet ( code.pybricks.com ) használatához csak egy támogatott böngésző program kell. Mi Google Chrome-ot használjuk egy Windows 11-es laptopon. Az első betöltéskor végigvezet a Lego vezérlő belső programjának (firmware) lecserélésén. És segít visszaállítani is, ha újra az eredeti firmware-t szeretnéd használni.

Első betöltés

Minden elég egyértelmű és sok online segítség is található, ezért én most csak azokra a funkcióra fókuszálok, amik megkönnyítik az FLL robotfutamok programozását és futtatását.

Mozgások

Két motorral – lehetőleg pontosan – mozgatni a robotot, ez az alapja a feladatok megoldásának. Amit a Spike robotból ki lehet hozni azt a DriveBase() osztály kihozza.

Dokumentáció és kitöltési segéd könnyen elérhető

Az alap mozgások:

from pybricks.pupdevices import Motor
from pybricks.parameters import Port, Direction
from pybricks.robotics import DriveBase

# Motorok létrehozása
# A bal motor fordítva forog az előrehaladáshoz
bal_motor = Motor(Port.A, Direction.COUNTERCLOCKWISE)
jobb_motor = Motor(Port.B)

# Robot felépítése. Kerék átmérő: 56mm.
# Kerék-talaj érintkezések közötti távolság 112mm.
robot = DriveBase(bal_motor, jobb_motor, wheel_diameter=56, axle_track=112)
# Használjuk a giroszkópot a mozgások javítására.
robot.use_gyro(True)
# Mozgás sebesség 300 mm/s, gyorsulás 1500 mm/s2, 
# forgás szögsebesség 90 fok/s, szöggyorsulás 900 fok/s2
robot.settings(300, 1500, 90, 900)

# Egyenesen előrre 500mm
robot.straight(500)
# Egyenesen hátra 200mm
robot.straight(-200)

# Jobra fordu 30 fokot.
robot.turn(30)
# Balra fordul 45 fokot.
robot.turn(-45)

# 300 mm sugarú körívben jobbra előre 45 fokot
robot.curve(300, 45)
# 300 mm sugarú körívben balra előre 45 fokot
robot.curve(300, -45)
# 300 mm sugarú körívben jobbra hátra 45 fokot
robot.curve(-300, 45)
# 300 mm sugarú körívben balra hátra 45 fokot
robot.curve(-300, -45)

Program menü

A Pybricks csak egy programot tud futtatni egyszerre, ami elég problémásnak tűnik elsőre. De egy kis plusz kóddal persze meg lehetett kerülni ezt, viszont a legújabb verzióban már erre sincs szükség. Kifejezetten FLL csapatok kérésére fejlesztették a menu() funkciót, amivel minden „futást” egy programból lehet indítani, de külön-külön lehet őket fejleszteni.

A hub.system.storage függvény segítségével el lehet tárolni a kiválasztást, és a következő indításkor a soron következő számtól indítani a választási lehetőségeket. Ezzel két gombnyomással gyorsan lehet indítani a következő feladat megoldást. És a Pybricks tényleg gyorsan indul és áll le a középső gomb megnyomására.

from pybricks.tools import hub_menu
from pybricks.hubs import PrimeHub

# Programok indítása menuből

hub = PrimeHub()
# Utoljára indított tárolt érték olvasása
elozo = hub.system.storage(0,read=1)

# Választási lehetőségek, hogy a következő legyen az első
if elozo == b'\x01':
   selected = hub_menu("2", "3", "4", "5", "1") 
elif elozo == b'\x02':
    selected = hub_menu("3", "4", "5",  "1", "2")
elif elozo == b'\x03':
    selected = hub_menu("4", "5",  "1", "2", "3")
elif elozo == b'\x04':
    selected = hub_menu("5",  "1", "2", "3", "4")
else:
    selected = hub_menu("1", "2", "3", "4", "5")
# Utoljára indított tárolása
irando= [int(selected)]
hub.system.storage(0, write=bytes(irando))

# Programok futtatása a választás alapján
if selected == "1":
    import e1so_run
elif selected == "2":
    import m2sodik_run
elif selected == "3":
    import h3rmadik_run
elif selected == "4":
    import n4gyedik_run
elif selected == "5":
    import o5odik_run

Jobb robot fejlesztői környezet = kevesebb frusztráció

A csapatnak kevesebb „Az előbb még működött !” felkiáltás jutott az idén, a pontosabb mozgatásnak köszönhetően (Persze azért volt 🙂 ). És a program fejlesztése is gyorsabb volt.