Πίνακας περιεχομένων:
- Βήμα 1: Προετοιμάστε το υλικό σας
- Βήμα 2: Εγκαταστήστε τα απαραίτητα πακέτα
- Βήμα 3: Εκτελέστε τον κώδικα
- Βήμα 4: Τελικές σκέψεις
Βίντεο: Σεμινάριο εντοπισμού αντικειμένων Robot Jetson Nano Quadruped: 4 βήματα
2024 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2024-01-30 08:35
Το Nvidia Jetson Nano είναι ένα κιτ προγραμματιστή, το οποίο αποτελείται από ένα SoM (System on Module) και έναν πίνακα φορέα αναφοράς. Απευθύνεται κυρίως στη δημιουργία ενσωματωμένων συστημάτων που απαιτούν υψηλή επεξεργαστική ισχύ για μηχανική εκμάθηση, μηχανική όραση και εφαρμογές επεξεργασίας βίντεο. Μπορείτε να παρακολουθήσετε λεπτομερή κριτική για αυτό στο κανάλι μου στο YouTube.
Η Nvidia προσπαθεί να κάνει το Jetson Nano όσο το δυνατόν πιο φιλικό προς το χρήστη και εύκολο στην ανάπτυξη έργων. Ξεκίνησαν ακόμη και μια μικρή πορεία για το πώς να φτιάξετε το ρομπότ σας με τον Jetson Nano, λίγες μέρες μετά την εκκίνηση του πίνακα. Μπορείτε να βρείτε τις λεπτομέρειες σχετικά με αυτό το έργο εδώ.
Ωστόσο, εγώ ο ίδιος είχα μερικά προβλήματα με το Jetbot ως έργο:
1) Δεν ήταν αρκετά EPIC για μένα. Το Jetson Nano είναι ένας πολύ ενδιαφέρων πίνακας με εξαιρετικές δυνατότητες επεξεργασίας και το να φτιάχνει ένα απλό τροχοφόρο ρομπότ με αυτό φαινόταν σαν ένα πολύ … συντριπτικό πράγμα.
2) Η επιλογή υλικού. Το Jetbot απαιτεί κάποιο υλικό που είναι ακριβό/μπορεί να αντικατασταθεί με άλλες εναλλακτικές λύσεις - για παράδειγμα χρησιμοποιούν joystick για τηλελειτουργία. Ακούγεται διασκεδαστικό, αλλά χρειάζομαι πραγματικά ένα joystick για να ελέγξω ένα ρομπότ;
Έτσι, αμέσως μόλις πήρα στα χέρια μου τον Jetson Nano άρχισα να δουλεύω στο δικό μου έργο, ένα Jetspider. Η ιδέα ήταν να αντιγράψουμε τα βασικά demos που είχε το Jetbot, αλλά με πιο κοινό υλικό και εφαρμόσιμο σε μια ευρύτερη ποικιλία έργων.
Βήμα 1: Προετοιμάστε το υλικό σας
Για αυτό το έργο χρησιμοποίησα ένα πρώιμο πρωτότυπο τετράποδου ρομπότ Zuri, κατασκευασμένο από την Zoobotics. Wasταν ξαπλωμένος στο εργαστήριο της εταιρείας μας για πολύ καιρό. Το εξόπλισα με ξύλινη βάση για Jetson Nano κομμένη με λέιζερ και βάση για κάμερα. Ο σχεδιασμός τους είναι ιδιόκτητος, οπότε αν για το ρομπότ σας Jetson Nano θέλετε να δημιουργήσετε κάτι παρόμοιο, μπορείτε να ρίξετε μια ματιά στο έργο Meped, το οποίο είναι παρόμοιο τετράποδο με σχέδιο ανοιχτού κώδικα. Στην πραγματικότητα, δεδομένου ότι κανείς δεν είχε τον πηγαίο κώδικα για τον μικροελεγκτή του Zuri (Arduino Mega) στο εργαστήριό μας, χρησιμοποίησα τον κώδικα από το Meped με μερικές μικρές προσαρμογές στα offset των ποδιών/ποδιών.
Χρησιμοποίησα κανονική συμβατή με web Raspberry Pi κάμερα web και ένα wifi USB dongle.
Το κύριο σημείο είναι ότι δεδομένου ότι πρόκειται να χρησιμοποιήσουμε το Pyserial για σειριακή επικοινωνία μεταξύ μικροελεγκτή και Jetson Nano, το σύστημά σας μπορεί ουσιαστικά να χρησιμοποιεί οποιοδήποτε τύπο μικροελεγκτή, αρκεί να μπορεί να διασυνδεθεί με το Jetson Nano με σειριακό καλώδιο USB. Εάν το ρομπότ σας χρησιμοποιεί κινητήρες συνεχούς ρεύματος και πρόγραμμα οδήγησης κινητήρα (για παράδειγμα με βάση το L298P), είναι δυνατή η άμεση διασύνδεση του προγράμματος οδήγησης κινητήρα με το Jetson Nano GPIO. Αλλά, δυστυχώς, για τον έλεγχο των servos μπορείτε να χρησιμοποιήσετε μόνο έναν άλλο μικροελεγκτή ή ένα ειδικό σερβο πρόγραμμα οδήγησης I2C, καθώς ο Jetson Nano δεν διαθέτει υλικό GPIO PWM.
Συνοψίζοντας, μπορείτε να χρησιμοποιήσετε τύπο ρομπότ με οποιονδήποτε μικροελεγκτή που μπορεί να συνδεθεί με το Jetson Nano χρησιμοποιώντας καλώδιο δεδομένων USB. Ανέβασα τον κώδικα για το Arduino Mega στο αποθετήριο github για αυτό το σεμινάριο και το μέρος που σχετίζεται με τη διασύνδεση του Jetson Nano με το Arduino είναι εδώ:
if (Serial.available ()) {switch (Serial.read ()) {
{
περίπτωση «1»:
προς τα εμπρός();
Διακοπή;
περίπτωση «2»:
πίσω();
Διακοπή;
περίπτωση «3»:
στρίψτε δεξιά();
Διακοπή;
θήκη «4»:
στρίψτε αριστερά();
Διακοπή;
Ελέγχουμε αν υπάρχουν διαθέσιμα δεδομένα και αν είναι, τα περνάμε στη δομή ελέγχου διακόπτη. Δώστε προσοχή, ότι τα δεδομένα από τη σειρά προέρχονται ως χαρακτήρες, προσέξτε το ενιαίο εισαγωγικό γύρω από τους αριθμούς 1, 2, 3, 4.
Βήμα 2: Εγκαταστήστε τα απαραίτητα πακέτα
Ευτυχώς για εμάς, η προεπιλεγμένη εικόνα συστήματος Jetson Nano έρχεται με πολλά πράγματα προεγκατεστημένα (όπως OpenCV, TensorRT, κλπ), οπότε χρειάζεται μόνο να εγκαταστήσουμε μερικά άλλα πακέτα για να λειτουργήσει ο κώδικας και να ενεργοποιηθεί το SSH.
Ας ξεκινήσουμε ενεργοποιώντας το SSH σε περίπτωση που θέλετε να κάνετε όλη την υπόλοιπη εργασία από απόσταση.
sudo apt ενημέρωση
sudo apt install opensh-server
Ο διακομιστής SSH θα ξεκινήσει αυτόματα.
Για να συνδεθείτε στο μηχάνημά σας Ubuntu μέσω LAN, πρέπει μόνο να εισαγάγετε την ακόλουθη εντολή:
ssh όνομα χρήστη@ip_address
Εάν διαθέτετε μηχανή Windows, θα χρειαστεί να εγκαταστήσετε πρόγραμμα -πελάτη SSH, για παράδειγμα Putty.
Ας ξεκινήσουμε εγκαθιστώντας Python Package Manager (pip) και Pillow για χειρισμό εικόνας.
sudo apt εγκατάσταση python3-pip python3-pil
Στη συνέχεια, θα εγκαταστήσουμε το αποθετήριο Jetbot, αφού βασίζουμε σε ορισμένα μέρη του πλαισίου του για την εκτέλεση εντοπισμού αντικειμένων.
sudo apt install python3-smbus python-pyserial
git clone
cd jetbot
sudo apt-get install cmake
sudo python3 setup.py install
Τέλος, κλωνοποιήστε το αποθετήριο Github μου για αυτό το έργο στον αρχικό σας φάκελο και εγκαταστήστε το Flask και μερικά άλλα πακέτα για το τηλεχειριστήριο του ρομπότ χρησιμοποιώντας διακομιστή ιστού.
git clone
CD
sudo pip3 install -r απαιτήσεις -opencv
Κατεβάστε το προπονημένο μοντέλο SSD (Single Shot Detector) από αυτόν τον σύνδεσμο και τοποθετήστε το στο φάκελο jetspider_demos.
Τώρα είμαστε καλά να πάμε!
Βήμα 3: Εκτελέστε τον κώδικα
Έκανα δύο demo για το Jetspider, το πρώτο είναι μια απλή τηλεεργασία, πολύ παρόμοια με αυτή που έκανα νωρίτερα για το Banana Pi rover και το δεύτερο χρησιμοποιεί TensorRT για ανίχνευση αντικειμένων και στέλνει τις εντολές κίνησης μέσω της σειριακής σύνδεσης στον μικροελεγκτή Το
Δεδομένου ότι το μεγαλύτερο μέρος του κώδικα τηλεεργασίας περιγράφεται στο άλλο μου σεμινάριο (έκανα μόνο μερικές μικροπροσαρμογές, σε σχέση με τη μετάδοση βίντεο) εδώ θα επικεντρωθώ στο μέρος Ανίχνευση αντικειμένων.
Το κύριο σενάριο για το αντικείμενο που ακολουθεί είναι το object_following.py στο jetspider_object_following, γιατί η τηλεεπεξεργασία είναι spider_teleop.py στο jetspider_teleoperation.
Το αντικείμενο που ακολουθεί το σενάριο ξεκινά με την εισαγωγή των απαραίτητων μονάδων και τη δήλωση μεταβλητών και στιγμιότυπων κλάσης. Στη συνέχεια, ξεκινάμε τον διακομιστή ιστού Flask με αυτήν τη γραμμή
app.run (host = '0.0.0.0', threaded = True)
Μόλις ανοίξουμε τη διεύθυνση 0.0.0.0 (localhost) στο πρόγραμμα περιήγησής μας ή τη διεύθυνση Jetson Nano στο δίκτυο (μπορεί να ελεγχθεί με την εντολή ifconfig), αυτή η λειτουργία θα εκτελεστεί
def index ():
Αποδίδει το πρότυπο της ιστοσελίδας που έχουμε στο φάκελο προτύπων. Το πρότυπο έχει ενσωματωμένη πηγή βίντεο, οπότε μόλις ολοκληρωθεί η φόρτωση, θα εκτελεστεί def video_feed (): θα επιστρέψει ένα αντικείμενο απόκρισης που έχει αρχικοποιηθεί με τη λειτουργία γεννήτριας.
Το μυστικό για την εφαρμογή επιτόπιας ενημέρωσης (ενημέρωση εικόνας στην ιστοσελίδα για τη ροή βίντεο μας) είναι η χρήση μιας απόκρισης πολλών μερών. Οι απαντήσεις πολλών μερών αποτελούνται από μια κεφαλίδα που περιλαμβάνει έναν από τους τύπους περιεχομένου πολλαπλών μερών, ακολουθούμενο από τα μέρη, χωρισμένα από έναν δείκτη ορίων και το καθένα έχει τον δικό του τύπο συγκεκριμένου τύπου περιεχομένου.
Στη συνάρτηση def gen (): υλοποιούμε τη συνάρτηση γεννήτριας σε έναν άπειρο βρόχο που καταγράφει την εικόνα, την στέλνει στη λειτουργία def execute (img):, αποδίδοντας μια εικόνα που αποστέλλεται στην ιστοσελίδα μετά από αυτό.
def execute (img): η συνάρτηση είναι όπου συμβαίνουν όλα τα μαγικά, παίρνει μια εικόνα, αλλάζει το μέγεθος της με το OpenCV και τη μεταφέρει στο παράδειγμα μοντέλου κλάσης Jetbot ObjectDetector. Επιστρέφει επιστρέφει τη λίστα ανιχνεύσεων και χρησιμοποιούμε το OpenCV για να σχεδιάσουμε μπλε ορθογώνια γύρω τους και να γράψουμε σχολιασμούς με κλάση ανιχνευμένου αντικειμένου. Μετά από αυτό, ελέγχουμε αν υπάρχει κάποιο αντικείμενο που μας ενδιαφέρει
Μπορείτε να αλλάξετε αυτόν τον αριθμό (53) σε άλλο αριθμό από το σύνολο δεδομένων CoCo εάν θέλετε το ρομπότ σας να ακολουθεί άλλα αντικείμενα, το 53 είναι μήλο. Ολόκληρη η λίστα βρίσκεται σε αρχείο categories.py.
Τέλος, εάν δεν εντοπιστεί κανένα αντικείμενο για 5 δευτερόλεπτα, μεταδίδουμε τον χαρακτήρα "5" για να σταματήσει το ρομπότ πάνω από το σειριακό. Αν βρεθεί αντικείμενο υπολογίζουμε πόσο απέχει από το κέντρο της εικόνας και ενεργούμε ανάλογα (αν είναι κοντά στο κέντρο, πηγαίνετε ευθεία (χαρακτήρας "1" στο σειριακό), αν στα αριστερά, πηγαίνετε αριστερά κλπ). Μπορείτε να παίξετε με αυτές τις τιμές για να καθορίσετε το καλύτερο για τη δική σας ρύθμιση!
Βήμα 4: Τελικές σκέψεις
Αυτή είναι η ουσία της επίδειξης του ObjectFollowing, αν θέλετε να μάθετε περισσότερα για το Flask webserver Video streaming, μπορείτε να ρίξετε μια ματιά σε αυτό το υπέροχο σεμινάριο του Miguel Grinberg.
Μπορείτε επίσης να ρίξετε μια ματιά στο σημειωματάριο Nvidia Jetbot Object Detection εδώ.
Ελπίζω ότι οι εφαρμογές μου των demos του Jetbot θα βοηθήσουν στην κατασκευή του ρομπότ σας χρησιμοποιώντας το πλαίσιο Jetbot. Δεν εφάρμοσα επίδειξη αποφυγής εμποδίων, καθώς πιστεύω ότι η επιλογή του μοντέλου δεν θα αποφέρει καλά αποτελέσματα αποφυγής εμποδίων.
Προσθέστε με στο LinkedId αν έχετε απορίες και εγγραφείτε στο κανάλι μου στο YouTube για να λαμβάνετε ειδοποιήσεις για πιο ενδιαφέροντα έργα που αφορούν μηχανική εκμάθηση και ρομποτική.
Συνιστάται:
Πώς να αποκτήσετε έναν ΜΥΣΤΙΚΟ ΚΟΣΜΟ !!!!!! (Λειτουργία εντοπισμού σφαλμάτων): 3 βήματα
Πώς να αποκτήσετε έναν ΜΥΣΤΙΚΟ ΚΟΣΜΟ !!!!!! (Λειτουργία εντοπισμού σφαλμάτων): Σε αυτό το διδακτικό, θα σας δείξω να φτάσετε σε μια λειτουργία μυστικού κόσμου στο Minecraft
Πώς να χρησιμοποιήσετε ένα πρόγραμμα εντοπισμού σφαλμάτων σε ένα ESP32: 11 βήματα (με εικόνες)
Πώς να χρησιμοποιήσετε ένα πρόγραμμα εντοπισμού σφαλμάτων σε ένα ESP32: Θέλατε ποτέ να ρίξετε μια ματιά στον κώδικά σας για να δείτε γιατί συμπεριφέρεται όπως είναι; Παραδοσιακά σε έργα ESP32, θα έπρεπε να προσθέσετε ατελείωτη δήλωση εκτύπωσης για να καταλάβετε τι συνέβαινε, αλλά υπάρχει καλύτερος τρόπος! Ένας εντοπιστής σφαλμάτων
(EX) Ραντάρ εντοπισμού εχθρού Arduino: 3 βήματα
(EX) Arduino Enemy-Detecting Radar: Σε αυτό το έργο, θα σας δείξω πώς να φτιάξετε ένα ραντάρ ανίχνευσης εχθρού για να αποκρούσετε τη βάση του σπιτιού σας. Η διαδικασία είναι πολύ απλή, απλώς ακολουθήστε το βήμα μου και ο γείτονάς σας δεν θα σας κλέψει ποτέ ξανά τα φρούτα μόλις εγκαταστήσετε αυτήν τη συσκευή! Αυτό το έργο προέλευσης
Φτερό εντοπισμού UWB: 6 βήματα
UWB Localization Feather: Το Ultra-WideBand Feather ενσωματώνει τη μονάδα Decawave DWM1000 και ένα ATSAMD21 ARM Cortex M0 στον παράγοντα μορφής του φτερού Adafruit. Η μονάδα DWM1000 είναι μια ασύρματη μονάδα συμβατή με IEEE802.15.4-2011 UWB ικανή για ακριβή τοποθέτηση εσωτερικών χώρων
Πώς να ρυθμίσετε ένα πρόγραμμα εντοπισμού σφαλμάτων πυρήνα των Windows μέσω του δικτύου σας: 6 βήματα
Τρόπος ρύθμισης εντοπισμού σφαλμάτων πυρήνα των Windows μέσω του δικτύου σας: Η εντοπισμός σφαλμάτων είναι ένα δημοφιλές εργαλείο που χρησιμοποιείται για να εντοπίσει τη βασική αιτία ενός σφάλματος. Ένα σφάλμα μπορεί να εκδηλωθεί με πολλούς διαφορετικούς τρόπους. μπορεί να προκαλέσει συντριβή συστήματος (μπλε οθόνη/BSOD), μπορεί να προκαλέσει συντριβή εφαρμογής, μπορεί να προκαλέσει πάγωμα του συστήματός σας για να ονομάσει ένα fe