Hajtáslánc#
Bevezetés#
A hajtáslánc kerekeket és motorokat tartalmaz, amelyek a robot mozgását és fordulását szabályozzák. A hajtásláncok olyan buildekben találhatók meg, mint a Code Base 2.0, a Super Car vagy egy egyedi robot.
A hajtásláncok az agyban található inerciális érzékelőt használják az ütközések észlelésére, és segítik a robot pontos mozgását és fordulását. Minden projekt elején a hajtáslánc automatikusan kalibrálja az inerciális érzékelőt. A kalibrálás során tartsa a robotot mozdulatlanul körülbelül 2 másodpercig, hogy a robot megfelelően mozoghasson és fordulhasson.
A hajtáslánc kódolásának számos módja van. Az alábbiakban felsoroljuk az összes hajtáslánc metódust:
Műveletek — A robot mozgatása és forgatása.
drive— A robotot előre vagy hátra mozgatja örökké.drive_for— Meghatározott távolságra mozgatja a robotot előre vagy hátra.drive_until— Előre mozgatja a robotot, amíg a szemérzékelő egy tárgyat nem érzékel, vagy a robot ütközést nem észlel.turn— Örökké balra vagy jobbra forgatja a robotot.turn_for— Meghatározott fokkal balra vagy jobbra forgatja a robotot.turn_to_heading— A robotot egy adott irányba fordítja -359 és 359 fok között. A robot a legrövidebb irányba fordul, hogy elérje a célirányt.turn_to_rotation— Meghatározott forgásirányba fordítja a robotot.stop— Leállítja a robot mozgását.
Mutátorok – Hajtáslánc-beállítások módosítása.
set_drive_velocity— Megadja a robotnak a haladási sebességét.set_turn_velocity— Megadja a robotnak, hogy milyen gyorsan forduljon.set_stopping— Megadja, hogyan fog a robot leállni: fékezéssel, gurulással vagy tartással.set_timeout— Beállítja, hogy a robot mennyi ideig próbálja befejezni a mozgást.set_heading— A robot aktuális irányát egy új irányra módosítja.set_rotation— A robot aktuális forgását egy új forgásra módosítja.
Getterek – Mozgás állapotának ellenőrzése.
get_heading— Visszaadja a robot aktuális irányát 0 és 359 fok között.get_rotation— Visszaadja a robot aktuális forgását.get_velocity— Visszaadja a robot vezetési sebességét százalékban, -100%-tól 100%-ig.get_yaw— Visszaadja a robot aktuális elfordulását.get_roll— Visszaadja a robot aktuális dobását.get_pitch— Visszaadja a robot aktuális dőlésszögét.get_crashed— Logikai értékként adja vissza, hogy a robot észlelt-e összeomlást.is_stopped— Logikai értékként adja vissza, hogy a robot befejezte-e a mozgást.
Műveletek#
drive#
drive A robotot a végtelenségig előre vagy hátra mozgatja. A robot addig fog mozogni, amíg egy másik műveletet nem kap, például fordulást vagy megállást.
Usage:
drivetrain.drive(direction)
Paraméterek |
Leírás |
|---|---|
|
A robot mozgásiránya: |
# Build Used: Code Base 2.0
def main():
# Drive forward then stop
drivetrain.drive(FORWARD)
wait(2, SECONDS)
drivetrain.stop()
# Start threads — Do not delete
start_thread(main)
drive_for#
drive_for A robotot egy adott távolságra előre vagy hátra mozgatja.
Usage:
drivetrain.drive_for(direction, distance, units, wait)
Paraméterek |
Leírás |
|---|---|
|
A robot mozgásiránya: |
|
A robot által megtett távolság. Ez lehet egész vagy tizedes tört. |
|
Opcionális. A távolság mértékegysége: |
|
Opcionális. |
# Build Used: Code Base 2.0
def main():
# Drive back and forth
drivetrain.drive_for(FORWARD, 100, MM)
drivetrain.drive_for(REVERSE, 4, INCHES)
# Start threads — Do not delete
start_thread(main)
drive_until#
drive_until A robot előre mozog, amíg a szemérzékelő egy tárgyat nem érzékel, vagy a robot ütközést nem észlel.
Usage:
drivetrain.drive_until(condition, wait)
Paraméterek |
Leírás |
|---|---|
|
A robotot leállító feltétel: |
|
Opcionális. |
# Build Used: Code Base 2.0
def main():
# Turn right after a crash
drivetrain.drive_until(CRASH)
drivetrain.turn_for(RIGHT, 90)
# Start threads — Do not delete
start_thread(main)
turn#
turn : A robotot balra vagy jobbra forgatja örökre. A robot addig fog forogni, amíg egy másik műveletet nem kap, például megállásig hajt.
Usage:
drivetrain.turn(direction)
Paraméterek |
Leírás |
|---|---|
|
A robot fordulási iránya: |
# Build Used: Code Base 2.0
def main():
# Turn right and left, then stop
drivetrain.turn(RIGHT)
wait(2, SECONDS)
drivetrain.turn(LEFT)
wait(2, SECONDS)
drivetrain.stop()
# Start threads — Do not delete
start_thread(main)
turn_for#
turn_for A robotot egy adott fokkal balra vagy jobbra forgatja. A forgatás a robot aktuális pozíciójához viszonyítva történik.
Usage:
drivetrain.turn_for(direction, angle, wait)
Paraméterek |
Leírás |
|---|---|
|
A robot fordulási iránya: |
|
A robot által elfordult fokok száma. Ez lehet egész vagy tizedes tört. |
|
Opcionális. |
# Build Used: Code Base 2.0
def main():
# Turn right then left
drivetrain.turn_for(RIGHT, 90)
drivetrain.turn_for(LEFT, 90)
# Start threads — Do not delete
start_thread(main)
turn_to_heading#
A haladási irány az az irány, amerre a robot agya néz, fokban mérve. turn_to_heading : Az 1-es érték a robotot egy adott, -359 és 359 fok közötti irányba fordítja. A robot a legrövidebb irányba fordul, hogy elérje a célirányt.
A kezdő irány 0 fok.

Usage:
drivetrain.turn_to_heading(angle, wait)
Paraméterek |
Leírás |
|---|---|
|
A robotnak amerre néznie kell, egész számként, -359 és 359 fok között. |
|
Opcionális. |
# Build Used: Code Base 2.0
def main():
# Turn to face the cardinal directions
drivetrain.turn_to_heading(90)
wait(1, SECONDS)
drivetrain.turn_to_heading(180)
wait(1, SECONDS)
drivetrain.turn_to_heading(270)
wait(1, SECONDS)
drivetrain.turn_to_heading(0)
# Start threads — Do not delete
start_thread(main)
turn_to_rotation#
turn_to_rotation A robotot egy adott forgáspontra forgatja.
A forgatás a robot elfordulásának mértékét adja meg fokban mérve. A projekt elején a forgatás értéke 0 fok. A forgatás a set_rotation használatával is beállítható.
A forgási értékek abszolútak. Ez azt jelenti, hogy a fordulat iránya a robot aktuális forgásától függ. Jobbra forgatás növeli, balra forgatás csökkenti a forgást.
Például, ha a robot 0 fokról indul, és 720 fokos elfordulást érünk el, akkor kétszer fordul jobbra. Ha ezután 360 fokos elfordulást végzünk, akkor egyszer fordul balra, mert a 360 fok kisebb, mint a 720 fok.

Usage:
drivetrain.turn_to_rotation(angle, wait)
Paraméterek |
Leírás |
|---|---|
|
A robot elfordulási értéke fokban megadva. Ez egész szám lehet. |
|
Opcionális. |
# Build Used: Code Base 2.0
def main():
# Make one full turn to the right
drivetrain.turn_to_rotation(360)
# Make another full turn to the right
drivetrain.turn_to_rotation(720)
# Make one full turn to the left, returning to 360 degrees
drivetrain.turn_to_rotation(360)
# Start threads — Do not delete
start_thread(main)
stop#
stop leállítja a robot mozgását.
Usage:
drivetrain.stop()
Paraméterek |
Leírás |
|---|---|
Ennek a metódusnak nincsenek paraméterei. |
# Build Used: Code Base 2.0
def main():
# Drive forward then stop
drivetrain.drive(FORWARD)
wait(2, SECONDS)
drivetrain.stop()
# Start threads — Do not delete
start_thread(main)
Mutátorok#
set_drive_velocity#
set_drive_velocity megmondja a robotnak, hogy milyen gyorsan haladjon. Magasabb százalékos érték esetén a robot gyorsabban, alacsonyabb százalékos érték esetén pedig lassabban halad.
Minden projekt azzal kezdődik, hogy a robot alapértelmezés szerint 50%-os sebességgel halad.
Megjegyzés: A nagyobb sebesség gyorsabbá teszi a robotot, de kevésbé pontos lehet. Az alacsonyabb sebesség lassabbá teszi a robotot, de pontosabbá.
Usage:
drivetrain.set_drive_velocity(velocity)
Paraméterek |
Leírás |
|---|---|
|
A haladási sebesség 0%-tól 100%-ig. |
# Build Used: Code Base 2.0
def main():
# Drive at different velocities
drivetrain.drive_for(FORWARD, 100, MM)
wait(1, SECONDS)
# Drive slow
drivetrain.set_drive_velocity(20)
drivetrain.drive_for(FORWARD, 100, MM)
wait(1, SECONDS)
# Drive fast
drivetrain.set_drive_velocity(100)
drivetrain.drive_for(FORWARD, 100, MM)
# Start threads — Do not delete
start_thread(main)
set_turn_velocity#
set_turn_velocity megmondja a robotnak, hogy milyen gyorsan forduljon. Magasabb százalékos érték esetén a robot gyorsabban, alacsonyabb százalékos érték esetén pedig lassabban fordul.
Minden projekt azzal kezdődik, hogy a robot alapértelmezés szerint 50%-os sebességgel forog.
Megjegyzés: A nagyobb sebesség gyorsabbá teszi a robot forgását, de kevésbé pontos lehet. Az alacsonyabb sebesség lassabbá teszi a robot forgását, de pontosabbá.
Usage:
drivetrain.set_turn_velocity(velocity)
Paraméterek |
Leírás |
|---|---|
|
A fordulási sebesség 0%-tól 100%-ig terjedhet. |
# Build Used: Code Base 2.0
def main():
# Turn at different velocities
drivetrain.turn_for(RIGHT, 180)
wait(1, SECONDS)
# Turn fast
drivetrain.set_turn_velocity(100)
drivetrain.turn_for(RIGHT, 180)
# Start threads — Do not delete
start_thread(main)
set_stopping#
set_stopping beállítja, hogyan állítsa le a robot a mozgást: fékezéssel, gurulással vagy tartással.
Usage:
drivetrain.set_stopping(brake)
Paraméterek |
Leírás |
|---|---|
|
Hogyan fog megállni a robot:
|
Ha ezt a módszert nem használjuk, a robot megálláskor BRAKE beállítást fogja használni.
# Build Used: Code Base 2.0
def main():
# Drive, then coast to a stop
drivetrain.set_drive_velocity(100)
drivetrain.set_stopping(COAST)
drivetrain.drive(FORWARD)
wait(2, SECONDS)
drivetrain.stop()
# Start threads — Do not delete
start_thread(main)
set_timeout#
set_timeout beállítja, hogy a robot mennyi ideig próbáljon meg befejezni egy mozgást. Ha a robot nem tudja befejezni ennyi idő alatt, akkor leállítja a próbálkozást, és a kód következő sorára lép. Ez megakadályozza, hogy a robot elakadjon egy mozgásnál.
Usage:
drivetrain.set_timeout(value, units)
Paraméterek |
Leírás |
|---|---|
|
Az az időtartam, ameddig a robot megpróbálhat befejezni egy mozgást. Ez lehet egész szám vagy tizedes tört. |
|
Opcionális. Az időegység: |
# Build Used: Code Base 2.0
def main():
# Drive as far as possible for 1 second before turning right
drivetrain.set_timeout(1, SECONDS)
drivetrain.drive_for(FORWARD, 25, INCHES)
drivetrain.turn_for(RIGHT, 90)
# Start threads — Do not delete
start_thread(main)
set_heading#
A haladási irány az az irány, amerre a robot agya néz, fokban mérve. set_heading a robot aktuális haladási irányát egy új haladási értékre módosítja.
Például, ha a robot jobbra fordult, és a haladási irány 0 fokra állítása a jobbra néző pozíciót teszi az új 0 fokossá. Ezután a robot az új irány alapján más pozíciókba fordulhat.
Usage:
drivetrain.set_heading(value)
Paraméterek |
Leírás |
|---|---|
|
A robot számára beállítandó irányérték fokban. Ez egy 0 és 359 közötti egész szám lehet. |
# Build Used: Code Base 2.0
def main():
# Face the new 0 degree heading
drivetrain.set_heading(90)
drivetrain.turn_to_heading(0)
# Start threads — Do not delete
start_thread(main)
set_rotation#
A forgás a robot elfordulásának mértékét adja meg fokban mérve. A projekt elején a forgási érték 0 fokra van állítva. set_rotation paraméterrel a robot aktuális forgását egy új értékre módosítja.
Például, ha a robot két teljes fordulatot tett jobbra, akkor a forgási értéke 720 fok lesz. Ha a forgást 0 fokra állítja, akkor a forgás 720-ról 0 fokra áll vissza. Ezután a robot az új érték alapján foroghat.
Usage:
drivetrain.set_rotation(value)
Paraméterek |
Leírás |
|---|---|
|
A robothoz beállítandó forgatási érték fokban. Ez egész szám lehet. |
# Build Used: Code Base 2.0
def main():
# Spin counterclockwise two times
drivetrain.set_rotation(720)
drivetrain.turn_to_rotation(0)
# Start threads — Do not delete
start_thread(main)
Getterek#
get_heading#
A haladási irány az az irány, amerre a robot agya néz, fokban mérve. get_heading függvény visszaadja ezt az irányt 0 és 359 fok között.
A robot kezdő iránya 0 fok.

Usage:
drivetrain.get_heading()
Paraméterek |
Leírás |
|---|---|
Ennek a metódusnak nincsenek paraméterei. |
# Build Used: Code Base 2.0
def main():
# Display the heading while turning
monitor_sensor("drivetrain.get_heading")
drivetrain.turn_for(RIGHT, 450)
# Start threads — Do not delete
start_thread(main)
get_rotation#
A forgás a robot elfordulásának mértékét adja meg fokban mérve. A projekt elején a forgás értéke 0 fok. get_rotation függvény visszaadja a robot aktuális forgását.
Jobbra fordulás növeli, balra fordulás pedig csökkenti az elfordulást. Például két teljes jobbra fordulás 720 fokos elfordulást eredményez.

Usage:
drivetrain.get_rotation()
Paraméterek |
Leírás |
|---|---|
Ennek a metódusnak nincsenek paraméterei. |
# Build Used: Code Base 2.0
def main():
# Display the rotation while turning
monitor_sensor("drivetrain.get_rotation")
drivetrain.turn_for(RIGHT, 450)
# Start threads — Do not delete
start_thread(main)
get_velocity#
get_velocity Visszaadja a robot vezetési sebességét százalékban, -100%-tól 100%-ig.
A pozitív érték azt jelenti, hogy a robot előre halad. A negatív érték azt jelenti, hogy a robot hátramenetben halad.
Usage:
drivetrain.get_velocity()
Paraméterek |
Leírás |
|---|---|
Ennek a metódusnak nincsenek paraméterei. |
# Build Used: Code Base 2.0
def main():
# Display the velocity of the robot before and while moving
console.print("Start: ")
console.print(drivetrain.get_velocity())
console.new_line()
drivetrain.drive(FORWARD)
wait(0.5, SECONDS)
console.print("Moving: ")
console.print(drivetrain.get_velocity())
drivetrain.stop()
# Start threads — Do not delete
start_thread(main)
get_yaw#
A Yaw (elfordulás azt jelzi, hogy a robot mennyit fordult balra vagy jobbra a kiindulási helyzetétől, fokban mérve. get_yaw függvény értéke a robot aktuális elfordulási szögének értéke.
Jobbra kanyarodva növeli, balra kanyarodva pedig csökkenti az elfordulási értéket.
Usage:
drivetrain.get_yaw()
Paraméterek |
Leírás |
|---|---|
Ennek a metódusnak nincsenek paraméterei. |
# Build Used: Super Code Base 2.0
def main():
# Change the LED color based on the yaw while
# moving the robot by hand
monitor_sensor("drivetrain.get_yaw")
while True:
if drivetrain.get_yaw() > 0:
bumper.set_color(GREEN)
elif drivetrain.get_yaw() < 0:
bumper.set_color(RED)
else:
bumper.set_color(NONE)
# Start threads — Do not delete
start_thread(main)
get_roll#
A roll (gurulás) a robot balra vagy jobbra dőlését jelzi fokban mérve. A get_roll get_roll paraméterek visszaadják a robot aktuális gurulási értékét.
Ha az Agy előre néz, a balra döntés növeli, a jobbra döntés pedig csökkenti a dobás értékét.
Usage:
drivetrain.get_roll()
Paraméterek |
Leírás |
|---|---|
Ennek a metódusnak nincsenek paraméterei. |
# Build Used: Super Code Base 2.0
def main():
# Change the LED color based on the roll while
# moving the robot by hand
monitor_sensor("drivetrain.get_roll")
while True:
if drivetrain.get_roll() > 0:
bumper.set_color(GREEN)
elif drivetrain.get_roll() < 0:
bumper.set_color(RED)
else:
bumper.set_color(NONE)
# Start threads — Do not delete
start_thread(main)
get_pitch#
A dőlésszög (pitch) a robot előre vagy hátra dőlését jelzi fokban mérve. A get_pitch visszaadja a robot aktuális dőlésszögét.
Ha az agy előre néz, az előrebillenés növeli, a hátrabillenés pedig csökkenti a hangmagasság értékét.
Usage:
drivetrain.get_pitch()
Paraméterek |
Leírás |
|---|---|
Ennek a metódusnak nincsenek paraméterei. |
# Build Used: Super Code Base 2.0
def main():
# Change the LED color based on the pitch while
# moving the robot by hand
monitor_sensor("drivetrain.get_pitch")
while True:
if drivetrain.get_pitch() > 0:
bumper.set_color(GREEN)
elif drivetrain.get_pitch() < 0:
bumper.set_color(RED)
else:
bumper.set_color(NONE)
# Start threads — Do not delete
start_thread(main)
get_crashed#
get_crashed Logikai értékként adja vissza, hogy a robot észlelt-e összeomlást.
True— Összeomlást észleltek.False— Nem észlelhető összeomlás.
Usage:
drivetrain.get_crashed()
Paraméterek |
Leírás |
|---|---|
Ennek a metódusnak nincsenek paraméterei. |
# Build Used: Super Code Base 2.0
def main():
# Drive until a crash
drivetrain.drive(FORWARD)
while not drivetrain.get_crashed():
wait(50, MSEC)
drivetrain.stop()
drivetrain.turn_for(RIGHT, 90)
# Start threads — Do not delete
start_thread(main)
is_stopped#
is_stopped Logikai értékként adja vissza, hogy a robot befejezte-e a mozgást. Ez felhasználható más viselkedések időzítésének szabályozására a robot mozgása alapján.
True— A robot mozgása befejeződött.False— A robot még mindig mozog.
Ez a metódus a következő wait paraméterrel rendelkező hajtáslánc-metódusokkal működik együtt: drive_for, drive_until, turn_for, turn_to_heading, és turn_to_rotation.
Usage:
drivetrain.is_stopped()
Paraméterek |
Leírás |
|---|---|
Ennek a metódusnak nincsenek paraméterei. |
# Build Used: Code Base 2.0
def main():
# Turn when the drivetrain is done moving forward
drivetrain.drive_for(FORWARD, 100, MM, wait=False)
wait(0.25, SECONDS)
while True:
if drivetrain.is_stopped():
drivetrain.turn_for(RIGHT, 180)
break
else:
console.print("Still moving...")
wait(0.1, SECONDS)
console.clear()
# Start threads — Do not delete
start_thread(main)