E-Feelos – 1ο ΕΠΑΛ Ρεθύμνου

E-Feelos – 1ο ΕΠΑΛ Ρεθύμνου

Περιγραφή

Μια προσπάθεια δημιουργίας ενός φιλικού ρομπότ για να συζητήσεις μαζί του μέσω φυσικής φωνής. Διαθέτει 2 γλυκά ματάκια που θα σου κάνουν παρέα. Τα κομμάτια του ρομπότ τυπώθηκαν στον 3D εκτυπωτή του σχολείου και η συναρμολόγηση έγινε με τη βοήθεια των μαθητών.

Διαθέτει 7 servo κινητήρες για να μπορεί να κινεί τα μάτια και τα βλέφαρα, να γέρνει αριστερά και δεξιά και να περιστρέφεται στον κάθετο άξονα.

Όσον αφορά τον προγραμματισμό, αυτός έγινε σε pyhton και ζητήθηκε από το Google Studio AI να μας δημιουργήσει ένα γραφικό περιβάλλον ελέγχου των servo με δυνατότητα να αποθηκεύω τις κινήσεις. Ο κώδικας που πρότεινε ήταν ικανοποιητικός και με μερικές αλλαγές ήμασταν σε θέση να καταγράψουμε τις παρακάτω κινήσεις  σε ένα αρχείο, φυσικά μπορούν να καταγραφούν και πολύ περισσότερες.

Θέσεις servo κινητήρων για δημιουργία κίνησης
1 1500 1500 1500 1500 1500 1190 1500 # Κέντρο - Ανοικτά βλέφαρα
2 1500 1500 1500 1500 1500 1370 1330 # Κέντρο - ΜισοΑνοικτά βλέφαρα
3 1500 1500 1500 1500 1500 1440 1220 # Κέντρο - ΜισοΚλειστά βλέφαρα
4 1500 1500 1500 1100 1100 1100 1630 # Δεξιά - Ανοικτά βλέφαρα
5 1500 1500 1500 1500 1500 1580 1150 # Κλειστά φλέφαρα
6 1500 1500 1500 1940 1940 1100 1630 # Αριστερά - Ανοικτά βλέφαρα
7 1500 2020 1920 1500 1500 1190 1500 # Γύρε αριστερά
8 1500 910 790 1500 1500 1190 1500   # Γύρε δεξιά
9 500 1500 1500 1500 1500 1190 1500  # Κοίτα αριστερά
10 2380 1500 1500 1500 1500 1190 1500  # Κοίτα δεξιά
11 1500 1500 1500 1100 1940 1190 1500 # Αλλήθωρο 1
12 1500 1500 1500 1940 1100 1190 1500 # Αλλήθωρο 2
13 1500 2060 1010 1500 1500 1340 1310 # Προς τα πάνω
14 1500 960 2150 1500 1500 1120 1610 # Προς τα κάτω

 

Βίντεο παρουσίασης

Με τη βοήθεια του μικροφώνου ο χρήστης μπορεί να μιλήσει με το ρομπότ και αφού η φωνή γίνει κείμενο αυτό δίνεται σε ένα ΑΙ μοντέλο που θα δώσει σχετική απάντηση. Το μοντέλο που χρησιμοποιείται στην παρούσα φάση είναι το gemini-2.0-flash το οποίο είναι σχετικά ελαφρύ και ιδανικό για γρήγορες απαντήσεις. Το κείμενο που επιστρέφει το ΑΙ με την αντίστροφη διαδικασία γίνεται φωνή μέσω του gTTS (Google Text-to-Speech) που είναι μια Python βιβλιοθήκη.

Επειδή για κάποια prompts το ΑΙ δεν δίνει σωστές απαντήσεις π.χ. τι ώρα ή τι μέρα είναι κ.α. υπάρχει στον κώδικα ένα φίλτρο που ελέγχει κάποιες προκαθορισμένες εκφράσεις οι οποίες καλούν κάποιες τοπικές συναρτήσεις της Python. Κάποιες από αυτές είναι οι παρακάτω

Προκαθορισμένες φωνητικές εντολές
# αναζήτηση για ...  : Καλεί την αναζήτηση στο DuckDuckGo για το κείμενο που του λέμε
# θέλω να ακούσω  : Κάνει αναζήτηση στο Youtube και κάνει αναπαραγωγή το πρώτο ηχητικό που θα βρει 
"τι ώρα είναι": Λέει την ώρα του συστήματος
"τι μέρα είναι σήμερα": Λέει τι μέρα είναι
"κάνε επίδειξη": Παίζει μουσική και εκτελεί μία σειρά από κινήσεις   
"κάνε γλυκά ματάκια": Ανοιγοκλείνει 2 φορές τα μάτια
"τι καιρό κάνει τώρα": Κάνει αναζήτηση στο openweather για την τρέχουσα πρόγνωση καιρού στην τοποθεσία που έχουμε δώσει
"τι καιρό θα κάνει αύριο": Επίσης για την πρόγνωση του αυριανού καιρού
"αντίο": Τερματίζει το πρόγραμμα

Έγινε μία προσπάθεια να μπορεί να καταλάβει το ρομπότ μας σε ποιο σημείο του χώρου βρίσκεται ο χρήστης και να γυρίζει προς εκείνο το μέρος. Αυτό κατέστη δυνατόν με τη χρήση 2 αισθητήρων human detector οι οποίοι έχουν τη δυνατότητα να μετράνε σε πόση απόσταση είναι κάποιος άνθρωπος. Αυτοί τοποθετήθηκαν αριστερά και δεξιά από το ρομπότ, οπότε αν κάποιος αισθητήρας μετράει παρουσία σε μικρότερη απόσταση από τον άλλο, τότε το ρομπότ γυρίζει προς εκείνη τη μεριά αλλά μόνο την ώρα που μιλάει.

Πρέπει να αναφερθεί ότι το μεγαλύτερο μέρος του κώδικα της Python προτάθηκε από το Google Studio AI που έδειξε ότι τα καταφέρνει πολύ καλά στον προγραμματισμό αφού έδινε λειτουργικά κομμάτια κώδικα και απλά εμείς έπρεπε να τα συνδέσουμε μεταξύ τους ή να κάνουμε κάποιες προσαρμογές στις ανάγκες μας.

Συνδεσμολογία /  θέματα hardware

Σε πρώτη φάση ο κώδικας φιλοξενήθηκε σε ένα Raspberry 5 (RPi) στο οποίο συνδέθηκε το Servo Hat για να κινούνται τα servo. Για κάποιο λόγο όμως το SDA pin του Raspberry υπεύθυνο για να στέλνει τα data στο Hat χάλασε και ήταν αδύνατος ο έλεγχος των servo μέσω RPi. Έτσι προέκυψε εναλλακτική λύση όπου το Servo Hat μέσω I2C επικοινωνεί με ένα arduino ESP8266 προγραμματισμένο να στέλνει τις κατάλληλες κινήσεις στα servo μέσω εντολών που λαμβάνει από τη σειριακή του σύνδεση.

Το arduino λοιπόν μπορεί να συνδεθεί με οποιαδήποτε συσκευή μπορεί να του στείλει κείμενο μέσω USB θύρας είτε είναι Raspberry ή υπολογιστής. Ο τρόπος που μπορώ να στείλω εντολές είναι της μορφής S 0 1500 (όπου ο πρώτος αριθμός είναι το servo και ο δεύτερος ο παλμός που θα στείλω), επίσης μπορώ να στείλω V 0.5 (όπου ο αριθμός έχει να κάνει με το χρόνο που θα χρειαστεί για να κάνει την κίνηση το servo). Πρέπει να αναφερθεί ότι η σύνδεση με laptop είχε καλύτερα αποτελέσματα σε σχέση με το RPi, στην κατανόηση της φωνής του χρήστη ίσως λόγω του καλύτερου μικροφώνου του laptop ή της μεγαλύτερης υπολογιστικής ισχύς του.

Οι αισθητήρες ανθρώπινης παρουσίας λειτουργούν με serial επικοινωνία οπότε συνδέονται πάνω στο Raspberry (υπάρχει δυνατότητα πέρα από το ένα RX-TX σειριακής επικοινωνίας που διαθέτει το RPi να ορίσω και άλλα pins που θα λειτουργούν ως serial)

Πρόσθετες δυνατότητες

Δόθηκαν κάποιες κινήσεις στα μάτια είτε σε τυχαία χρονικά διαστήματα είτα όταν αναπαράγεται ήχος ώστε να δείχνει πιο φυσικό.

Αν η απάντηση που θα δοθεί περιέχει τη λέξη English τότε το text to speech αλλάζει γλώσσα και μιλάει με φωνή αγγλικής προφοράς γιατί μάλλον τα κείμενα που θα δίνονται ως απάντηση από δω και πέρα θα είναι στα Αγγλικά. Ανάλογα αν η λέξη είναι Ελληνικά επιστρέφει σε ελληνική φωνή. π.χ. στην ερώτηση μπορείς να μιλήσεις Αγγλικά, η απάντηση είναι Yes, I can speak English οπότε και γίνεται η μετάβαση στην αγγλική φωνή.

Τα κείμενα που ακούει το ρομπότ μας αλλά και αυτά που απαντάει αποστέλλονται σε μία web σελίδα ώστε να μπορεί και ο χρήστης αλλά και οποιοσδήποτε άλλος έχει πρόσβαση σε αυτήν να βλέπει τις 10 τελευταίες ερωταποκρίσεις.

Το ΑΙ μοντέλο μετά από σχετικό prompt μπορεί να προσαρμόσει τις απαντήσεις του στην συμπεριφορά που θα του ζητηθεί π.χ. θέλω οι απαντήσεις σου να έχουν συναισθηματική υποστήριξη

To 3D μοντέλο του ρομπότ με τη βοήθεια του Verge3D έγινε διαδραστικό για να μπορούμε να έχουμε πλήρη εικόνα του και να μελετηθούν οι κινήσεις πριν και κατά την κατασκευή του και τη συναρμολόγηση. Δείτε παρακάτω στις αναφορές αντίστοιχο link.

Μελλοντικές βελτιώσεις

Υπάρχει σκέψη αντί να δίνουμε έτοιμες κινήσεις μέσα από τον κώδικα της Python για το ρομπότ, να ζητήσουμε από το ίδιο το ΑΙ να δημιουργεί δυναμικά τις κινήσεις και να ελέγχει το ίδιο το ρομπότ. Με μία πρώτη αναφορά όταν του δώσαμε ποιες προκαθορισμένες κινήσεις μπορεί να κάνει (δείτε τη λίστα παραπάνω) του ζητήσαμε να φτιάξει μία χορογραφία διάρκειας 10″. Σε πρώτη φάση κατάλαβε τι αφορούσε κάθε κίνηση και μετά έκανε μία λίστα με κινήσεις αναφέροντας ότι κάποιες κινήσεις θα βελτίωναν την εκφραστικότητα του ρομπότ και ρώτησε αν θέλαμε να δημιουργήσει και κινήσεις ανάλογα με το περιεχόμενο των απαντήσεων του. Αυτό που πρέπει να γίνει για να είναι λειτουργικό όλο αυτό θα πρέπει να δούμε με πιο τρόπο η λίστα των κινήσεων που θα δίνεται ως κείμενο από το ΑΙ να σταλεί ως εντολές κίνησης στο ρομπότ.

To ESP32 που αγοράστηκε διαθέτει γυροσκόπιο οπότε θα μπορούσε να χρησιμοποιηθεί ώστε να μπορεί το ρομπότ να προσανατολιστεί στο χώρο, επίσης διαθέτει και 64 προγραμματιζόμενα έγχρωμα LEDs και μπορεί να εμφανίζει μικρές εικόνες ή κείμενο με μετακίνηση (scroll)

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

Λίγη θεωρία

Ανθρωπομορφισμός (anthropomorphism): Οι άνθρωποι έχουν την τάση να προβάλλουν ανθρώπινα χαρακτηριστικά σε αντικείμενα που έχουν “πρόσωπο” ή συμπεριφορά που μοιάζει ανθρώπινη. Δύο μάτια που κινούνται, αναβοσβήνουν ή “κοιτούν” τον χρήστη, αρκούν για να προκαλέσουν την ψευδαίσθηση παρουσίας ή συναισθήματος.

Εκφραστικότητα μέσω κινήσεων: Ακόμα και χωρίς λέξεις, τα “μάτια” μπορούν να:

  • εκφράσουν απορία (κλίση προς τα μέσα)

  • δείξουν χαρά ή ενθουσιασμό (άνοιγμα, γρήγορη κίνηση)

  • δείξουν λύπη ή αδιαφορία (βραδεία κίνηση, “κοιτάζει κάτω”)

Αυτές οι κινήσεις γίνονται υποσυνείδητα κατανοητές από τον άνθρωπο, γιατί βασίζονται σε κοινή γλώσσα του σώματος.

Επαναληπτική αλληλεπίδραση: Όταν ο χρήστης αλληλεπιδρά συχνά με κάτι που «αντιδρά» στα ερεθίσματά του (π.χ. τον κοιτάζει, του κάνει «νεύμα», κινείται όταν το πλησιάσει), αρχίζει να χτίζει συναισθηματική σύνδεση. Δεν χρειάζεται να “νιώθει” συναισθήματα, αρκεί να δίνει την εντύπωση ότι αντιδρά συναισθηματικά.

Αίσθηση νοημοσύνης – “Με καταλαβαίνει”: Όταν ένα ρομπότ ανταποκρίνεται με νόημα σε αυτό που λέμε, ακόμη και με απλές φράσεις, αρχίζουμε να το βλέπουμε ως «οντότητα» και όχι ως άψυχο μηχάνημα.

Διάλογος = Σχέση : Ο διάλογος είναι το βασικό μέσο που χτίζουμε σχέσεις. Η ανταλλαγή λόγου επιτρέπει:

  • Εμπιστοσύνη (“θυμάται τι είπα;”)
  • Συνέχεια (“μιλάμε καθημερινά”)
  • Προσωποποίηση (“μου μιλάει με το όνομά μου”)

Ενσυναίσθηση (ή ψευδαίσθησή της) : Αν το ρομπότ απαντά π.χ. «Ακούγεται ότι είσαι λυπημένος. Θες να μου πεις τι σε απασχολεί;» τότε ο χρήστης νιώθει κατανόηση. Ακόμα και αν η απάντηση είναι αποτέλεσμα αλγορίθμου, το συναίσθημα που νιώθουμε είναι αληθινό.

Αναφορές

Πίνακας υλικών

Είδος Αγορά
IP camera HellasDigital
Ηχείο HellasDigital
LED matrix+ ESP32 grobotronics
Servo HellasDigital
Servo extra HellasDigital
Servo driver HellasDigital
Motion detector HellasDigital
Sound detector HellasDigital
USB mic HellasDigital

Τελικός κώδικας

Φωτογραφίες / Βίντεο

3D model  [ το μοντέλο που χρησιμοποιήθηκε είναι στο youtube ]

Simulator of e-feelos