Pohyb#
Zavedení#
Motory ovládají pohyb částí robota. Motory lze použít ke zvedání ramene, otáčení drápu, otáčení kola nebo pohybu jiné části konstrukce. Dva motory mohou spolupracovat jako hnací ústrojí pro pohyb a otáčení celého robota.
Každý motor se konfiguruje v okně Zařízení. Názvy motorů se mohou měnit v závislosti na sestavení. Například sestavení Competition Advanced 2.0 má motor s názvem arm_motorVlastní robot může používat různé názvy motorů.
Ve výchozím nastavení FORWARD otáčí motor proti směru hodinových ručiček a REVERSE otáčí motor ve směru hodinových ručiček. Pokud je v okně Zařízení nastaveno otáčení motoru vzad, tyto směry se přepnou.
Existuje mnoho způsobů, jak kódovat motory. Níže je uveden seznam všech metod pohybu:
Akce – Zastavení a roztočení motorů.
spin— Roztočí motor dopředu nebo dozadu navždy.spin_for— Roztočí motor o určitou vzdálenost.spin_to_position— Roztočí motor do určité polohy.stop— Zastaví otáčení motoru.
Mutátory – Upravte nastavení motoru.
set_velocity— Říká motoru, jak rychle se má otáčet.set_max_torque— Nastavuje, jak silně se motor může otáčet.set_position— Změní aktuální polohu motoru na novou hodnotu.set_stopping— Nastavuje, jak se motor zastaví: brzděním, doběhem nebo pozastavením.set_timeout— Nastavuje, jak dlouho se bude motor snažit dokončit pohyb.
Gettery – Kontrola stavu motoru.
get_position— Vrátí aktuální polohu motoru.get_velocity— Vrátí rychlost otáčení motoru v procentech od -100 % do 100 %.get_current— Vrátí, kolik energie motor spotřebovává z baterie, v procentech od 0 % do 100 %.is_stopped— Vrátí, zda se motor rozhýbal, jako booleovskou hodnotu.is_moving— Vrátí, zda se motor otáčí, jako booleovskou hodnotu.
Akce#
spin#
spin roztočí motor dopředu nebo dozadu navždy. Motor se bude otáčet, dokud nedostane další akci, například se roztočí jiným směrem nebo se zastaví.
Usage:
arm_motor.spin(direction)
Parametry |
Popis |
|---|---|
|
Směr otáčení motoru: |
# 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 roztočí motor o určitou vzdálenost. Otáčení je relativní vzhledem k aktuální poloze motoru. Projekt počká, dokud se motor nedotočí, než se spustí další řádek kódu.
Usage:
arm_motor.spin_for(direction, angle, units, wait)
Parametry |
Popis |
|---|---|
|
Směr otáčení motoru: |
|
Vzdálenost, o kterou se motor otočí. |
|
Volitelné. Jednotka vzdálenosti: |
|
Volitelné. |
# 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 roztočí motor do určité polohy.
Poloha motoru udává, o kolik se otočil, měřeno v DEGREES nebo TURNSJedna otáčka se rovná 360 stupňům. Na začátku projektu je poloha motoru nastavena na 0 stupňů. Polohu motoru lze také nastavit metodou set_position.
Hodnoty polohy jsou absolutní. To znamená, že směr otáčení závisí na aktuální poloze motoru.
Například pokud se motor spustí při 0 stupních a otočí se do polohy 720 stupňů, otočí se o dvě otáčky dopředu. Pokud se poté otočí do polohy 360 stupňů, otočí se o jednu otáčku dozadu, protože 360 je menší než 720.
Usage:
arm_motor.spin_to_position(angle, units, wait)
Parametry |
Popis |
|---|---|
|
Hodnota polohy, do které se motor otočí. |
|
Volitelné. Jednotka polohy: |
|
Volitelné. |
# 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 zastaví otáčení motoru.
Usage:
arm_motor.stop()
Parametry |
Popis |
|---|---|
Tato metoda nemá žádné parametry. |
# 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)
Mutátory#
set_velocity#
set_velocity určuje, jak rychle se má motor otáčet. Vyšší procento způsobí, že se motor otáčí rychleji, a nižší procento, že se motor otáčí pomaleji.
Každý projekt začíná s tím, že se každý motor standardně otáčí rychlostí 50 %.
Poznámka: Vyšší rychlost způsobí, že se motor otáčí rychleji, ale může to být méně přesné. Nižší rychlost způsobí, že se motor otáčí pomaleji, ale může to být přesnější.
Usage:
arm_motor.set_velocity(velocity)
Parametry |
Popis |
|---|---|
|
Rychlost otáčení od 0 % do 100 %. Může to být |
# 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#
Točivý moment je točivá síla. Ukazuje, jak silně může motor tlačit nebo táhnout, když se otáčí.
set_max_torque nastavuje maximální točivý moment, který motor smí použít.
Vyšší procento umožňuje motoru tlačit silněji, například při zvedání těžkého předmětu. Nižší procento omezuje, jak silně může motor tlačit. To může pomoci chránit robota, pokud se motor zasekne nebo dosáhne konce možného dosahu.
Každý projekt začíná s výchozím točivým momentem každého motoru na 50 %.
Usage:
arm_motor.set_max_torque(value)
Parametry |
Popis |
|---|---|
|
Maximální točivý moment, který může motor použít, od 0 % do 100 %. Může to být |
# 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#
Poloha motoru udává, o kolik se otočil, měřeno v DEGREES nebo TURNSJedna otáčka se rovná 360 stupňům. set_position změní aktuální polohu motoru na novou hodnotu.
Například pokud se motor otočil o 180 stupňů, nastavení polohy na 0 stupňů resetuje tuto polohu ze 180 na 0 stupňů. Motor se pak může otáčet do pozic na základě této nové hodnoty.
Usage:
arm_motor.set_position(position, units)
Parametry |
Popis |
|---|---|
|
Hodnota polohy, která se má nastavit pro motor. |
|
Volitelné. Jednotka polohy: |
# 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 nastavuje, jak se motor zastaví: brzděním, doběhem nebo pozastavením.
Usage:
arm_motor.set_stopping(mode)
Parametry |
Popis |
|---|---|
|
Jak se motor zastaví:
|
Například pokud je použita sestava Competition Advanced 2.0 a arm_motor je nastaveno na HOLD, motor udrží rameno v aktuální poloze, dokud nedojde k dalšímu pohybu ramene. To znamená, že motor bude pracovat proti gravitaci, aby udržel rameno ve vzduchu, pokud by motor byl zastaven se zvednutým ramenem.
Pokud se tato metoda nepoužije, motor při zastavení použije BRAKE.
# 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 nastavuje, jak dlouho se bude motor snažit dokončit pohyb. Pokud motor nedokončí pohyb v tomto čase, přestane se snažit a přejde na další řádek kódu. Tím se zabrání tomu, aby se motor zasekl na pohybu.
Usage:
arm_motor.set_timeout(value, units)
Parametry |
Popis |
|---|---|
|
Doba, po kterou se motor může pokusit dokončit pohyb. Může to být kladné celé číslo |
|
Volitelné. Jednotka času: |
# 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)
Gettery#
get_position#
Poloha motoru udává, o kolik se otočil, měřeno v DEGREES nebo TURNSJedna otáčka se rovná 360 stupňům. get_position vrací aktuální polohu motoru.
Na začátku projektu je poloha motoru nastavena na 0 stupňů. Pokud se motor otočí o jednu otáčku dopředu, poloha bude 360 stupňů neboli 1 otáčka. Pokud se motor otočí opačným směrem, poloha bude záporná.
Usage:
arm_motor.get_position(units)
Parametry |
Popis |
|---|---|
|
Volitelné. Jednotka pro návrat do polohy motoru: |
# 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 vrací rychlost otáčení motoru v procentech od -100 % do 100 %.
Kladná hodnota znamená, že se motor otáčí dopředu. Záporná hodnota znamená, že se motor otáčí dozadu.
Usage:
arm_motor.get_velocity()
Parametry |
Popis |
|---|---|
Tato metoda nemá žádné parametry. |
# 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#
Funkce get_current vrací množství energie, kterou motor spotřebovává z baterie, v procentech od 0 % do 100 %.
Vyšší hodnota proudu znamená, že motor spotřebovává více energie. K tomu může dojít, když motor zvedá něco těžkého, tlačí na nějaký předmět nebo se snaží pohnout, když je zaseknutý.
Usage:
arm_motor.get_current()
Parametry |
Popis |
|---|---|
Tato metoda nemá žádné parametry. |
# 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 vrací hodnotu, zda se motor rozhýbal, jako booleovskou hodnotu. Tuto hodnotu lze použít k řízení načasování dalších funkcí na základě pohybu motoru.
True— Motor se roztočil.False— Motor se stále točí.
Tato metoda spolupracuje s následujícími metodami Motion, které mají parametr wait : spin_for a spin_to_position.
Usage:
arm_motor.is_stopped()
Parametry |
Popis |
|---|---|
Tato metoda nemá žádné parametry. |
# 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 vrací booleovskou hodnotu, zda se motor otáčí. Tuto hodnotu lze použít k řízení načasování dalších chování na základě pohybu motoru.
True— Motor se točí.False— Motor se netočí.
Tato metoda spolupracuje s následujícími metodami Motion, které mají parametr wait : spin_for a spin_to_position.
Usage:
arm_motor.is_moving()
Parametry |
Popis |
|---|---|
Tato metoda nemá žádné parametry. |
# 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)