Κίνηση#

Εισαγωγή#

Οι κινητήρες ελέγχουν τον τρόπο με τον οποίο κινούνται τα μέρη ενός ρομπότ. Οι κινητήρες μπορούν να χρησιμοποιηθούν για την ανύψωση ενός βραχίονα, την περιστροφή ενός νυχιού, την περιστροφή ενός τροχού ή την κίνηση ενός άλλου μέρους μιας κατασκευής. Δύο κινητήρες μπορούν να συνεργαστούν ως σύστημα μετάδοσης κίνησης για να κινούν και να περιστρέφουν ολόκληρο το ρομπότ.

Κάθε κινητήρας διαμορφώνεται στο παράθυρο “Συσκευές”. Ανάλογα με την έκδοση, τα ονόματα των κινητήρων μπορούν να αλλάξουν. Για παράδειγμα, η έκδοση Competition Advanced 2.0 έχει έναν κινητήρα με όνομα arm_motorΈνα προσαρμοσμένο ρομπότ μπορεί να χρησιμοποιεί διαφορετικά ονόματα κινητήρων.

Από προεπιλογή, η ρύθμιση FORWARD περιστρέφει έναν κινητήρα αριστερόστροφα και η ρύθμιση REVERSE περιστρέφει έναν κινητήρα δεξιόστροφα. Εάν ένας κινητήρας έχει ρυθμιστεί να κινείται αντίστροφα στο παράθυρο Συσκευές, αυτές οι κατευθύνσεις θα αλλάξουν.

Ένας κινητήρας VEX GO που δείχνει την κατεύθυνση προς τα εμπρός που υποδεικνύεται από ένα σύμβολο συν και ένα βέλος που υποδεικνύει ότι περιστρέφεται αριστερά ή αριστερόστροφα. Ένας κινητήρας VEX GO που δείχνει την αντίστροφη κατεύθυνση που υποδεικνύεται από ένα σύμβολο μείον και ένα βέλος που υποδεικνύει ότι περιστρέφεται δεξιά ή δεξιόστροφα.

Υπάρχουν πολλοί τρόποι κωδικοποίησης κινητήρων. Παρακάτω είναι μια λίστα με όλες τις μεθόδους κίνησης:

Ενέργειες — Σταματήστε και περιστρέψτε τους κινητήρες.

  • spin — Περιστρέφει έναν κινητήρα προς τα εμπρός ή προς τα πίσω για πάντα.

  • spin_for — Περιστρέφει έναν κινητήρα για μια συγκεκριμένη απόσταση.

  • spin_to_position — Περιστρέφει έναν κινητήρα σε μια συγκεκριμένη θέση.

  • stop — Σταματά την περιστροφή ενός κινητήρα.

Μεταλλαγμένοι — Προσαρμόστε τις ρυθμίσεις του κινητήρα.

  • set_velocity — Υποδεικνύει σε έναν κινητήρα πόσο γρήγορα πρέπει να περιστραφεί.

  • set_max_torque — Ορίζει την ισχύ με την οποία επιτρέπεται να πιέζει ένας κινητήρας κατά την περιστροφή.

  • set_position — Αλλάζει την τρέχουσα θέση του κινητήρα σε μια νέα τιμή.

  • set_stopping — Ορίζει τον τρόπο με τον οποίο ένας κινητήρας θα σταματήσει να κινείται: με φρενάρισμα, ρολάρισμα ή κράτημα.

  • set_timeout — Ορίζει τον χρόνο που ένας κινητήρας θα προσπαθήσει να ολοκληρώσει μια κίνηση.

Λήψη ελεγκτών — Έλεγχος κατάστασης κινητήρα.

  • get_position — Επιστρέφει την τρέχουσα θέση του κινητήρα.

  • get_velocity — Επιστρέφει την ταχύτητα περιστροφής του κινητήρα, ως ποσοστό από -100% έως 100%.

  • get_current — Επιστρέφει την ισχύ που χρησιμοποιεί ο κινητήρας από την μπαταρία, ως ποσοστό από 0% έως 100%.

  • is_stopped — Επιστρέφει εάν ο κινητήρας έχει ολοκληρώσει την κίνηση, ως λογική τιμή.

  • is_moving — Επιστρέφει εάν ο κινητήρας περιστρέφεται, ως λογική τιμή.

Ενέργειες#

spin#

spin spins a motor forward or reverse forever. The motor will continue to spin until it is given another action, like spinning in a different direction or stopping.

Usage:
arm_motor.spin(direction)

Παράμετροι

Περιγραφή

direction

Η κατεύθυνση περιστροφής του κινητήρα: FORWARD ή 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 περιστρέφει έναν κινητήρα για μια συγκεκριμένη απόσταση. Η περιστροφή είναι σχετική με την τρέχουσα θέση του κινητήρα. Το έργο θα περιμένει μέχρι να ολοκληρωθεί η περιστροφή του κινητήρα πριν εκτελεστεί η επόμενη γραμμή κώδικα.

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

Παράμετροι

Περιγραφή

direction

Η κατεύθυνση περιστροφής του κινητήρα: FORWARD ή REVERSE.

angle

Η απόσταση που περιστρέφεται ο κινητήρας. DEGREES χρησιμοποιούν ακέραιους αριθμούς. TURNS μπορούν να χρησιμοποιήσουν ακέραιους ή δεκαδικούς αριθμούς.

units

Προαιρετικά. Η μονάδα απόστασης: DEGREES (προεπιλογή) ή TURNS.

wait

Προαιρετικό. wait=True (προεπιλογή) κάνει το έργο να περιμένει μέχρι να ολοκληρωθεί η περιστροφή του κινητήρα πριν εκτελεστεί η επόμενη γραμμή κώδικα. wait=False κάνει την επόμενη γραμμή κώδικα να εκτελεστεί αμέσως.

# 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 περιστρέφει έναν κινητήρα σε μια συγκεκριμένη θέση.

Η θέση ενός κινητήρα είναι η απόσταση περιστροφής του, μετρούμενη σε DEGREES ή TURNSΜία στροφή ισούται με 360 μοίρες. Στην αρχή ενός έργου, η θέση του κινητήρα ορίζεται σε 0 μοίρες. Η θέση του κινητήρα μπορεί επίσης να οριστεί χρησιμοποιώντας τη μέθοδο set_position.

Οι τιμές θέσης είναι απόλυτες. Αυτό σημαίνει ότι η κατεύθυνση της περιστροφής εξαρτάται από την τρέχουσα θέση του κινητήρα.

Για παράδειγμα, αν ο κινητήρας ξεκινήσει στις 0 μοίρες και περιστραφεί σε μια θέση 720 μοιρών, θα περιστραφεί προς τα εμπρός κατά δύο στροφές. Αν στη συνέχεια περιστραφεί σε μια θέση 360 μοιρών, θα περιστραφεί προς τα πίσω κατά μία στροφή, επειδή οι 360 μοίρες είναι μικρότερες από τις 720.

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

Παράμετροι

Περιγραφή

angle

Η τιμή θέσης στην οποία θα περιστραφεί ο κινητήρας. DEGREES χρησιμοποιούν ακέραιους αριθμούς. TURNS μπορούν να χρησιμοποιήσουν ακέραιους ή δεκαδικούς αριθμούς.

units

Προαιρετικά. Η μονάδα θέσης: DEGREES (προεπιλογή) ή TURNS.

wait

Προαιρετικό. wait=True (προεπιλογή) κάνει το έργο να περιμένει μέχρι να ολοκληρωθεί η περιστροφή του κινητήρα πριν εκτελεστεί η επόμενη γραμμή κώδικα. wait=False κάνει την επόμενη γραμμή κώδικα να εκτελεστεί αμέσως.

# 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 σταματά την περιστροφή ενός κινητήρα.

Usage:
arm_motor.stop()

Παράμετροι

Περιγραφή

Αυτή η μέθοδος δεν έχει παραμέτρους.

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

Μεταλλάκτες#

set_velocity#

set_velocity λέει σε έναν κινητήρα πόσο γρήγορα πρέπει να περιστραφεί. Ένα υψηλότερο ποσοστό κάνει τον κινητήρα να περιστρέφεται πιο γρήγορα και ένα χαμηλότερο ποσοστό κάνει τον κινητήρα να περιστρέφεται πιο αργά.

Κάθε έργο ξεκινά με κάθε κινητήρα να περιστρέφεται με ταχύτητα 50% από προεπιλογή.

Σημείωση: Μια υψηλότερη ταχύτητα κάνει τον κινητήρα να περιστρέφεται πιο γρήγορα, αλλά μπορεί να είναι λιγότερο ακριβής. Μια χαμηλότερη ταχύτητα κάνει τον κινητήρα να περιστρέφεται πιο αργά, αλλά μπορεί να είναι πιο ακριβής.

Usage:
arm_motor.set_velocity(velocity)

Παράμετροι

Περιγραφή

velocity

Η ταχύτητα περιστροφής κυμαίνεται από 0% έως 100%. Αυτή μπορεί να είναι ένας ακέραιος αριθμός integer ή δεκαδικός αριθμός (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#

Η ροπή είναι μια δύναμη περιστροφής. Δείχνει πόσο δυνατά μπορεί να σπρώξει ή να τραβήξει ένας κινητήρας όταν περιστρέφεται.

set_max_torque ορίζει τη μέγιστη ροπή που επιτρέπεται να χρησιμοποιήσει ένας κινητήρας.

Ένα υψηλότερο ποσοστό επιτρέπει στον κινητήρα να πιέζει πιο δυνατά, όπως όταν σηκώνεται ένα βαρύ αντικείμενο. Ένα χαμηλότερο ποσοστό περιορίζει την ισχύ που μπορεί να πιέσει ο κινητήρας. Αυτό μπορεί να βοηθήσει στην προστασία του ρομπότ εάν ο κινητήρας κολλήσει ή φτάσει στο όριο της απόστασης που μπορεί να κινηθεί.

Κάθε έργο ξεκινά με τη ροπή κάθε κινητήρα στο 50% από προεπιλογή.

Usage:
arm_motor.set_max_torque(value)

Παράμετροι

Περιγραφή

value

Η μέγιστη ροπή που μπορεί να χρησιμοποιήσει ο κινητήρας κυμαίνεται από 0% έως 100%. Αυτή μπορεί να είναι ένας ακέραιος αριθμός integer ή δεκαδικός αριθμός (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#

Η θέση ενός κινητήρα είναι η απόσταση περιστροφής του, μετρούμενη σε DEGREES ή TURNSΜία στροφή ισούται με 360 μοίρες. set_position αλλάζει την τρέχουσα θέση του κινητήρα σε μια νέα τιμή.

Για παράδειγμα, εάν ένας κινητήρας έχει περιστραφεί στις 180 μοίρες, η ρύθμιση της θέσης σε 0 μοίρες θα επαναφέρει αυτήν τη θέση από 180 σε 0 μοίρες. Στη συνέχεια, ο κινητήρας μπορεί να περιστραφεί σε θέσεις με βάση αυτήν τη νέα τιμή.

Usage:
arm_motor.set_position(position, units)

Παράμετροι

Περιγραφή

position

Η τιμή θέσης που θα οριστεί για τον κινητήρα. DEGREES χρησιμοποιούν ακέραιους αριθμούς. TURNS μπορούν να χρησιμοποιήσουν ακέραιους ή δεκαδικούς αριθμούς.

units

Προαιρετικά. Η μονάδα θέσης: DEGREES (προεπιλογή) ή 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 ορίζει τον τρόπο με τον οποίο ένας κινητήρας θα σταματήσει να κινείται: με φρενάρισμα, ρολάρισμα ή κράτημα.

Usage:
arm_motor.set_stopping(mode)

Παράμετροι

Περιγραφή

mode

Πώς θα σταματήσει ο κινητήρας:

  • BRAKE — Σταματάει αμέσως.
  • COAST — Επιβραδύνει μέχρι να σταματήσει.
  • HOLD — Σταματάει αμέσως και διατηρεί τη θέση του κινητήρα.

Για παράδειγμα, εάν χρησιμοποιηθεί μια έκδοση Competition Advanced 2.0 και η παράμετρος arm_motor έχει οριστεί σε HOLD, ο κινητήρας θα κρατήσει τον βραχίονα στην τρέχουσα θέση του μέχρι να γίνει μια άλλη κίνηση του βραχίονα. Αυτό σημαίνει ότι ο κινητήρας θα λειτουργήσει ενάντια στη βαρύτητα για να κρατήσει τον βραχίονα στον αέρα εάν ο κινητήρας είχε σταματήσει με τον βραχίονα σηκωμένο.

Εάν δεν χρησιμοποιηθεί αυτή η μέθοδος, ο κινητήρας θα χρησιμοποιήσει 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 ορίζει τον χρόνο που ένας κινητήρας θα προσπαθήσει να ολοκληρώσει μια κίνηση. Εάν ο κινητήρας δεν μπορεί να ολοκληρώσει σε αυτό το χρονικό διάστημα, θα σταματήσει να προσπαθεί και θα προχωρήσει στην επόμενη γραμμή κώδικα. Αυτό εμποδίζει τον κινητήρα να κολλήσει σε μια κίνηση.

Usage:
arm_motor.set_timeout(value, units)

Παράμετροι

Περιγραφή

value

Ο χρόνος που μπορεί να προσπαθήσει ο κινητήρας για να ολοκληρώσει μια κίνηση. Αυτός μπορεί να είναι ένας θετικός integer ή δεκαδικός αριθμός (float).

units

Προαιρετικά. Η μονάδα χρόνου: SECONDS (προεπιλογή) ή MSEC (χιλιοστά του δευτερολέπτου).

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

Αποκτητές#

get_position#

Η θέση ενός κινητήρα είναι η απόσταση περιστροφής του, μετρούμενη σε DEGREES ή TURNSΜία στροφή ισούται με 360 μοίρες. get_position επιστρέφει την τρέχουσα θέση του κινητήρα.

Στην αρχή ενός έργου, η θέση του κινητήρα ορίζεται στις 0 μοίρες. Εάν ο κινητήρας περιστραφεί μία στροφή προς τα εμπρός, η θέση θα είναι 360 μοίρες ή 1 στροφή. Εάν ο κινητήρας περιστραφεί προς την αντίθετη κατεύθυνση, η θέση θα είναι αρνητική.

Usage:
arm_motor.get_position(units)

Παράμετροι

Περιγραφή

units

Προαιρετικά. Η μονάδα για την επιστροφή της θέσης του κινητήρα σε: DEGREES (προεπιλογή) ή 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 επιστρέφει την ταχύτητα περιστροφής του κινητήρα, ως ποσοστό από -100% έως 100%.

Μια θετική τιμή σημαίνει ότι ο κινητήρας περιστρέφεται προς τα εμπρός. Μια αρνητική τιμή σημαίνει ότι ο κινητήρας περιστρέφεται προς τα πίσω.

Usage:
arm_motor.get_velocity()

Παράμετροι

Περιγραφή

Αυτή η μέθοδος δεν έχει παραμέτρους.

# 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 επιστρέφει την ισχύ που χρησιμοποιεί ο κινητήρας από την μπαταρία, ως ποσοστό από 0% έως 100%.

Μια υψηλότερη τιμή ρεύματος σημαίνει ότι ο κινητήρας χρησιμοποιεί περισσότερη ισχύ. Αυτό μπορεί να συμβεί όταν ο κινητήρας σηκώνει κάτι βαρύ, πιέζει ένα αντικείμενο ή προσπαθεί να κινηθεί όταν αυτό έχει κολλήσει.

Usage:
arm_motor.get_current()

Παράμετροι

Περιγραφή

Αυτή η μέθοδος δεν έχει παραμέτρους.

# 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 επιστρέφει εάν ο κινητήρας έχει ολοκληρώσει την κίνησή του, ως δυαδική τιμή. Αυτό μπορεί να χρησιμοποιηθεί για τον έλεγχο του χρονισμού άλλων συμπεριφορών με βάση την κίνηση του κινητήρα.

  • True — Ο κινητήρας έχει ολοκληρώσει την κίνηση.

  • False — Ο κινητήρας εξακολουθεί να κινείται.

Αυτή η μέθοδος λειτουργεί σε συνδυασμό με τις ακόλουθες μεθόδους κίνησης που έχουν την παράμετρο wait : spin_for και spin_to_position.

Usage:
arm_motor.is_stopped()

Παράμετροι

Περιγραφή

Αυτή η μέθοδος δεν έχει παραμέτρους.

# 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 επιστρέφει εάν ο κινητήρας περιστρέφεται, ως λογική τιμή. Αυτό μπορεί να χρησιμοποιηθεί για τον έλεγχο του χρονισμού άλλων συμπεριφορών με βάση την κίνηση του κινητήρα.

  • True — Ο κινητήρας περιστρέφεται.

  • False — Ο κινητήρας δεν περιστρέφεται.

Αυτή η μέθοδος λειτουργεί σε συνδυασμό με τις ακόλουθες μεθόδους κίνησης που έχουν την παράμετρο wait : spin_for και spin_to_position.

Usage:
arm_motor.is_moving()

Παράμετροι

Περιγραφή

Αυτή η μέθοδος δεν έχει παραμέτρους.

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