Ένα μικρό αυτοκίνητο που μας τράβηξε την προσοχή είναι αυτό που φαίνεται στην επόμενη εικόνα-βίντεο.
Είναι δουλειά της Zheng Wang από το Πολιτειακό Πανεπιστήμιο Μπριτζγουότερ έχει χρησιμοποιήσει ένα Raspberry Pi και μια πλακέτα με arduino για να υποστηρίξει ένα αισθητήρα υπερήχων και να ελέγχει ένα τηλεκατευθυνόμενο (RC) αυτοκίνητο για να ακολουθήσει μια διαδρομή, στην οποία μπορεί να ανιχνεύει, να κατανοεί και να σταματά σε πινακίδες STOP, φανάρια, και να αποφεύγει και τις συγκρούσεις. Έτσι, τι συμβαίνει εδώ; Το Pi είναι συνδεδεμένο με μια μονάδα κάμερας Raspberry Pi και έναν αισθητήρα υπερήχων. Τα δύο προγράμματα-πελάτες στο Pi που χρησιμοποιούνται για να εξυπηρετήσει τις πληροφορίες που συγκεντρώνει από αυτές τις συσκευές σε έναν άλλο σταθερό υπολογιστή μέσω WiFi, και με streaming video. Ο ελεγκτής RC για το αυτοκίνητο έχει προγραμματιστεί από έναν Arduino που είναι συνδεδεμένος μέσω USB. με τον υπολογιστή για να κάνει την επεξεργασία.
Η Zheng δείνει μια πολύ λεπτομερή αναφορά και με μαθηματικό υπόβαθρο, και παρέχει και μια ματιά στο νευρωνικό δίκτυο με το μηχάνημα που κάνει την επεξεργασία.
Το Link με την επίσημη ιστοσελίδα του για να ρίξετε μια ματιά - είναι ένα συναρπαστικό ανάγνωσμα. είναι εδώ
Σκοπός
Τροποποιήση ενός αυτοκινήτου RC για να χειριστεί τρεις εργασίες: α)αυτο-οδήγηση στην πίστα, β)να σταματήσει σε πινακίδα και την ανίχνευση σε φανάρι, και γ)να αποφύγει τη σύγκρουση.
Σχεδιασμός συστήματος
Το σύστημα αποτελείται από τρία υποσυστήματα: μονάδα εισόδου (κάμερα πάνω στο pi, αισθητήρα υπερήχων), μονάδα επεξεργασίας (ηλεκτρονικός υπολογιστής) και τη μονάδα ελέγχου RC του αυτοκίνητου.
Μονάδα εισόδου
Μία πλακέτα Raspberry Pi (μοντέλο Β +), συνδέεται με μια μονάδα κάμερας pi και έναν αισθητήρα υπερήχων HC-SR04 χρησιμοποιείται για τη συλλογή των δεδομένων εισόδου. Δύο προγράμματα client τρέχει στο Raspberry Pi το ένα για streaming έγχρωμου βίντεο και στοιχεία του αισθητήρα υπερήχων με τον υπολογιστή μέσω τοπικής σύνδεσης Wi-Fi. Για να επιτευχθεί χαμηλό latency video streaming, το βίντεο κλιμακώνεται προς τα κάτω με χαμηλή ανάλυση σε QVGA (320 × 240).
Μονάδα επεξεργασίας
Η μονάδα επεξεργασίας (υπολογιστής PC) χειρίζεται πολλαπλές εργασίες: λαμβάνει δεδομένα από το Raspberry Pi, του νευρικού δικτύου κατάρτισης και πρόβλεψη (σύστημα διεύθυνσης), ανίχνευση αντικειμένου (σήμα στοπ και το φανάρι), μέτρηση απόστασης (με μονόφθαλμη όραση), και στέλνει οδηγίες στην πλακέτα του Arduino μέσω σύνδεσης USB.
TCP διακομιστής
Ένα πολυνηματικό πρόγραμμα διακομιστή TCP τρέχει στον υπολογιστή για να λαμβάνετε σε συνεχή ροή καρέ καρέ εικόνα και πληροφορίες από τους υπερήχους από το Raspberry Pi. Τα πλαίασια της εικόνας μετατρέπεται σε κλίμακα του γκρι και αποκωδικοποιούνται σε NumPy πίνακες.
Νευρονικό σύστημα
Ένα πλεονέκτημα της χρήσης του νευρωνικού δικτύου είναι ότι μόλις το δίκτυο εκπαιδευτεί, χρειάζεται μόνο να φορτώσει τους εκπαιδευμένους παραμέτρους, έτσι μετά η πρόβλεψη μπορεί να είναι πολύ πιο γρήγορη. Μόνο στο κάτω μισό της εικόνας εισόδου χρησιμοποιείται στις αναλύσεις για εκπαιδευτικούς σκοπούς και πρόβλεψη. Υπάρχουν 38400 (320 × 120) κόμβοι στο στρώμα εισόδου και 32 κόμβους στο κρυφό στρώμα(Hidden Layer) όπως φαίνεται στην επόμενη εικόνα.
Ο αριθμός των κόμβων στο κρυφό στρώμα επιλέγεται αρκετά αυθαίρετα. Υπάρχουν τέσσερις κόμβοι στο στρώμα εξόδου, όπου κάθε κόμβος αντιστοιχεί με τις οδηγίες ελέγχου του συστήματος διεύθυνσης: αριστερά, δεξιά, εμπρός και πίσω αντίστοιχα (αν και το αντίστροφο(Reverse) δεν χρησιμοποιείται πουθενά σε αυτό το έργο, όμως περιλαμβάνεται στο στρώμα εξόδου).
Παρακάτω δείχνει τη διαδικασία συλλογής δεδομένων εκπαίδευσης. Πρώτα κάθε πλαίσιο εικόνας περικόπτεται και μετατρέπεται σε ένα NumPy πίνακα. Στη συνέχεια, η εικόνα του τρένου είναι σε συνδυασμό με την ετικέτα του τρένου (ανθρώπινη εισόδου). Τέλος, όλα τα ζεύγη δεδομένων εικόνας και ετικετών αποθηκεύονται σε ένα αρχείο τύπου .npz. Το νευρωνικό δίκτυο εκπαιδεύεται μέσα στο OpenCV χρησιμοποιώντας τη μέθοδο back propagation. Μόλις η εκπαίδευση τελειώσει, τα βάρη αποθηκεύονται σε ένα αρχείο xml. Για να δημιουργήσετε τις προβλέψεις, το ίδιο νευρωνικό δίκτυο κατασκευάζεται και φορτώνεται σε ένα εκπαιδευμένο αρχείο xml.
Ανίχνευση αντικειμένου
Αυτό το έργο προσάρμοσε την προσέγγιση σχήματος και χρησιμοποιούνται Haar χαρακτηριστικά που βασίζονται σε αλληλουχία ταξινομητές για την ανίχνευση αντικειμένων. Δεδομένου ότι κάθε αντικείμενο απαιτεί το δικό του ταξινομητή ακολουθεί την ίδια διαδικασία με την εκπαίδευση και την ανίχνευση, το έργο όμως αυτό επικεντρώνεται μόνο στο σήμα στοπ και στην την ανίχνευση του χρώματος στο φανάρι.
Το OpenCV παρέχει έναν εκπαιδευτή καθώς και τον ανιχνευτή. Τα θετικά δείγματα (περιέχουν το αντικείμενο-στόχο) αποκτήθηκαν χρησιμοποιώντας ένα κινητό τηλέφωνο, και είχαν περικοπεί στα όρια ορατότητας του επιθυμητού αντικειμένου. Τα αρνητικά δείγματα (χωρίς αντικείμενο-στόχο), από την άλλη πλευρά, συλλέχθηκαν τυχαία. Ειδικότερα, στο φανάρι τα θετικά δείγματα περιέχουν ίσο αριθμό στο κόκκινο φανάρι και στο πράσινο φανάρι. Το ίδιο αρνητικό σύνολο δεδομένων του δείγματος χρησιμοποιήθηκε τόσο για σήμα στοπ και το φανάρι της κατάρτισης. Παρακάτω δείχνει κάποια θετικά και αρνητικά δείγματα που χρησιμοποιούνται σε αυτό το έργο.
Για να αναγνωρίζουν τις διαφορετικές καταστάσεις του φωτεινού σηματοδότη (κόκκινο, πράσινο), απαιτείται κάποια επεξεργασία εικόνας πέρα από την ανίχνευση. παρακάτω φαίνεται ένα διάγραμμα ροής που συνοψίζει τη διαδικασία αναγνώρισης του χρώματος φαναριού.
Πρώτον, η εκπαιδευμένη αλληλουχία ταξινομητών χρησιμοποιείται για την ανίχνευση του φαναριού. Το πλαίσιο οριοθέτησης θεωρείται ως περιοχή ενδιαφέροντος (ROI). Δεύτερον, Gaussian θαμπάδα εφαρμόζεται στο εσωτερικό του ROI για τη μείωση των θορύβων. Τρίτον, να βρείτε το πιο φωτεινό σημείο στον ROI. Τέλος, το κόκκινο ή το πράσινο καθορίζεται απλώς με βάση τη θέση του πιο φωτεινού σημείου στον ROI.
Μέτρηση απόστασης
Το Raspberry Pi μπορεί να υποστηρίξει μόνο μια μονάδα κάμερας. Χρησιμοποιώντας δύο κάμερες USB θα φέρει επιπλέον βάρος στο αυτοκίνητο RC και επίσης φαίνεται και ανέφικτο σαν λύση. Ως εκ τούτου, επιλέγεται η μέθοδος της μονόφθαλμης όρασης.
Το έργο αυτό προσαρμόζεται ένα μοντέλο γεωμετρικής ανίχνευσης απόστασης από ένα αντικείμενο χρησιμοποιώντας τη μονόφθαλμης μέθοδο ή όραμα που προτείνουν οι Chu, Ji, Guo, Li και Wang (2004).
To Ρ είναι ένα σημείο του αντικειμένου-στόχος, d είναι η απόσταση από το οπτικό κέντρο στο σημείο P. Με βάση τη σχέση γεωμετρίας ανωτέρω, τύπου (1) δείχνει πώς να υπολογίσει την απόσταση d. Στον τύπο (1), f είναι η εστιακή απόσταση της κάμερας, α είναι η γωνία κλίσης της κάμερας, h είναι οπτικά το ύψος της κάμερας και το κέντρο (X0, y0) αναφέρεται στο σημείο τομής του επιπέδου της εικόνας και του οπτικού άξονα (X, y) αναφέρεται σε προβολή του σημείου Ρ επί του επιπέδου της εικόνας. Ας υποθέσουμε O1 (u0, v0) είναι οι συντεταγμένες στη κάμερα του σημείου τομής του οπτικού άξονα και επιπέδου εικόνας, ας υποθέσουμε επίσης η φυσική διάσταση ενός pixel που αντιστοιχεί στο άξονα χ και y-άξονα στο επίπεδο εικόνας είναι dx και dy. Έπειτα:
ν είναι οι συντεταγμένες στη κάμερα στον άξονα-Υ και μπορούν να επιστραφούν από τη διαδικασία ανίχνευσης αντικειμένου. Όλες οι άλλες παράμετροι είναι εγγενείς παράμετροι της κάμερας που μπορούν να ανακτηθούν από την μήτρα της κάμερας.
Το OpenCV παρέχει λειτουργίες για τη βαθμονόμηση της κάμερας. H μήτρα της κάμερας για την κάμερα των 5MP του raspberry pi επιστρέφεται μετά τη βαθμονόμηση. Στην ιδανική περίπτωση, τα a_x και a_y έχουν την ίδια αξία. Διακύμανση αυτών των δύο τιμών θα οδηγήσει σε μη τετράγωνα εικονοστοιχεία στην εικόνα. Ο πίνακας παρακάτω δείχνει ότι το σταθερό εστιακό μήκος του φακού στην κάμερα pi παρέχει ένα αρκετά καλό αποτέλεσμα στο χειρισμό πτυχή παραμόρφωση. Εδώ είναι ένα ενδιαφέρον άρθρο που συζητά το εστιακό μήκος της κάμερας pi με το φακό των αποθεμάτων και το ισοδύναμό του στην κάμερα 35 χιλιοστών.
Η μήτρα επιστρέφει τιμές σε εικονοστοιχεία και h μετριέται σε εκατοστά. Εφαρμόζοντας τον τύπο (3), η φυσική απόσταση d υπολογίζεται σε εκατοστά.
Μονάδα RC Έλεγχος Αυτοκινήτων
Το αυτοκίνητο RC που χρησιμοποιείται σε αυτό το έργο έχει on / off χειριστήριο τύπου διακόπτη. Όταν πατηθεί ένα πλήκτρο, η αντίσταση μεταξύ του σχετικού ακροδέκτη στο ολοκληρωμένο και τη γη είναι μηδέν. Έτσι, μια πλακέτα Arduino χρησιμοποιείται για να προσομοιώσει τις ενέργειες κουμπί-press. Οι τέσσερις ακίδες του Arduino επιλέγονται να συνδέσουν τέσσερις ακροδέκτες του ολοκληρωμένου στον ελεγκτή, που αντιστοιχούν στο εμπρός, πίσω, αριστερά και δεξιά ενέργειες αντίστοιχα. Οι Arduino ακροδέκτες στέλνουν χαμηλό σήμα που υποδεικνύει τη γείωση των ακροδεκτών του ολοκληρωμένου του ελεγκτή. Από την άλλη μεριά αποστέλεται υψηλό HIGH σήμα που υποδεικνύει ότι η αντίσταση μεταξύ των ακίδων του ολοκληρωμένου και της γείωσης παραμένει αμετάβλητη. Το Arduino είναι συνδεδεμένο με τον υπολογιστή μέσω USB. Οι έξοδοι του υπολογιστή εντολές για τον Arduino χρησιμοποιεί σειριακή διασύνδεση, και στη συνέχεια το Arduino διαβάζει τις εντολές από τα κουμπιά και στέλνει χαμηλά ή υψηλή σήματα, προσομοιώνοντας τις δράσεις των κουμπιών-press για να οδηγήσει το αυτοκίνητο RC.
Αποτελέσματα
Πρόβλεψη για τα δείγματα δοκιμής επιστρέφουν ακρίβεια 85% σε σχέση με την ακρίβεια του 96% από τις αποδόσεις που επιστρέφουν τα δείγματα εκπαίδευσης. Στην πραγματική οδηγική κατάσταση, οι προβλέψεις δημιουργούνται περίπου 10 φορές το δευτερόλεπτο (ροή εικόνας με ποσοστό περίπου 10 καρέ / s).
Τα Haar χαρακτηριστικά από τη φύση τους είναι ευαίσθητα στη περιστροφή. Σε αυτό το έργο, ωστόσο, η περιστροφή δεν είναι μια ανησυχία, όπως και το σήμα στοπ και το φανάρι είναι σταθερά αντικείμενα, τα οποία είναι επίσης μια γενική περίπτωση σε πραγματικό περιβάλλον.
Για το θέμα μέτρηση απόστασης, ο αισθητήρας υπερήχων χρησιμοποιείται μόνο για να καθορίσει την απόσταση από ένα εμπόδιο μπροστά από το αυτοκίνητο RC και παρέχει ακριβή αποτελέσματα κατά τη λήψη για σωστή γωνία ανίχνευσης και την κατάσταση της επιφάνειας με εκτιμήσεις. Από την άλλη πλευρά, Pi κάμερα παρέχει "αρκετά καλά" αποτελέσματα της μέτρησης. Στην πραγματικότητα, εφ 'όσον γνωρίζουμε τον αντίστοιχο αριθμό με την πραγματική απόσταση, ξέρουμε πότε να σταματήσει το αυτοκίνητο RC. Τα πειραματικά αποτελέσματα της ανίχνευσης εξ αποστάσεως με τη χρήση της κάμερας pi όπως φαίνεται παρακάτω:
Σε αυτό το έργο, η ακρίβεια της μέτρησης απόστασης με χρήση όραμα της μονόφθαλμης προσέγγισης θα μπορούσε να επηρεάζεται από τους εξής παράγοντες: (1) λάθη σε πραγματικές τιμές μέτρησης, (2) παραλλαγές στο κουτί οριοθέτησης του αντικειμένου στη διαδικασία ανίχνευσης, (3) λάθη στη διαδικασία βαθμονόμησης της κάμερας, (4) μη γραμμική σχέση μεταξύ απόστασης και συντεταγμένων κάμερας: όσο μεγαλύτερη είναι η απόσταση, τόσο πιο ταχεία είναι αλλαγή των συντεταγμένων της κάμερας, έτσι τόσο μεγαλύτερη είναι και το λάθος.
Συνολικά, το αυτοκίνητο RC μπορεί να πλοηγηθεί με επιτυχία στην πίστα με τη δυνατότητα να αποφύγει μετωπική σύγκρουση και να σταματήσει σε STOP ή σε φανάρι κυκλοφορίας ανάλογα.
Τα αρχεία που χρησιμοποιεί σε python είναι στο κάτωθι λινκ
https://github.com/hamuchiwa/AutoRCCar
χωρίς να δίνονται οδηγίες για την εγκατάσταση των αρχείων στο raspberry ή στο PC
Η όλη λειτουργία του arduino και της σύνδεσης με το PC έχουν ληφθεί υπόψιν από το επόμενο άρθρο http://thelivingpearl.com/2013/01/04/drive-a-lamborghini-with-your-keyboard/
Όποιος θελήσει να το φτιάξει ας αφήσει τα σχόλια του