Ας πειραματιστούμε με τους εννέα αισθητήρες του Thymio χρησιμοποιώντας τις βασικές λειτουργίες distance – touching-angle στο περιβάλλον «διασύνδεσης Thymio + Scratch» (16η Δραστηριότητα)

Του Νίκου Δαπόντε,

Α. Εισαγωγή   

Η 16η Δραστηριότητα είναι αφιερωμένη αποκλειστικά στον προγραμματισμό του κινητού ρομπότ – εδάφους Thymio με το γνωστό εκπαιδευτικό λογισμικό Scratch. Περιλαμβάνει μια σειρά «πειραμάτων εκπαιδευτικής ρομποτικής» απλών καταστάσεων με εμπόδια ή επιφάνειες και την εμπλοκή τριών βασικών λειτουργιών αναφορικά με τους 9 αισθητήρες (5 οριζόντιους μπροστά, 2 οριζόντιους πίσω και 2  εδάφους (Βλέπε αναλυτικά σε προηγούμενες δραστηριότητες στο eduportal:  Ας πειραματιστούμε με τους επτά “Οριζόντιους αισθητήρες απόστασης” κατάλληλους για την ανίχνευση εμποδίων και Προγραμματίζω το ρομποτάκι Thymio ώστε να ακολουθεί μια μαύρη λωρίδα στο δάπεδο )

Στους δύο παρακάτω πίνακες συνοψίζονται τόσο οι θέσεις των αισθητήρων στο ρομπότ Thymio καθώς και οι ονομασίες τους (πίνακας Ι)

Πίνακας 1: Οι εννέα αισθητήρες του κινητού-ρομπότ εδάφους Thymio

όσο και οι λειτουργίες που αξιοποιεί το διευρυμένο προγραμματιστικό περιβάλλον του «Scratch for Thymio» (πίνακας ΙΙ).

Πίνακας 2: Οι επτά (συνολικά) βασικές “λειτουργίες” του Scratch για τους αισθητήρες του Thymio

Β. Απλά πειράματα ρομποτικής  στο περιβάλλον «Scratch+Thymio»

Η παρουσίαση των πειραματικών διαδικασιών που ακολουθούν έγινε έχοντας κατά νου τόσο τις λειτουργίες των αισθητήρων του Thymio όσο και δύο γνωστές ρήσεις από την εποχή της LOGO:

του Seymour Papert, όπως τη θυμάμαι περιφραστικά:

«Η καλύτερη μάθηση θα προκύψει από τις καλύτερες ευκαιρίες που θα δώσουμε στους μαθητές μας με σκοπό να οικοδομήσουν οι ίδιοι τις γνώσεις τους»

και των C. Hoyles & R. Noss:

Με αφορμή την ενασχόλησή μου με το ρομποτάκι Thymio και στην προσπάθεια μου να κατανοήσω καλύτερα τις ποικίλες εφαρμογές του, μου ήρθε αυθόρμητα η σκέψη να αλλάξω λίγο την παραπάνω ρήση συμπληρώνοντας την στο τέλος:

Αυτά τα πειράματα στοχεύουν σε μια πρώτη εξοικείωση με τις λειτουργίες των αισθητήρων (distance-touching-angle) και στον προγραμματισμό τους στο Scratch. Ως πειράματα, γενικά, φροντίζω και για την ανάδειξη κάποιων βασικών χαρακτηριστικών τους από την επιστημονική μέθοδο έρευνας (όπως πρόβλημα, υπόθεση, επινόηση πειραματικής διάταξης, μετρήσεις, συμπεράσματα…).

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

Β1. Το πρώτο πείραμα:  Η λειτουργία των αισθητήρων απόστασης:

distance <front-μπροστά>, distance <back-πίσω>, distance <ground-εδάφους>

Σχήμα 2: Αισθητήρες απόστασης
distance SENSORS (0..190 mm)

Φάση εξοικείωσης: Στην αρχή σκέφτηκα ένα απλό «σενάριο»:

Το ρομποτάκι να κινείται με σταθερή ταχύτητα πάνω στο τραπέζι και να σταματάει μόλις βρεθεί σε μια απόσταση εμβέλειας από ένα εμπόδιο. Έτσι, το ρομποτάκι κινείται όταν δεν συναντάει ένα εμπόδιο και σταματάει όταν βρίσκεται σχετικά μακριά του ή όταν το ανυψώνω πιο πάνω από τους οριζόντιους μπροστινούς αισθητήρες (χρησιμοποιώ το χέρι μου, ένα μαρκαδόρο ή ένα άλλο ρομποτάκι Thymio).

Για να μεταφράσω το παραπάνω «σενάριο» σε κώδικα στο «Scratch for Thymio» και να πειραματιστώ δεν έχω παρά να προγραμματίσω το ρομποτάκι χρησιμοποιώντας τις εντολές start motors < όρισμα1  >  < όρισμα2  > και stop motors με αριθμητικές τιμές όπου τις χρειάζομαι. Σ’ αυτό το πλαίσιο, έφτιαξα την πρώτη βασική διαδικασία-πυρήνα του πρώτου προγράμματος:

Σχήμα 3: Ο κώδικας της διαδικασίας για το distance front > 120

Πειραματιζόμενος με αυτό, διαπιστώνω ότι αυτή η διαδικασία πράγματι πετυχαίνει το σκοπό της.

Βάζω το χέρι μου σε μικρότερη ή μεγαλύτερη απόσταση από 120 mm ή 70 mm και το ίδιο κάνω με άλλα εμπόδια ή επαναλαμβάνω τα παραπάνω δίνοντας διάφορες ταχύτητες στους κινητήρες-τροχούς. Σ’ αυτή την περίπτωση αλλάζω ο ίδιος τις τιμές των ορισμάτων (όπως το 45, 45) ….. με το πληκτρολόγιο, κάτι που δεν διευκολύνει τον πειραματισμό. Επομένως, το πρόγραμμά μας χρειάζεται μια βελτίωση, έναν εμπλουτισμό.

Φάση εμπλουτισμού:

Αυτό που θα μας διευκολύνει κατά τη διάρκεια διεξαγωγής του πειραματισμού είναι ο ορισμός μεταβλητών τόσο για την ταχύτητα < ταχύτητα > του Thymio όσο και για την τιμή της μέγιστης εμβέλειας < d > που εμείς θέτουμε για τον αισθητήρα απόστασης. Επιπλέον, χρήσιμη είναι και η πληροφορία για την τρέχουσα τιμή της λειτουργίας distance <front>.

Για την ικανοποίηση αυτών των απαιτήσεων θα χρειαστεί να εμπλουτίσουμε το αρχικό πρόγραμμα, όπως φαίνεται στον παρακάτω κώδικα (αρχείο obstacle_dap_up_down.sb2) :

Σχήμα 4: Η βελτιωμένη διαδικασία

Αξιοποιώντας τη δυνατότητα που μας προσφέρει το Scratch να βιντεοσκπούμε αυτό που συμβαίνει στην οθόνη (αξιοποιώντας τη δυνατότητα που μας προσφέρει το ίδιο το Scratch), βλέπουμε την κίνηση του sprite καθώς και τις τιμές απόστασης, ταχύτητας και εμβέλειας. Έτσι, μπορούμε να αλλάζουμε την ταχυτητα του Thymio με τη βήθεια του slider (μεταβολέα) < ταχύτητα > και να διαβάζουμε τις τιμές μεγεθών που μας ενδιαφέρουν.

Στο σύντομο βίντεο βλέπουμε το sprite του Thymio στην οθόνη του υπολογιστή μας να κινείται υπακούοντας στις αλλαγές της ταχύτητας «μιμούμενο» την κίνηση του ρομπότ.

Φάση επέκτασης:

Με σκοπό να ολοκληρώσουμε τη λειτουργία distance <front> με τις υπόλοιπες που αναφέρονται στους αισθητήρες – στο πίσω μέρος του Thymio (distance <back>) και στο κάτω μπροστινό μέρος του (distance <ground>) – σκέφτηκα ένα δεύτερο «σενάριο»:

Το ρομποτάκι να κινείται,

α) προς τα πίσω αν συναντήσει εμπόδιο με τους μπροστινούς αισθητήρες,

β)  προς τα μπρος αν συναντήσει εμπόδιο με τους πίσω αισθητήρες

και να σταματάει,

γ) αν το σηκώσω πάνω από το τραπέζι ή το έδαφος.

Ο κώδικας του δεύτερου σεναρίου φτιάχνεται – εκτός από την αναγκαία διαδικασία διασύνδεσης του Scratch με το Thymio – με βάση τα προηγούμενα και τη λογική «σκέφτομαι τι θέλω να κάνει το ρομποτάκι στο οριζόντιο τραπέζι και το sprite στην οθόνη του υπολογιστή» (αρχείο motion_odometer_2obstacles.sb2):

Σχήμα 5: Η πλήρης διαδικασία για τις λειτουργίες distance < front >

Από δω και πέρα αρχίζουν οι δοκιμές που αποσκοπούν στην απάντηση ορισμένων ερωτημάτων όπως αυτών που σχετίζονται με τη φύση των αντικειμένων – εμποδίων (κουτιά διαφόρων χρωμάτων, μαύρες ή λευκές πλαστικές λωρίδες, ένα ποτήρι νερό, ένας καθρέφτης, τα χέρια μας κ.α.) καθώς και οι αποστάσεις του ρομπότ από το κάθε εμπόδιο. Τα παρακάτω, τέσσερα μικρής διάρκειας βίντεο, δείχνουν ορισμένες μόνο πτυχές των ποικίλων δοκιμών που κάναμε.

Φορτώνουμε στον υπολογιστή μας το μικρό πρόγραμμα που φτιάξαμε (motion_odometer_2obstacles.sb2). Το ρομποτάκι ξεκινάει την κίνησή του με το πάτημα της πράσινης σημαίας του Scratch και σταματάει με δύο τρόπους:  είτε πατώντας το κόκκινο κυκλάκι του Scratch είτε σηκώνοντας το Thymio με το χέρι μου, λίγο ψηλότερα από το τραπέζι.

  1. Στο πρώτο δοκιμαστικό πείραμα, το κινητό πάνω στο τραπέζι πηγαινοέρχεται ανάμεσα σε δύο εμπόδια που είναι ….. δύο χέρια, το ένα μπροστά από το Thymio και το άλλο πίσω από αυτό. Στις δοκιμές μας χρησιμοποιήσαμε διάφορες τιμές απόστασης εμβέλειας για τους αισθητήρες {μπροστά -πίσω- εδάφους} ώστε να ελεγχθούν οι τιμές τους στις τρεις εντολές IF … THEN.
Σχήμα 6: Οι λειτουργίες distance με τις τιμές τους

Με τις παραπάνω τιμές είναι διακριτές οι διαφορές των αποστάσεων εμβέλειας από το κάθε χέρι (μπροστά και πίσω) πάντα, όμως, κατά προσέγγιση. Τελικά, στο πρώτο βίντεο χρησιμοποιήσαμε τις τιμές 80, 70 και 0 όπως βλέπουμε και στη διαδικασία του project.

2. Στο δεύτερο δοκιμαστικό, θέσαμε σe πειραματικό έλεγχο τόσο τη φύση των εμποδίων όσο και το ρόλο που παίζει η ταχύτητα του κινητού. Έτσι, καθώς το ρομποτάκι συναντάει λευκά ή κόκκινα χαρτόνια, οι αισθητήρες λειτουργούν κανονικά ενώ για μια μαύρη λωρίδα το Thymio θα το «αισθάνεται» ή όχι ανάλογα με το πώς είναι τοποθετημένη μπροστά του (κατακόρυφα οπότε μόνο ένας ενεργοποιείται ή οριζόντια οπότε ενεργοποιούνται περισσότεροι). Στο δεύτερο βίντεο δείχνεται ότι οι οριζόντιοι αισθητήρες ανταποκρίνονται αποτελεσματικά εφόσον τα εμπόδια είναι λευκού χρώματος ενώ η εμβέλεια τους επηρεάζεται από την ταχύτητα του ρομπότ.

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

  1. Στο τέταρτο βίντεο πειραματιζόμαστε με εμπόδιο έναν ….καθρέφτη.

Β2. Το δεύτερο πείραμα:  Η λειτουργία του αισθητήρα  γωνίας –  angle  < front >

angle <front-μπροστά>    

Σ’ αυτό το πείραμα, αφιερωμένο στη λειτουργία του αισθητήρα γωνίας (angle <front>), διαπιστώνουμε ότι μπορούμε να «πιλοτάρουμε» το ρομποτάκι θέτοντας το χέρι μας σε τρεις περιοχές των πέντε μπροστινών αισθητήρων. Αυτό σημαίνει ότι μπορούμε να πλησιάζουμε το κινητό με το χέρι μας με τέτοιο τρόπο ώστε να σχεδιάζουμε τόσο στην οθόνη (με το sprite του Thymio) όσο και πάνω σε χαρτί που τοποθετούμε στην επιφάνεια που κινείται το ρομποτάκι (αρκεί, βέβαια, να το εφοδιάσουμε με μαρκαδόρο στη γνωστή θέση του πάνω στο Thymio).

Έτσι, φαντάζομαι ότι το sprite βρίσκεται στην οθόνη  – θέση (0, 0)  του «αόρατου συστήματος συντεταγμένων (x, y) με την εντολή go to x: 0 y: 0  – και διαθέτει ένα μολύβι κόκκινου χρώματος (εντολή set pen color to 0 ) και σχεδιάζει γραμμές πάχους 3  (εντολή set pen size to 3).

Η διαδικασία διασύνδεσης του Thymio με το Scratch παίρνει την παρακάτω μορφή:

Σχήμα 7: Η διαδικασία διασύνδεσης «Thymio+Scratch»

Η οικοδόμηση της κύριας διαδικασίας διαμορφώθηκε, ως ένα απλό παράδειγμα εφαρμογής της λειτουργίας angle < front >  μετά από πειραματισμούς και παρουσιάζεται παρακάτω μαζί με μια σύντομη περιγραφή των εντολών ελέγχου IF–> THEN (πρόγραμμα 16_angle1.sb2 )

Σχήμα 8: Η κύρια διαδικασία για τη λειτουργία angle < front >

Ας σημειωθεί ότι η χρήση της μεταβλητής < V > για την ταχύτητα του κινητού επιβλήθηκε όταν διαπιστώθηκε πως θα μπορούσαμε να σχεδιάζουμε στην οθόνη (με το sprite) και στο τραπέζι ή στο πάτωμα (με το ρομποτάκι). Βέβαια, όσο μεγαλύτερη είναι η ταχύτητα V τόσο πιο δύσκολο είναι το «πιλοτάρισμα» του sprite της οθόνης. Από την άλλη, με μικρή ταχύτητα, δεν μπορούμε να αποτυπώσουμε στην οθόνη την τροχιά του sprite με σημαντική λεπτομέρεια.

Τέλος, η προσπάθεια μας να σχεδιάζουμε διάφορα γεωμετρικά σχήματα, αριθμούς και γράμματα μας οδήγησε στο να φτιάξουμε ένα δεύτερο πρόγραμμα χρησιμοποιώντας τόσο τη μεταβλητή ταχύτητα ( V ) όσο και μια νέα μεταβλητή < Γωνία > για τον προσδιορισμό της γωνίας στροφής του ρομπότ (αριστερόστροφα ή δεξιόστροφα με την εντολή

 turn < Γωνία > μοίρες). Επιπλέον, προσθέσαμε και τις εντολές χρώματος μολυβιού (set pen color to < χρώμα > ).

Το πρόγραμμα αποθηκεύτηκε στον υπολογιστή (με όνομα αρχείου 16_angle2.sb2 ) και περιλαμβάνει τις δύο παρακάτω διαδικασίες:

Σχήμα 9: Η διαδικασία διασύνδεσης « Thymio+Scratch»
Σχήμα 10: Η διαδικασία απλής εφαρμογής της λειτουργίας angle < front >

Για τον έλεγχο της διαδικασίας αναφορικά με την κίνηση του sprite στην οθόνη, κράτησα το ρομποτάκι στο ένα μου χέρι χωρίς να εμποδίζεται η περιστροφή των κινητήρων τροχών και με το άλλο πλησίαζα το δεξιό ή το αριστερό μέρος των μπροστινών αισθητήρων. Μ’ αυτό τον τρόπο «πιλοτάρισα» το sprite χρησιμοποιώντας το ρομποτάκι Thymio.

Σχήμα 11: Δύο απλά σχέδια που έφτιαξα με τη χρήση της λειτουργίας angle

Β3. Το τρίτο πείραμα:  Η λειτουργία των αισθητήρων  touching (εγγύτητας)

touching <front-μπροστά>, touching <back-πίσω>, touching <ground-εδάφους

Οι αισθητήρες εγγύτητας (touching) αναφέρονται τόσο στους 7 οριζόντιους (5 μπροστά και 2 πίσω) αισθητήρες όσο και τους 2 αισθητήρες εδάφους. Πρόκειται για λειτουργίες οι οποίες «απαντούν» με σωστό ή λάθος στο ερώτημα «βρίσκεται ένα εμπόδιο κοντά στο μπροστινό ή πίσω μέρος του ρομπότ ή είναι κοντά στο έδαφος.  Με τη λογική που φτιάξαμε τις προηγούμενες λειτουργίες distance και angle έτσι και τώρα οικοδομούμε το απλό project ( project 16_touching1.sb2 ) . Μ’ αυτό μπορείτε να πειραματιστείτε αλλά και να το επεκτείνετε.

Σχήμα 12: Η διαδικασία εφαρμογής των λειτουργιών touching
Σχήμα 13: Σελίδα οθόνης του τρίτου πειράματος (λειτουργία touching)

Σημειώσεις:

  1. Οι δύο αισθητήρες εδάφους και οι τιμές τους για μαύρη και λευκή λωρίδα στο έδαφος που κινείται το ρομποτάκι.

  1. Από το επίσημο site του Thymiohttp://thymio.org αντλούμε την πληροφορία ότι η τιμή της prox.ground.delta που εμφανίζεται στους κώδικες «Text Programming» υπολογίζεται από τη διαφορά μεταξύ της ποσότητας ανακλώμενης ακτινοβολίας prox.ground.reflected  (τιμή 0 – καθόλου ανάκλαση και 1023 μέγιστη ) και της ακτινοβολίας περιβάλλοντος prox.ground.ambiant (τιμή 0 – καθόλου φως και 1023 μέγιστο).
  2. Σε όλα τα projects που φτιάχνουμε στο «Scratch for Thymio» χρησιμοποιούμε κατάλληλα και τη διαδικασία διασύνδεσης του Scratch με το Thymio που γνωρίσαμε στη 15η Δραστηριότητα
  3. Το συμπέρασμά μας λέει ότι, μπορεί όλα να λειτουργούν σωστά όπως τα προγραμματίζουμε στο περιβάλλον «Scratch for Thymio», αλλά πάντα με μια παρατήρηση: οι αριθμητικές τιμές ισχύουν κατά προσέγγιση κάτι που είναι αναμενόμενο (το ρομποτάκι Thymio είναι σχετικά φτηνό και ως συνήθως χρειάζεται βαθμονόμηση – calibration ).
  4. Στις 20 Μαΐου 2017, τα projects που έφτιαξα εδώ, επιχείρησα να ανεβάσω στο Scratch Website αλλά, δυστυχώς, δεν γίνονται αποδεκτά εφόσον στον κώδικα τους περιλαμβάνονται «πειραματικές εντολές και λειτουργίες». Ελπίζω ότι θα επιτρέπεται η ανάρτηση τέτοιων projects μόλις οριστικοποιηθούν οι ατέλειες και ελλείψεις της διασύνδεσης Thymio+Scratch.

Για περισσότερα…..