Pavarų dėžė#
Įvadas#
Pavaros sistemą sudaro ratai ir varikliai, kurie valdo roboto judėjimą ir posūkius. Pavaros sistemas galima rasti tokiuose modeliuose kaip „Code Base 2.0“, „Super Car“ arba individualiai pritaikytame robote.
Pavaros naudoja smegenyse esantį inercinį jutiklį, kad aptiktų avarijas ir padėtų robotui tiksliai judėti ir pasisukti. Kiekvieno projekto pradžioje pavaros sistema automatiškai kalibruoja inercinį jutiklį. Kalibravimo metu robotą reikia laikyti nejudant apie 2 sekundes, kad jis galėtų tinkamai judėti ir pasisukti.
Yra daug būdų, kaip koduoti pavaros sistemą. Žemiau pateikiamas visų pavaros sistemų metodų sąrašas:
Veiksmai — Judinti ir pasukti robotą.
drive— Robotas judina pirmyn arba atgal amžinai.drive_for— Robotas juda pirmyn arba atgal tam tikru atstumu.drive_until— Robotas juda pirmyn, kol akių jutiklis aptinka objektą arba robotas aptinka susidūrimą.turn— Robotas visam laikui pasukamas į kairę arba į dešinę.turn_for— Robotas pasukamas į kairę arba į dešinę tam tikru laipsnių skaičiumi.turn_to_heading– pasuka robotą tam tikra kryptimi nuo -359 iki 359 laipsnių. Robotas pasisuks trumpiausia kryptimi, kad pasiektų tikslinę kryptį.turn_to_rotation— Įjungia roboto sukimąsi konkrečia kryptimi.stop— Sustabdo roboto judėjimą.
Mutatoriai – reguliuojami pavaros nustatymai.
set_drive_velocity— Nurodo robotui, kokiu greičiu važiuoti.set_turn_velocity— Nurodo robotui, kaip greitai jis turi suktis.set_stopping— Nurodo, kaip robotas nustos judėti: stabdydamas, riedėdamas iš vietos arba palaikydamas.set_timeout— Nustato, kiek laiko robotas bandys užbaigti judesį.set_heading— Pakeičia dabartinę roboto kryptį į naują.set_rotation— Pakeičia dabartinį roboto sukimąsi į naują.
Getteriai – Judėjimo būsenos patikrinimas.
get_heading— Grąžina dabartinę roboto kryptį nuo 0 iki 359 laipsnių.get_rotation— Grąžina dabartinį roboto sukimąsi.get_velocity— Grąžina roboto važiavimo greitį procentais nuo -100 % iki 100 %.get_yaw— Grąžina dabartinį roboto posūkio kampą.get_roll— Grąžina dabartinį roboto metimą.get_pitch— Grąžina dabartinį roboto žingsnio kampą.get_crashed— Grąžina, ar robotas aptiko avariją, kaip loginę reikšmę.is_stopped— Grąžina, ar robotas baigė judėti, kaip loginę reikšmę.
Veiksmai#
drive#
drive robotą judina pirmyn arba atgal amžinai. Robotas judės tol, kol jam bus duotas kitas veiksmas, pvz., pasisukti arba sustoti.
Usage:
drivetrain.drive(direction)
Parametrai |
Aprašymas |
|---|---|
|
Roboto judėjimo kryptis: |
# 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 robotą judina pirmyn arba atgal tam tikru atstumu.
Usage:
drivetrain.drive_for(direction, distance, units, wait)
Parametrai |
Aprašymas |
|---|---|
|
Roboto judėjimo kryptis: |
|
Atstumas, kurį nuvažiuoja robotas. Tai gali būti sveikasis arba dešimtainis skaičius. |
|
Pasirinktinai. Atstumo vienetas: |
|
Pasirinktinai. |
# 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 robotas juda pirmyn, kol akių jutiklis aptinka objektą arba robotas aptinka susidūrimą.
Usage:
drivetrain.drive_until(condition, wait)
Parametrai |
Aprašymas |
|---|---|
|
Sąlyga, kuri sustabdo robotą: |
|
Pasirinktinai. |
# 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 suka robotą į kairę arba į dešinę amžinai. Robotas suksis tol, kol jam bus duotas kitas veiksmas, pavyzdžiui, važiuoti iki sustojimo.
Usage:
drivetrain.turn(direction)
Parametrai |
Aprašymas |
|---|---|
|
Roboto sukimosi kryptis: |
# 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 pasuka robotą į kairę arba į dešinę tam tikru laipsnių skaičiumi. Posūkis yra santykinis dabartinės roboto padėties atžvilgiu.
Usage:
drivetrain.turn_for(direction, angle, wait)
Parametrai |
Aprašymas |
|---|---|
|
Roboto sukimosi kryptis: |
|
Roboto posūkio laipsnių skaičius. Tai gali būti sveikasis arba dešimtainis skaičius. |
|
Pasirinktinai. |
# 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#
Kryptis – tai kryptis, kuria pasuko roboto smegenys, matuojama laipsniais. turn_to_heading pasuka robotą tam tikra kryptimi nuo -359 iki 359 laipsnių. Robotas pasuks trumpiausia kryptimi, kad pasiektų tikslinę kryptį.
Pradinė kryptis yra 0 laipsnių.

Usage:
drivetrain.turn_to_heading(angle, wait)
Parametrai |
Aprašymas |
|---|---|
|
Roboto pasukimo kryptis, išreikšta sveikuoju skaičiumi nuo -359 iki 359 laipsnių. |
|
Pasirinktinai. |
# 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 pasuka robotą į tam tikrą sukimosi kryptį.
Sukimas rodo, kiek robotas pasisuko, matuojamas laipsniais. Projekto pradžioje sukimosi vertė nustatoma į 0 laipsnių. Sukimą taip pat galima nustatyti naudojant set_rotation.
Sukimosi vertės yra absoliučios. Tai reiškia, kad posūkio kryptis priklauso nuo roboto dabartinio sukimosi. Sukant į dešinę, sukimasis padidėja, o sukant į kairę – sumažėja.
Pavyzdžiui, jei robotas pradeda judėti nuo 0 laipsnių ir jūs pasisukate 720 laipsnių kampu, jis du kartus pasisuks į dešinę. Jei tada pasisuksite 360 laipsnių kampu, jis vieną kartą pasisuks į kairę, nes 360 laipsnių yra mažiau nei 720.

Usage:
drivetrain.turn_to_rotation(angle, wait)
Parametrai |
Aprašymas |
|---|---|
|
Roboto sukimosi vertė laipsniais. Tai gali būti sveikasis skaičius. |
|
Pasirinktinai. |
# 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 sustabdo roboto judėjimą.
Usage:
drivetrain.stop()
Parametrai |
Aprašymas |
|---|---|
Šis metodas neturi parametrų. |
# 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)
Mutatoriai#
set_drive_velocity#
set_drive_velocity nurodo robotui, kokiu greičiu važiuoti. Didesnis procentas leidžia robotui važiuoti greičiau, o mažesnis – lėčiau.
Kiekvienas projektas prasideda nuo to, kad robotas pagal numatytuosius nustatymus važiuoja 50 % greičiu.
Pastaba: Didesnis greitis leidžia robotui važiuoti greičiau, bet gali būti mažiau tikslus. Mažesnis greitis leidžia robotui važiuoti lėčiau, bet tiksliau.
Usage:
drivetrain.set_drive_velocity(velocity)
Parametrai |
Aprašymas |
|---|---|
|
Važiavimo greitis nuo 0% iki 100%. |
# 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 nurodo robotui, kaip greitai jis turi suktis. Didesnis procentas leidžia robotui suktis greičiau, o mažesnis – lėčiau.
Kiekvienas projektas prasideda nuo to, kad robotas pagal numatytuosius nustatymus sukasi 50 % greičiu.
Pastaba: Didesnis greitis leidžia robotui sukasi greičiau, bet gali būti mažiau tikslus. Mažesnis greitis leidžia robotui sukasi lėčiau, bet tiksliau.
Usage:
drivetrain.set_turn_velocity(velocity)
Parametrai |
Aprašymas |
|---|---|
|
Sukimosi greitis nuo 0% iki 100%. |
# 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 nustato, kaip robotas sustabdys judėjimą: stabdydamas, riedėdamas iš vietos arba palaikydamas vietoje.
Usage:
drivetrain.set_stopping(brake)
Parametrai |
Aprašymas |
|---|---|
|
Kaip robotas sustos:
|
Jei šis metodas nenaudojamas, robotas stabdydamas naudos BRAKE.
# 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 nustato, kiek laiko robotas bandys užbaigti judesį. Jei robotas negali užbaigti per tą laiką, jis nustos bandyti ir pereis prie kitos kodo eilutės. Tai neleidžia robotui užstrigti ties judesiu.
Usage:
drivetrain.set_timeout(value, units)
Parametrai |
Aprašymas |
|---|---|
|
Laikas, per kurį robotas gali bandyti užbaigti judesį. Tai gali būti sveikasis skaičius arba dešimtainė trupmena. |
|
Pasirinktinai. Laiko vienetas: |
# 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#
Kryptis – tai roboto smegenų kryptis, matuojama laipsniais. set_heading pakeičia dabartinę roboto kryptį į naują krypties reikšmę.
Pavyzdžiui, jei robotas pasisuko veidu į dešinę, nustačius 0 laipsnių kryptį, ta nukreipta į dešinę pozicija tampa nauja 0 laipsnių. Tada robotas gali pasisukti į kitas pozicijas, remdamasis ta nauja kryptimi.
Usage:
drivetrain.set_heading(value)
Parametrai |
Aprašymas |
|---|---|
|
Roboto krypties vertė laipsniais. Tai gali būti sveikasis skaičius nuo 0 iki 359. |
# 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#
Sukimas rodo, kiek robotas pasisuko, matuojamas laipsniais. Projekto pradžioje sukimosi vertė nustatoma į 0 laipsnių. set_rotation pakeičia dabartinę roboto sukimosi vertę į naują.
Pavyzdžiui, jei robotas atliko du pilnus posūkius į dešinę, jo sukimosi vertė bus 720 laipsnių. Nustačius sukimąsi į 0 laipsnių, sukimasis bus atstatytas iš 720 į 0 laipsnių. Tada robotas galės atlikti sukimus pagal tą naują vertę.
Usage:
drivetrain.set_rotation(value)
Parametrai |
Aprašymas |
|---|---|
|
Roboto sukimosi vertė laipsniais. Tai gali būti sveikasis skaičius. |
# 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)
Getteriai#
get_heading#
Kryptis – tai roboto smegenų pasukimo kryptis, matuojama laipsniais. get_heading grąžina kryptį nuo 0 iki 359 laipsnių.
Roboto pradinė kryptis yra 0 laipsnių.

Usage:
drivetrain.get_heading()
Parametrai |
Aprašymas |
|---|---|
Šis metodas neturi parametrų. |
# 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#
Sukimas rodo, kiek robotas pasisuko, matuojamas laipsniais. Projekto pradžioje sukimosi vertė nustatoma į 0 laipsnių. get_rotation grąžina dabartinį roboto sukimąsi.
Sukant į dešinę, sukimasis padidėja, o sukant į kairę – sumažėja. Pavyzdžiui, padarius du pilnus posūkius į dešinę, sukimasis bus 720 laipsnių.

Usage:
drivetrain.get_rotation()
Parametrai |
Aprašymas |
|---|---|
Šis metodas neturi parametrų. |
# 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 grąžina roboto važiavimo greitį procentais nuo -100% iki 100%.
Teigiama reikšmė reiškia, kad robotas važiuoja į priekį. Neigiama reikšmė reiškia, kad robotas važiuoja atbuline eiga.
Usage:
drivetrain.get_velocity()
Parametrai |
Aprašymas |
|---|---|
Šis metodas neturi parametrų. |
# 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#
Nukrypimas nuo kurso nurodo, kiek robotas pasisuko į kairę arba į dešinę nuo pradinės padėties, matuojamas laipsniais. get_yaw grąžina dabartinę roboto nukrypimo nuo kurso reikšmę.
Sukant į dešinę, posūkio kampas padidėja, o sukant į kairę – sumažėja.
Usage:
drivetrain.get_yaw()
Parametrai |
Aprašymas |
|---|---|
Šis metodas neturi parametrų. |
# 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#
„Roll“ nurodo roboto posvyrį į kairę arba į dešinę, matuojamą laipsniais. get_roll grąžina dabartinę roboto posvyrio vertę.
Smegenims esant nukreiptoms į priekį, pakreipimas į kairę padidina riedėjimo vertę, o pakreipimas į dešinę sumažina.
Usage:
drivetrain.get_roll()
Parametrai |
Aprašymas |
|---|---|
Šis metodas neturi parametrų. |
# 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#
„Pitch“ nurodo roboto pasvirimo į priekį arba atgal laipsnį. get_pitch grąžina dabartinę roboto pasvirimo reikšmę.
Kai smegenys yra nukreiptos į priekį, pakreipimas į priekį padidina garso aukštį, o pakreipimas atgal sumažina.
Usage:
drivetrain.get_pitch()
Parametrai |
Aprašymas |
|---|---|
Šis metodas neturi parametrų. |
# 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 grąžina, ar robotas aptiko gedimą, kaip loginę reikšmę.
True— Aptiktas gedimas.False— Nebuvo aptikta gedimo.
Usage:
drivetrain.get_crashed()
Parametrai |
Aprašymas |
|---|---|
Šis metodas neturi parametrų. |
# 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 grąžina, ar robotas baigė judėti, kaip loginę reikšmę. Tai gali būti naudojama kitų veiksmų, pagrįstų roboto judėjimu, laikui valdyti.
True— Robotas baigė judėti.False— Robotas vis dar juda.
Šis metodas veikia kartu su šiais pavaros metodais, turinčiais parametrą wait : drive_for, drive_until, turn_for, turn_to_heading ir turn_to_rotation.
Usage:
drivetrain.is_stopped()
Parametrai |
Aprašymas |
|---|---|
Šis metodas neturi parametrų. |
# 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)