Αδρανειακό#

Εισαγωγή#

Το ρομπότ κωδικοποίησης VEX AIM διαθέτει ενσωματωμένο αδρανειακό αισθητήρα. Αυτός ο αισθητήρας μετρά τον τρόπο με τον οποίο το ρομπότ κινείται και περιστρέφεται.

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

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

Παρακάτω είναι μια λίστα με όλες τις μεθόδους:

Προσανατολισμός — Λήψη και επαναφορά του τρόπου με τον οποίο το ρομπότ είναι στραμμένο, στρεφόμενο ή γέρνοντας.

  • get_rotation — Returns how far the robot has turned.

  • get_heading — Returns the direction the robot is facing, from 0 to 359.99 degrees.

  • get_yaw — Returns the robot’s yaw angle.

  • get_roll — Returns the robot’s roll angle.

  • get_pitch — Returns the robot’s pitch angle.

  • reset_rotation — Resets the robot’s current rotation to 0 degrees.

  • reset_heading — Resets the robot’s current heading to 0 degrees.

  • set_heading — Sets the robot’s current heading to a new heading value.

Σύγκρουση — Εντοπισμός συγκρούσεων.

  • crashed — Registers a function to run when a crash is detected.

  • set_crash_sensitivity — Sets how sensitive crash detection is to impacts.

Κίνηση — Μέτρηση επιτάχυνσης και ταχύτητας στροφής.

  • get_acceleration — Returns how quickly the robot is speeding up or slowing down on the selected axis.

  • get_turn_rate — Returns how fast the robot is rotating on the selected axis.

Βαθμονόμηση — Διαχείριση βαθμονόμησης αισθητήρα.

  • calibrate — Calibrates the Inertial Sensor.

  • is_calibrating — Returns whether the Inertial Sensor is currently calibrating.

Προσανατολισμός#

get_rotation#

Rotation is how much the robot has turned, measured in degrees. Unlike heading, rotation can increase past 359.99 degrees or decrease below 0 degrees. At the beginning of a project, the rotation value is set to 0 degrees. get_rotation returns the robot’s current rotation as a float.

Η δεξιά στροφή αυξάνει την περιστροφή και η αριστερά στροφή μειώνει την περιστροφή. Για παράδειγμα, κάνοντας δύο πλήρεις στροφές προς τα δεξιά θα επιστρέψει μια περιστροφή 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#

A heading is the direction the robot is facing, measured in degrees from 0 to 359.99. get_heading returns the robot’s current heading as a float.

Η αρχική κατεύθυνση είναι 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#

Yaw describes the robot turning left or right around its vertical axis. get_yaw returns the robot’s yaw angle in the range -180.00 to 180.00 degrees as a float.

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

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

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#

Roll describes the robot tilting side to side. get_roll returns the robot’s roll angle in the range -180.00 to 180.00 degrees as a float.

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

Ένα ρομπότ κωδικοποίησης VEX AIM με ένα πράσινο βέλος που εκτείνεται στο μπροστινό μέρος του ρομπότ, στο κέντρο του αισθητήρα AI Vision. Γύρω από το πράσινο βέλος, ένα μαύρο βέλος καμπυλώνεται αριστερόστροφα, υποδεικνύοντας τη θετική κατεύθυνση για κύλιση.

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#

Pitch describes the robot tilting forward or backward. get_pitch returns the robot’s pitch angle in the range -90.00 to 90.00 degrees as a float.

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

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

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 resets the robot’s current rotation to 0 degrees.

Αφού χρησιμοποιηθεί αυτή η μέθοδος, το ρομπότ παρακολουθεί τις μελλοντικές στροφές από τη νέα τιμή περιστροφής 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 resets the robot’s current heading to 0 degrees.

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

A heading is the direction the robot is facing, measured in degrees from 0 to 359.99. set_heading changes the robot’s current heading to a new heading value.

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

Usage:
robot.inertial.set_heading(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 registers a function to be called when the robot detects a sudden impact or collision.

Χρήση:

robot.inertial.crashed(callback, arg)

Παράμετροι

Περιγραφή

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 adjusts how much sudden acceleration is needed for the robot to detect a crash.

Usage:
robot.inertial.set_crash_sensitivity(sensitivity)

Παράμετροι

Περιγραφή

sensitivity

The crash sensitivity:

  • HIGH — Most sensitive; detects smaller impacts and triggers at 1G.
  • NORMAL — Default sensitivity; detects moderate impacts and triggers at 1.5G.
  • LOW — Least sensitive; detects stronger impacts and triggers at 2G.

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#

Acceleration is how quickly the robot is speeding up or slowing down. get_acceleration returns the robot’s acceleration on the selected axis, from -4.00 G to 4.00 G, as a float.

A G is a unit used to measure acceleration. 1 G is about the acceleration you feel from gravity while sitting still.

The value can be positive or negative depending on the direction of acceleration on the selected axis. On AIM, the axis options are named for directions on the robot: FORWARD, RIGHTWARD, and DOWNWARD.

Ένα ρομπότ κωδικοποίησης VEX AIM με βέλη κατεύθυνσης που εκτείνονται από το κέντρο του ρομπότ. Ένα πράσινο βέλος με την ένδειξη προς τα εμπρός εκτείνεται από το μπροστινό μέρος του ρομπότ, ένα μπλε βέλος με την ένδειξη προς τα κάτω εκτείνεται από το κάτω μέρος του ρομπότ και ένα κόκκινο βέλος με την ένδειξη προς τα δεξιά εκτείνεται από το πλάι του ρομπότ κάτω από το λογότυπο VEX.

Χρήση:

robot.inertial.get_acceleration(type)

Παράμετροι

Περιγραφή

type

The axis to measure acceleration on:

  • DOWNWARD — Measures acceleration along the robot’s vertical direction.
  • FORWARD — Measures acceleration along the robot’s front-to-back direction.
  • RIGHTWARD — Measures acceleration along the robot’s side-to-side direction.

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

Turn rate is how fast the robot is rotating. get_turn_rate returns the robot’s turning rate in degrees per second \(dps\) as a float, from -1000.00 to 1000.00 dps.

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

Ένα ρομπότ κωδικοποίησης VEX AIM με βέλη κατεύθυνσης που εκτείνονται από το κέντρο του ρομπότ. Ένα πράσινο βέλος με την ένδειξη roll εκτείνεται από το μπροστινό μέρος του ρομπότ με ένα μαύρο καμπύλο βέλος που δείχνει αριστερόστροφα γύρω του. Ένα μπλε βέλος με την ένδειξη Yaw εκτείνεται από το κάτω μέρος του ρομπότ με ένα μαύρο καμπύλο βέλος που δείχνει δεξιόστροφα γύρω του. Και ένα κόκκινο βέλος με την ένδειξη Pitch εκτείνεται από το πλάι του ρομπότ κάτω από το λογότυπο VEX, με ένα μαύρο καμπύλο βέλος που δείχνει αριστερόστροφα γύρω του.

Usage:
robot.inertial.get_turn_rate(axis)

Παράμετροι

Περιγραφή

axis

Which orientation to return:

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

If your project relies heavily on having an accurate heading, or if you need consistent and repeatable turns, calling calibrate at the beginning of your code can help. It’s good practice to display a message like “Calibrating…” on the robot’s screen during calibration, then update it to “Calibration complete.” afterward to remind you (and anyone else using the robot) that the robot must remain motionless during this period.

calibrate#

calibrate calibrates the gyro. Calibration helps the Inertial Sensor measure turns correctly by measuring and compensating for sensor noise and drift over a 2-second period. During this time, the robot must remain completely still on a stable surface. Movement during calibration can produce inaccurate results.

Τα ρομπότ 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 returns a Boolean indicating whether the Inertial Sensor is calibrating.

  • True — The Inertial Sensor is calibrating.

  • False — The Inertial Sensor is not calibrating.

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)