Hnací ústrojí#

Zavedení#

Pohonné ústrojí zahrnuje kola a motory, které ovládají, jak se robot pohybuje a zatáčí. Pohonné ústrojí lze nalézt v sestavách, jako je Code Base 2.0, Super Car nebo robot na zakázku.

Pohonné jednotky používají Inerciální senzor v mozku k detekci kolizí a pomáhají robotu s přesným pohybem a otáčením. Na začátku každého projektu pohonná jednotka automaticky kalibruje inerciální senzor. Během kalibrace držte robota v klidu asi 2 sekundy, aby se mohl správně pohybovat a otáčet.

Existuje mnoho způsobů, jak kódovat hnací ústrojí. Níže je uveden seznam všech metod kódování hnacího ústrojí:

Akce – Pohyb a otáčení robota.

  • drive — Pohybuje robota vpřed nebo vzad natrvalo.

  • drive_for — Pohybuje robotem vpřed nebo vzad o určitou vzdálenost.

  • drive_until — Pohybuje robota vpřed, dokud oční senzor nezaznamená objekt nebo dokud robot nezaznamená náraz.

  • turn — Otočí robota doleva nebo doprava natrvalo.

  • turn_for — Otočí robota doleva nebo doprava o určitý počet stupňů.

  • turn_to_heading — Otočí robota do určitého směru od -359 do 359 stupňů. Robot se otočí nejkratším směrem k dosažení cílového směru.

  • turn_to_rotation — Otočí robota do určité rotace.

  • stop — Zastaví pohyb robota.

Mutátory – Upravte nastavení hnacího ústrojí.

  • set_drive_velocity — Říká robotovi, jak rychle má jet.

  • set_turn_velocity — Říká robotovi, jak rychle se má otáčet.

  • set_stopping — Určuje, jak se robot zastaví: brzděním, setrvačností nebo zastavením.

  • set_timeout — Nastaví, jak dlouho se bude robot snažit dokončit pohyb.

  • set_heading — Změní aktuální směr robota na nový směr.

  • set_rotation — Změní aktuální rotaci robota na novou rotaci.

Gettery – Kontrola stavu pohybu.

  • get_heading — Vrátí aktuální směr robota od 0 do 359 stupňů.

  • get_rotation — Vrátí aktuální rotaci robota.

  • get_velocity — Vrátí rychlost pohybu robota v procentech od -100 % do 100 %.

  • get_yaw — Vrátí aktuální natočení robota.

  • get_roll — Vrátí aktuální hod robota.

  • get_pitch — Vrátí aktuální sklon robota.

  • get_crashed — Vrátí, zda robot detekoval havárii, jako booleovskou hodnotu.

  • is_stopped — Vrátí, zda robot dokončil pohyb, jako booleovskou hodnotu.

Akce#

drive#

drive pohybuje robotem vpřed nebo vzad navždy. Robot se bude pohybovat, dokud nedostane další akci, například otočení nebo zastavení.

Usage:
drivetrain.drive(direction)

Parametry

Popis

direction

Směr pohybu robota: FORWARD nebo 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 pohybuje robotem vpřed nebo vzad o určitou vzdálenost.

Usage:
drivetrain.drive_for(direction, distance, units, wait)

Parametry

Popis

direction

Směr pohybu robota: FORWARD nebo REVERSE.

distance

Vzdálenost, kterou robot urazí. Může to být celé číslo nebo desetinné číslo.

units

Volitelné. Jednotka vzdálenosti: MM (milimetry, výchozí) nebo INCHES.

wait

Volitelné. wait=True (výchozí) způsobí, že projekt počká, dokud se robot nedokončí s pohybem, než se spustí další řádek kódu. wait=False způsobí, že se další řádek kódu spustí okamžitě.

# 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 pohybuje robotem vpřed, dokud oční senzor nezaznamená objekt nebo dokud robot nezaznamená náraz.

Usage:
drivetrain.drive_until(condition, wait)

Parametry

Popis

condition

Podmínka, která zastaví robota: OBJECT nebo CRASH.

wait

Volitelné. wait=True (výchozí) způsobí, že projekt počká, dokud se robot nedokončí s pohybem, než se spustí další řádek kódu. wait=False způsobí, že se další řádek kódu spustí okamžitě.

# 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 otočí robota doleva nebo doprava natrvalo. Robot se bude otáčet, dokud nedostane další akci, například zastavení.

Usage:
drivetrain.turn(direction)

Parametry

Popis

direction

Směr otáčení robota: LEFT nebo 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 otočí robota doleva nebo doprava o určitý počet stupňů. Otočení je relativní vzhledem k aktuální poloze robota.

Usage:
drivetrain.turn_for(direction, angle, wait)

Parametry

Popis

direction

Směr otáčení robota: LEFT nebo RIGHT.

angle

Počet stupňů, o které se robot otočí. Může to být celé číslo nebo desetinné číslo.

wait

Volitelné. wait=True (výchozí) způsobí, že projekt počká, dokud robot nedokončí otáčení, než se spustí další řádek kódu. wait=False způsobí, že se další řádek kódu spustí okamžitě.

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

Směr je směr, kterým je otočen mozek robota, měřený ve stupních. turn_to_heading otočí robota do určitého směru od -359 do 359 stupňů. Robot se otočí nejkratším směrem, aby dosáhl cílového směru.

Výchozí směr je 0 stupňů.

Kódová báze VEX GO 2.0 zobrazující směry jízdy: 0 stupňů vpřed, 90 stupňů vpravo, 180 stupňů vzad a 270 stupňů vlevo.

Usage:
drivetrain.turn_to_heading(angle, wait)

Parametry

Popis

angle

Směr, kterým by se měl robot otočit, jako celé číslo v rozsahu od -359 do 359 stupňů.

wait

Volitelné. wait=True (výchozí) způsobí, že projekt počká, dokud robot nedokončí otáčení, než se spustí další řádek kódu. wait=False způsobí, že se další řádek kódu spustí okamžitě.

# 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 otočí robota do určité rotace.

Rotace udává, o kolik se robot otočil, měřeno ve stupních. Na začátku projektu je hodnota rotace nastavena na 0 stupňů. Rotaci lze také nastavit pomocí set_rotation.

Hodnoty rotace jsou absolutní. To znamená, že směr otáčení závisí na aktuální rotaci robota. Otočení doprava rotaci zvyšuje a otáčení doleva snižuje.

Například pokud robot začne na 0 stupních a otočíte se o 720 stupňů, otočí se dvakrát doprava. Pokud se poté otočíte o 360 stupňů, otočí se jednou doleva, protože 360 ​​je menší než 720.

VEX GO Code Base 2.0 zobrazující šipky otáčející se doprava a doleva. Levá šipka ukazuje „mínus“ a pravá šipka ukazuje „plus“.

Usage:
drivetrain.turn_to_rotation(angle, wait)

Parametry

Popis

angle

Hodnota rotace ve stupních, na kterou se robot otočí. Může to být celé číslo.

wait

Volitelné. wait=True (výchozí) způsobí, že projekt počká, dokud robot nedokončí otáčení, než se spustí další řádek kódu. wait=False způsobí, že se další řádek kódu spustí okamžitě.

# 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 zastaví pohyb robota.

Usage:
drivetrain.stop()

Parametry

Popis

Tato metoda nemá žádné parametry.

# 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átory#

set_drive_velocity#

set_drive_velocity říká robotovi, jak rychle má jet. Vyšší procento způsobí, že robot jede rychleji, a nižší procento způsobí, že robot jede pomaleji.

Každý projekt začíná s robotem, který se standardně pohybuje rychlostí 50 %.

Poznámka: Vyšší rychlost znamená, že robot jede rychleji, ale může být méně přesný. Nižší rychlost znamená, že robot jede pomaleji, ale je přesnější.

Usage:
drivetrain.set_drive_velocity(velocity)

Parametry

Popis

velocity

Rychlost jízdy od 0 % do 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 říká robotovi, jak rychle se má otáčet. Vyšší procento způsobí, že se robot bude otáčet rychleji, a nižší procento způsobí, že se robot bude otáčet pomaleji.

Každý projekt začíná s robotem, který se standardně otáčí rychlostí 50 %.

Poznámka: Vyšší rychlost způsobí, že se robot otáčí rychleji, ale může to být méně přesné. Nižší rychlost způsobí, že se robot otáčí pomaleji, ale je přesnější.

Usage:
drivetrain.set_turn_velocity(velocity)

Parametry

Popis

velocity

Rychlost otáčení od 0 % do 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 nastavuje, jak se robot zastaví: brzděním, setrvačností nebo zastavením.

Usage:
drivetrain.set_stopping(brake)

Parametry

Popis

brake

Jak robot zastaví:

  • BRAKE — Okamžitě zastaví.
  • COAST — Zpomalí až do úplného zastavení.
  • HOLD — Okamžitě zastaví a udrží kola v požadované poloze.

Pokud se tato metoda nepoužije, robot při zastavení použije 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 nastavuje, jak dlouho se bude robot snažit dokončit pohyb. Pokud robot nedokončí pohyb v tomto čase, přestane se snažit a přesune se na další řádek kódu. Tím se zabrání tomu, aby se robot zasekl na pohybu.

Usage:
drivetrain.set_timeout(value, units)

Parametry

Popis

value

Doba, po kterou se robot může pokusit dokončit pohyb. Může se jednat o celé číslo nebo desetinné číslo.

units

Volitelné. Jednotka času: SECONDS (výchozí) nebo MSEC (milisekundy).

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

Směr je směr, kterým je otočen mozek robota, měřený ve stupních. set_heading změní aktuální směr robota na novou hodnotu směru.

Například pokud se robot otočil čelem doprava, nastavením směru na 0 stupňů se tato poloha směřující doprava stane novými 0 stupni. Robot se pak může na základě tohoto nového směru otáčet do jiných pozic.

Usage:
drivetrain.set_heading(value)

Parametry

Popis

value

Hodnota směru ve stupních, kterou chcete nastavit pro robota. Může to být celé číslo od 0 do 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#

Rotace udává, o kolik se robot otočil, měřeno ve stupních. Na začátku projektu je hodnota rotace nastavena na 0 stupňů. set_rotation změní aktuální rotaci robota na novou hodnotu.

Například pokud robot provedl dvě plné otáčky doprava, jeho hodnota rotace bude 720 stupňů. Nastavením rotace na 0 stupňů se tato hodnota resetuje ze 720 na 0 stupňů. Robot se pak může otáčet na základě této nové hodnoty.

Usage:
drivetrain.set_rotation(value)

Parametry

Popis

value

Hodnota rotace ve stupních, která se má nastavit pro robota. Může to být celé číslo.

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

Gettery#

get_heading#

Směr je směr, kterým je robotův mozek otočen, měřený ve stupních. get_heading vrací tento směr od 0 do 359 stupňů.

Výchozí směr robota je 0 stupňů.

Brain VEX GO zobrazující směry: 0 stupňů vpřed, 90 stupňů vpravo, 180 stupňů vzad a 270 stupňů vlevo.

Usage:
drivetrain.get_heading()

Parametry

Popis

Tato metoda nemá žádné parametry.

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

Rotace udává, o kolik se robot otočil, měřeno ve stupních. Na začátku projektu je hodnota rotace nastavena na 0 stupňů. get_rotation vrací aktuální rotaci robota.

Otočení doprava zvětšuje rotaci a otočení doleva ji snižuje. Například provedení dvou celých otoček doprava vrátí rotaci o 720 stupňů.

VEX GO Code Base 2.0 zobrazující šipky otáčející se doprava a doleva. Levá šipka ukazuje „mínus“ a pravá šipka ukazuje „plus“.

Usage:
drivetrain.get_rotation()

Parametry

Popis

Tato metoda nemá žádné parametry.

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

Funkce get_velocity vrací rychlost robota v procentech od -100 % do 100 %.

Kladná hodnota znamená, že robot jede vpřed. Záporná hodnota znamená, že robot jede vzad.

Usage:
drivetrain.get_velocity()

Parametry

Popis

Tato metoda nemá žádné parametry.

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

Stáčení udává, o kolik se robot otočil doleva nebo doprava od své výchozí polohy, měřeno ve stupních. get_yaw vrací aktuální hodnotu stáčení robota.

Otočení doprava zvyšuje hodnotu stáčení a otáčení doleva hodnotu stáčení snižuje.

Usage:
drivetrain.get_yaw()

Parametry

Popis

Tato metoda nemá žádné parametry.

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

Naklonění udává, o kolik se robot nakloní doleva nebo doprava, měřeno ve stupních. get_roll vrací aktuální hodnotu naklonění robota.

S Brain otočeným dopředu se nakloněním doleva hodnota klopení zvyšuje a nakloněním doprava se hodnota klopení snižuje.

Usage:
drivetrain.get_roll()

Parametry

Popis

Tato metoda nemá žádné parametry.

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

Náklon udává, o kolik se robot nakloní dopředu nebo dozadu, měřeno ve stupních. get_pitch vrací aktuální hodnotu náklonu robota.

S mozkem otočeným dopředu se nakloněním dopředu zvyšuje výška tónu a nakloněním dozadu se výška tónu snižuje.

Usage:
drivetrain.get_pitch()

Parametry

Popis

Tato metoda nemá žádné parametry.

# 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 vrací, zda robot detekoval havárii, jako booleovskou hodnotu.

  • True — Byla detekována havárie.

  • False — Havárie nebyla detekována.

Usage:
drivetrain.get_crashed()

Parametry

Popis

Tato metoda nemá žádné parametry.

# 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 vrací hodnotu, zda robot dokončil pohyb, jako booleovskou hodnotu. Tuto hodnotu lze použít k řízení načasování dalších chování na základě pohybu robota.

  • True — Robot dokončil pohyb.

  • False — Robot se stále pohybuje.

Tato metoda spolupracuje s následujícími metodami drivetrainu, které mají parametr wait : drive_for, drive_until, turn_for, turn_to_heading a turn_to_rotation.

Usage:
drivetrain.is_stopped()

Parametry

Popis

Tato metoda nemá žádné parametry.

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