Judesys#
Įvadas#
Varikliai valdo roboto dalių judėjimą. Varikliai gali būti naudojami rankai pakelti, nagui pasukti, ratui sukti arba kitai konstrukcijos daliai perkelti. Du varikliai gali veikti kartu kaip pavarų dėžė, kad judintų ir suktų visą robotą.
Kiekvienas variklis konfigūruojamas lange „Įrenginiai“. Priklausomai nuo versijos, variklių pavadinimai gali keistis. Pavyzdžiui, „Competition Advanced 2.0“ versijoje variklis vadinamas arm_motor. Pasirinktinis robotas gali naudoti skirtingus variklių pavadinimus.
Pagal numatytuosius nustatymus, FORWARD suka variklį prieš laikrodžio rodyklę, o REVERSE suka variklį pagal laikrodžio rodyklę. Jei įrenginių lange nustatyta variklio sukimosi atbulinė eiga, šios kryptys bus sukeistos.
Yra daug būdų koduoti variklius. Žemiau pateikiamas visų judėjimo metodų sąrašas:
Veiksmai — Sustabdyti ir sukti variklius.
spin— Variklis sukasi pirmyn arba atgal amžinai.spin_for— Suka variklį tam tikrą atstumą.spin_to_position— Suka variklį į konkrečią padėtį.stop— Sustabdo variklio sukimąsi.
Mutatoriai – koreguoja motorinius nustatymus.
set_velocity— Nurodo varikliui sukimosi greitį.set_max_torque— Nustato, kiek stipriai variklis gali spausti sukdamasis.set_position— Pakeičia dabartinę variklio padėtį į naują reikšmę.set_stopping— Nustato, kaip variklis sustos: stabdant, riedėdamas iš vietos arba palaikydamas.set_timeout— Nustato, kiek laiko variklis bandys užbaigti judesį.
Geteris – patikrinkite variklio būseną.
get_position— Grąžina dabartinę variklio padėtį.get_velocity— Grąžina variklio sukimosi greitį procentais nuo -100 % iki 100 %.get_current— Grąžina, kiek energijos variklis naudoja iš akumuliatoriaus, procentais nuo 0% iki 100%.is_stopped— Grąžina, ar variklis baigė judėti, kaip loginę reikšmę.is_moving— Grąžina, ar variklis sukasi, kaip loginę reikšmę.
Veiksmai#
spin#
spin suka variklį pirmyn arba atgal amžinai. Variklis suksis tol, kol jam bus duotas kitas veiksmas, pavyzdžiui, suktis kita kryptimi arba sustoti.
Usage:
arm_motor.spin(direction)
Parametrai |
Aprašymas |
|---|---|
|
Variklio sukimosi kryptis: |
# 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 suka variklį tam tikrą atstumą. Sukimasis yra santykinis pagal dabartinę variklio padėtį. Projektas lauks, kol variklis baigs suktis, prieš paleidžiant kitą kodo eilutę.
Usage:
arm_motor.spin_for(direction, angle, units, wait)
Parametrai |
Aprašymas |
|---|---|
|
Variklio sukimosi kryptis: |
|
Variklio sukamasis atstumas. |
|
Pasirinktinai. Atstumo vienetas: |
|
Pasirinktinai. |
# 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 suka variklį į tam tikrą padėtį.
Variklio padėtis rodo, kiek jis apsisuko, matuojant DEGREES arba TURNSVienas apsisukimas lygus 360 laipsnių. Projekto pradžioje variklio padėtis nustatoma į 0 laipsnių. Variklio padėtį taip pat galima nustatyti naudojant set_position metodą.
Padėties vertės yra absoliučios. Tai reiškia, kad sukimosi kryptis priklauso nuo dabartinės variklio padėties.
Pavyzdžiui, jei variklis užsiveda esant 0 laipsnių kampui ir sukasi iki 720 laipsnių padėties, jis suksis du apsisukimus į priekį. Jei jis tada suksis iki 360 laipsnių padėties, jis suksis vieną apsisukimą atgal, nes 360 yra mažiau nei 720.
Usage:
arm_motor.spin_to_position(angle, units, wait)
Parametrai |
Aprašymas |
|---|---|
|
Padėties vertė, iki kurios suksis variklis. |
|
Pasirinktinai. Padėties vienetas: |
|
Pasirinktinai. |
# 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 sustabdo variklio sukimąsi.
Usage:
arm_motor.stop()
Parametrai |
Aprašymas |
|---|---|
Šis metodas neturi parametrų. |
# 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)
Mutatoriai#
set_velocity#
set_velocity nurodo varikliui, kokiu greičiu jis turi suktis. Didesnis procentas leidžia varikliui suktis greičiau, o mažesnis – lėčiau.
Kiekvienas projektas pradedamas, kai kiekvienas variklis pagal numatytuosius nustatymus sukasi 50 % greičiu.
Pastaba: Didesnis greitis leidžia varikliui sukasi greičiau, bet gali būti mažiau tikslus. Mažesnis greitis leidžia varikliui sukasi lėčiau, bet gali būti tiksliau.
Usage:
arm_motor.set_velocity(velocity)
Parametrai |
Aprašymas |
|---|---|
|
Sukimosi greitis nuo 0% iki 100%. Tai gali būti sveikasis skaičius |
# 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#
Sukimo momentas yra sukimo jėga. Jis parodo, kaip stipriai variklis gali stumti arba traukti, kai sukasi.
set_max_torque nustato didžiausią sukimo momentą, kurį variklis gali naudoti.
Didesnis procentas leidžia varikliui stumti stipriau, pavyzdžiui, keliant sunkų daiktą. Mažesnis procentas riboja, kiek stipriai variklis gali stumti. Tai gali padėti apsaugoti robotą, jei variklis užstringa arba pasiekia ribą, kiek gali judėti.
Kiekvienas projektas pradedamas, kai kiekvieno variklio sukimo momentas pagal numatytuosius nustatymus yra 50 %.
Usage:
arm_motor.set_max_torque(value)
Parametrai |
Aprašymas |
|---|---|
|
Maksimalus variklio sukimo momentas nuo 0 % iki 100 %. Tai gali būti sveikasis skaičius |
# 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#
Variklio padėtis nurodo, kiek toli jis apsisuko, matuojant DEGREES arba TURNSVienas apsisukimas lygus 360 laipsnių. set_position pakeičia dabartinę variklio padėtį į naują reikšmę.
Pavyzdžiui, jei variklis apsisuko iki 180 laipsnių, nustatant 0 laipsnių padėtį, ši padėtis bus atkurta iš 180 į 0 laipsnių. Tada variklis gali suktis į padėtis, pagrįstas ta nauja verte.
Usage:
arm_motor.set_position(position, units)
Parametrai |
Aprašymas |
|---|---|
|
Variklio padėties vertė, kurią reikia nustatyti. |
|
Pasirinktinai. Padėties vienetas: |
# 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 nustato, kaip variklis sustos: stabdant, riedant iš inercijos arba palaikant.
Usage:
arm_motor.set_stopping(mode)
Parametrai |
Aprašymas |
|---|---|
|
Kaip variklis sustos:
|
Pavyzdžiui, jei naudojama „Competition Advanced 2.0“ versija ir arm_motor nustatyta į HOLD, variklis laikys ranką dabartinėje padėtyje, kol bus atliktas kitas rankos judesys. Tai reiškia, kad variklis veiks prieš gravitaciją, kad ranka būtų laikoma ore, jei variklis buvo sustabdytas pakelta ranka.
Jei šis metodas nenaudojamas, stabdant variklis naudos 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 nustato, kiek laiko variklis bandys užbaigti judesį. Jei variklis negali užbaigti per tą laiką, jis nustos bandyti ir pereis prie kitos kodo eilutės. Tai neleidžia varikliui užstrigti ties judesiu.
Usage:
arm_motor.set_timeout(value, units)
Parametrai |
Aprašymas |
|---|---|
|
Laikas, per kurį variklis gali bandyti užbaigti judesį. Tai gali būti teigiamas sveikasis skaičius |
|
Pasirinktinai. Laiko vienetas: |
# 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)
Getteriai#
get_position#
Variklio padėtis nurodo, kiek toli jis apsisuko, matuojant DEGREES arba TURNSVienas apsisukimas lygus 360 laipsnių. get_position grąžina dabartinę variklio padėtį.
Projekto pradžioje variklio padėtis nustatyta į 0 laipsnių. Jei variklis sukasi vieną apsisukimą į priekį, padėtis bus 360 laipsnių arba 1 apsisukimas. Jei variklis sukasi kita kryptimi, padėtis bus neigiama.
Usage:
arm_motor.get_position(units)
Parametrai |
Aprašymas |
|---|---|
|
Pasirinktinai. Įrenginys, kuris grąžina variklio padėtį: |
# 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 grąžina variklio sukimosi greitį procentais nuo -100% iki 100%.
Teigiama reikšmė reiškia, kad variklis sukasi į priekį. Neigiama reikšmė reiškia, kad variklis sukasi atgal.
Usage:
arm_motor.get_velocity()
Parametrai |
Aprašymas |
|---|---|
Šis metodas neturi parametrų. |
# 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 grąžina, kiek energijos variklis naudoja iš akumuliatoriaus, procentais nuo 0% iki 100%.
Didesnė srovės vertė reiškia, kad variklis naudoja daugiau galios. Taip gali nutikti, kai variklis kelia sunkų daiktą, stumia į objektą arba bando pajudėti, kai yra užstrigęs.
Usage:
arm_motor.get_current()
Parametrai |
Aprašymas |
|---|---|
Šis metodas neturi parametrų. |
# 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 grąžina, ar variklis baigė judėti, kaip loginę reikšmę. Tai gali būti naudojama kitų veiksmų, pagrįstų variklio judėjimu, laikui valdyti.
True— Variklis nustojo judėti.False— Variklis vis dar juda.
Šis metodas veikia kartu su šiais „Motion“ metodais, turinčiais parametrą wait : spin_for ir spin_to_position.
Usage:
arm_motor.is_stopped()
Parametrai |
Aprašymas |
|---|---|
Šis metodas neturi parametrų. |
# 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 grąžina, ar variklis sukasi, kaip loginę reikšmę. Tai gali būti naudojama kitų veiksmų, pagrįstų variklio judėjimu, laikui valdyti.
True— Variklis sukasi.False— Variklis nesisuka.
Šis metodas veikia kartu su šiais „Motion“ metodais, turinčiais parametrą wait : spin_for ir spin_to_position.
Usage:
arm_motor.is_moving()
Parametrai |
Aprašymas |
|---|---|
Šis metodas neturi parametrų. |
# 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)