Πειράματα ανίχνευσης εμποδίων στο προγραμματιστικό περιβάλλον BLOCKLY: Κίνηση του ρομπότ Thymio σε «Σχηματισμούς Εμποδίων»

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

Εισαγωγή

Σε παλιότερη ανάρτηση στο Eduportal ασχοληθήκαμε με τη λεγόμενη  «ανίχνευση εμποδίων» με την αξιοποίηση των επτά οριζόντιων αισθητήρων εγγύτητας (πέντε μπροστά και δύο πίσω) που διαθέτει το κινητό ρομποτάκι Thymio.

Στα παραδείγματά μας, για τον προγραμματισμό χρησιμοποιήσαμε αποκλειστικά τις κατάλληλες εντολές του περιβάλλοντος «Οπτικού Προγραμματισμού, VPL» (https://www.eduportal.gr/thymio-kinisi-1/ ).

Σήμερα, ενδιαφερόμαστε για τον προγραμματισμό στο BLOCKLY της κίνησης του ρομπότ και μάλιστα σε ένα χώρο που περιλαμβάνει ποικίλους σχηματισμούς με την αξιοποίηση ομοιόμορφων «αρθρωτών ξύλινων εμποδίων»:

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

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

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

Γενικά, στο BLOCKLY:

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

Πρώτα απ’ όλα θέλουμε το ρομποτάκι μας να κινηθεί με σταθερή ταχύτητα από τη στιγμή που πατήσω το κουμπί <μπροστά>.

Πρόκειται για γεγονός το οποίο μπορώ να επιλέξω από τα Events, όπως δείχνεται στο σχήμα, το block <αγγίζοντας το κουμπί <μπροστά> (forward).

Στη συνέχεια, για να κινείται το ρομποτάκι μας με σταθερή ταχύτητα 200 μονάδες, επιλέγω το block <start driving forward with speed 200> και το εισάγω στο προηγούμενο block, όπως δείχνεται παρακάτω:

Τέλος, για να λειτουργήσουν οι αισθητήρες – όπως ο μεσαίος μπροστινός και ο πίσω δεξιά – φτιάχνω τη λειτουργία <on proximity sensors updated> με τις δύο εντολές ελέγχου:

Αν η τιμή του μπροστινού αισθητήρα είναι μεγαλύτερη της τιμής 3000

τότε,

οπισθοχώρησε με την ίδια ταχύτητα 200 μονάδες

Αν η τιμή του πίσω δεξιά αισθητήρα είναι μεγαλύτερη της τιμής 500

τότε,

σταμάτησε

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

Παρεμβαίνοντας στον κώδικα δίνω διάφορες τιμές εγγύτητας του αισθητήρα και τρέχω το πρόγραμμα. Τα αποτελέσματα για τιμές (1000, 2000, 3000, 4000) φαίνονται στις τέσσερις φωτογραφίες

και τα οποία επαληθεύουν τον κανόνα:

«Όσο μεγαλύτερη είναι η τιμή εγγύτητας του αισθητήρα τόσο πιο κοντά στο εμπόδιο πλησιάζει το ρομποτάκι».

Εμπλουτισμός του πρώτου πειράματος με τηλεκοντρόλ

Επιλέγω μια μεταβλητή με όνομα <sensor> που να αντιστοιχεί στην τιμή εγγύτητας του μπροστινού αισθητήρα του Thymio. To BLOCKLY μας επιτρέπει τη χρήση εντολών για τον προγραμματισμό του τηλεκοντρόλ τόσο για την επιλογής τιμής της μεταβλητής <sensor> (1000, 2000, 3000, 4000) με τα κουμπιά 1, 2, 3,4, ενώ με το πλήκτρο μπροστά (κωδικός 80) κινείται το ρομποτάκι και το STOP (κωδικός 87) το σταμάτημά του.

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

Πιο συγκεκριμένα, το δεύτερο πείραμα εκπαιδευτικής ρομποτικής διατυπώνεται συνοπτικά ως εξής:

Μια πρώτη προσέγγιση: Πώς θα σκεφτόμουνα αν έκανα ο ίδιος τις παραπάνω διαδρομές βαδίζοντας πλάι σε ένα τοίχο – εμπόδιο;

Για τη μετάφραση αυτού του απλού συλλογισμού στη γλώσσα BLOCKLY -που καταλαβαίνει το ρομποτάκι μας – χρησιμοποιούμε την πιο απλή λειτουργία ανίχνευσης εμποδίων για τους δύο μπροστινούς αισθητήρες, τον αριστερό που είναι πιο κοντινός στο ξύλινο εμπόδιο και τον δεξιό:

Μια πρώτη προσέγγιση:  Ο κώδικας του προγράμματος περιλαμβάνει α) τη μεταβλητή (V) (για την ταχύτητα του Thymio) β) τη διαδικασία που αναφέρεται στους αισθητήρες εγγύτητας και γ) τη διαδικασία για την ενεργοποίηση της σύνδεσης του ρομπότ με το τηλεκοντρόλ:

  • πάτημα του πλήκτρου <μπροστά> για να αυξάνεται η ταχύτητα κατά 10 μονάδες εφόσον έχει τιμή μικρότερη των 400 μονάδων,
  • πάτημα του πλήκτρου <πίσω> για να ελαττώνεται η ταχύτητα κατά 10 μονάδες εφόσον έχει τιμή θετική, και

το πλήκτρο <στοπ> για να μηδενίζεται η ταχύτητα.

Ας πειραματιστούμε χωριστά για κάθε αρθρωτό σχηματισμό

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

Σκέφτηκα να εφοδιάσω το ρομποτάκι με ένα μαρκαδόρο ώστε να αποτυπώνεται στο λευκό χαρτί η τροχιά που αυτό διαγράφει. Στη φωτογραφία διακρίνονται τρεις τροχιές που αντιστοιχούν σε τρεις διαφορετικές αρχικές θέσεις του Thymio με την ίδια ταχύτητα V = 100 mm / s.

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

Περίπτωση 2  Διαθέτουμε ένα σχηματισμό αποτελούμενο από δύο αρθρωτά ξύλινα εμπόδια. Επαναλαμβάνουμε παρόμοιες διαδικασίες και παίρνουμε τροχιές όπως αυτή στη φωτογραφία. Και εδώ, διαπιστώνουμε ότι το ρομποτάκι, τελικά χτυπάει στη δεξιά άκρη του εμποδίου.

Περίπτωση 3  Επαναλαμβάνουμε  τις ίδιες διαδικασίες, καταγράφουμε τις τροχιές του κινητού και εξάγουμε παρόμοια συμπεράσματα όπως και προηγουμένως.

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

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

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

Είναι πολύ απλή η συμπληρωματική σκέψη μας:

«Αν δεν συναντάω εμπόδιο στα αριστερά και στα δεξιά,

ΤΟΤΕ,

προχώρα μπροστά.

 

Το τελικό πρόγραμμα στο BLOCKLY, βασισμένο στο προηγούμενο, ακολουθεί.

Δοκιμάζω το πρόγραμμα χρησιμοποιώντας τα δικά μου υλικά και διαπιστώνω ότι όλα λειτουργούν πολύ καλά εκτός από την περίπτωση 3 της σύνδεσης των ξύλινων εμποδίων μια και εκεί ο αριστερός αισθητήρας ΔΕΝ ανιχνεύει εμπόδιο!

Αυτό μπορεί να ξεπεραστεί αρκεί να καλύψουμε το «κενό» με ένα λευκό χαρτόνι όπως δείχνει η φωτογραφία.

Μια τρίτη προσέγγιση του κώδικα ολοκληρώνει τον πειραματισμό μας.

Πρόκειται για την «υποχρέωση» να μπορεί να εφαρμοστεί το πρόγραμμα μας και στις περιπτώσεις που δεν χρησιμοποιούμε αυτά τα ξύλινα εμπόδια αλλά από διαφορετικά υλικά (κουτιά, βιβλία, «τουβλάκια της LEGO» και άλλα αντικείμενα). Για να το πετύχουμε, οφείλουμε να αξιοποιήσουμε τις λειτουργίες που μας παρέχουν τις τιμές εγγύτητας μεταξύ εμποδίου και αισθητήρων.  Έτσι, στην κύρια διαδικασία ανίχνευσης <on proximity sensors>  χρησιμοποιούμε τις λειτουργίες με το να συγκρίνουμε τις τιμές εγγύτητας των αισθητήρων.

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

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

Σημείωση: Με βάση τα παραπάνω προγράμματα που οικοδομήσαμε με θέμα τους «σχηματισμούς εμποδίων» μπορείτε εύκολα να φτιάξετε αντίστοιχα προγράμματα τέτοια ώστε η διαδρομή του κινητού να γίνεται με αρχή τη δεξιά άκρη του.

Ευχαριστίες: Η Ιδέα των σχηματισμών με βάση τα αρθρωτά εμπόδια είναι παρμένη από Γαλλικό βίντεο στο YouTube και αναφέρεται σε δραστηριότητες με το ρομποτάκι Thymio. Ευχαριστώ το φίλο Αυγουστή Κλείσαρη, καθηγητή στο ΕΠΑΛ Σύρου,  για την κατασκευή χαμηλού κόστους των πέντε ζευγαριών «αρθρωτών ξύλινων εμποδίων» κατάλληλων για πειράματα και παιχνίδια ρομποτικής (σχηματισμοί εμποδίων, διάδρομοι, λαβύρινθοι κ.λ.π.)

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