Układ napędowy#

Wstęp#

Układ napędowy kontroluje sposób jazdy i skręcania robota VR. Układ napędowy może poruszać się do przodu i do tyłu, skręcać w lewo i w prawo, zmieniać kierunki i śledzić swój obrót.

Istnieje wiele sposobów kodowania układu napędowego. Poniżej znajduje się lista wszystkich metod kodowania układu napędowego:

Akcje — poruszanie i obracanie robotem.

  • drive — Przesuwa robota do przodu lub do tyłu w nieskończoność.

  • drive_for — Przesuwa robota do przodu lub do tyłu na określoną odległość.

  • turn — Obraca robota w lewo lub prawo na zawsze.

  • turn_for — Obraca robota w lewo lub prawo o określoną liczbę stopni.

  • turn_to_heading — Obraca robota w kierunku określonego kierunku od -359 do 359 stopni.

  • turn_to_rotation — Obraca robota o określoną wartość.

  • stop — Zatrzymuje ruch robota.

Mutatory — Dostosuj ustawienia układu napędowego.

  • set_heading — Zmienia aktualny kierunek robota na nowy kierunek.

  • set_rotation — Zmienia aktualny obrót robota na nowy obrót.

  • set_timeout — Ustawia, ile czasu robot będzie próbował zakończyć ruch.

  • set_drive_velocity — Informuje robota, z jaką prędkością ma jechać.

  • set_turn_velocity — Informuje robota, jak szybko ma skręcić.

Getters — sprawdź stan układu napędowego.

  • heading — Zwraca aktualny kierunek robota od 0 do 359,99 stopni.

  • rotation — Zwraca aktualny obrót robota.

  • is_done — Zwraca wartość logiczną informującą, czy robot zakończył ruch.

  • is_moving — Zwraca wartość logiczną informującą, czy robot się porusza.

Akcje#

drive#

Napęd drive porusza robota do przodu lub do tyłu w nieskończoność. Robot będzie się poruszał, dopóki nie otrzyma innej akcji, takiej jak obrót lub zatrzymanie.

Usage:
drivetrain.drive(direction)

Parametry

Opis

direction

Kierunek, w którym porusza się robot: FORWARD lub REVERSE.

def main():
    # Drive forward then stop
    drivetrain.drive(FORWARD)
    wait(2, SECONDS)
    drivetrain.stop()

# VR threads — Do not delete
vr_thread(main)

drive_for#

drive_for przesuwa robota do przodu lub do tyłu o określoną odległość. Projekt będzie czekał, aż robot zakończy ruch, zanim uruchomi się kolejny wiersz kodu.

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

Parametry

Opis

direction

Kierunek, w którym porusza się robot: FORWARD lub REVERSE.

distance

Odległość pokonywana przez robota. Może to być liczba całkowita integer lub liczba dziesiętna (float).

units

Opcjonalnie. Jednostka odległości: INCHES (domyślnie) lub MM (milimetry).

wait

Opcjonalnie. wait=True (domyślnie) powoduje, że projekt czeka, aż robot zakończy ruch, zanim zostanie wykonany kolejny wiersz kodu. wait=False powoduje, że następny wiersz kodu zostanie wykonany natychmiast.

def main():
    # Drive forward and backward
    drivetrain.drive_for(FORWARD, 200, MM)
    drivetrain.drive_for(REVERSE, 200, MM)

# VR threads — Do not delete
vr_thread(main)

turn#

turn obraca robota w lewo lub w prawo w nieskończoność. Robot będzie się obracał, dopóki nie zostanie mu przydzielona inna czynność, taka jak jazda lub zatrzymanie.

Usage:
drivetrain.turn(direction)

Parametry

Opis

direction

Kierunek, w którym obraca się robot: LEFT lub RIGHT.

def main():
    # Turn right and left, then stop
    drivetrain.turn(RIGHT)
    wait(2, SECONDS)
    drivetrain.turn(LEFT)
    wait(2, SECONDS)
    drivetrain.stop()

# VR threads — Do not delete
vr_thread(main)

turn_for#

turn_for obraca robota w lewo lub w prawo o określoną liczbę stopni. Obrót jest względny do aktualnej pozycji robota. Projekt będzie czekał, aż robot zakończy obrót, zanim uruchomi się kolejny wiersz kodu.

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

Parametry

Opis

direction

Kierunek, w którym obraca się robot: LEFT lub RIGHT.

angle

Liczba stopni, o jaką obróci się robot. Może to być liczba całkowita integer lub liczba dziesiętna (float).

units

Opcjonalnie. Jednostka obrotu: DEGREES (domyślnie).

wait

Opcjonalnie. wait=True (domyślnie) powoduje, że projekt czeka, aż robot skończy się obracać, zanim zostanie wykonany kolejny wiersz kodu. wait=False powoduje, że następny wiersz kodu zostanie wykonany natychmiast.

def main():
    # Turn the robot right and left
    drivetrain.turn_for(RIGHT, 90, DEGREES)
    wait(1, SECONDS)
    drivetrain.turn_for(LEFT, 90, DEGREES)

# VR threads — Do not delete
vr_thread(main)

turn_to_heading#

Kurs to kierunek, w którym zwrócony jest robot, mierzony w stopniach. turn_to_heading obraca robota w określonym kierunku od -359 do 359 stopni. Robot obróci się w najkrótszym kierunku, aby osiągnąć docelowy kurs.

Początkowy kierunek robota wynosi 0 stopni.

Projekt będzie czekał, aż robot zakończy obracanie się, zanim zostanie uruchomiony kolejny wiersz kodu.

Usage:
drivetrain.turn_to_heading(angle, units, wait)

Parametry

Opis

angle

Kierunek, w którym robot powinien być zwrócony, wyrażony w stopniach. Może to być liczba całkowita integer lub liczba dziesiętna (float) z zakresu od -359 do 359.

units

Opcjonalnie. Jednostka obrotu: DEGREES (domyślnie).

wait

Opcjonalnie. wait=True (domyślnie) powoduje, że projekt czeka, aż robot skończy się obracać, zanim zostanie wykonany kolejny wiersz kodu. wait=False powoduje, że następny wiersz kodu zostanie wykonany natychmiast.

def main():
    # Turn to face the cardinal directions
    drivetrain.turn_to_heading(90, DEGREES)
    wait(1, SECONDS)
    drivetrain.turn_to_heading(180, DEGREES)
    wait(1, SECONDS)
    drivetrain.turn_to_heading(270, DEGREES)
    wait(1, SECONDS)
    drivetrain.turn_to_heading(0, DEGREES)

# VR threads — Do not delete
vr_thread(main)

turn_to_rotation#

turn_to_rotation obraca robota o określoną wartość.

Obrót to wartość obrotu robota, mierzona w stopniach. Na początku projektu wartość obrotu jest ustawiona na 0 stopni. Obrót można również ustawić za pomocą metody set_rotation.

Wartości obrotu są bezwzględne. Oznacza to, że kierunek obrotu zależy od aktualnego obrotu robota. Skręt w prawo zwiększa obrót, a w lewo zmniejsza.

Na przykład, jeśli robot zaczyna od 0 stopni i obrócisz go o 720 stopni, skręci w prawo dwa razy. Jeśli następnie obrócisz go o 360 stopni, skręci raz w lewo, ponieważ 360 stopni to mniej niż 720.

Projekt będzie czekał, aż robot zakończy obracanie się, zanim zostanie uruchomiony kolejny wiersz kodu.

Usage:
drivetrain.turn_to_rotation(angle, units, wait)

Parametry

Opis

angle

Wartość obrotu, w stopniach, o którą obróci się robot. Może to być integer lub liczba dziesiętna (float).

units

Opcjonalnie. Jednostka obrotu: DEGREES (domyślnie).

wait

Opcjonalnie. wait=True (domyślnie) powoduje, że projekt czeka, aż robot skończy się obracać, zanim zostanie wykonany kolejny wiersz kodu. wait=False powoduje, że następny wiersz kodu zostanie wykonany natychmiast.

def main():
    # Turn left, then spin in a circle
    # clockwise and face right
    drivetrain.turn_to_rotation(-90, DEGREES)
    wait(1, SECONDS)
    drivetrain.turn_to_rotation(450, DEGREES)

# VR threads — Do not delete
vr_thread(main)

stop#

stop zatrzymuje ruch robota.

Usage:
drivetrain.stop()

Parametry

Opis

Ta metoda nie ma żadnych parametrów.

def main():
    # Drive forward then stop
    drivetrain.drive(FORWARD)
    wait(2, SECONDS)
    drivetrain.stop()

# VR threads — Do not delete
vr_thread(main)

Mutatory#

set_heading#

Kierunek to kierunek, w którym zwrócony jest robot, mierzony w stopniach. set_heading zmienia bieżący kierunek robota na nową wartość kierunku.

Na przykład, jeśli robot obrócił się w prawo, ustawienie kierunku na 0 stopni spowoduje, że ta pozycja skierowana w prawo stanie się nowym 0 stopniem. Następnie robot może obrócić się w inne pozycje w oparciu o ten nowy kierunek.

Usage:
drivetrain.set_heading(heading, units)

Parametry

Opis

heading

Wartość nagłówka w stopniach, którą należy ustawić dla robota. Może to być integer lub liczba dziesiętna (float).

units

Opcjonalnie. Jednostka nagłówka: DEGREES (domyślna).

def main():
    # Face the new 0 degrees
    drivetrain.set_heading(90, DEGREES)
    drivetrain.turn_to_heading(0, DEGREES)

# VR threads — Do not delete
vr_thread(main)

set_rotation#

Obrót to wartość obrotu robota, mierzona w stopniach. Na początku projektu wartość obrotu jest ustawiona na 0 stopni. set_rotation zmienia bieżący obrót robota na nową wartość.

Na przykład, jeśli robot wykonał dwa pełne obroty w prawo, jego wartość obrotu wyniesie 720 stopni. Ustawienie obrotu na 0 stopni zresetuje ten obrót z 720 do 0 stopni. Następnie robot może wykonać obrót w oparciu o tę nową wartość.

Usage:
drivetrain.set_rotation(rotation, units)

Parametry

Opis

rotation

Wartość obrotu w stopniach, którą należy ustawić dla robota. Może to być integer lub liczba dziesiętna (float).

units

Opcjonalnie. Jednostka obrotu: DEGREES (domyślnie).

def main():
    # Spin counterclockwise two times
    drivetrain.set_rotation(720, DEGREES)
    drivetrain.turn_to_rotation(0, DEGREES)

# VR threads — Do not delete
vr_thread(main)

set_timeout#

set_timeout ustawia, ile czasu robot będzie próbował ukończyć ruch. Jeśli robot nie zdoła ukończyć ruchu w tym czasie, przerwie próby i przejdzie do następnego wiersza kodu. Zapobiega to zablokowaniu ruchu przez robota.

Usage:
drivetrain.set_timeout(value, units)

Parametry

Opis

value

Czas, w którym robot może próbować zakończyć ruch. Może to być dodatnia liczba całkowita integer lub liczba dziesiętna (float).

units

Opcjonalnie. Jednostka czasu: SECONDS (domyślnie) lub MSEC (milisekundy).

def main():
    # Turn right after driving forward
    drivetrain.set_timeout(1, SECONDS)
    drivetrain.drive_for(FORWARD, 25, INCHES)
    drivetrain.turn_for(RIGHT, 90)

# VR threads — Do not delete
vr_thread(main)

set_drive_velocity#

set_drive_velocity określa prędkość, z jaką robot ma jechać. Wyższy procent sprawia, że ​​robot jedzie szybciej, a niższy – wolniej.

Każdy projekt rozpoczyna się od tego, że robot domyślnie porusza się z prędkością równą 50%.

Uwaga: Większa prędkość sprawia, że ​​robot jedzie szybciej, ale może być mniej precyzyjny. Niższa prędkość sprawia, że ​​robot jedzie wolniej, ale może być bardziej precyzyjny.

Usage:
drivetrain.set_drive_velocity(velocity, units)

Parametry

Opis

velocity

Prędkość jazdy od 0% do 100%. Może to być liczba całkowita integer lub liczba dziesiętna (float).

units

Opcjonalnie. Jednostka prędkości: PERCENT (domyślnie).

def main():
    # Drive forward at different velocities
    # Default velocity
    drivetrain.drive_for(FORWARD, 150, MM)
    wait(1, SECONDS)
    # Drive slower
    drivetrain.set_drive_velocity(20, PERCENT)
    drivetrain.drive_for(FORWARD, 150, MM)
    wait(1, SECONDS)
    # Drive faster
    drivetrain.set_drive_velocity(100, PERCENT)
    drivetrain.drive_for(FORWARD, 150, MM)

# VR threads — Do not delete
vr_thread(main)

set_turn_velocity#

set_turn_velocity określa, jak szybko robot ma się skręcić. Wyższy procent powoduje, że robot skręca szybciej, a niższy – że skręca wolniej.

Każdy projekt rozpoczyna się od ustawienia robota tak, aby domyślnie obracał się z prędkością równą 50%.

Uwaga: Większa prędkość sprawia, że ​​robot skręca szybciej, ale może być mniej precyzyjny. Niższa prędkość sprawia, że ​​robot skręca wolniej, ale może być bardziej precyzyjny.

Usage:
drivetrain.set_turn_velocity(velocity, units)

Parametry

Opis

velocity

Prędkość obrotu od 0% do 100%. Może to być liczba całkowita integer lub liczba dziesiętna (float).

units

Opcjonalnie. Jednostka prędkości: PERCENT (domyślnie).

def main():
    # Turn at different velocities
    # Default velocity
    drivetrain.turn_for(RIGHT, 120, DEGREES)
    wait(1, SECONDS)
    # Turn slower
    drivetrain.set_turn_velocity(20, PERCENT)
    drivetrain.turn_for(RIGHT, 120, DEGREES)
    wait(1, SECONDS)
    # Turn faster
    drivetrain.set_turn_velocity(100, PERCENT)
    drivetrain.turn_for(RIGHT, 120, DEGREES)

# VR threads — Do not delete
vr_thread(main)

Getters#

heading#

Kurs to kierunek, w którym zwrócony jest robot, mierzony w stopniach. heading zwraca aktualny kurs robota z zakresu od 0 do 359,99 stopnia.

Początkowy kierunek robota wynosi 0 stopni.

Usage:
drivetrain.heading(units)

Parametry

Opis

units

Opcjonalnie. Jednostka nagłówka: DEGREES (domyślna).

def main():
    # Display the heading after turning
    drivetrain.turn_for(RIGHT, 450, DEGREES)
    brain.print("Heading: ")
    brain.print(drivetrain.heading(DEGREES))

# VR threads — Do not delete
vr_thread(main)

rotation#

Obrót to wartość obrotu robota, mierzona w stopniach. Na początku projektu wartość obrotu jest ustawiona na 0 stopni. rotation zwraca aktualny obrót robota.

Skręt w prawo zwiększa obrót, a skręt w lewo zmniejsza. Na przykład, wykonanie dwóch pełnych obrotów w prawo spowoduje obrót o 720 stopni.

Usage:
drivetrain.rotation(units)

Parametry

Opis

units

Opcjonalnie. Jednostka obrotu: DEGREES (domyślnie).

def main():
    # Display the rotation after turning
    drivetrain.turn_for(RIGHT, 450, DEGREES)
    brain.print("Rotation: ")
    brain.print(drivetrain.rotation(DEGREES))

# VR threads — Do not delete
vr_thread(main)

is_done#

is_done zwraca wartość logiczną, czy robot zakończył ruch. Można jej użyć do kontrolowania czasu innych zachowań na podstawie ruchu robota.

  • True — Robot zakończył ruch.

  • False — Robot nadal się porusza.

Ta metoda działa razem z następującymi metodami Drivetrain, które mają parametr wait wait : drive_for, turn_for, turn_to_heading i turn_to_rotation.

Usage:
drivetrain.is_done()

Parametry

Opis

Ta metoda nie ma żadnych parametrów.

is_moving#

is_moving zwraca wartość logiczną, czy robot się porusza. Można jej użyć do kontrolowania czasu innych zachowań na podstawie ruchu robota.

  • True — Robot się porusza.

  • False — Robot się nie porusza.

Usage:
drivetrain.is_moving()

Parametry

Opis

Ta metoda nie ma żadnych parametrów.