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.
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 |
|---|---|
|
Kierunek, w którym obraca się silnik: |
# 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 |
|---|---|
|
Kierunek, w którym obraca się silnik: |
|
Odległość, na jaką obraca się silnik. |
|
Opcjonalnie. Jednostka odległości: |
|
Opcjonalnie. |
# 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 |
|---|---|
|
Wartość pozycji, do której silnik będzie się obracał. |
|
Opcjonalnie. Jednostka pozycji: |
|
Opcjonalnie. |
# 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 |
|---|---|
|
Prędkość wirowania od 0% do 100%. Może to być liczba całkowita |
# 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 |
|---|---|
|
Maksymalny moment obrotowy, jaki może wykorzystać silnik, mieści się w zakresie od 0% do 100%. Może to być liczba całkowita |
# 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 |
|---|---|
|
Wartość pozycji do ustawienia dla silnika. |
|
Opcjonalnie. Jednostka pozycji: |
# 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 |
|---|---|
|
Jak silnik się zatrzyma:
|
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 |
|---|---|
|
Czas, przez jaki silnik może próbować zakończyć ruch. Może to być dodatnia liczba całkowita |
|
Opcjonalnie. Jednostka czasu: |
# 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 |
|---|---|
|
Opcjonalnie. Jednostka przywracająca położenie silnika w zakresie: |
# 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)