Αισθητήρας όρασης#

Εισαγωγή#

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

Για τα παρακάτω παραδείγματα, ο διαμορφωμένος Αισθητήρας Όρασης θα ονομάζεται vision_1και τα διαμορφωμένα αντικείμενα Color Signature, όπως RED_BOX, θα χρησιμοποιούνται σε όλα τα επόμενα παραδείγματα σε όλη αυτήν την τεκμηρίωση API κατά την αναφορά σε μεθόδους κλάσης Vision.

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

Λήψη δεδομένων από τον αισθητήρα όρασης.

  • take_snapshot — Καταγράφει δεδομένα για μια συγκεκριμένη υπογραφή.

  • installed — Εάν ο αισθητήρας όρασης είναι συνδεδεμένος με τον εγκέφαλο IQ (2ης γενιάς).

Ιδιότητες — Δεδομένα αντικειμένου που επιστράφηκαν από take_snapshot.

  • largest_object — Επιλέξτε αμέσως το μεγαλύτερο αντικείμενο από το στιγμιότυπο του αισθητήρα όρασης.

  • .exists — Εάν το αντικείμενο υπάρχει στην τρέχουσα ανίχνευση.

  • .width — Πλάτος του ανιχνευμένου αντικειμένου.

  • .height — Ύψος του ανιχνευμένου αντικειμένου.

  • .centerX — X position of the object’s center.

  • .centerY — Θέση Y του κέντρου του αντικειμένου.

  • .angle — Προσανατολισμός του Χρωματικού Κώδικα.

  • .originX — X position of the object’s top-left corner.

  • .originY — Y position of the object’s top-left corner.

Κατασκευαστές — Μη αυτόματη αρχικοποίηση και ρύθμιση παραμέτρων των αισθητήρων.

  • Vision — Δημιουργεί έναν αισθητήρα όρασης.

  • Signature — Δημιουργεί μια Χρωματική Υπογραφή.

  • Code — Δημιουργεί έναν Κωδικό Χρώματος.

Αποκτητές#

take_snapshot#

take_snapshot φιλτράρει δεδομένα από το πλαίσιο του αισθητήρα όρασης σε μια μοναδική υπογραφή — μια αποθηκευμένη περιγραφή κάποιου πράγματος που μπορεί να αναγνωρίσει ο αισθητήρας, όπως μια διαμορφωμένη Υπογραφή Χρώματος ή Κώδικα Χρώματος — και επιστρέφει μια πλειάδα.

Οι Υπογραφές Χρώματος και Κωδικοί Χρώματος πρέπει πρώτα να ρυθμιστούν στο Vision Utility πριν μπορέσουν να χρησιμοποιηθούν με αυτήν τη μέθοδο.

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

Usage:
vision_1.take_snapshot(SIGNATURE)

Παράμετροι

Περιγραφή

SIGNATURE

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

  • Υπογραφές Χρώματος ή Κωδικοί Χρώματος - Το όνομα του Αισθητήρα Όρασης, δύο υπογραμμές και, στη συνέχεια, το όνομα της Υπογραφής Χρώματος ή του Κωδικού Χρώματος. Για παράδειγμα: vision_1__RED_BOX.

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

installed#

Η τιμή installed επιστρέφει μια Boolean τιμή που υποδεικνύει εάν ο Αισθητήρας Όρασης είναι συνδεδεμένος αυτήν τη στιγμή με τον Εγκέφαλο IQ (2ης γενιάς).

  • True — Ο αισθητήρας όρασης είναι συνδεδεμένος με τον εγκέφαλο IQ (2ης γενιάς).

  • False — Ο αισθητήρας όρασης δεν είναι συνδεδεμένος με τον εγκέφαλο IQ (2ης γενιάς).

Usage:
vision_1.installed()

Παράμετροι

Περιγραφή

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

# Display a message if the Vision Sensor is connected
if vision_1.installed():
    brain.screen.print("Installed!")

Σκηνικά θέατρου#

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)

Tuple Properties#

Υπάρχουν οκτώ ιδιότητες που περιλαμβάνονται σε κάθε αντικείμενο που αποθηκεύεται σε μια πλειάδα μετά τη χρήση της take_snapshot.

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

.υπάρχει#

.exists επιστρέφει μια Boolean τιμή που υποδεικνύει εάν ο δείκτης υπάρχει στην πλειάδα ή όχι.

  • True — Ο δείκτης υπάρχει.

  • False — Ο δείκτης δεν υπάρχει.

# Check if at least one red objects 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 επιστρέφει το πλάτος του ανιχνευμένου αντικειμένου σε 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 επιστρέφει το ύψος του ανιχνευμένου αντικειμένου σε 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 επιστρέφει τον προσανατολισμό του ανιχνευμένου αντικειμένου σε μοίρες, ο οποίος είναι ένας ακέραιος αριθμός μεταξύ 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 50 < box_code[0].angle < 100:
            drivetrain.turn(RIGHT)
            
        elif 270 < box_code[0].angle < 330:
            drivetrain.turn(LEFT)
        
        else:
            drivetrain.stop()
    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 Sensor#

Vision δημιουργεί έναν Αισθητήρα Όρασης.

Χρήση

Vision(port, brightness, sigs)

Παράμετροι

Περιγραφή

port

Σε ποια έξυπνη θύρα είναι συνδεδεμένος ο αισθητήρας όρασης, από το 1 έως το 12.

brightness

Προαιρετικά. Η τιμή φωτεινότητας για τον αισθητήρα όρασης, από 1 έως 100.

sigs

Προαιρετικό. Το όνομα ενός ή περισσότερων αντικειμένων Υπογραφή χρώματος ή Κωδικός χρώματος.

Παράδειγμα

# Create a new Signature "RED_BOX" with the Signature class
RED_BOX = Signature(1, -3911, -3435, -3673,10879, 11421, 11150,2.5, 0)
# Create a new Vision Sensor "vision_1" with the Vision
# class, with the "RED_BOX" Signature.
vision_1 = Vision(Ports.PORT1, 100, RED_BOX)

# Move forward if a red object is detected
while True:
    red_object = vision_1.take_snapshot(RED_BOX)
    if red_object[0].exists:
        drivetrain.drive_for(FORWARD, 10, MM)
    wait(5, MSEC)

Color Signature#

Signature δημιουργεί μια Χρωματική Υπογραφή. Έως και επτά διαφορετικές Χρωματικές Υπογραφές μπορούν να αποθηκευτούν ταυτόχρονα σε έναν Αισθητήρα Οπτικής.

Χρήση:

Signature(index, uMin, uMax, uMean, vMin, vMax, vMean, rgb, type)

Παράμετρος

Περιγραφή

index

Ο δείκτης του αντικειμένου Signature , από 1 έως 7. Σημείωση: Η δημιουργία δύο αντικειμένων Signature με τον ίδιο αριθμό ευρετηρίου θα έχει ως αποτέλεσμα το δεύτερο αντικείμενο που δημιουργείται να παρακάμψει το πρώτο.

uMin

Η τιμή από uMin στο Vision Utility.

uMax

Η τιμή από uMax στο Vision Utility.

uMean

Η τιμή από uMean στο Vision Utility.

vMin

Η τιμή από vMin στο Vision Utility.

vMax

Η τιμή από vMax στο Vision Utility.

vMean

Η τιμή από vMean στο Vision Utility.

rgb

Η τιμή από rgb στο Vision Utility.

type

Η τιμή από το type στο Vision Utility.

Για να λάβετε τις τιμές για να δημιουργήσετε μια Υπογραφή Χρώματος, μεταβείτε στο Vision Utility. Μόλις ρυθμιστεί μια Υπογραφή Χρώματος, αντιγράψτε τις τιμές των παραμέτρων από το παράθυρο Διαμόρφωσης.

Παράδειγμα

# Create a new Signature RED_BOX with the Signature class
RED_BOX = Signature(1, 10121, 10757, 10439,-1657, -1223, -1440,2.5, 1)
# Create a new Vision Sensor "vision_1" with the Vision
# class, with the RED_BOX Signature.
vision_1 = Vision(Ports.PORT1, 100, RED_BOX)

# Move forward if a red object is detected
while True:
    red_object = vision_1.take_snapshot(RED_BOX)
    if red_object[0].exists:
        drivetrain.drive_for(FORWARD, 10, MM)
    wait(5, MSEC)

Color Code#

Code δημιουργεί έναν Χρωματικό Κώδικα. Απαιτεί τουλάχιστον δύο ήδη καθορισμένες Χρωματικές Υπογραφές για να χρησιμοποιηθεί. Έως και οκτώ διαφορετικοί Χρωματικοί Κώδικες μπορούν να αποθηκευτούν ταυτόχρονα σε έναν Αισθητήρα Οπτικής.

Χρήση:

Code(sig1, sig2, sig3, sig4, sig5)

Παράμετρος

Περιγραφή

sig1

A previously created Color Signature.

sig2

A previously created Color Signature.

sig3

Optional. A previously created Color Signature.

sig4

Optional. A previously created Color Signature.

sig5

Optional. A previously created Color Signature.

Παράδειγμα

# Create two new Signatures for a red and blue box
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 for a red box to the left of a blue box
RED_BLUE = Code(RED_BOX, BLUE_BOX)
# Create a new Vision Sensor "vision_1" with the Vision
# class, with the red_box and blue_box Signatures.
vision_1 = Vision(Ports.PORT1, 100, RED_BOX, BLUE_BOX)

# Display a message if Color Code is detected
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(RED_BLUE)
    if box_code[0].exists:
        brain.screen.print("Color code detected!")
        wait(100, MSEC)