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.

„VEX GO“ variklis, rodantis sukimosi į priekį kryptį, nurodytą pliuso ženklu ir rodykle, rodančia, kad jis sukasi į kairę arba prieš laikrodžio rodyklę. „VEX GO“ variklis, rodantis atvirkštinę kryptį, nurodytą minuso ženklu ir rodykle, rodančia, kad jis sukasi į dešinę arba pagal laikrodžio rodyklę.

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

direction

Variklio sukimosi kryptis: FORWARD arba 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 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

direction

Variklio sukimosi kryptis: FORWARD arba REVERSE.

angle

Variklio sukamasis atstumas. DEGREES naudokite sveikuosius skaičius. TURNS galite naudoti sveikuosius arba dešimtainius skaičius.

units

Pasirinktinai. Atstumo vienetas: DEGREES (numatytasis) arba TURNS.

wait

Pasirinktinai. wait=True (numatytasis) priverčia projektą laukti, kol variklis baigs suktis, prieš paleidžiant kitą kodo eilutę. wait=False priverčia kitą kodo eilutę paleidžiama iš karto.

# 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

angle

Padėties vertė, iki kurios suksis variklis. DEGREES naudokite sveikuosius skaičius. TURNS galite naudoti sveikuosius arba dešimtainius skaičius.

units

Pasirinktinai. Padėties vienetas: DEGREES (numatytasis) arba TURNS.

wait

Pasirinktinai. wait=True (numatytasis) priverčia projektą laukti, kol variklis baigs suktis, prieš paleidžiant kitą kodo eilutę. wait=False priverčia kitą kodo eilutę paleidžiama iš karto.

# 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

velocity

Sukimosi greitis nuo 0% iki 100%. Tai gali būti sveikasis skaičius integer arba dešimtainis skaičius (float).

# 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

value

Maksimalus variklio sukimo momentas nuo 0 % iki 100 %. Tai gali būti sveikasis skaičius integer arba dešimtainis skaičius (float).

# 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

position

Variklio padėties vertė, kurią reikia nustatyti. DEGREES – naudokite sveikuosius skaičius. TURNS – naudokite sveikuosius arba dešimtainius skaičius.

units

Pasirinktinai. Padėties vienetas: DEGREES (numatytasis) arba 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 nustato, kaip variklis sustos: stabdant, riedant iš inercijos arba palaikant.

Usage:
arm_motor.set_stopping(mode)

Parametrai

Aprašymas

mode

Kaip variklis sustos:

  • BRAKE — Sustoja nedelsiant.
  • COAST — Lėtėja iki sustojimo.
  • HOLD — Sustoja nedelsiant ir išlaiko variklio padėtį.

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

value

Laikas, per kurį variklis gali bandyti užbaigti judesį. Tai gali būti teigiamas sveikasis skaičius integer arba dešimtainis skaičius (float).

units

Pasirinktinai. Laiko vienetas: SECONDS (numatytasis) arba MSEC (milisekundės).

# 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

units

Pasirinktinai. Įrenginys, kuris grąžina variklio padėtį: DEGREES (numatytasis) arba 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 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)