Αδρανειακό#
Εισαγωγή#
Το ρομπότ κωδικοποίησης VEX AIM διαθέτει ενσωματωμένο αδρανειακό αισθητήρα. Αυτός ο αισθητήρας μετρά τον τρόπο με τον οποίο το ρομπότ κινείται και περιστρέφεται.
Ο Αισθητήρας Αδράνειας χρησιμοποιεί δύο μέρη για να το κάνει αυτό. Το γυροσκόπιο μετρά τις στροφές, όπως την κατεύθυνση, την περιστροφή, την εκτροπή, την κύλιση, την κλίση και τον ρυθμό στροφής του ρομπότ. Το επιταχυνσιόμετρο μετρά τις αλλαγές στην κίνηση, όπως την επιτάχυνση, την επιβράδυνση ή το απότομο σταμάτημα κατά τη διάρκεια μιας σύγκρουσης.
Οι αδρανειακές μέθοδοι μπορούν να χρησιμοποιηθούν για την παρακολούθηση στροφών, τη μέτρηση επιτάχυνσης, την ανίχνευση συγκρούσεων, την επαναφορά τιμών κατεύθυνσης ή περιστροφής και τη βαθμονόμηση του αισθητήρα.
Παρακάτω είναι μια λίστα με όλες τις μεθόδους:
Προσανατολισμός — Λήψη και επαναφορά του τρόπου με τον οποίο το ρομπότ είναι στραμμένο, στρεφόμενο ή γέρνοντας.
get_rotation— Επιστρέφει την απόσταση που έχει στρίψει το ρομπότ.get_heading— Επιστρέφει την κατεύθυνση προς την οποία είναι στραμμένο το ρομπότ, από 0 έως 359,99 μοίρες.get_yaw— Επιστρέφει τη γωνία εκτροπής του ρομπότ.get_roll— Επιστρέφει τη γωνία κύλισης του ρομπότ.get_pitch— Επιστρέφει τη γωνία κλίσης του ρομπότ.reset_rotation— Επαναφέρει την τρέχουσα περιστροφή του ρομπότ στις 0 μοίρες.reset_heading— Επαναφέρει την τρέχουσα κατεύθυνση του ρομπότ στις 0 μοίρες.set_heading— Ορίζει την τρέχουσα κατεύθυνση του ρομπότ σε μια νέα τιμή κατεύθυνσης.
Σύγκρουση — Εντοπισμός συγκρούσεων.
crashed— Καταγράφει μια συνάρτηση που θα εκτελεστεί όταν εντοπιστεί σφάλμα.set_crash_sensitivity— Ορίζει πόσο ευαίσθητη είναι η ανίχνευση σύγκρουσης στις συγκρούσεις.
Κίνηση — Μέτρηση επιτάχυνσης και ταχύτητας στροφής.
get_acceleration— Επιστρέφει την ταχύτητα με την οποία το ρομπότ επιταχύνει ή επιβραδύνει στον επιλεγμένο άξονα.get_turn_rate— Επιστρέφει την ταχύτητα περιστροφής του ρομπότ στον επιλεγμένο άξονα.
Βαθμονόμηση — Διαχείριση βαθμονόμησης αισθητήρα.
calibrate— Βαθμονομεί τον Αδρανειακό Αισθητήρα.is_calibrating— Επιστρέφει εάν ο Αισθητήρας Αδράνειας βρίσκεται σε διαδικασία βαθμονόμησης.
Προσανατολισμός#
get_rotation#
Η περιστροφή είναι η περιστροφή του ρομπότ, μετρούμενη σε μοίρες. Σε αντίθεση με την κατεύθυνση, η περιστροφή μπορεί να αυξηθεί πέραν των 359,99 μοιρών ή να μειωθεί κάτω από τις 0 μοίρες. Στην αρχή ενός έργου, η τιμή περιστροφής ορίζεται σε 0 μοίρες. get_rotation επιστρέφει την τρέχουσα περιστροφή του ρομπότ ως μεταβλητή.
Η δεξιά στροφή αυξάνει την περιστροφή και η αριστερά στροφή μειώνει την περιστροφή. Για παράδειγμα, κάνοντας δύο πλήρεις στροφές προς τα δεξιά θα επιστρέψει μια περιστροφή 720 μοιρών. Η περιστροφή μίας πλήρους στροφής προς τα αριστερά από 0 μοίρες θα επιστρέψει μια περιστροφή -360 μοιρών.
Usage:
robot.inertial.get_rotation()
Παράμετροι |
Περιγραφή |
|---|---|
Αυτή η μέθοδος δεν έχει παραμέτρους. |
# Display the robot's rotation as it rotates
while True:
robot.screen.clear_screen()
robot.screen.set_cursor(1, 1)
robot.screen.print(f"Rotation: {robot.inertial.get_rotation():.2f}")
wait(50, MSEC)
get_heading#
Μια κατεύθυνση είναι η κατεύθυνση προς την οποία είναι στραμμένο το ρομπότ, μετρούμενη σε μοίρες από 0 έως 359,99. get_heading επιστρέφει την τρέχουσα κατεύθυνση του ρομπότ ως αριθμό κινητής υποδιαστολής.
Η αρχική κατεύθυνση είναι 0 μοίρες. Εάν το ρομπότ στρίψει πέρα από τις 359,99 μοίρες, η κατεύθυνση επιστρέφει στις 0 μοίρες.
Usage:
robot.inertial.get_heading()
Παράμετροι |
Περιγραφή |
|---|---|
Αυτή η μέθοδος δεν έχει παραμέτρους. |
# Turn right until the heading reaches 90 degrees
robot.turn(RIGHT)
while robot.inertial.get_heading() < 90:
wait(50, MSEC)
robot.stop_all_movement()
# Display the robot's heading as it is rotated by hand
while True:
robot.screen.clear_screen()
robot.screen.set_cursor(1, 1)
robot.screen.print(f"Heading: {robot.inertial.get_heading()} degrees")
wait(50, MSEC)
get_yaw#
Η περιστροφή εκτροπής περιγράφει την περιστροφή του ρομπότ αριστερά ή δεξιά γύρω από τον κατακόρυφο άξονά του. Η συνάρτηση get_yaw επιστρέφει τη γωνία εκτροπής του ρομπότ στην περιοχή από -180,00 έως 180,00 μοίρες ως πλεύση.
Η παρακάτω εικόνα χρησιμοποιεί βέλη για να δείξει την κατεύθυνση της θετικής περιστροφής για την εκτροπή.
Usage:
robot.inertial.get_yaw()
Παράμετροι |
Περιγραφή |
|---|---|
Αυτή η μέθοδος δεν έχει παραμέτρους. |
# Display the robot's yaw angle as it is rotated by hand
while True:
robot.screen.clear_screen()
robot.screen.set_cursor(1, 1)
robot.screen.print(robot.inertial.get_yaw())
wait(50, MSEC)
get_roll#
Η κύλιση περιγράφει την κλίση του ρομπότ από πλευρά σε πλευρά. Η συνάρτηση get_roll επιστρέφει τη γωνία κύλισης του ρομπότ στην περιοχή από -180,00 έως 180,00 μοίρες ως πλεύση.
Η παρακάτω εικόνα χρησιμοποιεί βέλη για να δείξει την κατεύθυνση της θετικής περιστροφής για την κύλιση.
Usage:
robot.inertial.get_roll()
Παράμετροι |
Περιγραφή |
|---|---|
Αυτή η μέθοδος δεν έχει παραμέτρους. |
# Display the robot's roll angle as it is tilted by hand
while True:
robot.screen.clear_screen()
robot.screen.set_cursor(1, 1)
robot.screen.print(robot.inertial.get_roll())
wait(50, MSEC)
get_pitch#
Η κλίση περιγράφει την κλίση του ρομπότ προς τα εμπρός ή προς τα πίσω. Η συνάρτηση get_pitch επιστρέφει τη γωνία κλίσης του ρομπότ στην περιοχή από -90,00 έως 90,00 μοίρες ως πλεύση.
Η παρακάτω εικόνα χρησιμοποιεί βέλη για να δείξει την κατεύθυνση της θετικής περιστροφής για το ύψος του τόνου.
Usage:
robot.inertial.get_pitch()
Παράμετροι |
Περιγραφή |
|---|---|
Αυτή η μέθοδος δεν έχει παραμέτρους. |
# Display the robot's pitch angle as it is tilted by hand
while True:
robot.screen.clear_screen()
robot.screen.set_cursor(1, 1)
robot.screen.print(robot.inertial.get_pitch())
wait(50, MSEC)
reset_rotation#
reset_rotation επαναφέρει την τρέχουσα περιστροφή του ρομπότ στις 0 μοίρες.
Αφού χρησιμοποιηθεί αυτή η μέθοδος, το ρομπότ παρακολουθεί τις μελλοντικές στροφές από τη νέα τιμή περιστροφής 0 μοιρών.
Usage:
robot.inertial.reset_rotation()
Παράμετροι |
Περιγραφή |
|---|---|
Αυτή η μέθοδος δεν έχει παραμέτρους. |
# Reset the robot's rotation if it exceeds 180 degrees
while True:
if robot.inertial.get_rotation() >= 180:
robot.inertial.reset_rotation()
robot.screen.clear_screen()
robot.screen.set_cursor(1, 1)
robot.screen.print(f"Rotation: {robot.inertial.get_rotation():.2f}")
wait(50, MSEC)
reset_heading#
reset_heading επαναφέρει την τρέχουσα κατεύθυνση του ρομπότ στις 0 μοίρες.
Αφού χρησιμοποιηθεί αυτή η μέθοδος, η τρέχουσα κατεύθυνση του ρομπότ γίνεται η νέα κατεύθυνση 0 μοιρών.
Usage:
robot.inertial.reset_heading()
Παράμετροι |
Περιγραφή |
|---|---|
Αυτή η μέθοδος δεν έχει παραμέτρους. |
# Turn the robot around using a new 90 degree heading
robot.turn_to(90)
wait(1, SECONDS)
robot.inertial.reset_heading()
robot.turn_to(90)
set_heading#
Μια κατεύθυνση είναι η κατεύθυνση προς την οποία είναι στραμμένο το ρομπότ, μετρούμενη σε μοίρες από 0 έως 359,99. set_heading αλλάζει την τρέχουσα κατεύθυνση του ρομπότ σε μια νέα τιμή κατεύθυνσης.
Για παράδειγμα, εάν το ρομπότ έχει στραφεί προς τα δεξιά, η ρύθμιση της κατεύθυνσης σε 0 μοίρες καθιστά αυτή τη θέση προς τα δεξιά τις νέες 0 μοίρες. Στη συνέχεια, το ρομπότ μπορεί να παρακολουθήσει άλλες κατευθύνσεις με βάση αυτήν τη νέα κατεύθυνση.
Usage:
robot.inertial.set_heading(heading)
Παράμετροι |
Περιγραφή |
|---|---|
|
Η τιμή κατεύθυνσης, σε μοίρες, που θα οριστεί για το ρομπότ. Αυτή μπορεί να είναι μια τιμή από 0 έως 359,99. |
# Turn the robot to 90 degrees using its new heading
robot.inertial.set_heading(45)
robot.turn_to(90)
Σύγκρουση#
crashed#
crashed καταγράφει μια συνάρτηση που θα κληθεί όταν το ρομπότ ανιχνεύσει μια ξαφνική πρόσκρουση ή σύγκρουση.
Χρήση:
robot.inertial.crashed(callback, arg)
Παράμετροι |
Περιγραφή |
|---|---|
|
Μια συνάρτηση που έχει οριστεί προηγουμένως για εκτέλεση όταν ανιχνεύεται σύγκρουση. |
|
Προαιρετικό. Μια πλειάδα που περιέχει ορίσματα για να μεταβιβαστούν στη συνάρτηση επανάκλησης. Δείτε Χρήση Συναρτήσεων με Παραμέτρους για περισσότερες πληροφορίες. |
# Define what happens when a crash occurs
def crash_detected():
# Stop all movement and indicate a crash occurred
robot.screen.print("Crash detected")
robot.stop_all_movement()
robot.inertial.crashed(crash_detected)
# Drive forward until crash
robot.move_at(0, 100)
set_crash_sensitivity#
set_crash_sensitivity ρυθμίζει την απότομη επιτάχυνση που απαιτείται για να ανιχνεύσει το ρομπότ μια σύγκρουση.
Usage:
robot.inertial.set_crash_sensitivity(sensitivity)
Παράμετροι |
Περιγραφή |
|---|---|
|
Ευαισθησία σε σύγκρουση:
|
def crashed_callback():
robot.stop_all_movement()
robot.sound.play(CRASH)
# system event handlers
robot.inertial.crashed(crashed_callback)
# add 15ms delay to make sure events are registered correctly.
wait(15, MSEC)
# Detect a crash at a slow velocity.
robot.set_move_velocity(35, PERCENT)
robot.inertial.set_crash_sensitivity(HIGH)
robot.move_at(0)
Κίνηση#
get_acceleration#
Η επιτάχυνση είναι η ταχύτητα με την οποία το ρομπότ επιταχύνει ή επιβραδύνει. Η συνάρτηση get_acceleration επιστρέφει την επιτάχυνση του ρομπότ στον επιλεγμένο άξονα, από -4,00 G έως 4,00 G, ως πλωτήρα.
Το G είναι μια μονάδα που χρησιμοποιείται για τη μέτρηση της επιτάχυνσης. Το 1 G αντιστοιχεί περίπου στην επιτάχυνση που αισθάνεστε από τη βαρύτητα ενώ κάθεστε ακίνητοι.
Η τιμή μπορεί να είναι θετική ή αρνητική ανάλογα με την κατεύθυνση επιτάχυνσης στον επιλεγμένο άξονα. Στο AIM, οι επιλογές άξονα ονομάζονται για τις κατευθύνσεις στο ρομπότ: FORWARD, RIGHTWARDκαι DOWNWARD.

Χρήση:
robot.inertial.get_acceleration(type)
Παράμετροι |
Περιγραφή |
|---|---|
|
Ο άξονας για τη μέτρηση της επιτάχυνσης:
|
# Display the acceleration as the robot begins to move
robot.screen.set_cursor(4,1)
sitting_accel = robot.inertial.get_acceleration(RIGHTWARD)
robot.screen.print(f"Resting: {sitting_accel:.2f}")
wait(0.5, SECONDS)
robot.screen.next_row()
robot.move_at(90, 100)
wait(0.1, SECONDS)
robot.screen.print(f"Startup: {robot.inertial.get_acceleration(RIGHTWARD):.2f}")
get_turn_rate#
Ο ρυθμός περιστροφής είναι η ταχύτητα με την οποία περιστρέφεται το ρομπότ. Η συνάρτηση get_turn_rate επιστρέφει τον ρυθμό περιστροφής του ρομπότ σε μοίρες ανά δευτερόλεπτο \(dps\) ως αριθμό κινητής υποδιαστολής, από -1000,00 έως 1000,00 dps.
Η τιμή μπορεί να είναι θετική ή αρνητική ανάλογα με την κατεύθυνση περιστροφής του ρομπότ στον επιλεγμένο άξονα. Η παρακάτω εικόνα χρησιμοποιεί βέλη για να δείξει την κατεύθυνση θετικής περιστροφής για κύλιση, κλίση και εκτροπή.

Usage:
robot.inertial.get_turn_rate(axis)
Παράμετροι |
Περιγραφή |
|---|---|
|
Ποιος προσανατολισμός θα επιστραφεί:
|
# Display the gyro rate as the robot is rotated by hand
while True:
robot.screen.clear_screen()
robot.screen.set_cursor(1, 1)
robot.screen.print(robot.inertial.get_turn_rate(YAW))
wait(50, MSEC)
Διαμέτρηση#
Η βαθμονόμηση βοηθά τον Αδρανειακό Αισθητήρα να μετρά σωστά τις στροφές μετρώντας και αντισταθμίζοντας τον θόρυβο και την απόκλιση του αισθητήρα σε διάστημα 2 δευτερολέπτων. Κατά τη διάρκεια αυτού του χρόνου, το ρομπότ πρέπει να παραμένει εντελώς ακίνητο σε μια σταθερή επιφάνεια. Η κίνηση κατά τη βαθμονόμηση μπορεί να παράγει ανακριβή αποτελέσματα.
Τα ρομπότ VEX επιχειρούν να βαθμονομηθούν αυτόματα κατά την εκκίνηση, περιμένοντας μέχρι να μην ανιχνεύσουν κίνηση. Ωστόσο, εάν το ρομπότ μεταφέρεται ή μετακινείται κατά την εκκίνηση, ο αισθητήρας ενδέχεται να μην βαθμονομηθεί σωστά ή να δώσει λανθασμένη βαθμονόμηση.
Εάν το έργο σας βασίζεται σε μεγάλο βαθμό στην ακριβή κατεύθυνση ή εάν χρειάζεστε σταθερές και επαναλήψιμες στροφές, η κλήση calibrate στην αρχή του κώδικά σας μπορεί να βοηθήσει. Είναι καλή πρακτική να εμφανίζετε ένα μήνυμα όπως “Calibrating…” στην οθόνη του ρομπότ κατά τη διάρκεια της βαθμονόμησης και, στη συνέχεια, να το ενημερώνετε σε “Calibration complete” (Η βαθμονόμηση ολοκληρώθηκε) στη συνέχεια για να υπενθυμίζετε σε εσάς (και σε οποιονδήποτε άλλον χρησιμοποιεί το ρομπότ) ότι το ρομπότ πρέπει να παραμείνει ακίνητο κατά τη διάρκεια αυτής της περιόδου.
calibrate#
calibrate βαθμονομεί το γυροσκόπιο. Η βαθμονόμηση βοηθά τον Αδρανειακό Αισθητήρα να μετρά σωστά τις στροφές μετρώντας και αντισταθμίζοντας τον θόρυβο και την απόκλιση του αισθητήρα σε διάστημα 2 δευτερολέπτων. Κατά τη διάρκεια αυτού του χρόνου, το ρομπότ πρέπει να παραμένει εντελώς ακίνητο σε μια σταθερή επιφάνεια. Η κίνηση κατά τη βαθμονόμηση μπορεί να παράγει ανακριβή αποτελέσματα.
Τα ρομπότ VEX επιχειρούν να βαθμονομηθούν αυτόματα κατά την εκκίνηση, περιμένοντας μέχρι να μην ανιχνεύσουν κίνηση. Ωστόσο, εάν το ρομπότ μεταφέρεται ή μετακινείται κατά την εκκίνηση, ο αισθητήρας ενδέχεται να μην βαθμονομηθεί σωστά ή να δώσει λανθασμένη βαθμονόμηση.
Usage:
robot.inertial.calibrate()
Παράμετροι |
Περιγραφή |
|---|---|
Αυτή η μέθοδος δεν έχει παραμέτρους. |
# Calibrate the gyro before moving
robot.inertial.calibrate()
robot.screen.show_emoji(THINKING)
wait(2, SECONDS)
robot.screen.show_emoji(PROUD)
robot.move_for(50, 90)
is_calibrating#
Η συνάρτηση is_calibrating επιστρέφει μια Boolean τιμή που υποδεικνύει εάν ο Αδρανειακός Αισθητήρας βαθμονομείται.
True— Ο αδρανειακός αισθητήρας βαθμονομείται.False— Ο αδρανειακός αισθητήρας δεν βαθμονομείται.
Usage:
robot.inertial.is_calibrating()
Παράμετροι |
Περιγραφή |
|---|---|
Αυτή η μέθοδος δεν έχει παραμέτρους. |
# Move after the calibration is completed
robot.inertial.calibrate()
while robot.inertial.is_calibrating():
robot.screen.show_emoji(THINKING)
wait(50, MSEC)
robot.screen.show_emoji(PROUD)
robot.move_for(50, 90)