Beweging#

Invoering#

Motors control how parts of a robot move. Motors can be used to raise an arm, turn a claw, spin a wheel, or move another part of a build. Two motors can work together as a drivetrain to move and turn the whole robot.

Elke motor wordt geconfigureerd in het venster Apparaten. Afhankelijk van de build kunnen de motornamen variëren. De Competition Advanced 2.0 build heeft bijvoorbeeld een motor met de naam arm_motorEen aangepaste robot kan andere motornamen gebruiken.

Standaard draait een motor met FORWARD tegen de klok in en met REVERSE met de klok mee. Als een motor in het venster Apparaten is ingesteld op achteruit draaien, worden deze draairichtingen omgewisseld.

Een VEX GO-motor die de voorwaartse richting aangeeft met een plusteken en een pijl die aangeeft dat hij naar links, ofwel tegen de klok in, draait. Een VEX GO-motor die de omgekeerde draairichting aangeeft met een minteken en een pijl die aangeeft dat hij naar rechts, oftewel met de klok mee, draait.

Er zijn veel manieren om motoren te programmeren. Hieronder een lijst met alle Motion-methoden:

Handelingen — Motoren stoppen en laten draaien.

  • spin — Laat een motor oneindig lang vooruit of achteruit draaien.

  • spin_for — Laat een motor een specifieke afstand draaien.

  • spin_to_position — Draait een motor naar een specifieke positie.

  • stop — Stopt een motor met draaien.

Mutators — Pas de motorinstellingen aan.

  • set_velocity — Vertelt een motor hoe snel hij moet draaien.

  • set_max_torque — Stelt in hoe hard een motor mag duwen tijdens het draaien.

  • set_position — Wijzigt de huidige positie van de motor naar een nieuwe waarde.

  • set_stopping — Stelt in hoe een motor stopt met bewegen: door te remmen, uit te rollen of te wachten.

  • set_timeout — Stelt in hoeveel tijd een motor nodig heeft om een ​​beweging te voltooien.

Getters — Controleer de motorstatus.

  • get_position — Geeft de huidige positie van de motor terug.

  • get_velocity — Geeft de draaisnelheid van de motor weer, als een percentage van -100% tot 100%.

  • get_current — Geeft weer hoeveel stroom de motor uit de batterij gebruikt, als een percentage van 0% tot 100%.

  • is_stopped — Geeft als Booleaanse waarde aan of de motor is gestopt met bewegen.

  • is_moving — Geeft als Booleaanse waarde aan of de motor draait.

Acties#

spin#

spin draait een motor oneindig vooruit of achteruit. De motor blijft draaien totdat er een andere actie wordt uitgevoerd, zoals in een andere richting draaien of stoppen.

Usage:
arm_motor.spin(direction)

Parameters

Beschrijving

direction

De draairichting van de motor: FORWARD of 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 laat een motor een specifieke afstand draaien. De draaiing is relatief ten opzichte van de huidige positie van de motor. Het project wacht tot de motor klaar is met draaien voordat de volgende regel code wordt uitgevoerd.

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

Parameters

Beschrijving

direction

De draairichting van de motor: FORWARD of REVERSE.

angle

De afstand die de motor aflegt. DEGREES gebruik hele getallen. TURNS kan gebruik maken van hele getallen of decimalen.

units

Optioneel. De afstandseenheid: DEGREES (standaard) of TURNS.

wait

Optioneel. wait=True (standaard) zorgt ervoor dat het project wacht tot de motor is gestopt met draaien voordat de volgende regel code wordt uitgevoerd. wait=False zorgt ervoor dat de volgende regel code direct wordt uitgevoerd.

# 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 laat een motor naar een specifieke positie draaien.

De positie van een motor is de afstand die deze heeft afgelegd, gemeten in DEGREES of TURNSEén omwenteling is gelijk aan 360 graden. Aan het begin van een project wordt de motorpositie ingesteld op 0 graden. De motorpositie kan ook worden ingesteld met behulp van de set_position methode.

Positiewaarden zijn absoluut. Dit betekent dat de draairichting afhangt van de huidige positie van de motor.

Als de motor bijvoorbeeld begint bij 0 graden en draait naar een positie van 720 graden, draait hij twee omwentelingen vooruit. Als hij vervolgens draait naar een positie van 360 graden, draait hij één omwenteling achteruit, omdat 360 minder is dan 720.

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

Parameters

Beschrijving

angle

De positie waarnaar de motor zal draaien. DEGREES gebruik gehele getallen. TURNS kan gebruik maken van gehele getallen of decimalen.

units

Optioneel. De positie-eenheid: DEGREES (standaard) of TURNS.

wait

Optioneel. wait=True (standaard) zorgt ervoor dat het project wacht tot de motor is gestopt met draaien voordat de volgende regel code wordt uitgevoerd. wait=False zorgt ervoor dat de volgende regel code direct wordt uitgevoerd.

# 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 zorgt ervoor dat een motor stopt met draaien.

Usage:
arm_motor.stop()

Parameters

Beschrijving

Deze methode heeft geen parameters.

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

Mutators#

set_velocity#

set_velocity geeft aan hoe snel een motor moet draaien. Een hoger percentage zorgt ervoor dat de motor sneller draait en een lager percentage zorgt ervoor dat de motor langzamer draait.

Elk project begint standaard met elke motor op 50% snelheid.

Let op: Een hogere snelheid zorgt ervoor dat de motor sneller draait, maar de precisie kan lager zijn. Een lagere snelheid zorgt ervoor dat de motor langzamer draait, maar de precisie kan hoger zijn.

Usage:
arm_motor.set_velocity(velocity)

Parameters

Beschrijving

velocity

De rotatiesnelheid van 0% tot 100%. Dit kan een geheel getal integer ) of een decimaal getal (float ) zijn.

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

Koppel is een draaiende kracht. Het geeft aan hoe hard een motor kan duwen of trekken wanneer hij draait.

set_max_torque stelt het maximale koppel in dat een motor mag gebruiken.

Een hoger percentage zorgt ervoor dat de motor harder kan duwen, bijvoorbeeld bij het tillen van een zwaar voorwerp. Een lager percentage beperkt de maximale duwkracht van de motor. Dit kan de robot beschermen als de motor vastloopt of de maximale bewegingsafstand bereikt.

Elk project begint standaard met het koppel van elke motor op 50%.

Usage:
arm_motor.set_max_torque(value)

Parameters

Beschrijving

value

Het maximale koppel dat de motor kan gebruiken, van 0% tot 100%. Dit kan een geheel getal integer ) of een decimaal getal (float ) zijn.

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

De positie van een motor geeft aan hoeveel omwentelingen hij heeft gemaakt, gemeten in DEGREES of TURNSEén omwenteling is gelijk aan 360 graden. set_position verandert de huidige positie van de motor naar een nieuwe waarde.

Als een motor bijvoorbeeld 180 graden heeft gedraaid, zal het instellen van de positie op 0 graden die positie resetten van 180 naar 0 graden. Vervolgens kan de motor naar posities draaien op basis van die nieuwe waarde.

Usage:
arm_motor.set_position(position, units)

Parameters

Beschrijving

position

De positiewaarde die voor de motor moet worden ingesteld. DEGREES gebruik gehele getallen. TURNS kan gebruik maken van gehele getallen of decimalen.

units

Optioneel. De positie-eenheid: DEGREES (standaard) of 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 stelt in hoe een motor stopt met bewegen: door te remmen, uit te rollen of vast te houden.

Usage:
arm_motor.set_stopping(mode)

Parameters

Beschrijving

mode

Hoe de motor stopt:

  • BRAKE — Stopt onmiddellijk.
  • COAST — Vertraagt ​​tot stilstand.
  • HOLD — Stopt onmiddellijk en houdt de positie van de motor vast.

Als bijvoorbeeld een Competition Advanced 2.0-build wordt gebruikt en arm_motor is ingesteld op HOLD, zal de motor de arm in de huidige positie houden totdat er een nieuwe armbeweging plaatsvindt. Dit betekent dat de motor tegen de zwaartekracht in werkt om de arm in de lucht te houden als de motor is gestopt terwijl de arm omhoog was.

Als deze methode niet wordt gebruikt, zal de motor BRAKE gebruiken bij het stoppen.

# 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 bepaalt hoeveel tijd een motor krijgt om een ​​beweging te voltooien. Als de motor de beweging niet binnen die tijd kan voltooien, stopt hij met proberen en gaat hij verder met de volgende regel code. Dit voorkomt dat de motor vastloopt tijdens een beweging.

Usage:
arm_motor.set_timeout(value, units)

Parameters

Beschrijving

value

De hoeveelheid tijd die de motor kan proberen om een ​​beweging te voltooien. Dit kan een positief geheel getal zijn integer ) of een decimaal getal (float).

units

Optioneel. De tijdseenheid: SECONDS (standaard) of MSEC (milliseconden).

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

De positie van een motor geeft aan hoeveel omwentelingen hij heeft gemaakt, gemeten in DEGREES of TURNSEén omwenteling is gelijk aan 360 graden. get_position retourneert de huidige positie van de motor.

Aan het begin van een project wordt de motorpositie ingesteld op 0 graden. Als de motor één omwenteling vooruit draait, is de positie 360 ​​graden of 1 omwenteling. Als de motor de andere kant op draait, is de positie negatief.

Usage:
arm_motor.get_position(units)

Parameters

Beschrijving

units

Optioneel. De eenheid waarmee de motorpositie moet worden teruggezet: DEGREES (standaard) of 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 geeft aan hoe snel de motor draait, als een percentage van -100% tot 100%.

Een positieve waarde betekent dat de motor vooruit draait. Een negatieve waarde betekent dat de motor achteruit draait.

Usage:
arm_motor.get_velocity()

Parameters

Beschrijving

Deze methode heeft geen parameters.

# 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 geeft aan hoeveel stroom de motor uit de batterij verbruikt, als een percentage van 0% tot 100%.

Een hogere stroomsterkte betekent dat de motor meer vermogen verbruikt. Dit kan gebeuren wanneer de motor iets zwaars optilt, tegen een object duwt of probeert te bewegen terwijl hij vastzit.

Usage:
arm_motor.get_current()

Parameters

Beschrijving

Deze methode heeft geen parameters.

# 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 geeft als Booleaanse waarde aan of de motor is gestopt met bewegen. Dit kan worden gebruikt om de timing van andere acties te regelen op basis van de beweging van de motor.

  • True — De motor is klaar met bewegen.

  • False — De motor draait nog steeds.

Deze methode werkt samen met de volgende bewegingsmethoden die de parameter wait hebben: spin_for en spin_to_position.

Usage:
arm_motor.is_stopped()

Parameters

Beschrijving

Deze methode heeft geen parameters.

# 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 geeft als Booleaanse waarde aan of de motor draait. Dit kan worden gebruikt om de timing van andere gedragingen te regelen op basis van de beweging van de motor.

  • True — De motor draait.

  • False — De motor draait niet.

Deze methode werkt samen met de volgende bewegingsmethoden die de parameter wait hebben: spin_for en spin_to_position.

Usage:
arm_motor.is_moving()

Parameters

Beschrijving

Deze methode heeft geen parameters.

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