ΠΡΟΓΡΑΜΜΑ "ΡΟΜΠΟΤ ΜΙΝΙ-ΣΟΥΜΟ. Το τελικό άρθρο για τη συναρμολόγηση ενός ρομπότ μίνι σούμο. Στο πρώτο μέρος του άρθρου "Πλαίσιο για ένα ρομπότ μίνι σούμο" περιγράφηκε λεπτομερώς πώς να φτιάξετε ένα σασί ρομπότ. Σε αυτό το άρθρο, θα αναλύσουμε λεπτομερώς τη σύνταξη ενός προγράμματος για ένα ρομπότ. Το ρομπότ μας είναι έτοιμο. Διαθέτει σασί, η λειτουργία του "εγκεφάλου" θα εκτελείται από έναν μικροελεγκτή και η επικοινωνία με τον έξω κόσμο θα γίνεται από αισθητήρες. , παρ' όλα αυτά, θα εξακολουθεί να στέκεται ακίνητος στο τραπέζι. Και για να μην συμβεί αυτό, ήρθε η ώρα να αναπνεύσουμε τη ζωή της δημιουργίας μας, ας πούμε, να νιώσουμε εντελώς "δημιουργός". Το πρόγραμμα που θα δημιουργήσουμε θα όχι μόνο αναζωογονήστε το ρομπότ, αλλά και κάντε το να συμπεριφέρεται με νόημα και λογική στο ρινγκ.


1. Η βάση του προγράμματος είναι ο αλγόριθμος.

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

Δεν θα χρησιμοποιήσω επιστημονικούς όρους, θα πω απλώς ότι ένας Αλγόριθμος είναι μια περιγραφή μιας ακολουθίας ορισμένων ενεργειών. Όλη μας η ζωή είναι διάφορες ενέργειες. περπατάμε, μιλάμε, κινούμε τα χέρια και τα πόδια μας, γυρίζουμε το κεφάλι μας. Όλα αυτά έχουν τη δική τους σημασία - έναν αλγόριθμο, μια ακολουθία που καθορίζει τη συμπεριφορά μας και μπορεί να συνταχθεί και να περιγραφεί. Για λόγους σαφήνειας, θα δώσω ένα παράδειγμα από τη ζωή. Βουρτσίζετε τα δόντια σας κάθε πρωί. Προσπαθήστε να περιγράψετε πώς το κάνετε, πώς να γράψετε ένα πρόγραμμα για τον εαυτό σας. Να τι συμβαίνει: «Παίρνουμε μια οδοντόβουρτσα. Στύψτε την πάστα. Βουρτσίζουμε τα δόντια μας με κινήσεις αριστερά-δεξιά. Ξεπλένω το στόμα μου. Το πινέλο μου».

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

"Ξύπνα. Σηκωθείτε από το κρεβάτι...» Εάν σταματήσετε να δημιουργείτε τον αλγόριθμο σε αυτό το στάδιο και προχωρήσετε κατευθείαν στο βούρτσισμα των δοντιών σας, το πρόγραμμα θα σταματήσει (κολλάει). Γιατί; Γιατί πάλι δεν λάβαμε υπόψη όλους τους παράγοντες. Στέκεστε στη μέση της κρεβατοκάμαράς σας και δεν μπορείτε να εκτελέσετε την επόμενη εντολή. «Παίρνουμε μια οδοντόβουρτσα», αφού η βούρτσα είναι στο μπάνιο και πρέπει ακόμα να μπεις σε αυτήν. Λοιπόν, αν κοιμάστε στο μπάνιο, τότε δεν υπάρχει πρόβλημα - το πρόγραμμα θα εκτελεστεί! Αλλά στις περισσότερες περιπτώσεις, οι κανονικοί άνθρωποι κοιμούνται σε άλλο δωμάτιο. Αυτή η προσέγγιση ονομάζεται λογική, δηλαδή έχει νόημα. Όλες οι ενέργειές μας πρέπει να είναι λογικές και να περιέχουν κάποιο νόημα, διαφορετικά ο στόχος δεν θα επιτευχθεί. Λοιπόν «Ξύπνα. Σήκω. Πήγαινε στο μπάνιο» θα ήταν η καλύτερη επιλογή.

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

Ρύζι. 1 Αλγόριθμος συμπεριφοράς του ρομπότ στο δαχτυλίδι.

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

Το πρώτο μπλοκ είναι "Έναρξη". Από αυτή τη στιγμή, το πρόγραμμα ξεκινά να εκτελεί τις ενέργειες του ρομπότ αφού ενεργοποιηθεί. Το πρώτο πράγμα που θα πρέπει να κάνει είναι να βρει τον εχθρό, το μπλοκ "Target Search". Το επόμενο μπλοκ του σχήματός μας έχει τη μορφή ρόμβου "Βρέθηκε στόχος;". Αυτό σημαίνει ότι θα έχουμε μια επιλογή ενεργειών για να επιτύχουμε ένα συγκεκριμένο γεγονός. Εάν βρεθεί ο στόχος (Ναι), τότε θα συνεχίσουμε το πρόγραμμα και θα προχωρήσουμε στο επόμενο μέρος του προγράμματος «Επίθεση», αλλά αν δεν βρεθεί ο στόχος (Όχι), τότε είναι πολύ λογικό να συνεχίσουμε την αναζήτησή του. . Το πρόγραμμα θα κάνει βρόχο αυτή τη στιγμή μέχρι το ρομπότ να εντοπίσει τον εχθρό. Όταν επιτίθεται, το ρομπότ κινείται προς τα εμπρός προς τον αντίπαλο, προσπαθώντας να τον σπρώξει έξω από το ρινγκ, αυτή τη στιγμή το μπλοκ "Φτάσατε στην άκρη του ρινγκ;", αν δεν φτάσει η άκρη του ρινγκ, τότε η επίθεση συνεχίζεται, αλλά αν οι αισθητήρες εντοπίσουν μια λευκή λωρίδα στην άκρη, τότε η επίθεση σταματά και το πρόγραμμα προχωρά στο επόμενο μπλοκ "Drive back" και "Reversal". Μετά τη στροφή, ο κύκλος του κύριου προγράμματος επαναλαμβάνεται, ξεκινάει δηλαδή από την αρχή και το ρομπότ ψάχνει ξανά τον εχθρό. Έγινε για κάποιο λόγο. Εάν τη στιγμή της επίθεσης, ο εχθρός κατάφερε να ξεφύγει από το ρομπότ μας, τότε πρέπει να επιστρέψουμε στην αναζήτησή του χωρίς να φύγουμε από την άκρη του ρινγκ. Όλα με τη θεωρία. Ας προχωρήσουμε στην εξάσκηση.

2. Κανόνες για τη σύνταξη προγραμμάτων για το Arduino.

Αν και είπα ότι το θεωρητικό μέρος έχει τελειώσει, αλλά θα πρέπει να μελετήσουμε την αρχή της κατασκευής ενός προγράμματος για Μικροελεγκτές Arduino, αν και αυτές οι αρχές θα ισχύουν για άλλα MK της οικογένειας AVR.

Ρύζι. 2 Μέθοδος σύνταξης προγράμματος για Arduino.

Αυτό το μπλοκ διάγραμμα μας δείχνει ξεκάθαρα τι σημαντικά σημεία, και με ποια σειρά πρέπει να τηρείται κατά τη σύνταξη ενός προγράμματος.

Στην αρχή του προγράμματος, εάν είναι απαραίτητο, συνδέονται πρόσθετες ενότητες. Στη συνέχεια δηλώνονται οι καθολικές μεταβλητές. Ακολουθεί το μπλοκ αρχικοποίησης ελεγκτή. Καθορίζει τις εκχωρήσεις θύρας, είτε πρόκειται για είσοδο είτε για έξοδο, και άλλες ρυθμίσεις. Μπορούν επίσης να κληθούν πρόσθετες βοηθητικές ρουτίνες από αυτό το μπλοκ. Για να είμαστε σύντομοι, σε αυτό το σημείο το πρόγραμμα παράγει προεπιλογέςελεγκτής. Αυτό το μπλοκ εκτελείται μία φορά κατά την εκκίνηση ή την επανεκκίνηση του ελεγκτή. Λάβετε υπόψη ότι η γραμμή "καθυστέρηση 5 δευτερολέπτων" έχει προστεθεί στο μπλοκ. Προς την γενικοί κανόνεςαυτό δεν ισχύει για τη σύνταξη ενός προγράμματος, αλλά ένα ρομπότ μίνι σούμο είναι απαραίτητο. Οι κανόνες λένε ότι μετά από εντολή του διαιτητή, τα ρομπότ πρέπει να αρχίσουν να κινούνται μετά από 5 δευτερόλεπτα. Αυτή η καθυστέρηση δεν μπορεί να πραγματοποιηθεί στον κύριο βρόχο του προγράμματος, καθώς θα επαναλαμβάνεται συνεχώς και η συμπεριφορά του ρομπότ δεν θα αλλάξει προς το καλύτερο.

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

3. Εργαλείο ανάπτυξης Arduino IDE.

Λήψη από τον ιστότοπο Arduino.ru τελευταία έκδοση Arduino IDE. Το πρόγραμμα δεν απαιτεί ειδική εγκατάσταση, αρκεί να αποσυσκευάσετε τα περιεχόμενα του αρχείου Σωστό μέρος. Στο τέλος αυτού του άρθρου βρίσκεται το αρχείο βιβλιοθήκης του Ultrasonic rangefinder. Θα πρέπει να αποσυσκευαστεί στο φάκελο Βιβλιοθήκες.

Εκκινούμε την εφαρμογή. Ελέγχουμε τη σωστή εγκατάσταση της βιβλιοθήκης, πηγαίνουμε στο μενού, "Αρχείο" - "Παραδείγματα". Σχεδόν στο κάτω μέρος, το στοιχείο Ultrasonic θα πρέπει να εμφανίζεται όπως στην εικ. 3.

Ρύζι. 3 Βεβαιωθείτε ότι η βιβλιοθήκη Ultrasonic έχει εγκατασταθεί σωστά.

Εάν όλα είναι καλά, μεταβείτε στο στοιχείο "Υπηρεσία" - "Πληρωμή". Πρέπει να επιλέξουμε την πλακέτα μας - Arduino Pro Mini 5v.

Ρύζι. Ρύθμιση πλακέτας 4 ελεγκτών

Η σειριακή θύρα πρέπει να επιλεγεί αυτή που εμφανίζεται μετά Συνδέσεις Arduinoστον υπολογιστή. Λίγα πρέπει να πούμε για το Arduino Pro Mini. Σε αντίθεση με άλλους ελεγκτές της οικογένειας Arduino, το Pro Mini δεν διαθέτει ενσωματωμένη μονάδα σύνδεσης υπολογιστή. Έρχεται ξεχωριστά ως πίνακας. Προσαρμογέας USBστο UART(TTL) και συνδέεται με την πλακέτα του ελεγκτή χρησιμοποιώντας τέσσερα καλώδια.

Ρύζι. 5 προσαρμογέας USB-UART (TTL).

Στο σχ. Το 6 δείχνει πώς να συνδέσετε σωστά τον ελεγκτή και τον προσαρμογέα.

Ρύζι. 6. Σύνδεση του ελεγκτή στον προσαρμογέα USB-UART.

Σε αντίθεση με τη ληφθείσα σύνδεση γραμμών σήματος, αντί για RX-TX και TX-RX, αυτές οι γραμμές πρέπει να συνδεθούν απευθείας: RX-RX, TX-TX. Την πρώτη φορά που θα συνδέσετε τον προσαρμογέα στον υπολογιστή σας, τα προγράμματα οδήγησης συσκευών θα ξεκινήσουν αυτόματα την εγκατάσταση. Θα πρέπει να περιμένετε να ολοκληρωθεί η εγκατάσταση. Ένα άλλο χαρακτηριστικό του ελεγκτή είναι η έλλειψη λογισμικού Επαναφοράτη στιγμή του προγραμματισμού. Αυτό είναι φυσικά λίγο άβολο, αλλά όχι αρκετό για να αρνηθεί κανείς το Pro Mini. Αρκεί να πατήσετε το κουμπί Επαναφορά στον ελεγκτή αφού η επιγραφή "Μεταγλώττιση" αλλάξει σε "Λήψη", Εικ. 7.

Ρύζι. 7. Εμφάνιση πληροφοριών σχετικά με την πρόοδο του προγραμματισμού MK.

4. Γράφουμε τον κωδικό.

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

Ρύζι. 8. Σύνταξη του αρχικού μπλοκ του προγράμματος.

Το πρώτο μπλοκ: η οδηγία # συνδέει τη βιβλιοθήκη ελέγχου της μονάδας με το έργο μας.

Δεύτερο μπλοκ: Δηλώνουμε μεταβλητές και γράφουμε αρχικές τιμές ίσες με μηδέν σε αυτές. Λάβετε υπόψη ότι δεν θα δημιουργήσουμε ονόματα για τις θύρες εξόδου του MK. Τα άφησα επίτηδες σε ψηφιακή μορφή για να μπορείτε να ανατρέξετε εύκολα διάγραμμα κυκλώματος. Σε αυτό το μπλοκ, δηλώνουμε μόνο τρεις μεταβλητές - αυτοί είναι οι αριστεροί και δεξιοί αισθητήρες του δακτυλίου (_ και _), θα αποθηκεύσουν τις τιμές ADC. Εκτός από τη μεταβλητή απόστασης του τηλεμετρητή υπερήχων (_), θα καταγράφει την απόσταση σε εκατοστά από το εμπόδιο.

Η γραμμή Ultrasonic ultrasonic (4, 2) δεν είναι τίποτα περισσότερο από μια δήλωση μιας μεταβλητής για τον μετρητή απόστασης υπερήχων, που λαμβάνεται από το παράδειγμα της περιεχόμενης βιβλιοθήκης. Σε παρένθεση βρίσκονται οι θύρες στις οποίες είναι συνδεδεμένος ο αισθητήρας.

Το τρίτο μπλοκ: (), σε αυτό διαμορφώνουμε όλες τις εισόδους και εξόδους του μικροελεγκτή. Θα λαμβάνουμε εισερχόμενα σήματα στις θύρες 15, 17, οπότε εκχωρούμε (Είσοδο) σε αυτές. Έχουμε τέσσερις θύρες που ελέγχουν τους κινητήρες: 3,5 για τον αριστερό κινητήρα και 6,9 για τον δεξιό κινητήρα, τις εκχωρούμε ως έξοδο.

Γιατί χρησιμοποιούμε δύο θύρες για έναν κινητήρα; Όλα είναι απλά. Εάν εφαρμοστεί τάση στις επαφές του κινητήρα, θα αρχίσει να περιστρέφεται προς μία από τις κατευθύνσεις, ας πούμε δεξιόστροφα. Αλλά αν αλλάξετε την πολικότητα, π.χ. αλλάξτε το "συν" και το "πλην" - ο άξονας του κινητήρα θα περιστραφεί προς την άλλη κατεύθυνση. Θα χρησιμοποιήσουμε αυτήν την ιδιότητα για πλήρεις ελιγμούς.

5. Ο κύριος βρόχος βρόχου.

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

Εξετάστε τη δομή του κύκλου μας με βάση τον αλγόριθμο στο Σχ. 9

Ρύζι. 9. Αλγόριθμος του βρόχου του κύριου βρόχου.

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

void check_sensor() // Υπορουτίνα για έλεγχο αισθητήρων.

R_Sensor=analogRead(15); // διαβάστε τις σωστές μετρήσεις του αισθητήρα

L_Sensor=analogRead(17); // διαβάστε τις ενδείξεις του αριστερού αισθητήρα

καθυστέρηση(10); //καθυστέρηση για την ολοκλήρωση της μετατροπής ADC

dist_cm = υπερήχων.Ranging(CM); // διαβάστε τις μετρήσεις του μετρητή απόστασης υπερήχων

καθυστέρηση(10); // Καθυστέρηση για την ολοκλήρωση της μετατροπής

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

void go_left() // αναζήτηση για έναν στόχο ή πηγαίνετε αριστερά

analogWrite(5, 100); //ΑΡΙΣΤΕΡΟ ΜΟΤΕΡ

analogWrite(6, 100); //ΔΕΞΙ ΜΟΤΕΡ

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

Εάν εντοπιστεί ο στόχος, πρέπει να του επιτεθούμε, προχωρώντας με πλήρη ταχύτητα.

void go_forward() //Επίθεση - κίνηση προς τα εμπρός

analogWrite(3, 0); //ΑΡΙΣΤΕΡΟ ΜΟΤΕΡ

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

go_stop(); // να σταματήσει

καθυστέρηση (100); //περιμένετε 10 ms

Πήγαινε πίσω(); // Μετακινηθείτε προς τα πίσω

καθυστέρηση (1000); //1 δευτερόλεπτο.

πήγαινε δεξιά(); //Στρίψτε δεξιά

καθυστέρηση (300); //300ms

προχώρα(); //Προχώρα μπροστά

καθυστέρηση (300); //300ms

void go_stop() //stop

analogWrite(5, 255); //ΑΡΙΣΤΕΡΟ ΜΟΤΕΡ

analogWrite(9, 255); //ΔΕΞΙ ΜΟΤΕΡ

void go_back () //go back

analogWrite(3, 255); //ΑΡΙΣΤΕΡΟ ΜΟΤΕΡ

analogWrite(6, 255); //ΔΕΞΙ ΜΟΤΕΡ

analogWrite(9, 0); //ΔΕΞΙ ΜΟΤΕΡ

void go_right () //αναζητήστε έναν στόχο ή μετακινηθείτε προς τα δεξιά

analogWrite(3, 100); //ΑΡΙΣΤΕΡΟ ΜΟΤΕΡ

analogWrite(5, 0); //ΑΡΙΣΤΕΡΟ ΜΟΤΕΡ

analogWrite(6, 0); //ΔΕΞΙ ΜΟΤΕΡ

analogWrite(9, 100); //ΔΕΞΙ ΜΟΤΕΡ

void go_forward() //Επίθεση προς τα εμπρός

analogWrite(3, 0); //ΑΡΙΣΤΕΡΟ ΜΟΤΕΡ

analogWrite(5, 255); //ΑΡΙΣΤΕΡΟ ΜΟΤΕΡ

analogWrite(6, 0); //ΔΕΞΙ ΜΟΤΕΡ

analogWrite(9, 255); //ΔΕΞΙ ΜΟΤΕΡ

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

Το πλήρες σκίτσο για λήψη βρίσκεται στο τέλος του άρθρου.

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

Αρχείο 1

Αρχείο 2στο άρθρο "Πρόγραμμα του ρομπότ minisumo".

Εάν έχετε οποιεσδήποτε ερωτήσεις, γράψτε στο FORUM ή στην ηλεκτρονική συνομιλία για τη ρομποτική, θα τις συζητήσουμε!

Προσοχή! Απαγορεύεται η πλήρης ή μερική αντιγραφή υλικού χωρίς την άδεια της διοίκησης!

Γειά σου! Θα θέλατε να συναρμολογήσετε ένα ρομπότ που δεν είναι δύσκολο να συναρμολογηθεί; Ήρθατε στο σωστό μέρος! =) Στον ιστότοπό μας μπορείτε να βρείτε αναλυτικά άρθρα σχετικά με τη βήμα προς βήμα συναρμολόγηση του πρώτου σας ρομπότ, καθώς και πολλών άλλων ρομπότ, ακόμη και για διαγωνισμούς.

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

Βοηθήστε το έργο μας! Εγγραφείτε στον ιστότοπό μας και ελάτε στη διαδικτυακή συνομιλία ή το φόρουμ μας και μοιραστείτε τις χειροτεχνίες σας και την πρόοδό σας - τελικά, είναι η δραστηριότητά σας που προσελκύει όλο και περισσότερη προσοχή στη ρομποτική για αρχάριους - κοιτάζουν την επιτυχία σας και θέλουν να γίνουν το ίδιο cool , και πραγματικά Χαίρομαι που βλέπεις ότι όλα σου πάνε καλά. Και αν κάτι δεν λειτουργήσει - θα βοηθήσουμε;)

Σούμο- ένα από τα πιο συναρπαστικά Διαγωνισμός ρομπότ Lego Ev3. Σε αυτόν τον διαγωνισμό, το ρομπότ πρέπει να σπρώξει το ρομπότ του αντιπάλου έξω από τον κύκλο χωρίς να βγει από τον ίδιο τον κύκλο.

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

Ας περιγράψουμε Αλγόριθμος και πρόγραμμα σούμογια ρομπότ EV3

1 Δράση.

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

Ρυθμίστε την αναμονή στα 3 δευτερόλεπτα.

2 Δράση. Οδηγούμε πίσω στα σύνορα.


3 δράση. Αφού το ρομπότ έχει οδηγήσει στα σύνορα, πρέπει να προχωρήσει. Κίνηση προς τα εμπρός.

4 Δράση. Δημιουργήσαμε έναν άπειρο βρόχο. Το ρομπότ θα επιτεθεί στον εχθρό μέχρι να απωθηθεί ή μέχρι να τελειώσει ο χρόνος του αγώνα.

Βάζουμε έναν κύκλο περιστροφής με έναν αισθητήρα υπερήχων σε αυτό. (μπορείτε επίσης να χρησιμοποιήσετε έναν αισθητήρα υπερύθρων)


5 Δράση. Προχωράμε μπροστά μέχρι ο αισθητήρας χρώματος να δει μια μαύρη γραμμή, το περίγραμμα του κύκλου.

6. Δράση Αφού δούμε τα σύνορα, οδηγούμε πίσω.

Ασκηση.

Γράψτε μόνοι σας την αναχώρηση χρησιμοποιώντας το μάθημα 1.

Γεια σου Geektimes!

Εισαγωγή

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

Λίγα λόγια για την ομάδα μας

Υπάρχουμε από το 2014. Νικητές και νικητές των περισσότερων διαγωνισμών Robofinist, Robofest, MIPT Spartakiad και μικρότερων τουρνουά, και είμαστε οι απόλυτοι πρωταθλητές της Ρωσίας για το 2016-2017 στην υποψηφιότητα για μίνι σούμο.

Ποια είναι τελικά αυτά τα ρομπότ σούμο;

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

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

Υπάρχουν 4 τύποι:

1. Μέγα παλαιστής σούμο
2. Μίνι παλαιστής σούμο
3. Μικροπαλαιστής σούμο
4. Νανοπαλαιστής σούμο

Ο καθένας είναι διαφορετικός όχι μόνο εξωτερικά, αλλά και εσωτερικά.

Mega - τα μεγαλύτερα και πιο επικίνδυνα ρομπότ. Το μέγιστο βάρος είναι έως 3 κιλά, η δυνατότητα να βάζεις διάφορα «κορόιδα», κάτι που δεν επιτρέπεται να γίνει με άλλα ρομπότ.

Μίνι - ευχάριστα, μικρά ρομπότ έως 500 γραμμάρια 10 επί 10 εκ. Δεν είναι δύσκολο να συγκολληθούν, εύκολα στη ρύθμιση και τη συναρμολόγηση. Είναι η πιο δημοφιλής υποψηφιότητα στο σούμο.

Μικρο και νανο - μειωμένα μίνι αντίγραφα. Micro 5x5x5, nano 2,5x2,5x2,5. Δύσκολη η συγκόλληση και η παραλαβή εξαρτημάτων. Πιο δημοφιλές από το μέγα σούμο.

Από τι είναι φτιαγμένα?

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

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

Περισσότερα για τη συναρμολόγηση και τη συσκευασία

Οι παλαιστές σούμο που αγωνίζονται κάνουν στο arduino. Χρησιμοποιούν πλακέτες textolite, αισθητήρες συγκόλλησης, ελεγκτή, οδηγό κλπ. Υπάρχει επίσης μεγάλη ποικιλία αισθητήρων για την ανίχνευση εχθρού, αλλά αξίζει να χρησιμοποιήσετε υπέρυθρες ή λέιζερ, γιατί Τα σόναρ είναι πολύ αργά και ογκώδη. Φυσικά, χρειάζονται κινητήρες και τροχοί για να κινηθεί το ρομπότ. Μπορείτε να τα βάλετε σε απεριόριστο αριθμό, αλλά η πρακτική δείχνει ότι το ρομπότ οδηγεί καλύτερα σε δύο τροχούς που είναι τοποθετημένοι στο πίσω μέρος. Και, φυσικά, το ρομπότ δεν μπορεί να ζήσει χωρίς κουβά και γάντζο. Ο κάδος είναι απλώς μια θήκη, ένα περιτύλιγμα και προστασία για τον πίνακα και τα στοιχεία. Τις περισσότερες φορές χάλυβας ή σίδηρος. Τα άγκιστρα είναι κατασκευασμένα από λεπίδες για χαρτικά μαχαίρια, αλλά υπάρχουν περιπτώσεις με μη τυποποιημένη προσέγγιση, για παράδειγμα, ακονισμένο ξύλινο χάρακα ή βαμβάκι, αλλά αυτή η προσέγγιση είναι ελάχιστη χρήσιμη.

Το πιο δύσκολο πράγμα (εκτός από τον προγραμματισμό) είναι να σχεδιάσετε ένα ρομπότ.

Πρώτο στάδιο



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

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

Δεύτερη φάση



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

Δείτε πώς φαίνεται στον έτοιμο πίνακα:

Τελειωμένη σανίδα



Ρομπότ έτοιμο να τρέξει:

Όπως μπορείτε να δείτε, δεν υπάρχει τίποτα ιδιαίτερα περίπλοκο εδώ. Σχετικά με τα παρακάτω προβλήματα.

Ας περάσουμε στον προγραμματισμό

Ο ευκολότερος τρόπος είναι να χρησιμοποιήσετε ελεγκτές arduino ή συμβατούς με arduino. Επίσης, το Arduino IDE για να μας βοηθήσει. Με πρότυπο σχήματο ρομπότ έχει 5 αισθητήρες. Άρα τα κράτη μπορούν να είναι

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

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

Κωδικός ρομπότ

// Ρύθμιση ακίδων για αισθητήρες int pin_left=10; int pin_center_left=11; int pin_center_right=4; int pin_center=12; int pin_right=7; // Καρφίτσες σε κινητήρες int pin_motor_left_forward=9; int pin_motor_left_back=6; int pin_motor_right_forward=3; int pin_motor_right_back=5; // Μεταβλητές για την αποθήκευση του αποτελέσματος των αισθητήρων ψηφοφορίας int cl,cc,cr,l,r; // Λειτουργία για αισθητήρες ψηφοφορίας void GLAZ() ( cl = digitalRead(pin_center_left); cc = digitalRead(pin_center); cr = digitalRead(pin_center_right); l = digitalRead(pin_left); r = digitalRead(pin_right); ) // Function κίνηση, δεχόμενη ταχύτητες από 0 έως 255 για να τροφοδοτήσει κάθε κενό κινητήρα MOVE(int a, int b) ( if(a<0) { digitalWrite(pin_motor_left_forward,LOW); analogWrite(pin_motor_left_back,0-a); } else { analogWrite(pin_motor_left_forward,a); digitalWrite(pin_motor_left_back,LOW); } if(b<0) { digitalWrite(pin_motor_right_forward,LOW); analogWrite(pin_motor_right_back,0-b); } else { digitalWrite(pin_motor_right_back,LOW); analogWrite(pin_motor_right_forward,b); } } void setup() { pinMode (pin_center,INPUT);//центральный pinMode (pin_right, INPUT);//правый датчик pinMode (pin_left,INPUT);//левый датчик pinMode (pin_center_right, INPUT);//передний правый датчик pinMode (pin_center_left,INPUT);//передний левый датчик pinMode (pin_line_left, INPUT); pinMode (pin_line_right, INPUT); pinMode (pin_start,INPUT);//старт pinMode (13,OUTPUT);//старт digitalWrite(13,HIGH); pinMode (pin_motor_left_back, OUTPUT);//мотор лево назад pinMode (pin_motor_right_forward, OUTPUT);//мотор право вперед pinMode (pin_motor_right_back, OUTPUT);//мотор правый назад pinMode (pin_motor_left_forward,OUTPUT);//мотор лево вперед // ожидание сигнала к началу схватки while(!digitalRead(pin_start))continue; MOVE(200,200); } void loop() { GLAZ(); if(l && r) { if((cl + cc + cr) < 2 || !cc){ MOVE(255,255); } if(cc) { if(!cl && cr) MOVE(0-180,180); if(cl && !cr) MOVE(180,0-180); } } else if(cc + cr + cl == 3) { if(!l && r) MOVE(0-200,200); if(!r && l) MOVE(200,0-200); } else if(cc) { if(!l && !cl && cr && r) MOVE(0-150,150); if(l && cl && !cr && !r) MOVE(150,0-150); } if(!digitalRead(pin_start))while(1){MOVE(0,0);} }


Απλά πρέπει να βελτιώσετε τον κώδικα.

Σπουδαίος!
Οι αισθητήρες επιστρέφουν 1 εάν δεν βλέπουν τίποτα και 0 εάν υπάρχει εμπόδιο.

Μετά τη λήψη του κώδικα μέσω usb, το ρομπότ είναι έτοιμο να διαγωνιστεί.

Αξίζει να εξεταστεί

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

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

Επίσης, μην ξεχνάτε τους τροχούς. Οι καμπύλες, οι λεπτές και οι συρόμενες δεν θα λειτουργήσουν, απλά δεν θα μπορείτε να κάνετε ελιγμούς και δεν θα υπάρχει αρκετή στιγμή δύναμης. Φροντίστε να δοκιμάσετε τα ελαστικά.

Όταν εργάζεστε με κινητήρες, να έχετε κατά νου ότι θα πρέπει να εργάζονται με μέγιστο φορτίο και θα καίγονται αρκετά συχνά.

Είναι επίσης λογικό να φτιάχνουμε αφαιρούμενες μπαταρίες, γιατί. Το ρομπότ αποφορτίζεται αρκετά γρήγορα και χρειάζεται πολύς χρόνος για να φορτιστεί.

Λίστα με τις απαραίτητες αγορές:

1. Κολλητήρι, κολλητήρι, flux (προαιρετικό)
2. Πλάκες Textolite (για να χαράξετε, πρέπει να κλείσετε όλες τις ράγες, στη συνέχεια να τις βάλετε σε διάλυμα υπεροξειδίου του υδρογόνου + κιτρικό οξύ + αλάτι για αρκετές ώρες και στη συνέχεια να κόψετε το χαρτί, για παράδειγμα, κάτω από το οποίο ήταν τα κομμάτια κρυμμένος)
3. Αισθητήρες Sharp 340
4. Κινητήρες, επιλέξτε να γευτείτε, όσο περισσότερες στροφές, τόσο το καλύτερο.
Αξίζει να επιλέξετε ένα από αυτά: polulu. (προστέθηκε)
5. Μπαταρίες (Σας συμβουλεύω να πάρετε πολυμερές λιθίου) + σταθμός φόρτισης
6. Κλειδί (κουμπί διακόπτη, κολλημένο στην πλακέτα) και ηλεκτρικά στοιχεία (υπάρχει στην εικόνα με ίχνος)
7. Οδηγός
8. Controller, για αρχή, μπορείτε να δοκιμάσετε το Polulu A-Star 32u4 micro και να ανεβάσετε τον bootloader του arduino εκεί
9. Μεταλλικό φύλλο για το σώμα
10. Τρυπήστε για τρύπες στον πίνακα
11. Μονάδα εκκίνησης και εκκίνησης
ΥΣΤΕΡΟΓΡΑΦΟ. Αν μου ξέφυγε κάτι - γράψε, θα το διορθώσω.

Ανταγωνισμός

Οι επόμενοι αγώνες θα διεξαχθούν στην Αγία Πετρούπολη, Robofinist, οπότε τώρα προετοιμαζόμαστε σκληρά για αυτούς και αν θέλετε να πάρετε μέρος, τότε πρέπει να τα κάνετε όλα ξεκάθαρα και γρήγορα.

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

Τέτοιοι αγώνες στο εξωτερικό δεν είναι σπάνιοι και θέλουμε να φτάσουμε και εκεί. Εδώ είναι ένας κατά προσέγγιση χάρτης των διαγωνισμών σε όλο τον κόσμο:

Ελπίζουμε πραγματικά ότι το ρομπότ σούμο θα αναπτυχθεί μόνο στη χώρα μας και καλούμε όλους να συμμετάσχουν στη δημιουργία του ρομπότ μας. Φαίνεται πολύ επικό όταν κομμάτια πετούν από κάποιο ρομπότ.

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

1. Γενικοί κανόνες

1.1. Το ρομπότ πρέπει να σπρώξει το αντίπαλο ρομπότ έξω από τη μαύρη γραμμή (εκτός ορίων).

1.2. Μετά την έναρξη του διαγωνισμού, τα ρομπότ πρέπει να κινηθούν το ένα προς το άλλο μέχρι τη σύγκρουση.

1.3. Μετά τη σύγκρουση, τα ρομπότ θα πρέπει να προσπαθήσουν να έρθουν σε επαφή μεταξύ τους.

1.4. Κατά τη διάρκεια του διαγωνισμού, τα μέλη της ομάδας δεν πρέπει να αγγίζουν τα ρομπότ.

1.5. Δύο αυτόνομα ρομπότ τοποθετούνται στο ρινγκ (στρογγυλό πεδίο). Τα ρομπότ προσπαθούν να σπρώξουν τον αντίπαλο έξω από το ρινγκ.

1.6. Το ρομπότ που κερδίζει τους περισσότερους γύρους κερδίζει τον αγώνα.

1.7. Όταν παίζεις «ο καθένας με τον καθένα», το καλύτερο ρομπότ θεωρείται ότι έχει κερδίσει τους περισσότερους αγώνες.

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

2. Ρομπότ

2.1. Τα ρομπότ πρέπει να κατασκευάζονται χρησιμοποιώντας μόνο εξαρτήματα LEGO Mindstorms.

2.2. Σε όλο τον γύρο:

Το μέγεθος του ρομπότ δεν πρέπει να υπερβαίνει τα 25x25x25cm.

Το βάρος του ρομπότ δεν πρέπει να υπερβαίνει το 1 κιλό.

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

2.4. Απαγορεύεται αυστηρά η χρήση στο σχεδιασμό του ρομπότ:

Κόλλες.

2.5. Πριν από τον αγώνα, τα ρομπότ ελέγχονται για διαστάσεις και βάρος.

2.6. Το ρομπότ μπορεί να έχει μια πλειάδα προγραμμάτων από τα οποία ο χειριστής μπορεί να επιλέξει κάθε γύρο.

2.7. Μεταξύ των αγώνων, επιτρέπεται η αλλαγή του σχεδιασμού και των προγραμμάτων των ρομπότ.

3. Πεδίο

3.1. Λευκός κύκλος με διάμετρο 1 m με μαύρο περίγραμμα πάχους 5 cm.

3.2. Στον κύκλο, οι ζώνες εκκίνησης των ρομπότ σημειώνονται με κόκκινες ρίγες.

3.3. Η κόκκινη κουκκίδα σηματοδοτεί το κέντρο του κύκλου.

3.4. Το γήπεδο τοποθετείται σε βάθρο με ύψος 16 χλστ.

4. Διεξαγωγή Διαγωνισμών

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

4.2. Οι γύροι διεξάγονται διαδοχικά.

4.3. Στην αρχή του γύρου, τα ρομπότ τοποθετούνται πίσω από τις κόκκινες λωρίδες (από το κέντρο του δακτυλίου) στις περιοχές εκκίνησης τους, όλα τα μέρη του ρομπότ που αγγίζουν το πεδίο πρέπει να βρίσκονται μέσα στην περιοχή εκκίνησης.

4.4. Με εντολή του διαιτητή δίνεται σήμα για την εκκίνηση των ρομπότ, ενώ οι χειριστές των ρομπότ πρέπει να ξεκινήσουν το πρόγραμμα στα ρομπότ και να απομακρυνθούν από το γήπεδο περισσότερο από 1 μέτρο μέσα σε 5 δευτερόλεπτα. Στα ίδια 5 δευτερόλεπτα, τα ρομπότ πρέπει να ταξιδέψουν σε ευθεία γραμμή και να συγκρουστούν μεταξύ τους.

4.5. Για αρχάριους: Μετά τη σύγκρουση, τα ρομπότ δεν μπορούν να κάνουν ελιγμούς γύρω από το δαχτυλίδι.

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

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

5. Κανόνες Επιλογής Νικητή

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

5.2. Όταν αγγίζετε οποιοδήποτε μέρος του ρομπότ (ακόμα και όχι συνδεδεμένο με το ρομπότ) πέρα ​​από το μαύρο περίγραμμα, το ρομπότ χάνει τον γύρο.

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

5.4. Εάν ο νικητής δεν μπορεί να προσδιοριστεί με τις μεθόδους που περιγράφονται παραπάνω, η απόφαση για τη νίκη ή την επανάληψη λαμβάνεται από τον κριτή του διαγωνισμού.

6. Διαιτησία

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

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

6.3. Οι κριτές έχουν πλήρεις εξουσίες σε όλους τους αγώνες. όλοι οι συμμετέχοντες πρέπει να τηρούν τις αποφάσεις τους.

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

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

6.6. Τα μέλη της ομάδας και ο αρχηγός δεν πρέπει να παρεμβαίνουν στις ενέργειες του ρομπότ της ομάδας τους ή του ρομπότ του αντιπάλου, είτε σωματικά είτε από απόσταση. Η παρέμβαση οδηγεί σε άμεσο αποκλεισμό.

6.7. Ο διαιτητής μπορεί να τερματίσει τον αγώνα κατά την κρίση του εάν το ρομπότ δεν μπορεί να συνεχίσει να κινείται εντός 10 δευτερολέπτων.

12.2. Το σχέδιο του ρομπότ για τον διαγωνισμό "Sumo".

Βασική συμπεριφορά ρομπότ σε "Σούμο"πολύ παρόμοια με τη συμπεριφορά ενός ρομπότ μέσα "Kegelring". Το ρομπότ πρέπει επίσης να βρει ένα αντικείμενο μέσα στο πεδίο και να το σπρώξει έξω από τον κύκλο. Οι διαφορές, ως συνήθως, βρίσκονται στις λεπτομέρειες: τώρα αυτό το αντικείμενο, με τη σειρά του, ψάχνει το ρομπότ μας και επίσης είναι πρόθυμο να το σπρώξει έξω το συντομότερο δυνατό.

Ωστόσο, ας εστιάσουμε στον στόχο μας: ένας από τους αισθητήρες που είναι ικανοί να ανιχνεύουν αντικείμενα σε απόσταση (υπέρυθρη ή υπερήχων) θα μας βοηθήσει να αναζητήσουμε αντίπαλο και θα προσδιορίσουμε έγκαιρα το μαύρο περίγραμμα του γηπέδου χρησιμοποιώντας έναν έγχρωμο αισθητήρα. Επομένως, για τη δημιουργία και τον εντοπισμό σφαλμάτων του προγράμματος ρομπότ sumo, σας προτείνουμε να χρησιμοποιήσετε το ίδιο ρομπότ που ετοιμάσαμε για το Μάθημα #11 - Kegelring.

Για να προστατεύσουμε τον αισθητήρα που βρίσκεται μπροστά από την αλληλεπίδραση με τον αντίπαλο, θα κατασκευάσουμε έναν προφυλακτήρα και θα τον στερεώσουμε στο ρομπότ μας. Ακολουθούν αναλυτικές οδηγίες κατασκευής τόσο για οικιακά όσο και εκπαιδευτικά Lego mindstorms EV3. Μη διστάσετε να πειραματιστείτε και να δημιουργήσετε το δικό σας σχέδιο.

Αρχική σελίδα Lego Mindstorms EV3

Lego Mindstorms EV3 Education

Στερεώνουμε το στοιχείο που προκύπτει στην μπροστινή δοκό του ρομπότ μας.

Αρχική σελίδα Lego Mindstorms EV3

Lego Mindstorms EV3 Education

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

12.3. Δημιουργία προγράμματος για τον διαγωνισμό «Σούμο».

Η πρώτη σκέψη που έρχεται στο μυαλό είναι να χρησιμοποιήσετε το πρόγραμμα για να "Kegelring"με κάποιες αισθητικές αλλαγές. Πράγματι, οι αλγόριθμοι συμπεριφοράς ρομπότ εντάσσονται "Kegelring"και στο "Σούμο"πολύ παρόμοια. Υλοποιούν την αναζήτηση ενός αντικειμένου και σπρώχνοντάς το έξω από το πεδίο. Μπορείτε να κατεβάσετε ένα πρόγραμμα στον παλαιστή σούμο για "Kegelring", αλλά ένας τέτοιος παλαιστής σούμο δεν θα λειτουργήσει πολύ αποτελεσματικά. Ωστόσο, οι γνώσεις που αποκτήσαμε στο προηγούμενο μάθημα θα μας φανούν χρήσιμες τώρα.

Ήρθε η ώρα να ανεβάσουμε το έργο μας στο προγραμματιστικό περιβάλλον "μαθήματα-2", δημιουργήστε ένα νέο πρόγραμμα σε αυτό μάθημα-12και συνδέστε το ρομπότ στο περιβάλλον προγραμματισμού.

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

Ας περιγράψουμε λεπτομερώς την ακολουθία ενεργειών του ρομπότ μας όταν εντοπίζεται αντίπαλος στο γήπεδο:

  1. περιστρέφεται γύρω από τον άξονά του μέχρι ο αισθητήρας που βρίσκεται μπροστά να εντοπίσει έναν αντίπαλο.
  2. σταματά μπροστά σε έναν αντίπαλο.

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

Τοποθετήστε τους αντιπάλους στο γήπεδο ο ένας απέναντι από τον άλλο, όπως φαίνεται στο παρακάτω σχήμα.

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

Στο "Σελίδα υλικού", που βρίσκεται στην κάτω δεξιά γωνία του περιβάλλοντος προγραμματισμού, επιλέξτε την καρτέλα "Προβολή θύρας" (Εικ. 1, 2 θέση 1)και πάρτε την ένδειξη του αισθητήρα που καθορίζει την απόσταση από τον αντίπαλο ρυθμίζοντας την κατάλληλη λειτουργία εμφάνισης των ενδείξεων.

Στην περίπτωσή μας, ο αισθητήρας υπερήχων είναι σε λειτουργία "Απόσταση σε εκατοστά"δείχνει αξία - 56.1 (Εικ. 1 θέση 2) 57 .

Ρύζι. ένας

Αισθητήρας υπερύθρων σε λειτουργία "Προσέγγιση"δείχνει αξία - 68 (Εικ. 2 θέση 2). Για την τιμή κατωφλίου παίρνουμε τον αριθμό - 70 .

Ρύζι. 2

Κατ' αναλογία με "Kegelring"μπορούμε να προγραμματίσουμε το ρομπότ να βρει έναν αντίπαλο, μόνο για να απομακρυνθούμε λίγο από το προηγούμενο μάθημα, αλλάζουμε την φορά περιστροφής του ρομπότ στο αντίθετο:

αισθητήρα υπερήχων

  1. "Πράσινη Παλέτα" "Ανάβω" "ΣΙ"ορίστε ίσο με -30 , τιμή ισχύος για τη θύρα "ΝΤΟ"ορίστε ίσο με 30 (Εικ. 3 θέση 1).
  2. Για να αναζητήσετε έναν αντίπαλο, χρησιμοποιήστε το μπλοκ προγράμματος στη λειτουργία "Αισθητήρας υπερήχων - Σύγκριση - Απόσταση σε εκατοστά" 57 (Εικ. 3 θέση 2).
  3. κλείστε τους κινητήρες (Εικ. 3 θέση 3).

Ρύζι. 3

αισθητήρα υπερύθρων

  1. Για να κάνουμε το ρομπότ να περιστρέφεται γύρω από τον άξονά του, χρησιμοποιούμε το μπλοκ προγράμματος "Ανεξάρτητος έλεγχος κινητήρα" "Πράσινη παλέτα", Ρυθμίστε τη λειτουργία μπλοκ "Ανάβω", τιμή ισχύος για τη θύρα "ΣΙ"ορίστε ίσο με -30 , τιμή ισχύος για τη θύρα "ΝΤΟ"ορίστε ίσο με 30 (Εικ. 4 θέση 1).
  2. Για να αναζητήσουμε έναν αντίπαλο, χρησιμοποιούμε το μπλοκ προγράμματος "Waiting" "Orange Palette"σε λειτουργία "Αισθητήρας υπερύθρων - Σύγκριση - Προσέγγιση",με την τιμή κατωφλίου της λειτουργίας του αισθητήρα ίση με 70 (Εικ. 4 θέση 2).
  3. Αφού το ρομπότ βρίσκεται απέναντι από τον αντίπαλο, χρησιμοποιώντας το μπλοκ προγράμματος "Ανεξάρτητος έλεγχος κινητήρα" "Πράσινη παλέτα"κλείστε τους κινητήρες (Εικ. 4 θέση 3).

Ρύζι. τέσσερις

Στο στάδιο του εντοπισμού σφαλμάτων αυτού του αλγορίθμου, θα πρέπει να επιλέξετε τις τιμές "Εξουσία"κινητήρες "ΣΙ"και "ΝΤΟ"καθώς και την τιμή κατωφλίου του αισθητήρα, για να επιτύχετε ακριβή εντοπισμό από το ρομπότ σας και να σταματήσετε ακριβώς μπροστά στον αντίπαλο. Μόνο μετά από αυτό θα είναι δυνατό να προχωρήσετε στην εφαρμογή λογισμικού του αλγόριθμου επίθεσης.

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

Επομένως, πρέπει να αναλύσουμε και τους δύο αισθητήρες κατά την ευθεία κίνηση προς τα εμπρός και να σταματήσουμε την επίθεση εάν το ρομπότ θα χάσει έναν αντίπαλο Ή το ρομπότ θα φτάσει στα όρια του δαχτυλιδιού. Επομένως, πρέπει να σταματήσουμε να χρησιμοποιούμε το μπλοκ προγράμματος "Waiting" "Orange Palette"και ανεξάρτητα σε έναν κύκλο να λαμβάνει και να επεξεργάζεται τις μετρήσεις δύο αισθητήρων.

Ας προχωρήσουμε στη σταδιακή υλοποίηση του αλγορίθμου επιθέσεις του αντιπάλου: για αυτό θα δημιουργήσουμε ένα προσωρινό πρόγραμμα στο έργο μάθημα-12-1και αρχίστε να το γεμίζετε με μπλοκ προγράμματος.

  1. Ας πάρουμε ένα μπλοκ προγράμματος "Κύκλος" "Πορτοκαλί Παλέτα".
  2. Μέσα στο μπλοκ "Κύκλος"βάλτε ένα μπλοκ προγράμματος "Ανεξάρτητος έλεγχος κινητήρα" "Πράσινη παλέτα" "Ανάβω" (Εικ. 5 θέση 1), ισχύς κινητήρα "ΣΙ"και "ΝΤΟ"ορίστε τη μέγιστη τιμή - 100 (Εικ. 5 θέση 2).

Ρύζι. 5

  1. Πίσω από το μπλοκ "Ανεξάρτητος έλεγχος κινητήρα"τοποθετήστε το μπλοκ προγράμματος. Ρυθμίστε τη λειτουργία μπλοκ σε "Σύγκριση - Ένταση ανακλώμενου φωτός" (Εικ. 6)

Ρύζι. 6

Σε αυτή τη λειτουργία, το μπλοκ προγράμματος "Αισθητήρας χρώματος" "Κίτρινη παλέτα"οπτικά πολύ παρόμοια με το μπλοκ λογισμικού "Waiting" "Orange Palette"σε λειτουργία "Αισθητήρας χρώματος - Σύγκριση - Ένταση ανακλώμενου φωτός". Αλλά σε αντίθεση με το μπλοκ "Προσδοκία", αυτό το μπλοκ προγράμματος δεν περιμένει την κατάσταση που καθορίζεται από τις παραμέτρους "Τύπος σύγκρισης" (Εικ. 7 θέση 1)και "Τιμή κατωφλίου" (Εικ. 7 θέση 2)και δίνει αμέσως μια δυαδική τιμή ( "Αληθής"ή "Ψέμα") στην παράμετρο εξόδου και τη μετρούμενη τιμή στην παράμετρο εξόδου "Φωτισμός" (Εικ. 7 θέση 4).

Επιλογές "Τύπος σύγκρισης"και "Κατώφλι"στο Ρύζι. 7 θέση. 12 "Αποτέλεσμα σύγκρισης" (Εικ. 7 θέση 3)έδωσε μια δυαδική τιμή "Αληθής"όταν ο αισθητήρας χρώματος διασχίζει το μαύρο περίγραμμα του δακτυλίου.

Ρύζι. 7

  1. Σε περίπτωση χρήσης αισθητήρα υπερήχων πίσω από τη μονάδα "Αισθητήρας χρώματος"εγκαταστήστε το μπλοκ λογισμικού "Αισθητήρας υπερήχων" "Κίτρινη παλέτα". Ρυθμίστε τη λειτουργία μπλοκ σε "Σύγκριση - Απόσταση σε εκατοστά" (Εικ. 8 θέση 1). Παράμετρος "Τύπος σύγκρισης" (Εικ. 8 θέση 2), παράμετρος "Τιμή κατωφλίου" (Εικ. 8 θέση 3)ρυθμίστε με τέτοιο τρόπο ώστε η παράμετρος εξόδου "Αποτέλεσμα σύγκρισης" (Εικ. 8 θέση 4)έδωσε μια δυαδική τιμή "Αληθής"

Ρύζι. οκτώ

Σε περίπτωση χρήσης αισθητήρα υπερύθρων πίσω από τη μονάδα "Αισθητήρας χρώματος"εγκαταστήστε το μπλοκ λογισμικού "Αισθητήρας υπερύθρων" "Κίτρινη παλέτα". Ρυθμίστε τη λειτουργία μπλοκ σε "Σύγκριση - Προσέγγιση" (Εικ. 9 θέση 1). Παράμετρος "Τύπος σύγκρισης" (Εικ. 9 θέση 2), παράμετρος "Τιμή κατωφλίου" (Εικ. 9 θέση 3)ρυθμίστε με τέτοιο τρόπο ώστε η παράμετρος εξόδου "Αποτέλεσμα σύγκρισης" (Εικ. 9 θέση 4)έδωσε μια δυαδική τιμή "Αληθής"σε περίπτωση απώλειας της όρασης από το ρομπότ του αντιπάλου.

Ρύζι. 9

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

Ρύζι. δέκα

Επιλεγμένη λειτουργία μπλοκ προγράμματος "Λογικές πράξεις" "Κόκκινη παλέτα"ορίζει μία από τις τέσσερις λειτουργίες σε δυαδικά δεδομένα: "ΚΑΙ (ΚΑΙ)", "Ή (Ή)", "XOR"και «Εξαίρεση (ΟΧΙ)». ρεπαραμέτρους εισόδου va "ένα"και "σι"(για λειτουργία "Εξαίρεση (ΟΧΙ)"- μία παράμετρος εισόδου "ένα") περάστε τις τιμές εισόδου στο μπλοκ προγράμματος και η τιμή που προκύπτει παράγεται από την παράμετρο εξόδου "Αποτέλεσμα". Εάν δεν έχετε αντιμετωπίσει προηγουμένως λογικές λειτουργίες, μπορείτε να εξοικειωθείτε με τις βασικές γνώσεις στη συνημμένη βοήθεια κάτω από το σπόιλερ.

Λειτουργίες Boolean

Οι λογικές πράξεις εκτελούνται μόνο σε λογικές τιμές (δεδομένα), που είναι επίσης μια λογική τιμή. Μια boolean τιμή μπορεί να είναι σε μία από τις δύο καταστάσεις: "Αληθής"ή "Ψέμα". Οι λογικές πράξεις πολύ συχνά γράφονται σε μορφή πίνακα ως: "παράμετρος εισόδου 1" - "παράμετρος εισόδου 2" = "αποτέλεσμα". Λογικές πράξεις που υλοποιούνται από το μπλοκ προγράμματος "Λογικές πράξεις" "Κόκκινη παλέτα"σε μορφή πίνακα μπορεί να γραφτεί ως εξής:

Λογική πράξη "AND (AND)"

Το αποτέλεσμα μιας λογικής πράξης "ΚΑΙ (ΚΑΙ)"θα υπάρχει μια αξία "Αληθής" "Αληθής" "Ψέμα".

"ένα" λειτουργία "σι" αποτέλεσμα
"Ψέμα" "ΚΑΙ (ΚΑΙ)" "Ψέμα" = "Ψέμα"
"Ψέμα" "ΚΑΙ (ΚΑΙ)" "Αληθής" = "Ψέμα"
"Αληθής" "ΚΑΙ (ΚΑΙ)" "Ψέμα" = "Ψέμα"
"Αληθής" "ΚΑΙ (ΚΑΙ)" "Αληθής" = "Αληθής"

Λογική πράξη "OR (OR)"

Το αποτέλεσμα μιας λογικής πράξης "Ή (Ή)"θα υπάρχει μια αξία "Ψέμα"μόνο εάν και οι δύο τιμές εισόδου είναι ίσες "Ψέμα", σε όλες τις άλλες περιπτώσεις η αξία της πράξης είναι "Αληθής".

"ένα" λειτουργία "σι" αποτέλεσμα
"Ψέμα" "Ή (Ή)" "Ψέμα" = "Ψέμα"
"Ψέμα" "Ή (Ή)" "Αληθής" = "Αληθής"
"Αληθής" "Ή (Ή)" "Ψέμα" = "Αληθής"
"Αληθής" "Ή (Ή)" "Αληθής" = "Αληθής"

Λογική λειτουργία "XOR"

Το αποτέλεσμα μιας λογικής πράξης "XOR"θα υπάρχει μια αξία "Αληθής"μόνο εάν μία από τις τιμές εισόδου είναι ίση "Αληθής", σε όλες τις άλλες περιπτώσεις η αξία της πράξης είναι "Ψέμα".

"ένα" λειτουργία "σι" αποτέλεσμα
"Ψέμα" "XOR" "Ψέμα" = "Ψέμα"
"Ψέμα" "XOR" "Αληθής" = "Αληθής"
"Αληθής" "XOR" "Ψέμα" = "Αληθής"
"Αληθής" "XOR" "Αληθής" = "Ψέμα"

Λογική λειτουργία "Εξαίρεση (NOT)"

Boolean λειτουργία "Εξαίρεση (ΟΧΙ)"ισχύει μόνο για μία τιμή εισόδου. Το αποτέλεσμα μιας λογικής πράξης "Εξαίρεση (ΟΧΙ)"πάνω από την τιμή εισόδου είναι η αντίθετη τιμή.

  1. Πίσω από το μπλοκ προγραμματισμού "Αισθητήρας υπερήχων"ή "Αισθητήρας υπερύθρων"βάλτε ένα μπλοκ προγράμματος "Λογικές πράξεις" "Κόκκινη παλέτα".
  • παράμετρος εξόδου "Αποτέλεσμα σύγκρισης"μπλοκ προγράμματος "Αισθητήρας χρώματος" (Εικ. 11, 12 θέση 1) "ένα"μπλοκ προγράμματος "Λογικές Λειτουργίες" (Εικ. 11, 12 θέση 4).
  • παράμετρος εξόδου "Αποτέλεσμα σύγκρισης"μπλοκ προγράμματος "Αισθητήρας υπερήχων (υπέρυθρων)" (Εικ. 11, 12 θέση 2)σύνδεση με την παράμετρο εισόδου "σι"μπλοκ προγράμματος "Λογικές Λειτουργίες" (Εικ. 11, 12 θέση 5).
  • Τρόπος λειτουργίας μπλοκ προγράμματος "Λογικές λειτουργίες"εδραιώνομαι "Ή (Ή)" (Εικ. 11, 12 θέση 3). Σε αυτήν την περίπτωση, το αποτέλεσμα της λογικής πράξης θα πάρει την τιμή "Αληθής", μόνο εάν πληρούται μία από τις προϋποθέσεις: ο αισθητήρας χρώματος έχει περάσει τη μαύρη γραμμή, το ρομπότ έχει χάσει τον αντίπαλό του.
  • Ρυθμίζοντας τη λειτουργία μπλοκ προγράμματος "Κύκλος"σε νόημα "Boolean value" (Εικ. 11, 12 θέση 7), παράμετρος εξόδου "Αποτέλεσμα"μπλοκ προγράμματος "Λογικές πράξεις" (Εικ. 11, 12 θέση 6)σύνδεση με την παράμετρο εισόδου «Μέχρι να είναι η αλήθεια»μπλοκ προγράμματος "Κύκλος" (Εικ. 11, 12 θέση 8). Αυτές οι ρυθμίσεις θα ολοκληρώσουν τον κύκλο όταν "Αληθής"αποτέλεσμα μιας λογικής πράξης.

Ρύζι. έντεκα


Ρύζι. 12

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

Ας κάνουμε το δεύτερο πείραμα: θα εγκαταστήσουμε ξανά έναν ακίνητο αντίπαλο μπροστά από το ρομπότ και θα ξεκινήσουμε το πρόγραμμα επίθεσης. Όταν το ρομπότ μας ορμήσει στον αντίπαλο και πλησιάσει αρκετά, θα απομακρύνουμε απότομα τον αντίπαλο στο πλάι. Το ρομπότ μας πρέπει, έχοντας χάσει έναν αντίπαλο, να σταματήσει.

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

Το ολοκληρωμένο πρόγραμμα του παλαιστή σούμο πρέπει να αναζητήσει διαδοχικά έναν αντίπαλο σε έναν ατελείωτο βρόχο και μετά να επιτεθεί στον αντίπαλο. Θα ήταν δυνατό να συνδυάσουμε και τα δύο μέρη του προγράμματός μας, αν όχι για μια μικρή προσθήκη. Εάν το ρομπότ μας σταμάτησε πάνω από το όριο του δακτυλίου, τότε πριν ξεκινήσει η αναζήτηση, το ρομπότ θα πρέπει, έχοντας οδηγήσει λίγο πίσω, να επιστρέψει μέσα στο δαχτυλίδι. Θα συμπληρώσουμε το πρόγραμμα επίθεσης με τον ακόλουθο κώδικα: εκτός του βρόχου επίθεσης, θα χρησιμοποιήσουμε το μπλοκ προγράμματος " Εναλλαγή "Πορτοκαλί Παλέτα". Αποκλεισμός λειτουργίας λειτουργίας "Διακόπτης"εδραιώνομαι «Αισθητήρας χρώματος – Σύγκριση – Ένταση ανακλώμενου φωτός».Επιλογές "Τύπος σύγκρισης"και "Κατώφλι"ρυθμίστε με τον ίδιο τρόπο που χρησιμοποιήθηκε προηγουμένως στο μπλοκ προγράμματος "Αισθητήρας χρώματος" "Κίτρινη παλέτα". Επομένως, εάν το ρομπότ μας σταματήσει πάνω από τη μαύρη γραμμή, τότε η εκτέλεση θα μεταφερθεί στο επάνω κοντέινερ του μπλοκ προγράμματος "Διακόπτης". Στο επάνω δοχείο τοποθετούμε το μπλοκ προγράμματος "Steering" "Green Palette", με ρυθμίσεις παραμέτρων που αναγκάζουν το ρομπότ να μετακινηθεί μια περιστροφή των κινητήρων πίσω. Στο κάτω κοντέινερ του μπλοκ προγράμματος "Διακόπτης"τοποθετήστε ένα μπλοκ προγράμματος που σβήνει τους κινητήρες (Εικ. 13). Έχοντας δοκιμάσει ξανά τον αλγόριθμο επίθεσης, θα βεβαιωθούμε ότι αφού το ρομπότ σούμο έσπρωξε τον αντίπαλο έξω από το ρινγκ, αυτός επέστρεψε λίγο πίσω.

Ρύζι. 13

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

Συμπέρασμα:

Το πρόγραμμα που συζητήσαμε μαζί σας σε αυτό το μάθημα εφαρμόζει μόνο έναν αλγόριθμο άμεσης δύναμης για τη συμπεριφορά ενός ρομπότ σούμο. Υπονοεί ότι σε μια άμεση αντιπαράθεση εξουσίας, το ρομπότ πρέπει σίγουρα να νικήσει τον αντίπαλό του. Αλλά το προπονητικό μας ρομπότ, φυσικά, δεν μοιάζει σε τίποτα με έναν μυώδη παλαιστή σούμο. Για να παίξετε με σιγουριά σε αυτόν τον διαγωνισμό, είναι απαραίτητο να δώσετε τη μεγαλύτερη προσοχή, πρώτα απ 'όλα, στο σχεδιασμό του ρομπότ, να δημιουργήσετε μια σταθερή, προστατευμένη πλατφόρμα, να αυξήσετε την πρόσφυση με την επιφάνεια του δακτυλίου με τη βοήθεια πρόσθετους τροχούς ή τροχιές. Δημοφιλής φιλοξενία βίντεο Youtube.comκατόπιν αίτησης "ρομπότ sumo lego"μπορείτε να βρείτε πολλά βίντεο από πραγματικούς διαγωνισμούς ρομπότ, από τα οποία σίγουρα θα αντλήσετε ενδιαφέρουσες ιδέες για τον εαυτό σας για να τις εφαρμόσετε στα δικά σας σχέδια.

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