Οραμα#
Εισαγωγή#
Ο αισθητήρας όρασης για το VEX EXP ανιχνεύει και παρακολουθεί τις χρωματικές υπογραφές και τους χρωματικούς κωδικούς. Αυτό επιτρέπει στον αισθητήρα όρασης να αναλύει το περιβάλλον του και να αντιδρά με βάση τα ανιχνευόμενα οπτικά δεδομένα.
Αυτή η σελίδα χρησιμοποιεί vision_1, RED_BOXκαι BOX_CODE ως παραδείγματα ονομάτων Αισθητήρα Όρασης, Υπογραφή Χρώματος και Κωδικού Χρώματος αντίστοιχα. Αντικαταστήστε τα με τα δικά σας διαμορφωμένα ονόματα, όπως απαιτείται.
Παρακάτω είναι μια λίστα με όλες τις μεθόδους:
Λήψη δεδομένων – Λήψη δεδομένων από τον αισθητήρα όρασης.
take_snapshot– Καταγράφει δεδομένα για μια συγκεκριμένη Υπογραφή Χρώματος ή Κωδικό Χρώματος.largest_object– Επιλογή του μεγαλύτερου αντικειμένου από το στιγμιότυπο.installed– Εάν ο αισθητήρας όρασης είναι συνδεδεμένος στον εγκέφαλο EXP.
Ιδιότητες – Δεδομένα αντικειμένου που επιστράφηκαν από take_snapshot.
.exists– Εάν το αντικείμενο υπάρχει στην τρέχουσα ανίχνευση..width– Πλάτος του ανιχνευμένου αντικειμένου..height– Ύψος του ανιχνευμένου αντικειμένου..centerX– Η θέση X του κέντρου του αντικειμένου..centerY– Θέση Y του κέντρου του αντικειμένου..angle– Προσανατολισμός του Χρωματικού Κώδικα..originX– X position of the object’s top-left corner..originY– Y position of the object’s top-left corner.
Κατασκευαστές – Μη αυτόματη αρχικοποίηση και διαμόρφωση του αισθητήρα όρασης και των υπογραφών του.
Αποκτητές#
take_snapshot#
take_snapshot φιλτράρει δεδομένα από το πλαίσιο του αισθητήρα όρασης σε μια μοναδική υπογραφή — μια αποθηκευμένη περιγραφή κάποιου πράγματος που μπορεί να αναγνωρίσει ο αισθητήρας, όπως μια διαμορφωμένη Υπογραφή Χρώματος ή Κώδικα Χρώματος — και επιστρέφει μια πλειάδα.
Οι Υπογραφές Χρώματος και Κωδικοί Χρώματος πρέπει πρώτα να ρυθμιστούν στο Vision Utility πριν μπορέσουν να χρησιμοποιηθούν με αυτήν τη μέθοδο.
Η πλειάδα αποθηκεύει αντικείμενα ταξινομημένα από το μεγαλύτερο στο μικρότερο κατά πλάτος, ξεκινώντας από τον δείκτη 0. Η πρόσβαση στις ιδιότητες κάθε αντικειμένου είναι δυνατή χρησιμοποιώντας τον δείκτη του. Μια κενή πλειάδα επιστρέφεται εάν δεν εντοπιστούν αντικείμενα που να ταιριάζουν.
Usage:
vision_1.take_snapshot(SIGNATURE)
Παράμετροι |
Περιγραφή |
|---|---|
|
Φιλτράρει το σύνολο δεδομένων ώστε να περιλαμβάνει μόνο δεδομένα της δεδομένης υπογραφής. Οι διαθέσιμες υπογραφές είναι:
|
# Move forward if a red object is detected
while True:
red_box = vision_1.take_snapshot(vision_1__RED_BOX)
if red_box[0].exists:
drivetrain.drive_for(FORWARD, 10, MM)
wait(5, MSEC)
Χρωματικές υπογραφές#
Μια χρωματική υπογραφή είναι ένα μοναδικό χρώμα που μπορεί να αναγνωρίσει ο Αισθητήρας Όρασης. Αυτές οι υπογραφές επιτρέπουν στον αισθητήρα να ανιχνεύει και να παρακολουθεί αντικείμενα με βάση το χρώμα τους. Μόλις διαμορφωθεί μια Χρωματική Υπογραφή, ο αισθητήρας μπορεί να αναγνωρίσει αντικείμενα με αυτό το συγκεκριμένο χρώμα στο οπτικό του πεδίο. Οι χρωματικές υπογραφές χρησιμοποιούνται με take_snapshot για την επεξεργασία και την ανίχνευση χρωματιστών αντικειμένων σε πραγματικό χρόνο.
Για να χρησιμοποιήσετε μια διαμορφωμένη Χρωματική Υπογραφή σε ένα έργο, το όνομά της πρέπει να είναι το όνομα του Αισθητήρα Όρασης, δύο υπογράμμισης και, στη συνέχεια, το όνομα της Χρωματικής Υπογραφής. Για παράδειγμα: vision_1__RED_BOX.
# Display if any objects match the RED_BOX signature
while True:
brain.screen.set_cursor(1, 1)
brain.screen.clear_row(1)
# Change to any configured Color Signature
red_box = vision_1.take_snapshot(vision_1__RED_BOX)
if red_box[0].exists:
brain.screen.print("Color signature detected!")
wait(100, MSEC)
Κωδικοί Χρώματος#
Ένας χρωματικός κώδικας είναι ένα δομημένο μοτίβο που αποτελείται από χρωματικές υπογραφές που είναι διατεταγμένες σε μια συγκεκριμένη σειρά. Αυτοί οι κωδικοί επιτρέπουν στον Αισθητήρα Όρασης να αναγνωρίζει προκαθορισμένα μοτίβα χρωμάτων. Οι χρωματικοί κωδικοί είναι χρήσιμοι για την αναγνώριση σύνθετων αντικειμένων ή τη δημιουργία μοναδικών δεικτών για αυτόνομη πλοήγηση.
Για να χρησιμοποιήσετε έναν διαμορφωμένο Κώδικα Χρώματος σε ένα έργο, το όνομά του πρέπει να είναι το όνομα του Αισθητήρα Όρασης, δύο υπογράμμισης και, στη συνέχεια, το όνομα του Κώδικα Χρώματος. Για παράδειγμα: vision_1__BOX_CODE.
# Display if any objects match the BOX_CODE code
while True:
brain.screen.set_cursor(1, 1)
brain.screen.clear_row(1)
# Change to any configured Color Code
box_code = vision_1.take_snapshot(vision_1__BOX_CODE)
if box_code[0].exists:
brain.screen.print("Color code detected!")
wait(100, MSEC)
largest_object#
largest_object ανακτά το μεγαλύτερο ανιχνευμένο αντικείμενο για λήψη δεδομένων στην πλειάδα που επιστρέφεται από την τελευταία χρήση του take_snapshot.
Αυτή η μέθοδος μπορεί να χρησιμοποιηθεί για να λαμβάνεται πάντα το μεγαλύτερο αντικείμενο από μια πλειάδα χωρίς να καθορίζεται δείκτης.
Usage:
vision_1.largest_object()
# Turn slowly until the largest object is centered in
# front of the Vision Sensor
drivetrain.set_turn_velocity(10, PERCENT)
drivetrain.turn(RIGHT)
while True:
red_box = vision_1.take_snapshot(vision_1__RED_BOX)
if red_box[0].exists:
if 140 < vision_1.largest_object().centerX < 180:
drivetrain.stop()
wait(10,MSEC)
installed#
Η τιμή installed επιστρέφει μια Boolean τιμή που υποδεικνύει εάν ο Αισθητήρας Όρασης είναι συνδεδεμένος αυτήν τη στιγμή στον Εγκέφαλο EXP.
True– Ο αισθητήρας όρασης είναι συνδεδεμένος με τον εγκέφαλο EXP.False– Ο αισθητήρας όρασης δεν είναι συνδεδεμένος με τον εγκέφαλο EXP.
Usage:
vision_1.installed()
Παράμετροι |
Περιγραφή |
|---|---|
Αυτή η μέθοδος δεν έχει παραμέτρους. |
# Display a message if the Vision Sensor is connected
if vision_1.installed():
brain.screen.print("Vision Sensor Installed!")
Σκηνικά θέατρου#
Υπάρχουν οκτώ ιδιότητες που περιλαμβάνονται σε κάθε αντικείμενο που αποθηκεύεται σε μια πλειάδα μετά τη χρήση της take_snapshot.
Όλες οι τιμές ιδιοτήτων περιγράφουν τη θέση και το μέγεθος του ανιχνευμένου αντικειμένου στην προβολή του αισθητήρα όρασης τη στιγμή που χρησιμοποιήθηκε take_snapshot Αυτές οι τιμές μετριούνται σε pixel, με βάση την ανάλυση 316 επί 212 pixel του αισθητήρα.
.exists#
.exists επιστρέφει μια Boolean τιμή που υποδεικνύει εάν ο δείκτης υπάρχει στην πλειάδα ή όχι.
True- Ο δείκτης υπάρχει.False- Ο δείκτης δεν υπάρχει.
# Check if at least one red object is detected
# You will receive an error if no objects are detected
while True:
brain.screen.clear_screen()
brain.screen.set_cursor(1, 1)
red_objects = vision_1.take_snapshot(vision_1__RED_BOX)
if red_objects[0].exists:
brain.screen.print("At least 1")
else:
brain.screen.print("No red objects")
wait(0.5, SECONDS)
.width#
Η συνάρτηση .width επιστρέφει το πλάτος του ανιχνευμένου αντικειμένου σε pixel, το οποίο είναι ένας ακέραιος αριθμός μεταξύ 1 και 316.
# Move towards a blue object until its width is
# larger than 100 pixels
while True:
blue_box = vision_1.take_snapshot(vision_1__BLUE_BOX)
if blue_box[0].exists:
if blue_box[0].width < 100:
drivetrain.drive_for(FORWARD, 10, MM)
else:
drivetrain.stop()
wait(50, MSEC)
.height#
Η συνάρτηση .height επιστρέφει το ύψος του ανιχνευμένου αντικειμένου σε pixel, το οποίο είναι ένας ακέραιος αριθμός μεταξύ 1 και 212.
# Move towards a blue object until its height is
# larger than 100 pixels
while True:
blue_box = vision_1.take_snapshot(vision_1__BLUE_BOX)
if blue_box[0].exists:
if blue_box[0].height < 100:
drivetrain.drive_for(FORWARD, 10, MM)
else:
drivetrain.stop()
wait(50, MSEC)
.centerX#
.centerX επιστρέφει τη συντεταγμένη x του κέντρου του ανιχνευμένου αντικειμένου σε pixel, η οποία είναι ένας ακέραιος αριθμός μεταξύ 0 και 316.
# Turn slowly until the largest blue object is centered
# in front of the Vision Sensor.
drivetrain.set_turn_velocity(10, PERCENT)
drivetrain.turn(RIGHT)
while True:
blue_box = vision_1.take_snapshot(vision_1__BLUE_BOX)
if blue_box[0].exists:
if 140 < vision_1.largest_object().centerX < 180:
drivetrain.stop()
wait(10,MSEC)
.centerY#
.centerY επιστρέφει τη συντεταγμένη y του κέντρου του ανιχνευμένου αντικειμένου σε pixel, η οποία είναι ένας ακέραιος αριθμός μεταξύ 0 και 212.
# Move towards a blue object until its
# center y-coordinate is more than 140 pixels
while True:
blue_box = vision_1.take_snapshot(vision_1__BLUE_BOX)
if blue_box[0].exists:
if blue_box[0].centerY < 140:
drivetrain.drive(FORWARD)
else:
drivetrain.stop()
wait(50, MSEC)
.angle#
Η συνάρτηση .angle επιστρέφει τον προσανατολισμό του ανιχνευμένου αντικειμένου σε μοίρες, ο οποίος είναι ένας ακέραιος αριθμός μεταξύ 0 και 359.
# Turn left or right depending on how a
# configured box code is rotated
while True:
box_code = vision_1.take_snapshot(vision_1__BOX_CODE)
if box_code[0].exists:
if 70 < box_code[0].angle < 110:
drivetrain.turn_for(RIGHT, 45, DEGREES)
elif 250 < box_code[0].angle < 290:
drivetrain.turn_for(LEFT, 45, DEGREES)
else:
drivetrain.stop()
wait(50, MSEC)
.originX#
Η συνάρτηση .originX επιστρέφει τη συντεταγμένη x της επάνω αριστερής γωνίας του πλαισίου οριοθέτησης του ανιχνευμένου αντικειμένου σε pixel, η οποία είναι ένας ακέραιος αριθμός μεταξύ 0 και 316.
# Display if a red object is to the
# left or the right
while True:
brain.screen.clear_screen()
brain.screen.set_cursor(1,1)
red_box = vision_1.take_snapshot(vision_1__RED_BOX)
if red_box[0].exists:
if red_box[0].originX < 160:
brain.screen.print("To the left!")
else:
brain.screen.print("To the right!")
wait(50, MSEC)
.originY#
Η συνάρτηση .originY επιστρέφει τη συντεταγμένη y της επάνω αριστερής γωνίας του πλαισίου οριοθέτησης του ανιχνευμένου αντικειμένου σε pixel, η οποία είναι ένας ακέραιος αριθμός μεταξύ 0 και 212.
# Display if a red object is close or far
# from the robot
while True:
brain.screen.clear_screen()
brain.screen.set_cursor(1,1)
red_box = vision_1.take_snapshot(vision_1__RED_BOX)
if red_box[0].exists:
if red_box[0].originY < 80:
brain.screen.print("Far")
else:
brain.screen.print("Close")
wait(50, MSEC)
Κατασκευαστές#
Οι κατασκευαστές χρησιμοποιούνται για τη χειροκίνητη δημιουργία αντικειμένων Vision, Signatureκαι Code , τα οποία είναι απαραίτητα για τη διαμόρφωση του αισθητήρα όρασης εκτός του VEXcode.
Vision#
Vision δημιουργεί έναν Αισθητήρα Όρασης.
Χρήση
Vision(smartport, brightness, sigs)
Παράμετροι |
Περιγραφή |
|---|---|
|
Η Έξυπνη Θύρα στην οποία είναι συνδεδεμένος ο Αισθητήρας Όρασης, γράφεται ως |
|
Προαιρετικά. Η τιμή φωτεινότητας για τον αισθητήρα όρασης, από 1 έως 100. |
|
Προαιρετικό. Το όνομα ενός ή περισσότερων αντικειμένων Υπογραφή χρώματος ή Κωδικός χρώματος διαχωρισμένα με κόμματα ( |
# Create the Color Signatures
RED_BOX = Signature(1, 10121, 10757, 10439,-1657, -1223, -1440, 2.5, 1)
BLUE_BOX = Signature(2, -4443, -3373, -3908,6253, 7741, 6997, 2.5, 1)
# Create the Color Code
BOX_CODE = Code(RED_BOX, BLUE_BOX)
"""
Create a Vision Sensor with the following values:
- Port 1
- brightness: 80
- RED_BOX and BOX_CODE signatures
"""
vision_1 = Vision(Ports.PORT1, 80, RED_BOX, BOX_CODE)
Signature#
Signature δημιουργεί μια Χρωματική Υπογραφή. Έως και επτά διαφορετικές Χρωματικές Υπογραφές μπορούν να αποθηκευτούν ταυτόχρονα σε έναν Αισθητήρα Οπτικής.
Χρήση:
Signature(index, uMin, uMax, uMean, vMin, vMax, vMean, rgb, type)
Παράμετρος |
Περιγραφή |
|---|---|
|
Ο δείκτης του αντικειμένου |
|
Η τιμή από |
|
Η τιμή από |
|
Η τιμή από |
|
Η τιμή από |
|
Η τιμή από |
|
Η τιμή από |
|
Η τιμή από |
|
Η τιμή από το |
Για να λάβετε τις τιμές για να δημιουργήσετε μια Υπογραφή Χρώματος, μεταβείτε στο Vision Utility. Μόλις ρυθμιστεί μια Υπογραφή Χρώματος, αντιγράψτε τις τιμές των παραμέτρων από το παράθυρο Διαμόρφωσης.
"""
Create a Color Signature with the following values:
- index: 1
- uMin: 10121
- uMax: 10757
- uMean: 10439
- vMin: -1657
- vMax: -1223
- vMean: -1440
- rgb: 2.5
- type: 1
"""
RED_BOX = Signature(1, 10121, 10757, 10439,-1657, -1223, -1440,2.5, 1)
Code#
Code δημιουργεί έναν Χρωματικό Κώδικα. Απαιτεί τουλάχιστον δύο ήδη καθορισμένες Χρωματικές Υπογραφές για να χρησιμοποιηθεί. Έως και οκτώ διαφορετικοί Χρωματικοί Κώδικες μπορούν να αποθηκευτούν ταυτόχρονα σε έναν Αισθητήρα Οπτικής.
Χρήση:
Code(sig1, sig2, sig3, sig4, sig5)
Παράμετρος |
Περιγραφή |
|---|---|
|
A previously created Color Signature. |
|
A previously created Color Signature. |
|
Προαιρετικό. Μια προηγουμένως δημιουργημένη Υπογραφή Χρώματος. |
|
Προαιρετικό. Μια προηγουμένως δημιουργημένη Υπογραφή Χρώματος. |
|
Προαιρετικό. Μια προηγουμένως δημιουργημένη Υπογραφή Χρώματος. |
# Create the Color Signatures
RED_BOX = Signature(1, 10121, 10757, 10439,-1657, -1223, -1440, 2.5, 1)
BLUE_BOX = Signature(2, -4443, -3373, -3908,6253, 7741, 6997, 2.5, 1)
# Create a Color Code with the Color Signatures
BOX_CODE = Code(RED_BOX, BLUE_BOX)