Διαθεματική μελέτη ευθύγραμμων κινήσεων του ρομπότ Thymio

(Μέρος 1ο Πειραματική ρομποτική  με «Οπτικό Προγραμματισμό»)

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

Σ’ αυτή την ανάρτηση, πάντα έχοντας κατά νου τα ιδιαίτερα χαρακτηριστικά του κινητού ρομπότ εδάφους Thymio, σκοπεύω σε μια νέα διαμόρφωση  απλούστατων πρακτικών ασκήσεων έτσι ώστε να αναδειχτούν μέσα από την πράξη οι απαραίτητες έννοιες, έννοιες/μεγέθη και νόμοι της Φυσικής καθώς και αυτές της ρομποτικής (σύνολο αισθητήρων και ενεργοποιητών). Πρόκειται για μια σειρά από πρακτικές ασκήσεις οι οποίες μπορούν εύκολα να πραγματοποιηθούν πάνω σ’ ένα τραπέζι ή στο πάτωμα και απαιτούν πολύ απλά μέσα. Στην πρώτη ενότητα πειραματικής ρομποτικής, οι δραστηριότητες που ακολουθούν θα προγραμματιστούν αποκλειστικά στο Visual Programming  του Thymio (γλώσσα Οπτικού Προγραμματισμού) και μάλιστα στην «προχωρημένη λειτουργία». Εννοείται ότι θα αξιοποιούμε τη δυνατότητα που μας παρέχεται να «διαβάζουμε» και ταυτόχρονα και τον αντίστοιχο κώδικα στο Text Programming.

Ας σημειωθεί ότι οι προτεινόμενες πειραματικές δραστηριότητες μπορούν να προγραμματιστούν και με τα άλλα περιβάλλοντα, BLOCKLY και Scratch.

Επίσης, θεωρώ ότι θα διευκολυνθούν οι αρχάριοι εφόσον έχουν περάσει στοιχειωδώς από δραστηριότητες των έξι προ-προγραμματισμένων συμπεριφορών του κινητού ρομπότ Thymio (https://www.eduportal.gr/el/ ).

 

Πιο συγκεκριμένα, στο διάγραμμα παρουσιάζονται και οι πέντε διαφορετικοί τρόποι για να έχουμε τις επαναλήψεις {ακινησία – κίνηση  ………}.

Περίπτωση 1.1_α  Ας ξεκινήσουμε με τον ήχο ως συμβάν – γεγονός που προκαλείται με το χτύπημα των χεριών μας (παλαμάκια). Πρόκειται για το συμβάν που ανιχνεύει το μικρόφωνο που διαθέτει το ρομποτάκι Thymio. Με το πρώτο χτύπημα των χεριών , το αρχικά ακίνητο ρομποτάκι, ξεκινάει και αποκτάει μια ταχύτητα V = σταθερή (πρώτη δράση). Μετά από κάποιο χρονικό διάστημα t χτυπάμε ξανά παλαμάκια και το ρομποτάκι σταματάει (δεύτερη ενέργεια).

Μια πρώτη αυθόρμητη σκέψη είναι να διαμορφώσουμε τον κώδικα δύο γραμμών στον απλό «οπτικό προγραμματισμό VPL»:

Ας προσέξουμε, πρώτα απ’ όλα,  ότι το λάθος βρίσκεται στο ότι το πρώτο συμβάν είναι ακριβώς ίδιο το δεύτερο και είναι κάτι που θα πρέπει το ρομποτάκι να «πληροφορηθεί» έτσι ώστε να μπορεί τα ξεχωρίζει!

Η αποτυχία μας μπορεί να ξεπεραστεί μόνο αν δοκιμάσουμε την «προχωρημένη λειτουργία»  της οπτικής γλώσσας που μας προσφέρει επιπλέον δυνατότητες όπως για παράδειγμα την απόδοση μιας «κατάστασης – state» στο ρομπότ.

Παρακάτω, δείτε το πρόγραμμα σε VPL και στο αντίστοιχο Text Programming:

Πρώτη γραμμή: Το συμβάν-γεγονός «Αν χτυπήσω παλαμάκι»  (πρώτο εικονίδιο)  και με αγνόηση της κατάστασης του ρομπότ (δεύτερο εικονίδιο) μεταφράζεται σε onevent mic (ανίχνευση μικροφώνου). Τότε, η κατάσταση γίνεται 1 (new_state (1) = 1) και το ρομποτάκι κινείται με ταχύτητα 100 μονάδες.

Δεύτερη γραμμή:  Το συμβάν-γεγονός «Αν χτυπήσω παλαμάκι»  (πρώτο εικονίδιο)  και με κατάστασης του ρομπότ state(1) = 1  (δεύτερο εικονίδιο) Τότε, η κατάσταση αγνοείται (ούτε αναμμένα ούτε σβηστά φωτάκια) και το ρομποτάκι κινείται με ταχύτητα 100 μονάδες.

Σημείωση 1: Με αλλαγές στην κατάσταση στην πρώτη γραμμή, όπως δείχνει το παρακάτω σχήμα, έχουμε το ίδιο αποτέλεσμα.

Σημείωση 2: Αν θέλουμε να έχουμε εκτέλεση των εντολών μόνο μια φορά τότε αφαιρέστε το τρίτο εικονίδιο της δεύτερης γραμμής:

Σημείωση 3: Αν θέλουμε, επιπλέον, το ρομποτάκι να φωτίζεται πράσινο και κόκκινο στην πρώτη και δεύτερη φορά αντίστοιχα, τότε, προσθέτουμε τα εικονίδια με τις γνωστές επιλογές RGB (Red Green Blue ) (βλέπε https://www.eduportal.gr/thymio-led-13/ )

Περίπτωση 1.1_β  Συνεχίζουμε με το συμβάν – γεγονός πάτημα του κεντρικού πλήκτρου του Thymio. Με το πρώτο πάτημα, το αρχικά ακίνητο ρομποτάκι, ξεκινάει και αποκτάει μια ταχύτητα σταθερή (πρώτη ενέργεια). Μετά από την πάροδο ενός χρονικού διαστήματος της αρεσκείας μας πατάμε ξανά το κεντρικό πλήκτρο και το ρομποτάκι σταματάει (δεύτερη ενέργεια).

Αν σκεφτούμε όπως στην προηγούμενη περίπτωση, τότε, ο κώδικας του προγράμματος δίνεται παρακάτω.  Με το πάτημα του κεντρικού κουμπιού του Thymio (button.center = 1) και το ρομπότ σε «κατάσταση state [1] =1» επιτυγχάνεται το ξεκίνημα και το σταμάτημα, διαρκώς. Με τη βοήθεια του Text Programming μπορείτε να κατανοήσετε καλύτερα τις «καταστάσεις» του ρομπότ. Στην πρώτη γραμμή η «νέα κατάσταση» είναι new-state [1] = 0 και αποτελεί την κατάσταση της δεύτερης γραμμής.

Περίπτωση 1.1_γ Συνεχίζουμε με το συμβάν – γεγονός πάτημα του κεντρικού πλήκτρου του τηλεκοντρόλ. Με το πρώτο πάτημα, το αρχικά ακίνητο ρομποτάκι, ξεκινάει και αποκτάει μια ταχύτητα σταθερή (πρώτη ενέργεια). Μετά από την πάροδο ενός χρονικού διαστήματος της αρεσκείας μας πατάμε ξανά το κεντρικό πλήκτρο και το ρομποτάκι σταματάει (δεύτερη ενέργεια). 

Υπενθυμίζουμε ότι μεταφερόμαστε στα πλήκτρα του τηλεκοντρόλ (μπροστά, πίσω, δεξιά, αριστερά, στοπ) ως επιλογή από το συμβάν «πάτημα πλήκτρου» όπως δείχνει το εικονίδιο, αριστερά.

Στον «Οπτικό Προγραμματισμό, VPL», και σ’ αυτήν την περίπτωση, όλα τα εικονίδια παραμένουν ίδια εκτός από το συμβάν με το «πλήκτρο στοπ» του τηλεκοντρόλ που αντικαθιστά το κεντρικό πλήκτρο του Thymio.

Περίπτωση 1.1_δ Συνεχίζουμε με το συμβάν – γεγονός χτύπημα (tap) του Thymio με το χέρι μας. Με το πρώτο χτύπημα, το αρχικά ακίνητο ρομποτάκι, ξεκινάει και αποκτάει μια ταχύτητα σταθερή (πρώτη ενέργεια). Μετά από την πάροδο ενός χρονικού διαστήματος της αρεσκείας μας, ξαναχτυπάμε το ρομποτάκι και αυτό σταματάει (δεύτερη ενέργεια). 

Είναι φανερό ότι και αυτή τη φορά αντικαθίσταται μόνο το πρώτο εικονίδιο από κάθε γραμμή: στη θέση των εικονιδίων RC θα έχουμε αυτά του «χτυπήματος» (tap). 

Περίπτωση 1.1_ε Ολοκληρώνουμε τις περιπτώσεις με το συμβάν – γεγονός ανίχνευσης εμποδίου από τον οριζόντιο κεντρικό αισθητήρα του Thymio. Πλησιάζοντας το χέρι μας μπροστά στο ακίνητο ρομποτάκι, ξεκινάει και αποκτάει μια ταχύτητα σταθερή (πρώτη ενέργεια). Μετά από την πάροδο ενός χρονικού διαστήματος πλησιάζουμε ξανά το χέρι μας μπροστά στον κεντρικό αισθητήρα, κάνοντας το ρομποτάκι να σταματήσει.

Μετά από τις 4 προηγούμενες περιπτώσεις…. ο κώδικας στο VPL είναι προφανής και δίνεται αμέσως παρακάτω:

Με μία μόνο γραμμή στο προχωρημένο περιβάλλον VPL και με το πάτημα του πλήκτρου

  • το ρομπότ ΔΕΝ ΚΙΝΕΙΤΑΙ μια και η «κατάσταση» δεν ισχύει (όλα τα LEDs σβηστά)

  • το ρομπότ ΚΙΝΕΙΤΑΙ οποιαδήποτε και αν είναι η «νέα κατάσταση» (new_state) των 4 LEDs

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

Αυθόρμητα, μετά από αυτό, έρχεται το πρώτο απλό ερώτημα:

Πώς αυτό το απλό πρόγραμμα μπορεί να τροποποιηθεί έτσι ώστε το ρομποτάκι να επιστρέφει στη θέση από την οποία ξεκίνησε;

….Και γρήγορα ήρθε η απάντηση με τον κώδικα τριών γραμμών,  μαζί με τον απαραίτητο έλεγχο στην πράξη:

Στη συνέχεια, ήρθε και το δεύτερο ερώτημα:

Πώς να φτιάξω ένα απλό προγραμματάκι ώστε το ρομποτάκι να πηγαινοέρχεται ασταμάτητα μεταξύ των δύο μαύρων λωρίδων;

Μετά από δοκιμές κατέληξα στον ακόλουθο κώδικα:

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

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

Περίπτωση 3.1 

Κίνηση του ρομπότ Thymio για χρονική διάρκεια μέχρι 4 δευτερόλεπτα

Ως συνήθως, πρώτα σκέφτομαι τι θέλω να συμβαίνει και στη συνέχεια αυτή τη σκέψη τη «μεταφράζω» στη γλώσσα και στη δομή που καταλαβαίνει το ρομποτάκι .

Σκέφτομαι: Αν πατήσω το πλήκτρο <μπροστά> του Thymio, τότε, να κινείται με ταχύτητα 150 μονάδες για χρονική διάρκεια 3,5 δευτερόλεπτα (δηλαδή 3500 χιλιοστά του δευτερολέπτου μια και αυτό καταλαβαίνει το ρομποτάκι – 3500 ms όπου 1ms = 0.001 s).  Το τελευταίο εικονίδιο συμβολίζει το ξυπνητήρι – χρονόμετρο και τη ρύθμιση του χρόνου επιθυμητού…. κουδουνίσματος.

Φτιάχνοντας αυτή τη γραμμή και φορτώνοντάς την για εκτέλεση

διαπιστώνουμε ότι δεν γίνεται …τίποτα!

Θα πρέπει να συμπληρώσω τον κώδικα με μια δεύτερη γραμμή που λειτουργεί ως εξής:

Μόλις ολοκληρωθούν τα 3500 ms, τότε, σταματάει η κίνηση:

Μόνο με τα εικονίδια του VPL μπορούμε να επιλέγουμε χρονικές διάρκειες που να είναι πολλαπλάσια του 250 χιλιοστών δευτερολέπτου (ms). Έτσι, εύκολα, μπορούμε να επιλέγουμε, χρησιμοποιώντας το δείκτη του ποντικιού τις χρονικές διάρκειες: 500 ms, 750 ms, 1000 ms, 1250 ms, …4000 ms.  Ο κώδικας σε VPL δίνεται παρακάτω, πλάι στο Text Programming.

Περίπτωση 3.2 

Κίνηση του ρομπότ Thymio για χρονική διάρκεια μεγαλύτερη των 4  δευτερολέπτων, ας πούμε 7250 ms

Με βάση τη προηγούμενη περίπτωση η μέγιστη τιμή του χρονομέτρου είναι μόλις 4 ms. Για μεγαλύτερες τιμές, όπως για την τιμή 7250 ms, καταστρώνουμε το πρόγραμμα

Εννοείται ότι αντί για το συμβάν «πάτημα πλήκτρου» μπορεί να έχουμε και κάποιο άλλο από τα προηγούμενα που ήδη γνωρίσαμε. Για παράδειγμα, αν θέλουμε με ένα παλαμάκι να προκαλούμε την κίνηση και το χρονόμετρο να αναλαμβάνει τη διάρκεια κίνησης, τότε, έχουμε ένα πρόγραμμα όπως αυτό:

Υπενθύμιση της έννοιας «κατάσταση-state του Thymio» από τη σειρά δραστηριοτήτων του Eduportal:


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