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

direction

Robotin liikesuunta: FORWARD tai REVERSE.

# 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

direction

Robotin liikesuunta: FORWARD tai REVERSE.

distance

Robotin ajama matka. Tämä voi olla kokonaisluku tai desimaaliluku.

units

Valinnainen. Etäisyyden yksikkö: MM (millimetrit, oletusarvo) tai INCHES.

wait

Valinnainen. wait=True (oletus) saa projektin odottamaan, kunnes robotti on liikkunut, ennen kuin seuraava koodirivi suoritetaan. wait=False saa seuraavan koodirivin suoritettavaksi heti.

# 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

condition

Robotin pysäyttävä ehto: OBJECT tai CRASH.

wait

Valinnainen. wait=True (oletus) saa projektin odottamaan, kunnes robotti on liikkunut, ennen kuin seuraava koodirivi suoritetaan. wait=False saa seuraavan koodirivin suoritettavaksi heti.

# 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

direction

Robotin kääntymissuunta: LEFT tai RIGHT.

# 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

direction

Robotin kääntymissuunta: LEFT tai RIGHT.

angle

Robotin kääntymisasteiden määrä. Tämä voi olla kokonaisluku tai desimaaliluku.

wait

Valinnainen. wait=True (oletus) saa projektin odottamaan, kunnes robotti on kääntynyt, ennen kuin seuraava koodirivi suoritetaan. wait=False saa seuraavan koodirivin suoritettavaksi heti.

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

VEX GO Code Base 2.0, joka näyttää kulkusuunnat: 0 astetta eteenpäin, 90 astetta oikealle, 180 astetta taaksepäin ja 270 astetta vasemmalle.

Usage:
drivetrain.turn_to_heading(angle, wait)

Parametrit

Kuvaus

angle

Robotin suunta kokonaislukuna väliltä -359 - 359 astetta.

wait

Valinnainen. wait=True (oletus) saa projektin odottamaan, kunnes robotti on kääntynyt, ennen kuin seuraava koodirivi suoritetaan. wait=False saa seuraavan koodirivin suoritettavaksi heti.

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

VEX GO Code Base 2.0, jossa nuolet pyörivät oikealle ja vasemmalle. Vasen nuoli näyttää "miinus"-merkin ja oikea nuoli näyttää "plus".

Usage:
drivetrain.turn_to_rotation(angle, wait)

Parametrit

Kuvaus

angle

Robotin kääntymiskulma asteina. Tämä voi olla kokonaisluku.

wait

Valinnainen. wait=True (oletus) saa projektin odottamaan, kunnes robotti on kääntynyt, ennen kuin seuraava koodirivi suoritetaan. wait=False saa seuraavan koodirivin suoritettavaksi heti.

# 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

velocity

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

velocity

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

brake

Robotin pysähtymistapa:

  • BRAKE — Pysähtyy välittömästi.
  • COAST — Hidastaa pysähdyksiin.
  • HOLD — Pysähtyy välittömästi ja pitää pyörien asennon.

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

value

Aika, jonka robotti voi yrittää suorittaa liikkeen loppuun. Tämä voi olla kokonaisluku tai desimaaliluku.

units

Valinnainen. Aikayksikkö: SECONDS (oletus) tai MSEC (millisekuntia).

# 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

value

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

value

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.

VEX GO Brain, joka näyttää kulkusuunnat: 0 astetta eteenpäin, 90 astetta oikealle, 180 astetta taaksepäin ja 270 astetta vasemmalle.

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.

VEX GO Code Base 2.0, jossa nuolet pyörivät oikealle ja vasemmalle. Vasen nuoli näyttää "miinus"-merkin ja oikea nuoli näyttää "plus".

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)