Ruch#

Wstęp#

Silniki sterują ruchem części robota. Silniki mogą służyć do podnoszenia ramienia, obracania chwytaka, obracania koła lub przesuwania innej części konstrukcji. Dwa silniki mogą działać razem jako układ napędowy, aby poruszać i obracać całym robotem.

Każdy silnik jest konfigurowany w oknie Urządzenia. W zależności od wersji, nazwy silników mogą się zmieniać. Na przykład wersja Competition Advanced 2.0 ma silnik o nazwie arm_motorRobot niestandardowy może używać innych nazw silników.

Domyślnie, FORWARD obraca silnik przeciwnie do ruchu wskazówek zegara, a REVERSE obraca silnik zgodnie z ruchem wskazówek zegara. Jeśli w oknie Urządzenia silnik jest ustawiony na bieg wsteczny, kierunki te zostaną zmienione.

Silnik VEX GO pokazujący kierunek do przodu oznaczony znakiem plus i strzałką wskazującą, że obraca się w lewo, czyli przeciwnie do ruchu wskazówek zegara. Silnik VEX GO pokazujący odwrotny kierunek obrotów oznaczony znakiem minus i strzałką wskazującą, że obraca się w prawo, czyli zgodnie z ruchem wskazówek zegara.

Istnieje wiele sposobów kodowania silników. Poniżej znajduje się lista wszystkich metod Motion:

Działania — zatrzymanie i obrót silników.

  • spin — Obraca silnik do przodu lub do tyłu w nieskończoność.

  • spin_for — Obraca silnik na określoną odległość.

  • spin_to_position — Obraca silnik do określonej pozycji.

  • stop — Zatrzymuje silnik przed wirowaniem.

Mutatory — dostosuj ustawienia silnika.

  • set_velocity — Informuje silnik, jak szybko ma się kręcić.

  • set_max_torque — Ustawia siłę, z jaką silnik może naciskać podczas wirowania.

  • set_position — Zmienia aktualną pozycję silnika na nową wartość.

  • set_stopping — Ustawia sposób zatrzymania silnika: poprzez hamowanie, jazdę bez obciążenia lub przytrzymywanie.

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

Getters — sprawdź status silnika.

  • get_position — Zwraca aktualną pozycję silnika.

  • get_velocity — Zwraca szybkość, z jaką obraca się silnik, w procentach od -100% do 100%.

  • get_current — Zwraca wartość procentową od 0% do 100% określającą, ile energii silnik pobiera z akumulatora.

  • is_stopped — Zwraca wartość logiczną, czy silnik zakończył ruch.

  • is_moving — Zwraca wartość logiczną, czy silnik się obraca.

Akcje#

spin#

spin obraca silnik do przodu lub do tyłu w nieskończoność. Silnik będzie się obracał, dopóki nie zostanie mu przydzielona inna czynność, np. obrót w innym kierunku lub zatrzymanie.

Usage:
arm_motor.spin(direction)

Parametry

Opis

direction

Kierunek, w którym obraca się silnik: FORWARD lub REVERSE.

# Build Used: Competition Advanced 2.0
def main():
    # Raise the ArmMotor, then stop
    arm_motor.spin(REVERSE)
    wait(1, SECONDS)
    arm_motor.stop()

# Start threads — Do not delete
start_thread(main)

spin_for#

spin_for obraca silnik na określoną odległość. Obrót jest względny do aktualnej pozycji silnika. Projekt będzie czekał, aż silnik zakończy obrót, zanim uruchomi się kolejny wiersz kodu.

Usage:
arm_motor.spin_for(direction, angle, units, wait)

Parametry

Opis

direction

Kierunek, w którym obraca się silnik: FORWARD lub REVERSE.

angle

Odległość, na jaką obraca się silnik. DEGREES używa liczb całkowitych. TURNS może używać liczb całkowitych lub dziesiętnych.

units

Opcjonalnie. Jednostka odległości: DEGREES (domyślna) lub TURNS.

wait

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

# Build Used: Competition Advanced 2.0
def main():
    # Raise and lower the ArmMotor
    arm_motor.spin_for(REVERSE, 180, DEGREES)
    wait(1, SECONDS)
    arm_motor.spin_for(FORWARD, 180, DEGREES)

# Start threads — Do not delete
start_thread(main)

spin_to_position#

spin_to_position obraca silnik do określonej pozycji.

Pozycja silnika to odległość, o jaką się obrócił, mierzona w DEGREES lub TURNS. Jeden obrót to 360 stopni. Na początku projektu położenie silnika jest ustawione na 0 stopni. Położenie silnika można również ustawić za pomocą metody set_position.

Wartości położenia są bezwzględne. Oznacza to, że kierunek obrotu zależy od aktualnego położenia silnika.

Na przykład, jeśli silnik zaczyna od 0 stopni i obraca się do pozycji 720 stopni, wykona dwa obroty do przodu. Jeśli następnie obraca się do pozycji 360 stopni, wykona jeden obrót do tyłu, ponieważ 360 stopni jest mniejsze niż 720 stopni.

Usage:
arm_motor.spin_to_position(angle, units, wait)

Parametry

Opis

angle

Wartość pozycji, do której silnik będzie się obracał. DEGREES używa liczb całkowitych. TURNS może używać liczb całkowitych lub dziesiętnych.

units

Opcjonalnie. Jednostka pozycji: DEGREES (domyślnie) lub TURNS.

wait

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

# Build Used: Competition Advanced 2.0
def main():
    # Return ArmMotor to 0 degrees after raising
    arm_motor.spin_for(REVERSE, 180, DEGREES)
    wait(1, SECONDS)
    arm_motor.spin_to_position(0, DEGREES)

# Start threads — Do not delete
start_thread(main)

stop#

stop zatrzymuje silnik i uniemożliwia jego obrót.

Usage:
arm_motor.stop()

Parametry

Opis

Ta metoda nie ma żadnych parametrów.

# Build Used: Competition Advanced 2.0
def main():
    # Raise the ArmMotor
    arm_motor.spin(REVERSE)
    wait(1, SECONDS)
    arm_motor.stop()

# Start threads — Do not delete
start_thread(main)

Mutatory#

set_velocity#

set_velocity określa prędkość obrotową silnika. Wyższy procent powoduje, że silnik obraca się szybciej, a niższy – wolniej.

Każdy projekt rozpoczyna się od ustawienia silników tak, aby domyślnie kręciły się z prędkością 50%.

Uwaga: Wyższa prędkość sprawia, że ​​silnik obraca się szybciej, ale może być mniej precyzyjny. Niższa prędkość sprawia, że ​​silnik obraca się wolniej, ale może być bardziej precyzyjny.

Usage:
arm_motor.set_velocity(velocity)

Parametry

Opis

velocity

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

# Build Used: Competition Advanced 2.0
def main():
    # Move the ArmMotor at different velocities
    arm_motor.spin_for(REVERSE, 180, DEGREES)
    wait(1, SECONDS)
    # Move slow
    arm_motor.set_velocity(20)
    arm_motor.spin_for(FORWARD, 180, DEGREES)
    wait(1, SECONDS)
    # Move fast
    arm_motor.set_velocity(100)
    arm_motor.spin_for(REVERSE, 180, DEGREES)

# Start threads — Do not delete
start_thread(main)

set_max_torque#

Moment obrotowy to siła obrotowa. Pokazuje, jak mocno silnik może pchać lub ciągnąć podczas obrotu.

set_max_torque ustawia maksymalny moment obrotowy, jaki może osiągnąć silnik.

Wyższy procent pozwala silnikowi naciskać mocniej, na przykład podczas podnoszenia ciężkiego przedmiotu. Niższy procent ogranicza siłę nacisku silnika. Może to pomóc w ochronie robota, jeśli silnik się zablokuje lub osiągnie granicę możliwości ruchu.

Każdy projekt rozpoczyna się od momentu obrotowego każdego silnika ustawionego domyślnie na 50%.

Usage:
arm_motor.set_max_torque(value)

Parametry

Opis

value

Maksymalny moment obrotowy, jaki może wykorzystać silnik, mieści się w zakresie od 0% do 100%. Może to być liczba całkowita integer lub liczba dziesiętna (float).

# Build Used: Competition Advanced 2.0
def main():
    # Move the ArmMotor at different torques
    arm_motor.spin_for(REVERSE, 180, DEGREES)
    wait(1, SECONDS)
    # Move with less torque
    arm_motor.set_max_torque(20)
    arm_motor.spin_for(FORWARD, 180, DEGREES)
    wait(1, SECONDS)
    # Move with maximum torque
    arm_motor.set_max_torque(100)
    arm_motor.spin_for(REVERSE, 180, DEGREES)

# Start threads — Do not delete
start_thread(main)

set_position#

Pozycja silnika to odległość, o jaką się obrócił, mierzona w DEGREES lub TURNS. Jeden obrót jest równy 360 stopniom. set_position zmienia bieżącą pozycję silnika na nową wartość.

Na przykład, jeśli silnik obrócił się o 180 stopni, ustawienie pozycji na 0 stopni spowoduje zresetowanie tej pozycji ze 180 do 0 stopni. Następnie silnik może obracać się do pozycji opartych na tej nowej wartości.

Usage:
arm_motor.set_position(position, units)

Parametry

Opis

position

Wartość pozycji do ustawienia dla silnika. DEGREES używa liczb całkowitych. TURNS może używać liczb całkowitych lub dziesiętnych.

units

Opcjonalnie. Jednostka pozycji: DEGREES (domyślnie) lub TURNS.

# Build Used: Competition Advanced 2.0
def main():
    # Return ArmMotor to 0 degrees after raising
    arm_motor.set_position(0, DEGREES)
    arm_motor.spin_for(REVERSE, 180, DEGREES)
    wait(1, SECONDS)
    arm_motor.spin_to_position(0, DEGREES)

# Start threads — Do not delete
start_thread(main)

set_stopping#

set_stopping ustawia sposób zatrzymania silnika: poprzez hamowanie, jazdę bez obciążenia lub przytrzymywanie.

Usage:
arm_motor.set_stopping(mode)

Parametry

Opis

mode

Jak silnik się zatrzyma:

  • BRAKE — Zatrzymuje się natychmiast.
  • COAST — Zwalnia do zatrzymania.
  • HOLD — Zatrzymuje się natychmiast i utrzymuje pozycję silnika.

Na przykład, jeśli używana jest wersja Competition Advanced 2.0 i parametr arm_motor jest ustawiony na HOLD, silnik utrzyma ramię w aktualnej pozycji do momentu kolejnego ruchu ramienia. Oznacza to, że silnik będzie działał wbrew grawitacji, aby utrzymać ramię w powietrzu, jeśli został zatrzymany z uniesionym ramieniem.

Jeżeli ta metoda nie zostanie użyta, silnik będzie używał BRAKE podczas zatrzymywania.

# Build Used: Competition Advanced 2.0
def main():
    # Move the ArmMotor, then coast to a stop
    arm_motor.set_velocity(20)
    arm_motor.set_stopping(COAST)
    arm_motor.spin(REVERSE)
    wait(1, SECONDS)
    arm_motor.stop()

# Start threads — Do not delete
start_thread(main)

set_timeout#

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

Usage:
arm_motor.set_timeout(value, units)

Parametry

Opis

value

Czas, przez jaki silnik 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).

# Build Used: Competition Advanced 2.0
def main():
    # Move ArmMotor as far as possible for 1 second before resetting
    arm_motor.set_position(0, DEGREES)
    arm_motor.set_timeout(1, SECONDS)
    arm_motor.spin_for(REVERSE, 180, DEGREES)
    arm_motor.spin_to_position(0, DEGREES)

# Start threads — Do not delete
start_thread(main)

Getters#

get_position#

Pozycja silnika to odległość, na jaką wykonał obrót, mierzona w DEGREES lub TURNS. Jeden obrót jest równy 360 stopniom. get_position zwraca aktualną pozycję silnika.

Na początku projektu położenie silnika jest ustawione na 0 stopni. Jeśli silnik obróci się o jeden obrót do przodu, położenie będzie wynosić 360 stopni, czyli 1 obrót. Jeśli silnik obróci się w przeciwnym kierunku, położenie będzie ujemne.

Usage:
arm_motor.get_position(units)

Parametry

Opis

units

Opcjonalnie. Jednostka przywracająca położenie silnika w zakresie: DEGREES (domyślnie) lub TURNS.

# Build Used: Competition Advanced 2.0
def main():
    # Display how far the ArmMotor moves after one second
    arm_motor.set_position(0, DEGREES)
    console.print("Start: ")
    console.print(arm_motor.get_position(DEGREES))
    console.new_line()
    arm_motor.spin(REVERSE)
    wait(1, SECONDS)
    arm_motor.stop()
    console.print("After: ")
    console.print(arm_motor.get_position(DEGREES))

# Start threads — Do not delete
start_thread(main)

get_velocity#

get_velocity zwraca szybkość, z jaką obraca się silnik, w procentach od -100% do 100%.

Wartość dodatnia oznacza, że ​​silnik obraca się do przodu. Wartość ujemna oznacza, że ​​silnik obraca się do tyłu.

Usage:
arm_motor.get_velocity()

Parametry

Opis

Ta metoda nie ma żadnych parametrów.

# Build Used: Competition Advanced 2.0
def main():
    # Display the ArmMotor's velocity when it moves
    console.print("Resting: ")
    console.print(arm_motor.get_velocity())
    console.new_line()
    arm_motor.spin(REVERSE)
    wait(1, SECONDS)
    console.print("Moving: ")
    console.print(arm_motor.get_velocity())
    arm_motor.stop()

# Start threads — Do not delete
start_thread(main)

get_current#

get_current zwraca ilość energii pobieranej przez silnik z akumulatora, jako wartość procentową od 0% do 100%.

Wyższa wartość prądu oznacza, że ​​silnik zużywa więcej mocy. Może się tak zdarzyć, gdy silnik podnosi coś ciężkiego, naciska na obiekt lub próbuje się poruszyć, gdy jest zablokowany.

Usage:
arm_motor.get_current()

Parametry

Opis

Ta metoda nie ma żadnych parametrów.

# Build Used: Competition Advanced 2.0
def main():
    # Display the motor's current when it moves
    console.print("Resting: ")
    console.print(arm_motor.get_current())
    console.new_line()
    arm_motor.spin(REVERSE)
    wait(1, SECONDS)
    console.print("Moving: ")
    console.print(arm_motor.get_current())
    arm_motor.stop()

# Start threads — Do not delete
start_thread(main)

is_stopped#

is_stopped zwraca wartość logiczną, czy silnik zakończył ruch. Można jej użyć do sterowania czasem innych zachowań na podstawie ruchu silnika.

  • True — Silnik zakończył ruch.

  • False — Silnik nadal się porusza.

Ta metoda działa w połączeniu z następującymi metodami Motion, które mają parametr wait wait : spin_for i spin_to_position.

Usage:
arm_motor.is_stopped()

Parametry

Opis

Ta metoda nie ma żadnych parametrów.

# Build Used: Competition Advanced 2.0
def main():
    # Turn the Eye Sensor's light on while ArmMotor is moving
    arm_motor.spin_for(REVERSE, 180, DEGREES, wait=False)
    wait(0.1, SECONDS)
    while True:
        if arm_motor.is_stopped():
            eye.set_light(OFF)
        else:
            eye.set_light(ON)

# Start threads — Do not delete
start_thread(main)

is_moving#

is_moving zwraca wartość logiczną, czy silnik się obraca. Można jej użyć do sterowania czasem innych zachowań na podstawie ruchu silnika.

  • True — Silnik się kręci.

  • False — Silnik się nie obraca.

Ta metoda działa w połączeniu z następującymi metodami Motion, które mają parametr wait wait : spin_for i spin_to_position.

Usage:
arm_motor.is_moving()

Parametry

Opis

Ta metoda nie ma żadnych parametrów.

# Build Used: Competition Advanced 2.0
def main():
    # Turn the Eye Sensor's light on while ArmMotor is moving
    arm_motor.spin_for(REVERSE, 180, DEGREES, wait=False)
    wait(0.1, SECONDS)
    while True:
        if arm_motor.is_moving():
            eye.set_light(ON)
        else:
            eye.set_light(OFF)

# Start threads — Do not delete
start_thread(main)