Περιγραφή
Θέλοντας να βοηθήσουμε στο πρόβλημα ταΐσματος των κατοικίδιων ζώων η ομάδα μας κατασκέυασε μια αυτόματη ταΐστρα. Ψάχνοντας στο διαδίκτυο είδαμε ότι αν και υπάρχουν αρκετές αυτόματες ταΐστρες, οι περισσότερες δεν αφορούν παραπάνω από ένα ζώο ή δεν έχουν δυνατότητα να βγάζουν διαφορετικές τροφές. Επειδή οι σκύλοι έχουν διαφορετικές διατροφικές ανάγκες σε σχέση με τις γάτες σκεφτήκαμε να φτιάξουμε μια ταΐστρα η οποία μέσω Τεχνητής Νοημοσύνης να μπορεί να ξεχωρίσει τι είδους ζώο υπάρχει εκείνη τη στιγμή στο χώρο και να προσφέρει το κατάλληλο είδος τροφής.
Αποτελείται από δύο δοχεία αποθήκευσης της ξηράς τροφής, ένα το οποίο περιέχει κατάλληλη τροφή για γάτες και ένα για σκύλους. Ανάλογα με το είδος του ζώου που έχει πλησιάσει, ενεργοποιείται και διαφορετικός κινητήρας και ελευθερώνεται τροφή από διαφορετικό δοχείο ώστε να καταλήξει στο μπολ. Η ανίχνευση της κίνησης γίνεται μέσω της κάμερας και όταν περάσει κάτι μπροστά από την ταΐστρα και γίνει ανίχνευση κίνησης, η εικόνα αυτή τροφοδοτείται σε μοντέλο μηχανικής μάθησης αναγνώρισης εικόνας. Ανάλογα με το αποτέλεσμα (γάτα/σκύλος/υπόβαθρο) ενεργοποιείται και ο αντίστοιχος κινητήρας.
Υλοποίηση
Σχεδίαση – Κατασκευή
Η τελική ιδέα, και αυτή η οποία χρησιμοποιήσαμε για την κατασκευή, είναι ένας μηχανισμός με κοχλία για την απελευθέρωση της τροφής. Κάναμε δοκιμές με διαφορετικούς μηχανισμούς και κινητήρες αλλά σχεδόν σε όλες τις προσπάθειές εμφανίστηκε πρόβλημα με την απελευθέρωση της τροφής. Στο κάτω μέρος του κουτιού αποθήκευσης (μπλε) υπάρχει ένας κοχλίας (κίτρινο) o οποίος περιστρέφεται με τη βοήθεια του servo κινητήρα mg996r (μαύρο). Ο κινητήρας σε αυτή την κατασκευή μπορεί να κινηθεί με μεγαλύτερη ευκολία συγκριτικά με τον βηματικό κινητήρα τον οποίο θέλαμε να χρησιμοποιήσουμε αρχικά.
Με τη βοήθεια του προγράμματος Fusion 360 σχεδιάσαμε δύο δοχεία στο κάτω μέρος των οποίων βρίσκονται οι κοχλίες. Μια κάμερα βρίσκεται στο μπροστινό μέρος της κατασκευής. Στο πίσω μέρος των δοχείων υπάρχουν οι κινητήρες. Η κάμερα και το Raspberry βιδώνονται πάνω στα δύο δοχεία με τέτοιο τρόπο ώστε να μπορούν να συγκρατηθούν μεταξύ τους τα δύο δοχεία. Επίσης κατασκευάστηκαν δύο ακόμα κομμάτια τα οποία βοηθούν στην στήριξη των κοχλιών(άσπρο). Τα παραπάνω εκτυπωθηκαν στον τρισδιάστατο εκτυπωτή του εργαστηρίου και στη συνέχεια συναρμολογήθηκαν. Για μεγαλύτερη ευκολία κατα την εκτύπωση σχεδιάσαμε επίσης τέσσερα ποδαράκια(πράσινο) στα οποια στηρίζεται η κατασκευη και τα οποία αλλάζουν πολύ εύκολα μέγεθος ώστε να αλλάξει και το ύψος από το οποίο ελευθερώνεται η τροφή.
Προγραμματισμός
Το κυρίως πρόγραμμα αποτελείται από τρια μέρη:
- Αλγόριθμος ανίχνευσης κίνησης
- Πρόβλεψη μέσω του μοντέλου μηχανικής μάθησης
- Προγραμματισμός κινησης σερβοκινητήρων
AI Μοντέλο
Η βασική ιδέα της κατασκευής μας είναι η απελευθερωση τροφής αναλογα με το είδος του ζώου που βρίσκεται μπροστά της. Για το λόγο αυτό έπρεπε να εκπαιδεύσουμε ένα μοντέλο μηχανικής μάθησης το οποίο προβλέπει ανάμεσα στα δύο είδη ζώων και το υπόβαθρο. Αυτό έγινε μέσω της πλατφόρμας Teachable Machine της Google.
Για την εκπαιδευση του μοντέλου μηχανικής μάθησης χρησιμοποιήσαμε ένα σετ από εικόνες σκύλων και γατών που βρήκαμε στο kaggle καθώς και φωτογραφίες τού χώρου που πήραμε μέσω της κάμερας του raspberry ώστε να μπορούμε να προβλέψουμε ανάμεσα σε τρεις κατηγορίες:
- Κατοικίδιο 1 (Σκύλος)
- Κατοικίδιο 2 (Γάτα)
- Υπόβαθρο
Αρχικά θέλαμε η κατασκευή να έχει αισθητήρα υπερήχων ώστε να γίνεται πρόβλεψη μόνο όταν υπάρξει κάτι μπροστά στην κατασκευή και όχι διαρκώς. Τελικά προγραμματίσαμε έναν αλγόριθμο αναγνώρισης κίνησης. Συγκρίνοντας δύο διαδοχικά καρέ από την κάμερα μπορούμε να αναγνωρίσουμε πότε υπάρχει κίνηση, δηλαδή πότε αλλάζει η εικόνα που τραβάει η κάμερα. Η εικόνα αυτή τροφοδοτείται στον αλγόριθμο πρόβλεψης.
Αν η πρόβλεψη είναι Σκύλος ή Γάτα, τότε ενεργοποιείται και ο αντίστοιχος κινητήρας που απελευθερώνει την τροφή. Αν δεν υπάρχει κίνηση ή αν η πρόβλεψη είναι υπόβαθρο η παραπάνω διαδικασία επαναλαμβάνεται.
Αναγνώριση Κίνησης
Για την αναγνώριση κίνησης συγκρίναμε στοιχείο-στοιχείο τις τιμές των pixel του πράσινου χρώματος δύο διαδοχικών καρε. Αν η απόλυτη τιμή της διαφοράς τους είναι μεγαλύτερη από ένα όριο το οποίο βρήκαμε με δοκιμές, τότε σε έναν καινούργιο πίνακα μπαίνει στην αντίστοιχη θέση η τιμή 1. Αν η διαφορά δεν είναι μεγαλύτερη τότε μπαίνει η τιμή 0. Τέλος αθροίζουμε τις τιμές όλων των στοιχείων του πίνακα αυτου, και αν είναι μεγαλύτερη από έναν όριο, που επίσης βρήκαμε με δοκιμές τότε έχουμε αναγνώριση κίνησης.
Στη συνέχεια το πρόγραμμα συνεχίζει με την πρόβλεψη.
Κίνηση Σερβοκινητήρων
Για την κίνηση του κοχλία χρειαζόμασταν κινητήρες συνεχούς κίνησης αλλά με μεγάλη ροπή. Δυστυχώς οι βηματικοί κινητήρες 28byj-48 που θέλαμε να χρησιμοποιήσουμε αρχικά δεν ήταν αρκετά ισχυροί για την απελευθερωση της τροφής. Μεγαλύτεροι βηματικοί κινητήρες θα ήταν και πολύ μεγάλοι σε μέγεθος αλλά και σε κόστος.
Για αυτό σκεφτήκαμε να χρησιμοποιήσουμε κινητήρες σέρβο τους οποίους τροποποιήσαμε ώστε να έχουν συνεχή κίνηση. Για να γίνει αυτό ξεκολλήσαμε την μεταβλητή αντίσταση, και έναν πύρο πάνω στα γρανάζια. Στη θέση της μεταβλητής αντίστασης κολλήσαμε δύο άλλες ίσες με τη μισή αντίσταση της μέγιστης αντιστασης του ποτενσιόμετρου. Έτσι το σύστημα ελέγχου του σερβοκινητηρα “νομίζει” ότι βρίσκεται κοντά στις 90 μοίρες. Για δεξιόστροφη κίνηση προγραμματίζουμε τον κινητήρα να πάει σε μια γωνία μεγαλύτερη από τις 90 μοίρες ενώ για αριστερόστροφη κινηση προγραμματίζουμε γωνια μικροτερη απο 90 μοίρες. Οδηγίες για την τροποποίηση μπορείτε να βρείτε εδώ.
Στο αποθετήριό μας θα βρείτε το κυρίως πρόγραμμα που ενσωματώνει όλα τα παραπάνω αλλά και τα επιμέρους προγράμματα.