Κίνηση#
Εισαγωγή#
Οι κινητήρες ελέγχουν τον τρόπο με τον οποίο κινούνται τα μέρη ενός ρομπότ. Οι κινητήρες μπορούν να χρησιμοποιηθούν για την ανύψωση ενός βραχίονα, την περιστροφή ενός νυχιού, την περιστροφή ενός τροχού ή την κίνηση ενός άλλου μέρους μιας κατασκευής. Δύο κινητήρες μπορούν να συνεργαστούν ως σύστημα μετάδοσης κίνησης για να κινούν και να περιστρέφουν ολόκληρο το ρομπότ.
Κάθε κινητήρας διαμορφώνεται στο παράθυρο “Συσκευές”. Ανάλογα με την έκδοση, τα ονόματα των κινητήρων μπορούν να αλλάξουν. Για παράδειγμα, η έκδοση Competition Advanced 2.0 έχει έναν κινητήρα με όνομα arm_motorΈνα προσαρμοσμένο ρομπότ μπορεί να χρησιμοποιεί διαφορετικά ονόματα κινητήρων.
Από προεπιλογή, η ρύθμιση ΜΠΡΟΣΤΑ περιστρέφει έναν κινητήρα αριστερόστροφα και η ρύθμιση ΟΠΙΣΘΙΑ περιστρέφει έναν κινητήρα δεξιόστροφα. Εάν ένας κινητήρας έχει ρυθμιστεί να κινείται αντίστροφα στο παράθυρο Συσκευές, αυτές οι κατευθύνσεις θα αλλάξουν.
Υπάρχουν πολλοί τρόποι κωδικοποίησης κινητήρων. Παρακάτω είναι μια λίστα με όλες τις μεθόδους κίνησης:
Ενέργειες — Σταματήστε και περιστρέψτε τους κινητήρες.
σπιν— Περιστρέφει έναν κινητήρα προς τα εμπρός ή προς τα πίσω για πάντα.spin_for— Περιστρέφει έναν κινητήρα για μια συγκεκριμένη απόσταση.spin_to_position— Περιστρέφει έναν κινητήρα σε μια συγκεκριμένη θέση.στάση— Σταματά την περιστροφή ενός κινητήρα.
Μεταλλαγμένοι — Προσαρμόστε τις ρυθμίσεις του κινητήρα.
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#
περιστροφή περιστρέφει έναν κινητήρα προς τα εμπρός ή προς τα πίσω για πάντα. Ο κινητήρας θα συνεχίσει να περιστρέφεται μέχρι να του δοθεί μια άλλη ενέργεια, όπως να περιστραφεί σε διαφορετική κατεύθυνση ή να σταματήσει.
Usage:
arm_motor.spin(direction)
Παράμετροι
Περιγραφή
direction
Η κατεύθυνση περιστροφής του κινητήρα: ΜΠΡΟΣΤΑ ή ΟΠΙΣΘΙΑ.
# 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
Η κατεύθυνση περιστροφής του κινητήρα: ΜΠΡΟΣΤΑ ή ΟΠΙΣΘΙΑ.
angle
Η απόσταση που περιστρέφεται ο κινητήρας. ΜΟΙΡΕΣ χρησιμοποιούν ακέραιους αριθμούς. ΣΤΡΟΦΕΣ μπορούν να χρησιμοποιήσουν ακέραιους ή δεκαδικούς αριθμούς.
units
Προαιρετικά. Η μονάδα απόστασης: ΜΟΙΡΕΣ (προεπιλογή) ή ΣΤΡΟΦΕΣ.
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 περιστρέφει έναν κινητήρα σε μια συγκεκριμένη θέση.
Η θέση ενός κινητήρα είναι η απόσταση περιστροφής του, μετρούμενη σε ΜΟΙΡΕΣ ή ΣΤΡΟΦΕΣΜία στροφή ισούται με 360 μοίρες. Στην αρχή ενός έργου, η θέση του κινητήρα ορίζεται σε 0 μοίρες. Η θέση του κινητήρα μπορεί επίσης να οριστεί χρησιμοποιώντας τη μέθοδο set_position.
Οι τιμές θέσης είναι απόλυτες. Αυτό σημαίνει ότι η κατεύθυνση της περιστροφής εξαρτάται από την τρέχουσα θέση του κινητήρα.
Για παράδειγμα, αν ο κινητήρας ξεκινήσει στις 0 μοίρες και περιστραφεί σε μια θέση 720 μοιρών, θα περιστραφεί προς τα εμπρός κατά δύο στροφές. Αν στη συνέχεια περιστραφεί σε μια θέση 360 μοιρών, θα περιστραφεί προς τα πίσω κατά μία στροφή, επειδή οι 360 μοίρες είναι μικρότερες από τις 720.
Usage:
arm_motor.spin_to_position(angle, units, wait)
Παράμετροι
Περιγραφή
angle
Η τιμή θέσης στην οποία θα περιστραφεί ο κινητήρας. ΜΟΙΡΕΣ χρησιμοποιούν ακέραιους αριθμούς. ΣΤΡΟΦΕΣ μπορούν να χρησιμοποιήσουν ακέραιους ή δεκαδικούς αριθμούς.
units
Προαιρετικά. Η μονάδα θέσης: ΜΟΙΡΕΣ (προεπιλογή) ή ΣΤΡΟΦΕΣ.
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%. Αυτή μπορεί να είναι ένας ακέραιος αριθμός ή δεκαδικός αριθμός (με κινητήρες).
# 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%. Αυτή μπορεί να είναι ένας ακέραιος αριθμός ( ή δεκαδικός αριθμός (με κινητήρες).
# 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#
Η θέση ενός κινητήρα είναι η απόσταση περιστροφής του, μετρούμενη σε ΜΟΙΡΕΣ ή ΣΤΡΟΦΕΣΜία στροφή ισούται με 360 μοίρες. Η συνάρτηση set_position αλλάζει την τρέχουσα θέση του κινητήρα σε μια νέα τιμή.
Για παράδειγμα, εάν ένας κινητήρας έχει περιστραφεί στις 180 μοίρες, η ρύθμιση της θέσης σε 0 μοίρες θα επαναφέρει αυτήν τη θέση από 180 σε 0 μοίρες. Στη συνέχεια, ο κινητήρας μπορεί να περιστραφεί σε θέσεις με βάση αυτήν τη νέα τιμή.
Usage:
arm_motor.set_position(position, units)
Παράμετροι
Περιγραφή
position
Η τιμή θέσης που θα οριστεί για τον κινητήρα. ΜΟΙΡΕΣ χρησιμοποιούν ακέραιους αριθμούς. ΣΤΡΟΦΕΣ μπορούν να χρησιμοποιήσουν ακέραιους ή δεκαδικούς αριθμούς.
units
Προαιρετικά. Η μονάδα θέσης: ΜΟΙΡΕΣ (προεπιλογή) ή ΣΤΡΟΦΕΣ.
# 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
Πώς θα σταματήσει ο κινητήρας:
ΦΡΕΝΟ — Σταματάει αμέσως.ΕΛΕΥΘΕΡΗ ΤΑΧΥΤΗΤΑ — Επιβραδύνει μέχρι να σταματήσει.ΚΡΑΤΗΣΗ — Σταματάει αμέσως και διατηρεί τη θέση του κινητήρα.
Για παράδειγμα, εάν χρησιμοποιηθεί μια έκδοση Competition Advanced 2.0 και η παράμετρος arm_motor έχει οριστεί σε HOLD, ο κινητήρας θα κρατήσει τον βραχίονα στην τρέχουσα θέση του μέχρι να γίνει μια άλλη κίνηση του βραχίονα. Αυτό σημαίνει ότι ο κινητήρας θα λειτουργήσει ενάντια στη βαρύτητα για να κρατήσει τον βραχίονα στον αέρα εάν ο κινητήρας είχε σταματήσει με τον βραχίονα σηκωμένο.
Εάν δεν χρησιμοποιηθεί αυτή η μέθοδος, ο κινητήρας θα χρησιμοποιήσει ΦΡΕΝΟ κατά το σταμάτημα.
# 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
Ο χρόνος που μπορεί να προσπαθήσει ο κινητήρας για να ολοκληρώσει μια κίνηση. Αυτός μπορεί να είναι ένας θετικός αριθμός ή δεκαδικός αριθμός (με κινητήρες).
units
Προαιρετικά. Η μονάδα χρόνου: ΔΕΥΤΕΡΟΛΕΠΤΑ (προεπιλογή) ή 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#
Η θέση ενός κινητήρα είναι η απόσταση περιστροφής του, μετρούμενη σε ΜΟΙΡΕΣ ή ΣΤΡΟΦΕΣΜία στροφή ισούται με 360 μοίρες. Η συνάρτηση get_position επιστρέφει την τρέχουσα θέση του κινητήρα.
Στην αρχή ενός έργου, η θέση του κινητήρα ορίζεται στις 0 μοίρες. Εάν ο κινητήρας περιστραφεί μία στροφή προς τα εμπρός, η θέση θα είναι 360 μοίρες ή 1 στροφή. Εάν ο κινητήρας περιστραφεί προς την αντίθετη κατεύθυνση, η θέση θα είναι αρνητική.
Usage:
arm_motor.get_position(units)
Παράμετροι
Περιγραφή
units
Προαιρετικά. Η μονάδα για την επιστροφή της θέσης του κινητήρα σε: ΜΟΙΡΕΣ (προεπιλογή) ή ΣΤΡΟΦΕΣ.
# 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 επιστρέφει εάν ο κινητήρας έχει ολοκληρώσει την κίνησή του, ως δυαδική τιμή. Αυτό μπορεί να χρησιμοποιηθεί για τον έλεγχο του χρονισμού άλλων συμπεριφορών με βάση την κίνηση του κινητήρα.
Σωστό — Ο κινητήρας έχει ολοκληρώσει την κίνηση.
Λάθος — Ο κινητήρας εξακολουθεί να κινείται.
Αυτή η μέθοδος λειτουργεί σε συνδυασμό με τις ακόλουθες μεθόδους κίνησης που έχουν την παράμετρο 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 επιστρέφει εάν ο κινητήρας περιστρέφεται, ως λογική τιμή. Αυτό μπορεί να χρησιμοποιηθεί για τον έλεγχο του χρονισμού άλλων συμπεριφορών με βάση την κίνηση του κινητήρα.
Σωστό — Ο κινητήρας περιστρέφεται.
Λάθος — Ο κινητήρας δεν περιστρέφεται.
Αυτή η μέθοδος λειτουργεί σε συνδυασμό με τις ακόλουθες μεθόδους κίνησης που έχουν την παράμετρο 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)