Ρόμπο4 – 7ο Γυμνάσιο Χαϊδαρίου

Ρόμπο4 – 7ο Γυμνάσιο Χαϊδαρίου

Έργο

Το σχολείο μας συμμετέχει και φέτος στο διαγωνισμό της ΕΛΛΑΚ με το έργο Ρομπο-4 που βασίζεται σε συνδυασμό ιδεών που μας προέκυψαν από τα προηγούμενα έργα μας. Αφορά την κατασκευή ενός ρομποτικού χεριού που θα μπορεί να παίζει εναντίον ενός (ανθρώπινου) αντιπάλου το επιτραπέζιο παιχνίδι Σκορ-4 γνωστό και ως Τέσσερα στη Σειρά (connect-4, four-in-a-row).

Ομάδα

Στη διάρκεια του σχολικού έτους 2021-2022 η ομάδα ρομποτικής @robot7gymchai του σχολείου μας, αποτελείται από τον μαθητή της πρώτης τάξης Μουτζουρίδη Βασίλη, τη μαθήτρια της δεύτερης τάξης Λυμπερίου Θεοδώρα και τον καθηγητή πληροφορικής Μαχαιρίδη Τάσο.

 

Περιγραφή παιχνιδιού – Κανόνες παιχνιδιού

Το Σκορ-4 παίζεται σε μια πίστα με 42 θέσεις οργανωμένες σε 6 γραμμές και 7 στήλες. Τα πούλια, 21 κόκκινα και 21 κίτρινα, μοιράζονται στους δύο παίκτες. Κάθε φορά, ο παίκτης που έχει τη σειρά να παίξει (ο άνθρωπος με τα κόκκινα και η μηχανή με τα κίτρινα), ρίχνει ένα πούλι με το χρώμα του, στην κορυφή της στήλης που έχει επιλέξει, εφόσον υπάρχει κενό. Το πούλι στοιβάζεται πάνω σε τυχόν προηγούμενα πούλια της στήλης, καλύπτοντας τον κενό χώρο. Νικητής του αγώνα είναι ο πρώτος από τους δύο παίκτες που θα σχηματίσει τουλάχιστον μια τετράδα από συνεχόμενα πούλια του χρώματός του στην πίστα, με διεύθυνση είτε οριζόντια, είτε κάθετη, είτε διαγώνια. Αν δεν το κατορθώσει κανείς και γεμίσει η πίστα με τα πούλια και των δύο παικτών, τότε οι παίκτες θεωρούνται ισόπαλοι.

Σκοπός και σύνδεση με το διαγωνισμό (Το πρόβλημα)

Ο σκοπός του έργου είναι η διασκεδαστική κατασκευή ενός ψυχαγωγικού παιχνιδιού που συνδυάζει γνώσεις και δεξιότητες από τους τομείς της μηχανικής, της πληροφορικής, της ρομποτικής και των ηλεκτρονικών. Έτσι από τις κατηγορίες του διαγωνισμού, ανήκει στην «Ψυχαγωγία». Και η σχέση με τον τομέα της τεχνητής νοημοσύνης είναι η προσπάθεια να αποδοθεί στη μηχανή ευφυΐα τέτοια, που να μπορεί να προκαλέσει ισάξια έναν άνθρωπο να νικήσει ένα ρομπότ, σε ένα «ανθρώπινο» επιτραπέζιο παιχνίδι.

Στόχοι

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

Υλικά

Για την υλοποίηση του έργου, χρειάζονται:

  • Ένα πλαστικό ταμπλό με πόδια από επιτραπέζιο Σκορ-4 με πόδια και 42 πούλια δύο χρωμάτων, από κατάστημα παιχνιδιών (€15)
  • Κατασκευαστικά υλικά (€20): A4 μακετόχαρτο, ένα μικρό ξύλο τύπου μπάλσα, μια ξύλινη βάση MDF πάχους ½ εκ., 10 εκ. σωλήνας από χοντρό χαρτόνι, θερμόκολλα σιλικόνης, αφρολέξ, μια άδεια πλαστική θήκη DVD για 50 δίσκους (disk cake)
  • Ηλεκτρονικά εξαρτήματα: μικροελεγκτής Arduino mega (€25), ρομποτικός βραχίονας (€170) τουλάχιστον τεσσάρων βαθμών ελευθερίας, με αντίστοιχους σερβοκινητήρες και πλακέτα οδήγησης (shield), επτά αισθητήρες εγγύτητας (proximity) υπέρυθρων (€10), πλακέτα δοκιμών (breadboard) και καλώδια σύνδεσης (€5)
Εργαλεία:

πριόνι ξύλου, πιστόλι θερμόκολλας, λεπίδι, κατσαβίδια, πολύμετρο, χάρακας

Υλοποίηση – Κατασκευή

Στο Σκορ-4, οι δύο παίκτες παίζουν ο ένας μετά τον άλλον, στη σειρά. Πάντα θα ξεκινάει το παιχνίδι ο άνθρωπος (με τα κόκκινα πούλια), που όταν έχει σειρά, θα χρειαστεί να ανιχνεύεται η στήλη στην οποία έριξε το πούλι του. Γι’ αυτό το σκοπό, χρησιμοποιούμε επτά ηλεκτρονικούς αισθητήρες στερεωμένους σε τρύπες στην κορυφή κάθε στήλης, μέσα σε μια υπερκατασκευή.

 

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

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

 

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

 

Μια δεύτερη κατασκευή από ξύλο μπάλσα και μακετόχαρτο, αφορά μια γλύστρα για τα πούλια. Λειτουργεί ως τροφοδότης του ρομποτικού χεριού, με πούλια. Πρόκειται για έναν λεπτό διάδρομο που χωράει 12 πούλια, όρθια τοποθετημένα σε σειρά και στερεώνεται σε αρκετή κλίση με μια κολώνα από χαρτόνι. Όταν το χαμηλότερο πούλι αφαιρείται, τότε τα παραπάνω πούλια κυλάνε στον διάδρομο μια θέση παρακάτω και το επόμενο παίρνει τη θέση του. Για να φρενάρει το πούλι που κυλάει και να μην αναπηδάει στο σκληρό ξύλο στο τέλος της διαδρομής, κολλάμε ένα μικρό κομμάτι αφρώδες υλικό, π.χ. αφρολέξ.

 

Κώδικας – Εργαλεία – Γλώσσα

Ο προγραμματισμός του μικροελεγκτή γίνεται στο περιβάλλον Arduino Web Editor στον ιστότοπο της εταιρείας. Μέσα από το chrome, αφού συνδεθούμε με τον λογαριασμό μας, πληκτρολογούμε τον πηγαίο κώδικα, τον μεταφράζουμε και ανεβάζουμε το εκτελέσιμο αρχείο στον μικροελεγκτή, μέσω της σειριακής του θύρας και της USB του υπολογιστή. Η γλώσσα προγραμματισμού είναι μια παραλλαγή της C++11 (χωρίς στη βασική βιβλιοθήκη STL), όμως μπορεί να χρησιμοποιηθεί και η Python.

 Vid.20210628.113824-1-h264.mp4 

Μοντελοποίηση

Η κατάσταση του παιχνιδιού κρατιέται σε έναν πίνακα δύο διαστάσεων με 6 γραμμές και 7 στήλες, που σε κάθε θέση μπορεί να έχει μία από τις δυνατές τιμές «Κόκκινο», «Κίτρινο», ή «Κενό». Φυσικά, αρχικά όλες οι θέσεις έχουν την τιμή Κενό.

Αλγόριθμοι και τεχνητή ευφυΐα (ΑΙ)

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

Αλλάζει η σειρά και τώρα πρέπει να παίξει το ρομπότ. Η απόφαση για τη στήλη που θα ρίξει το πούλι του, λαμβάνεται από τον αλγόριθμο εξερεύνησης negamax, μια συντομότερη παραλλαγή του αλγόριθμου minimax, ενισχυμένο με τη δυνατότητα κλαδέματος των κόμβων του δέντρου της εξέλιξης του παιχνιδιού (alpha-beta). Επιπρόσθετα, η εξερεύνηση ξεκινάει από τις κεντρικότερες στήλες και καταλήγει στις ακραίες στήλες της πίστας, διότι τα πούλια στις πρώτες είναι πιθανότερο να σχηματίσουν νικητήριες τετράδες.

 Vid.20210628.110137-1-h264.mp4 

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

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

 Vid.20210903.105925-h264.mp4 

Διεύθυνση αποθετηρίου στο Github: https://github.com/amachg/Robo4