Voimansiirto#
Johdanto#
Voimansiirtoon kuuluvat pyörät ja moottorit, jotka ohjaavat robotin ajamista ja kääntymistä. Voimansiirtoja löytyy esimerkiksi Code Base 2.0:sta, Super Carista tai mukautetuista roboteista.
Voimansiirrot käyttävät aivojen inertia-anturia törmäysten havaitsemiseen ja robotin tarkan liikkumisen ja kääntymisen auttamiseen. Jokaisen projektin alussa voimansiirto kalibroi inertia-anturin automaattisesti. Pidä robottia paikallaan noin 2 sekuntia kalibroinnin aikana, jotta robotti voi liikkua ja kääntyä oikein.
Voimansiirron koodaamiseen on monia tapoja. Alla on luettelo kaikista voimansiirron metodeista:
Toiminnot — Liikuta ja käännä robottia.
drive— Liikuttaa robottia eteen- tai taaksepäin pysyvästi.drive_for— Liikuttaa robottia eteen- tai taaksepäin tietyn matkan.drive_until— Liikuttaa robottia eteenpäin, kunnes silmätunnistin havaitsee esineen tai robotti havaitsee törmäyksen.turn— Kääntää robottia vasemmalle tai oikealle ikuisesti.turn_for— Kääntää robottia vasemmalle tai oikealle tietyn astemäärän.turn_to_heading— Kääntää robotin tiettyyn suuntaan -359 - 359 astetta. Robotti kääntyy lyhyimpään suuntaan saavuttaakseen kohdesuunnan.turn_to_rotation— Kääntää robotin tiettyyn pyörimissuuntaan.stop— Pysäyttää robotin liikkeen.
Mutaattorit — Säädä voimansiirron asetuksia.
set_drive_velocity— Kertoo robotille, kuinka nopeasti sen tulisi ajaa.set_turn_velocity— Kertoo robotille, kuinka nopeasti sen tulisi kääntyä.set_stopping— Kertoo, miten robotti pysähtyy: jarruttamalla, rullaamalla tai pitämällä paikallaan.set_timeout— Määrittää, kuinka kauan robotti yrittää suorittaa liikkeen loppuun.set_heading— Muuttaa robotin nykyisen suunnan uudeksi suunnaksi.set_rotation— Muuttaa robotin nykyisen pyörimissuunnan uudeksi pyörimissuunnaksi.
Getterit — Tarkista liikkeen tila.
get_heading— Palauttaa robotin nykyisen suunnan 0–359 astetta.get_rotation— Palauttaa robotin nykyisen pyörimisliikkeen.get_velocity— Palauttaa robotin ajonopeuden prosentteina välillä -100 % - 100 %.get_yaw— Palauttaa robotin nykyisen suunnanmuutoksen.get_roll— Palauttaa robotin nykyisen heiton.get_pitch— Palauttaa robotin nykyisen kaltevuuden.get_crashed— Palauttaa totuusarvona tiedon, onko robotti havainnut kaatumisen.is_stopped— Palauttaa totuusarvona tiedon siitä, onko robotti lopettanut liikkumisen.
Toiminnot#
drive#
drive liikuttaa robottia eteen- tai taaksepäin ikuisesti. Robotti jatkaa liikkumista, kunnes sille annetaan toinen toiminto, kuten kääntyminen tai pysähtyminen.
Usage:
drivetrain.drive(direction)
Parametrit |
Kuvaus |
|---|---|
|
Robotin liikesuunta: |
# 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 liikuttaa robottia eteen- tai taaksepäin tietyn matkan.
Usage:
drivetrain.drive_for(direction, distance, units, wait)
Parametrit |
Kuvaus |
|---|---|
|
Robotin liikesuunta: |
|
Robotin ajama matka. Tämä voi olla kokonaisluku tai desimaaliluku. |
|
Valinnainen. Etäisyyden yksikkö: |
|
Valinnainen. |
# 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 liikuttaa robottia eteenpäin, kunnes silmäanturi havaitsee esineen tai robotti havaitsee törmäyksen.
Usage:
drivetrain.drive_until(condition, wait)
Parametrit |
Kuvaus |
|---|---|
|
Robotin pysäyttävä ehto: |
|
Valinnainen. |
# 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 kääntää robottia vasemmalle tai oikealle ikuisesti. Robotti jatkaa kääntymistä, kunnes sille annetaan toinen toiminto, kuten ajaminen pysähtymiseen.
Usage:
drivetrain.turn(direction)
Parametrit |
Kuvaus |
|---|---|
|
Robotin kääntymissuunta: |
# 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 kääntää robottia vasemmalle tai oikealle tietyn astemäärän. Käännös on suhteessa robotin nykyiseen sijaintiin.
Usage:
drivetrain.turn_for(direction, angle, wait)
Parametrit |
Kuvaus |
|---|---|
|
Robotin kääntymissuunta: |
|
Robotin kääntymisasteiden määrä. Tämä voi olla kokonaisluku tai desimaaliluku. |
|
Valinnainen. |
# 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#
Suunta on suunta, johon robotin aivot osoittavat, mitattuna asteina. turn_to_heading kääntää robotin tiettyyn suuntaan -359 ja 359 asteen välillä. Robotti kääntyy lyhyimpään suuntaan saavuttaakseen kohdesuunnan.
Lähtösuunta on 0 astetta.

Usage:
drivetrain.turn_to_heading(angle, wait)
Parametrit |
Kuvaus |
|---|---|
|
Robotin suunta kokonaislukuna väliltä -359 - 359 astetta. |
|
Valinnainen. |
# 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 kääntää robotin tiettyyn pyörähdyssuuntaan.
Rotaatio ilmaisee robotin kääntymismäärän asteina. Projektin alussa rotaatioarvoksi asetetaan 0 astetta. Rotaatio voidaan asettaa myös käyttämällä set_rotation.
Rotaatioarvot ovat absoluuttisia. Tämä tarkoittaa, että käännöksen suunta riippuu robotin nykyisestä pyörimisestä. Oikealle kääntäminen lisää pyörimistä ja vasemmalle kääntäminen vähentää niitä.
Jos esimerkiksi robotti aloittaa 0 asteen kulmasta ja käännyt 720 asteen kierrokseen, se kääntyy kahdesti oikealle. Jos sitten käännyt 360 astetta, se kääntyy kerran vasemmalle, koska 360 on pienempi kuin 720.

Usage:
drivetrain.turn_to_rotation(angle, wait)
Parametrit |
Kuvaus |
|---|---|
|
Robotin kääntymiskulma asteina. Tämä voi olla kokonaisluku. |
|
Valinnainen. |
# 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 pysäyttää robotin liikkeen.
Usage:
drivetrain.stop()
Parametrit |
Kuvaus |
|---|---|
Tällä menetelmällä ei ole parametreja. |
# 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)
Mutaattorit#
set_drive_velocity#
set_drive_velocity kertoo robotille, kuinka nopeasti sen tulisi ajaa. Suurempi prosenttiosuus saa robotin ajamaan nopeammin ja pienempi prosenttiosuus hidastaa sitä.
Jokainen projekti alkaa robotin ajamalla oletusarvoisesti 50 % nopeudella.
Huomautus: Suurempi nopeus saa robotin ajamaan nopeammin, mutta se voi olla epätarkempi. Pienempi nopeus tekee robotista hitaamman, mutta tarkemman.
Usage:
drivetrain.set_drive_velocity(velocity)
Parametrit |
Kuvaus |
|---|---|
|
Ajonopeus 0–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 kertoo robotille, kuinka nopeasti sen tulee kääntyä. Suurempi prosenttiosuus saa robotin kääntymään nopeammin ja pienempi prosenttiosuus hitaammin.
Jokainen projekti alkaa robotin pyöriessä oletusarvoisesti 50 %:n nopeudella.
Huomautus: Suurempi nopeus saa robotin kääntymään nopeammin, mutta se voi olla epätarkempi. Pienempi nopeus saa robotin kääntymään hitaammin, mutta se on tarkempi.
Usage:
drivetrain.set_turn_velocity(velocity)
Parametrit |
Kuvaus |
|---|---|
|
Kääntymisnopeus 0–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 määrittää, miten robotti pysähtyy: jarruttamalla, rullaamalla tai pitämällä paikallaan.
Usage:
drivetrain.set_stopping(brake)
Parametrit |
Kuvaus |
|---|---|
|
Robotin pysähtymistapa:
|
Jos tätä menetelmää ei käytetä, robotti käyttää pysähtyessään asetusta 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 määrittää, kuinka kauan robotti yrittää suorittaa liikkeen loppuun. Jos robotti ei pysty suorittamaan sitä tässä ajassa, se lopettaa yrittämisen ja siirtyy seuraavalle koodiriville. Tämä estää robottia jumiutumasta liikkeeseen.
Usage:
drivetrain.set_timeout(value, units)
Parametrit |
Kuvaus |
|---|---|
|
Aika, jonka robotti voi yrittää suorittaa liikkeen loppuun. Tämä voi olla kokonaisluku tai desimaaliluku. |
|
Valinnainen. Aikayksikkö: |
# 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#
Suunta on robotin aivojen osoittama suunta asteina mitattuna. set_heading muuttaa robotin nykyisen suunnan uuteen suunta-arvoon.
Jos esimerkiksi robotti on kääntynyt oikealle ja suunnan asettaminen 0 asteeseen tekee oikealle osoittavasta asennosta uuden 0 asteen. Tämän jälkeen robotti voi kääntyä muihin asentoihin tämän uuden suunnan perusteella.
Usage:
drivetrain.set_heading(value)
Parametrit |
Kuvaus |
|---|---|
|
Robotille asetettava suunta-arvo asteina. Tämä voi olla kokonaisluku väliltä 0–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#
Rotaatio ilmaisee robotin kääntymismäärän asteina. Projektin alussa rotaatioarvoksi asetetaan 0 astetta. set_rotation muuttaa robotin nykyisen rotaation uuteen arvoon.
Jos robotti on esimerkiksi tehnyt kaksi täyttä käännöstä oikealle, sen kiertoarvo on 720 astetta. Kierron asettaminen 0 asteeseen palauttaa kiertoarvon 720 asteesta 0 asteeseen. Tämän jälkeen robotti voi tehdä kiertoja tämän uuden arvon perusteella.
Usage:
drivetrain.set_rotation(value)
Parametrit |
Kuvaus |
|---|---|
|
Robotille asetettava kiertoarvo asteina. Tämä voi olla kokonaisluku. |
# 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)
Getterit#
get_heading#
Suunta on robotin aivojen osoittama suunta asteina mitattuna. get_heading palauttaa suunnan 0 ja 359 asteen välillä.
Robotin lähtösuunta on 0 astetta.

Usage:
drivetrain.get_heading()
Parametrit |
Kuvaus |
|---|---|
Tällä menetelmällä ei ole parametreja. |
# 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#
Rotaatio ilmaisee robotin kääntymismäärän asteina. Projektin alussa rotaatioarvoksi asetetaan 0 astetta. get_rotation palauttaa robotin nykyisen rotaation.
Kääntyminen oikealle lisää kiertoliikettä ja kääntäminen vasemmalle vähentää sitä. Esimerkiksi kahden täyden käännöksen tekeminen oikealle palauttaa 720 asteen kiertoliikkeen.

Usage:
drivetrain.get_rotation()
Parametrit |
Kuvaus |
|---|---|
Tällä menetelmällä ei ole parametreja. |
# 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 palauttaa robotin ajonopeuden prosentteina väliltä -100 % - 100 %.
Positiivinen arvo tarkoittaa, että robotti ajaa eteenpäin. Negatiivinen arvo tarkoittaa, että robotti ajaa taaksepäin.
Usage:
drivetrain.get_velocity()
Parametrit |
Kuvaus |
|---|---|
Tällä menetelmällä ei ole parametreja. |
# 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#
Suuntakulma (Yaw) ilmaisee, kuinka paljon robotti on kääntynyt vasemmalle tai oikealle lähtöasennostaan, mitattuna asteina. get_yaw palauttaa robotin nykyisen suuntakulman arvon.
Oikealle kääntyminen lisää kallistuskulmaa ja vasemmalle kääntyminen vähentää sitä.
Usage:
drivetrain.get_yaw()
Parametrit |
Kuvaus |
|---|---|
Tällä menetelmällä ei ole parametreja. |
# 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 ilmaisee robotin kallistuskulman vasemmalle tai oikealle asteina. get_roll palauttaa robotin nykyisen vierintäarvon.
Kun aivot osoittavat eteenpäin, vasemmalle kallistaminen lisää vierintäarvoa ja oikealle kallistaminen vähentää sitä.
Usage:
drivetrain.get_roll()
Parametrit |
Kuvaus |
|---|---|
Tällä menetelmällä ei ole parametreja. |
# 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#
Kallistuskulma (Pitch) ilmaisee robotin kallistuskulman eteen- tai taaksepäin asteina. get_pitch palauttaa robotin nykyisen kallistuskulman.
Kun aivot osoittavat eteenpäin, eteenpäin kallistuminen lisää äänenkorkeuden arvoa ja taaksepäin kallistuminen vähentää sitä.
Usage:
drivetrain.get_pitch()
Parametrit |
Kuvaus |
|---|---|
Tällä menetelmällä ei ole parametreja. |
# 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 palauttaa totuusarvona tiedon, onko robotti havainnut kaatumisen.
True— Kaatuminen on havaittu.False— Kaatumista ei ole havaittu.
Usage:
drivetrain.get_crashed()
Parametrit |
Kuvaus |
|---|---|
Tällä menetelmällä ei ole parametreja. |
# 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 palauttaa totuusarvona tiedon siitä, onko robotti lopettanut liikkumisen. Tätä voidaan käyttää muiden robotin liikkeeseen perustuvien toimintojen ajoituksen hallintaan.
True— Robotti on lopettanut liikkumisen.False— Robotti liikkuu edelleen.
Tämä metodi toimii yhdessä seuraavien wait -parametrilla varustettujen voimansiirtometodien kanssa: drive_for, drive_until, turn_for, turn_to_heading ja turn_to_rotation.
Usage:
drivetrain.is_stopped()
Parametrit |
Kuvaus |
|---|---|
Tällä menetelmällä ei ole parametreja. |
# 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)