Rörelse#
Introduktion#
Motorer styr hur delar av en robot rör sig. Motorer kan användas för att lyfta en arm, vrida en klo, snurra ett hjul eller flytta en annan del av en byggnad. Två motorer kan arbeta tillsammans som en drivlina för att röra och vrida hela roboten.
Varje motor konfigureras i fönstret Enheter. Beroende på versionen kan motornamnen ändras. Till exempel har Competition Advanced 2.0-versionen en motor med namnet arm_motorEn anpassad robot kan använda olika motornamn.
Som standard roterar FORWARD en motor moturs och REVERSE roterar en motor medurs. Om en motor är inställd på bakåt i Enhetsfönstret kommer dessa riktningar att växlas.
Det finns många sätt att koda motorer. Nedan följer en lista över alla rörelsemetoder:
Åtgärder — Stoppa och snurra motorer.
spin— Snurrar en motor framåt eller bakåt i all oändlighet.spin_for— Snurrar en motor ett visst avstånd.spin_to_position— Roterar en motor till en specifik position.stop— Stoppar en motor från att snurra.
Mutatorer — Justera motorinställningar.
set_velocity— Anger hur snabbt motorn ska snurra.set_max_torque— Anger hur hårt en motor tillåts trycka medan den roterar.set_position— Ändrar motorns aktuella position till ett nytt värde.set_stopping— Ställer in hur en motor ska stanna: genom att bromsa, frihjula eller hålla.set_timeout— Anger hur lång tid en motor ska försöka slutföra en rörelse.
Getters — Kontrollera motorstatus.
get_position— Returnerar motorns aktuella position.get_velocity— Returnerar hur snabbt motorn snurrar, som en procentandel från -100 % till 100 %.get_current— Returnerar hur mycket ström motorn använder från batteriet, som en procentandel från 0 % till 100 %.is_stopped— Returnerar om motorn har slutat röra sig, som ett booleskt värde.is_moving— Returnerar om motorn snurrar, som ett booleskt värde.
Åtgärder#
spin#
spin snurrar en motor framåt eller bakåt för alltid. Motorn fortsätter att snurra tills den får en annan åtgärd, som att snurra i en annan riktning eller stanna.
Usage:
arm_motor.spin(direction)
Parametrar |
Beskrivning |
|---|---|
|
Motorns rotationsriktning: |
# 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 snurrar en motor ett visst avstånd. Rotationen är relativ till motorns aktuella position. Projektet väntar tills motorn har snurrat klart innan nästa kodrad körs.
Usage:
arm_motor.spin_for(direction, angle, units, wait)
Parametrar |
Beskrivning |
|---|---|
|
Motorns rotationsriktning: |
|
Avståndet motorn snurrar. |
|
Valfritt. Avståndsenheten: |
|
Valfritt. |
# 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 snurrar en motor till en specifik position.
En motors position är hur långt den har snurrat, mätt i DEGREES eller TURNSEtt varv är lika med 360 grader. I början av ett projekt är motorpositionen inställd på 0 grader. Motorpositionen kan också ställas in med metoden set_position.
Positionsvärdena är absoluta. Det betyder att rotationsriktningen beror på motorns aktuella position.
Om motorn till exempel startar vid 0 grader och snurrar till en position på 720 grader, snurrar den framåt två varv. Om den sedan snurrar till en position på 360 grader, snurrar den bakåt ett varv, eftersom 360 är mindre än 720.
Usage:
arm_motor.spin_to_position(angle, units, wait)
Parametrar |
Beskrivning |
|---|---|
|
Positionsvärdet som motorn kommer att rotera till. |
|
Valfritt. Positionsenheten: |
|
Valfritt. |
# 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 stoppar en motor från att snurra.
Usage:
arm_motor.stop()
Parametrar |
Beskrivning |
|---|---|
Den här metoden har inga parametrar. |
# 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)
Mutatorer#
set_velocity#
set_velocity anger hur snabbt en motor ska snurra. En högre procentandel gör att motorn snurrar snabbare och en lägre procentandel gör att motorn snurrar långsammare.
Varje projekt börjar med att varje motor roterar med 50 % hastighet som standard.
Obs! En högre hastighet gör att motorn snurrar snabbare, men den kan vara mindre exakt. En lägre hastighet gör att motorn snurrar långsammare, men den kan vara mer exakt.
Usage:
arm_motor.set_velocity(velocity)
Parametrar |
Beskrivning |
|---|---|
|
Hastigheten att rotera med från 0% till 100%. Detta kan vara ett heltal |
# 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#
Vridmoment är en rotationskraft. Det visar hur hårt en motor kan trycka eller dra när den snurrar.
set_max_torque ställer in det högsta vridmoment som en motor tillåts använda.
En högre procentandel låter motorn trycka hårdare, som när man lyfter ett tungt föremål. En lägre procentandel begränsar hur hårt motorn kan trycka. Detta kan hjälpa till att skydda roboten om motorn fastnar eller når slutet av hur långt den kan röra sig.
Varje projekt börjar med att varje motors vridmoment är 50 % som standard.
Usage:
arm_motor.set_max_torque(value)
Parametrar |
Beskrivning |
|---|---|
|
Det maximala vridmomentet som motorn kan använda är från 0 % till 100 %. Detta kan vara ett heltal |
# 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#
En motors position är hur långt den har snurrat, mätt i DEGREES eller TURNSEtt varv är lika med 360 grader. set_position ändrar motorns nuvarande position till ett nytt värde.
Om till exempel en motor har snurrat 180 grader, kommer en position som ställs in på 0 grader att återställas från 180 grader till 0 grader. Motorn kan sedan snurra till positioner baserat på det nya värdet.
Usage:
arm_motor.set_position(position, units)
Parametrar |
Beskrivning |
|---|---|
|
Positionsvärdet som ska ställas in för motorn. |
|
Valfritt. Positionsenheten: |
# 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 anger hur en motor ska stanna: genom att bromsa, frihjula eller hålla.
Usage:
arm_motor.set_stopping(mode)
Parametrar |
Beskrivning |
|---|---|
|
Hur motorn kommer att stanna:
|
Om till exempel en Competition Advanced 2.0-version används och arm_motor är satt till HOLD, kommer motorn att hålla armen i dess nuvarande position tills en annan armrörelse sker. Det betyder att motorn kommer att arbeta mot gravitationen för att hålla armen i luften om motorn stoppades med armen upplyft.
Om denna metod inte används kommer motorn att använda BRAKE vid stopp.
# 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 anger hur lång tid en motor ska försöka slutföra en rörelse. Om motorn inte kan slutföra inom den tiden kommer den att sluta försöka och gå vidare till nästa kodrad. Detta förhindrar att motorn fastnar i en rörelse.
Usage:
arm_motor.set_timeout(value, units)
Parametrar |
Beskrivning |
|---|---|
|
Den tid motorn kan försöka slutföra en rörelse. Detta kan vara ett positivt |
|
Valfritt. Tidsenhet: |
# 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#
En motors position är hur långt den har snurrat, mätt i DEGREES eller TURNS. Ett varv är lika med 360 grader. get_position returnerar motorns aktuella position.
I början av ett projekt är motorpositionen inställd på 0 grader. Om motorn snurrar ett varv framåt blir positionen 360 grader eller 1 varv. Om motorn snurrar åt andra hållet blir positionen negativ.
Usage:
arm_motor.get_position(units)
Parametrar |
Beskrivning |
|---|---|
|
Valfritt. Enheten för att returnera motorpositionen i: |
# 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 returnerar hur snabbt motorn snurrar, som en procentandel från -100% till 100%.
Ett positivt värde betyder att motorn roterar framåt. Ett negativt värde betyder att motorn roterar bakåt.
Usage:
arm_motor.get_velocity()
Parametrar |
Beskrivning |
|---|---|
Den här metoden har inga parametrar. |
# 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 returnerar hur mycket ström motorn använder från batteriet, som en procentandel från 0% till 100%.
Ett högre strömvärde innebär att motorn använder mer ström. Detta kan hända när motorn lyfter något tungt, trycker mot ett föremål eller försöker röra sig när den har fastnat.
Usage:
arm_motor.get_current()
Parametrar |
Beskrivning |
|---|---|
Den här metoden har inga parametrar. |
# 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 returnerar om motorn har slutat röra sig, som ett booleskt värde. Detta kan användas för att styra tidpunkten för andra beteenden baserat på motorns rörelse.
True— Motorn är klar med att röra sig.False— Motorn rör sig fortfarande.
Den här metoden fungerar tillsammans med följande rörelsemetoder som har parametern wait : spin_for och spin_to_position.
Usage:
arm_motor.is_stopped()
Parametrar |
Beskrivning |
|---|---|
Den här metoden har inga parametrar. |
# 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 returnerar huruvida motorn snurrar, som ett booleskt värde. Detta kan användas för att styra tidpunkten för andra beteenden baserat på motorns rörelse.
True— Motorn snurrar.False— Motorn snurrar inte.
Den här metoden fungerar tillsammans med följande rörelsemetoder som har parametern wait : spin_for och spin_to_position.
Usage:
arm_motor.is_moving()
Parametrar |
Beskrivning |
|---|---|
Den här metoden har inga parametrar. |
# 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)