Αυτό το άρθρο θα καλύψει ένα παράδειγμα έργου που εμφανίζει έναν πίνακα ελέγχου που αναφέρει την κατάσταση των επικοινωνιών ρομπότ με ρομπότ χρησιμοποιώντας το VEXlink, καθώς και την κατάσταση με το Jetson. Το έργο ai_demo φιλοξενείται στο Github μας. Αυτό το δοκιμαστικό έργο συλλέγει δεδομένα από τον επεξεργαστή Jetson μέσω σειριακής σύνδεσης USB. Μόλις ληφθούν τα δεδομένα, εμφανίζονται στην οθόνη του V5 Brain και μεταδίδονται επίσης σε ένα συνεργαζόμενο ρομπότ V5 που είναι συνδεδεμένο μέσω VEXlink.
Σημείωση: Αυτό το έργο απαιτεί την τελευταία έκδοση της επέκτασης κώδικα VS για V5. Κατεβάστε την επέκταση κώδικα VS για V5 εδώ.
NVIDIA Jetson Nano σε VEX V5 Brain Communications
Ο επεξεργαστής Jetson περιέχει μια εφαρμογή που συλλέγει τα ακόλουθα δεδομένα από το λογισμικό VEX AI:
Δεδομένα τοποθεσίας ρομπότ:
- Η θέση X,Y του ρομπότ σε μέτρα από το κέντρο του πεδίου.
- Το Αζιμούθιο (Πορεία), το Υψόμετρο (Πίτσμπουργκ), η Περιστροφή (Κύλιση) του ρομπότ, όλα σε ακτίνια.
Δεδομένα ανίχνευσης αντικειμένων (τρεις τύποι):
Ανίχνευση εικόνας (τύπος ένα):
- Αυτά τα δεδομένα αντιπροσωπεύουν ένα αντικείμενο που ανιχνεύθηκε από την κάμερα VEX AI Intel.
- Αυτά τα δεδομένα περιγράφουν το αντικείμενο με αναφορά στην εικόνα της κάμερας.
- Οι τιμές για τα X, Y, το πλάτος και το ύψος είναι σε μονάδες pixel. Οι τιμές των pixel αναφέρονται στην επάνω αριστερή γωνία του πλαισίου ανίχνευσης εικόνας και αντικειμένου. Η ανάλυση εικόνας είναι 640x480.
Ανίχνευση χάρτη (τύπος δύο):
- Αυτά τα δεδομένα αντιπροσωπεύουν τη θέση του αντικειμένου στο πεδίο στο ίδιο σύστημα συντεταγμένων με τον αισθητήρα GPS, και αναφέρονται σε μέτρα.
- Κάθε αντικείμενο περιέχει επίσης τη θέση του σε σχέση με το κέντρο του πεδίου. Οι τιμές για τα X και Y είναι σε μονάδες μέτρων από το κέντρο του πεδίου στον αντίστοιχο άξονά τους. Η τιμή του Z είναι μέτρα από τα πλακίδια του πεδίου (ύψος).
Αντικείμενο ανίχνευσης (τύπος τρία):
- Αυτό περιλαμβάνει όλες τις πληροφορίες σχετικά με τα ανιχνευόμενα αντικείμενα.
- Κάθε αντικείμενο περιέχει μια τιμή που αντιπροσωπεύει την ταξινόμηση του ανιχνευμένου αντικειμένου. (Αναγνωριστικό κλάσης: 0 = GreenTriball, 1 = RedTriBall, 2 = BlueTriBall)
- Κάθε αντικείμενο περιέχει επίσης μια πιθανότητα που αντιπροσωπεύει την εμπιστοσύνη της τεχνητής νοημοσύνης του VEX στην ανίχνευση. Αυτό συμβαίνει μετά από ένα φίλτρο στο model.py που αφαιρεί ανιχνεύσεις χαμηλής πιθανότητας.
- Επιπλέον, το βάθος του αντικειμένου αναφέρεται σε μέτρα από την κάμερα VEX AI Intel.
- Η Ανίχνευση Εικόνας και η Ανίχνευση Χάρτη συνδέονται με κάθε αντικείμενο για να αναπαραστήσουν τις συντεταγμένες του αντικειμένου τόσο στην εικόνα όσο και στον πραγματικό κόσμο.
Μια ανάλυση του προγράμματος ai_demo:
Main.cpp
Το πρότυπο περιλαμβάνει για έργα VEX:
// δημιουργία στιγμιότυπου της κλάσης jetson για λήψη τοποθεσίας και άλλων // δεδομένα από το Jetson nano // ai::jetson jetson_comms;
Δηλώστε μια παρουσία της κλάσης Jetson. Αυτή η κλάση χρησιμοποιείται για την αποστολή αιτημάτων για δεδομένα στο Jetson καθώς και για τη λήψη δεδομένων μέσω της σειριακής σύνδεσης USB.
#ορισμός ΔΙΑΧΕΙΡΙΣΤΗ_ΡΟΜΠΟΤ 1
Δηλώστε μια παρουσία της κλάσης robot_link. Αυτό το αντικείμενο θα χρησιμοποιηθεί για τη σύνδεση και τη μεταφορά δεδομένων μεταξύ αυτού του ρομπότ και ενός συνεργαζόμενου ρομπότ. Το ίδιο έργο μπορεί να ληφθεί σε δύο ξεχωριστά ρομπότ. Ένα ρομπότ θα χρειαστεί να έχει τη γραμμή:
//#ορισμός MANAGER_ROBOT 1Πριν φορτώσετε τον κώδικα στο δεύτερο ρομπότ, θα χρειαστεί να σχολιάσετε αυτήν τη γραμμή:
Η κλάση robot_link ρυθμίζει το VEXlink του ρομπότ και χειρίζεται την αποστολή και λήψη δεδομένων μεταξύ των δύο ρομπότ. Δεν θα επεκταθούμε λεπτομερώς σε αυτό το άρθρο για το πώς λειτουργεί αυτή η κλάση. Θα ήταν καλή ιδέα να κατανοήσετε πρώτα πώς λειτουργεί το VEXlink. Για πιο λεπτομερείς πληροφορίες σχετικά με τη χρήση του V5 VEXlink API, αυτό το έγγραφο εξηγεί τις νέες βιβλιοθήκες και τον τρόπο αποτελεσματικής χρήσης τους για επικοινωνία μεταξύ ρομπότ.
-
Χειριστές αγώνων
Μία από τις μεγαλύτερες διαφορές μεταξύ VAIC και VRC είναι ότι δεν υπάρχει περίοδος ελέγχου οδηγού. Αντίθετα, υπάρχουν δύο αυτόνομες περίοδοι, η περίοδος απομόνωσης και η περίοδος αλληλεπίδρασης. Σε αυτό το παράδειγμα, υπάρχουν ξεχωριστές ρουτίνες για κάθε αυτόνομη περίοδο. Επειδή το VEX API δεν υποστηρίζει δύο διαφορετικές επανακλήσεις, πρέπει να υπάρχει μια σημαία στο πρόγραμμα για να προσδιοριστεί ποια ρουτίνα θα εκτελεστεί. Σε αυτό το παράδειγμα προγράμματος, το "firstAutoFlag" χρησιμοποιείται για την κλήση της συνάρτησης Isolation την πρώτη φορά που ενεργοποιείται η αυτόνομη λειτουργία και της συνάρτησης αλληλεπίδρασης όταν ενεργοποιείται η αυτόνομη λειτουργία για δεύτερη φορά. Κάτι που πρέπει να σημειωθεί είναι ότι εάν για κάποιο λόγο ο αγώνας χρειαστεί να επαναφερθεί, θα πρέπει να γίνει επανεκκίνηση του προγράμματος επίδειξης, ώστε να είναι δυνατή η επαναφορά του firstAutoFlag.
-
Κύριος()
Αυτό είναι το κύριο έργο για αυτό το έργο. Ξεκινά καλώντας την vexcodeInit() για να ρυθμίσει σωστά το περιβάλλον VEXcode. Στη συνέχεια, δηλώνεται ένα τοπικό αντικείμενο AI_RECORD για την αποθήκευση των δεδομένων που λαμβάνουμε από το Jetson. Έχει επίσης οριστεί μια ξεχωριστή εργασία για την ενημέρωση της οθόνης με τα πιο πρόσφατα δεδομένα. Ο κώδικας για αυτήν την εργασία περιέχεται στο αρχείο dashboard.cpp. Η αυτόνομη επανάκληση καταχωρείται επίσης για να χειρίζεται την έναρξη των αυτόνομων περιόδων.
Ο βρόχος main while() ξεκινά αντιγράφοντας τα πιο πρόσφατα δεδομένα από το αντικείμενο jetson_comms στο τοπικό μας αντικείμενο AI_RECORD. Στη συνέχεια, μεταδίδει τις πληροφορίες τοποθεσίας του ρομπότ στο αντικείμενο σύνδεσης, ώστε να μπορούν να μεταδοθούν στο ρομπότ-συνεργάτη μας. Μόλις ολοκληρωθεί η επεξεργασία των δεδομένων, ζητά περισσότερα δεδομένα από το Jetson και κοιμάται για 66 χιλιοστά του δευτερολέπτου. Ο ρυθμός polling για αυτά τα δεδομένα είναι 15Hz. Δεν υπάρχει λόγος για ταχύτερη μέτρηση, καθώς τα δεδομένα του συστήματος τεχνητής νοημοσύνης ενημερώνονται περίπου στα 15Hz.
Σημείωση: Τα δεδομένα χάρτη Jetson χρειάζεται να ζητηθούν μόνο από μία μόνο εργασία.