Εκπαιδευτικό κόλπο Cybernetic constructor. Constructors cybernetic constructor trick εκπαιδευτικό. πλήρης κωδικός προγράμματος

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

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

ΤΕΧΝΑΣΜΑ- Ρώσος κυβερνητικός σχεδιαστής. Μπορείτε να αγοράσετε TRIC από τον κατασκευαστή ή σε ορισμένα ηλεκτρονικά καταστήματα. Για παράδειγμα, το TRIC πωλείται σε .

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

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

Πρόγραμμα μαθημάτων

Ημέρα 1:Εκπαιδευτική ρομποτική στη Ρωσία και τον κόσμο. Σύγχρονα εργαλεία. Παρουσιάζουμε το νέο κιτ TRIC cybernetic. Συνέλευση εκπαιδευτικό ρομπότ: μεταλλικός κατασκευαστής.

Ημέρα 2:Βασικά στοιχεία προγραμματισμού στο περιβάλλον TRIC Studio. Εικονικό μοντέλο. Στοιχειώδεις δράσεις. Προγραμματισμός στη ρομποτική: διαγράμματα ροής, βασικοί αλγόριθμοι, μεταβλητές, τελεστές. Προγραμματισμός Ρομπότ LEGOστο περιβάλλον TRIC Studio.

Ημέρα 3: Παράλληλες εργασίες. Ταξιδεύοντας γύρω από το δωμάτιο. Διακόπτης (επιλογή). Εισαγωγή στο TAU. ρυθμιστικές αρχές.

Ημέρα 4:Εργασία με την κάμερα. Κωδικοποίηση. Μεταφορά δεδομένων.

Ημέρα 5:Αναζήτηση αντικειμένων. Αναγνώριση χρώματος.

6η μέρα:Δοκιμή.

Σχόλια από τους συμμετέχοντες στο μάθημα

Oleg Viktorovich Gryaznov, Μπέλγκοροντ:

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

Νέες εργασίες (όραση βίντεο και εργασίες με αυτό, δοκιμαστικοί αλγόριθμοι σε μοντέλα 2D) και παλιές εργασίες (γνωστές από άλλα σετ κατασκευών) μας γοήτευσαν σαν περίεργα παιδιά. Ilya Yuryevich, Dmitry, Yuri, παρά τα περισσότερα από τα παιδικά μας λάθη και δυσκολίες, κάθε ερώτηση και αίτημα μας για βοήθεια έγινε δεκτό με ευγένεια και έγκαιρα εξηγήσεις και βοήθεια.

Η απόδοση και η επίδειξη των παιδικών έργων του Mikhail Mikhailovich απέδειξε την ανάγκη για TRIC για προχωρημένα παιδιά και ένα νέο επίπεδο των έργων τους. Η παρουσίαση του Roman Luchin και η συζήτηση μαζί του για την ανάπτυξη της ρομποτικής στη Ρωσία μου έδωσε νέα χρέωσηδύναμη και ιδέες για την ανάπτυξη της εκπαιδευτικής ρομποτικής στην περιοχή Belgorod. Κατά τη διάρκεια των σύντομων διαλειμμάτων, μπορέσαμε να ανταλλάξουμε εργασιακή εμπειρία και μεθοδολογικές εξελίξεις με συναδέλφους που συμμετέχουν στα μαθήματα από το Νοβοροσίσκ, τη Μόσχα, την Αγία Πετρούπολη και το Σότσι.

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

Ρομάν Λούτσιν

Ντμίτρι Ανατόλιεβιτς Κοβρίγκιν, Kostomuksha, Δημοκρατία της Καρελίας:

Ευχαριστούμε πολύ για τον πρώτο κύκλο φθινοπωρινών μαθημάτων κατάρτισης για καθηγητές ρομποτικής στο πλαίσιο του προγράμματος «Robotics on the TRIC platform». Για μένα το μάθημα ήταν πολύ χρήσιμο, τόσο από θεωρητική όσο και από πρακτική πλευρά. Ο όγκος των πληροφοριών που ελήφθησαν ήταν εκτενής, αλλά ο ρυθμός παρουσίασης του υλικού ήταν εξαιρετικός. Κατά τη διάρκεια της ημέρας, ο Ilya Yurievich Shirokolobov έδωσε μια επαρκή ελάχιστη θεωρία και τα περισσότερα απόανατέθηκε στην πρακτική άσκηση. Και μετά το μάθημα, θα μπορούσατε να το εξετάσετε ανεξάρτητα με περισσότερες λεπτομέρειες. θεωρητικά ζητήματαβασισμένο στο βιβλίο του Σεργκέι Αλεξάντροβιτς Φιλίπποφ.

Αποδείχθηκε υπέροχο πλήρη βύθισηγια 6 ημέρες στη ρομποτική στην πλατφόρμα TRIC. Ιδιαίτερες ευχαριστίες στους Yuri Viktorovich Litvinov και Dmitry Aleksandrovich Mordvinov, που ήταν πάντα εκεί και βοήθησαν να εξομαλυνθεί η τραχύτητα του λογισμικού της πλατφόρμας.

Η ομιλία του Roman Mikhailovich Luchin πρόσθεσε μια θετική φόρτιση εμπιστοσύνης ότι η πλατφόρμα TRIC έχει μεγάλο μέλλον, καθώς είναι σαφές ότι η ομάδα TRIC «ζει» αυτό το έργο. Έχουν δημιουργήσει ένα προϊόν για το οποίο μπορούν ήδη να είναι περήφανοι, αλλά δεν πρόκειται να σταματήσουν. Και ευχαριστεί.

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

Τι είναι σήμερα ευρέως διαθέσιμο στην αγορά για παιχνίδια ρομποτικής; Δεν εξετάζουμε το ενδεχόμενο κατασκευής σπιτικών σανίδων για κάθε έργο. Lego, raspi, arduino. Το Lego είναι υπέροχο, αλλά δυστυχώς πολύ, πολύ περιορισμένο. Τα Raspi και arduinos επεκτείνονται καλά, αλλά είναι αρκετά άβολα και γρήγορα μετατρέπονται σε ένα χάος από διάφορες κάρτες, πινακίδες και διατάξεις. Εδώ μπαίνουν στην αγορά οι τύποι της Αγίας Πετρούπολης με τον κατασκευαστή τους TRIC.

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

Έλαβα αυτό το σετ:

Γενικά, η τιμή των σετ τους κυμαίνεται από περίπου είκοσι έως εβδομήντα χιλιάδες ρούβλια. Είναι πιο ακριβό από τα lego; Οχι. Πριν ένα μήνα αγόρασα το Lego EV3. Τιμή τεύχους 370€ βασικό σετ+ 100€ μπαταρία (τρελάθηκαν τελείως εκεί;!) Και δεν υπολόγισα ούτε τον φορτιστή για τριάντα ευρώ. Επιπλέον, το βασικό σετ δεν περιλαμβάνει ούτε βυθόμετρο (+35€) ούτε γυροσκόπιο (+35€). Και μπορείτε να ξεχάσετε εντελώς την κάμερα με ένα μικρόφωνο, χωρίς καν να αναφέρετε τη γενική έλλειψη πρόσβασης στο Linux της Legov.

Στο δικό μου σετ (χωρίζεται σε προηγούμενη φωτογραφία) περιλαμβάνεται δύο ελεγκτές, δύο κάμερες, δύο μικρόφωνα, σόναρ, δύο τύποι αισθητήρων υπέρυθρης ακτινοβολίας, κουμπιά, έξι ηλεκτροκινητήρες με οπτικούς κωδικοποιητές, τρεις σερβομηχανές, δύο μηχανικές λαβές, μια δέσμη τροχών, συμπεριλαμβανομένων ολονομικών, φορτιστές, μπαταρίες, καλώδια, τροχοί ταχυτήτων, σχάρες και ένα σωρό μεταλλικές πλάκες και γωνίες (γεια σου παιδικά!). Ο κατασκευαστής είναι καθαρά για αρχή, μπορείτε να συνδέσετε σχεδόν οτιδήποτε έχετε αρκετή φαντασία στο χειριστήριο. ΕΠΕΞΕΡΓΑΣΤΗΣ ARM9, ξεχωριστός επεξεργαστής για βίντεο, για να μην φορτώνει τον κεντρικό. Μπορείτε να προγραμματίσετε οτιδήποτε, από assembler έως C#, σας δίνεται μια κονσόλα root, καθώς και όλος ο κώδικας υλικολογισμικού είναι ανοιχτού κώδικα.

Έτσι μοιάζει το θαυματουργό κουτί μου:

Ως το πρώτο μου έργο, αποφάσισα να φτιάξω ένα αντίστροφο εκκρεμές, το οποίο φαίνεται στην εικόνα του τίτλου. Έτσι φαίνεται από πίσω:

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

Έχω λοιπόν στη διάθεσή μου έναν βαθμό ελευθερίας, επιταχυνσιόμετρο και γυροσκόπιο, δεν χρησιμοποίησα κωδικοποιητές από τους κινητήρες. Θα γράψω σε Qt Script.

Αισθητήρες ανάγνωσης

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

Γυροσκόπιο

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

Εδώ είναι ο κωδικός μου για την εργασία με το γυροσκόπιο, εδώ ενώ (true) είναι ο κύριος βρόχος του προγράμματος.
var gyr_x_angle = 0; var lasttime = Date.now(); while (true) (var G = brick.gyroscope().read(); G = G + 69; // drift correction var curtime = Date.now(); var dt = (curtime - lasttime)/1000.0; τελευταία φορά = gyr_x_rate = G * 0,07 gyr_x_angle = gyr_x_rate * dt)

Διαβάζω τις τιμές του αισθητήρα στον πίνακα G και στην επόμενη γραμμή διορθώνω τον άξονα που με ενδιαφέρει. Αποδεικνύεται ότι ο συγκεκριμένος αισθητήρας μου σε πλήρη ηρεμία δείχνει μέση ταχύτητα 69 μονάδων, οπότε τις αφαιρώ για να πάρω την ταχύτητα που με ενδιαφέρει.
Ο αισθητήρας παράγει έναν ακέραιο που πρέπει να μετατραπεί σε γωνίες. Σε κανονική λειτουργία λειτουργεί σε 2000 μοίρες/δευτ. (dps). Το φύλλο δεδομένων λέει ότι αυτό αντιστοιχεί σε σταθερά 70mdps/ψηφίο. Άρα το G(ψηφία) * 0,07 (dps/ψηφίο) μας δίνει γωνιακή ταχύτητα. Απομένει να το ενσωματώσουμε, πολλαπλασιάζοντάς το με το χρόνο μέτρησης dt.

Επιταχυνσιόμετρο

Είναι ακόμα πιο εύκολο να λάβετε τη γωνία από το επιταχυνσιόμετρο, αλλά το πρόβλημα είναι ότι είναι πολύ θορυβώδες και όταν το καρότσι αρχίσει να τραντάζεται μπρος-πίσω, σβήστε τα φώτα εντελώς. Έτσι φαίνεται ο κώδικας:
[...] ενώ (αληθές) ([...] var A = brick.accelerometer().read(); var a_x_angle = Math.atan(A / A) * 180.0 / pi; )

Μείωση θορύβου: συνδυάζει ενδείξεις επιταχυνσιόμετρου και γυροσκόπιου

[...] var CF_x_γωνία = 0; ενώ (αληθές) ([...] CF_x_angle = 0,98*(CF_x_angle+ gyr_x_rate*dt) + 0,02*a_x_angle; )
Αυτό απλά λέει ότι η τρέχουσα τιμή γωνίας είναι το 98% της προηγούμενης γωνίας που διορθώθηκε από το γυροσκόπιο και το 2% είναι η άμεση ανάγνωση της γωνίας από το επιταχυνσιόμετρο. Αυτός ο συνδυασμός σας επιτρέπει να καταπολεμήσετε το γυροσκόπιο που αιωρείται μακριά, σημειώστε ότι δεν χρησιμοποιήσαμε καθόλου τη μεταβλητή gyr_x_angle.

Ελεγκτής PID

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

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

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

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

πλήρης κωδικόςπρογράμματα

var gyr_x_angle = 0; var lasttime = Date.now(); var CF_x_γωνία = 0; var iTerm = 0; var CF_x_angle_prev = 0; var KP = 0; var KI = 0; var KD = 0; while (true) (var G = brick.gyroscope().read(); G = G + 69; // drift correction var curtime = Date.now(); var dt = (curtime - lasttime)/1000.0; lasttime = gyr_x_rate = G * 0,07 var A = brick.accelerometer(). Kp*cf_x_angle; .setPower(power);

Επιλογή σταθερών ΚΡ, ΚΙ, ΚΔ

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

Αρχικά, ας βρούμε τον συντελεστή KP. Ας βάλουμε ΚΙ και ΚΔ ίσο με μηδένκαι να αυξήσουμε το KP ξεκινώντας από το μηδέν μέχρι τη στιγμή που το καλάθι μας αρχίζει να κάνει (περίπου) σταθερές ταλαντώσεις, κάπως έτσι (KP=8, KI=0, KD=0):

Προφανώς αυτό είναι υπερβολικό, το καρότσι παίρνει επίσης ισχυρό σήμααπό την αναλογική συνιστώσα, οπότε τη μειώνουμε περίπου στο μισό, παίρνουμε αυτό (KP=5, KI=0, KD=0):

Τώρα το καλάθι δεν έχει καθαρά αναλογικό σήμα, ας αυξήσουμε την ταχύτητά του προσθέτοντας ένα στοιχείο ενσωμάτωσης. Αυξάνουμε σταδιακά το KI από το μηδέν, προσπαθώντας να φτάσουμε στη στιγμή που πάλι το καρότσι ταλαντώνεται γύρω από την επιθυμητή θέση (KP=5, KI=0,5, KD=0):

Τώρα προσθέτουμε ένα διαφοροποιητικό εξάρτημα, το οποίο θα παίξει το ρόλο ενός αποσβεστήρα, μειώνοντας τους κραδασμούς, αυτό είναι που παίρνω (KP=5, KI=0,5, KD=5):

συμπέρασμα

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

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

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

Εκσυγχρονίζω: Προδιαγραφέςελεγκτής

Πολλοί άνθρωποι δεν καταλαβαίνουν πώς διαφέρει ένας ελεγκτής Trick από έναν ελεγκτή Arduino ή Legov. Να λοιπόν το σημάδι:
Κεντρική μονάδα επεξεργασίας (CPU) OMAP-L138 C6-Integra™ DSP+ARM® SoC, Texas Instruments
Ταχύτητα ρολογιού CPU 375 MHz
Πυρήνας CPU ARM926EJ-S™ RISC MPU
Πυρήνας CPU DSP C674x Σταθερό/Floating-Point VLIW DSP
ΕΜΒΟΛΟ 256 MB
FLASH - μνήμη 16 MB
Περιφερικός επεξεργαστής (PP) MSP430F5510, Texas Instruments
Συχνότητα ρολογιού PP 24 MHz
Διεπαφές χρήστη USB 2.0, WiFi b/g/n, BlueTooth, 2*UART, 2*I2C, Micro-SD, Mic in (stereo), Line out (mono)
Διεπαφές κινητήρα συνεχές ρεύμα 4 θύρες κινητήρα 6-12V DC, με ατομική προστασία από υπερένταση υλικού (έως 2Α ανά κινητήρα)
Διεπαφές περιφερειακές συσκευές 19 θύρες σήματος γενικού σκοπού(6 μονοκάναλα και 13 διπλά κανάλια) με τροφοδοσία 3,3-5V, εκ των οποίων τα 6 μπορούν να λειτουργήσουν σε λειτουργία αναλογικής εισόδου
Διεπαφές αισθητήρων βίντεο 2 είσοδοι BT.656 VGA 640*480, υποστήριξη στερεοφωνικής λειτουργίας
Ενσωματωμένη οθόνη LCD 2,4” TFT, χρώμα, αφής, ανάλυση 320*240 pixel
Ενσωματωμένο ηχείο Ονομαστική ισχύς 1W, μέγιστη ισχύς 3W
Ένδειξη LED 2χρωμη, ελεγχόμενη από λογισμικό
Υποδοχές επέκτασης 2 * Υποδοχές μονάδας επέκτασης με σχισμή 26 ακίδων
Πρόσθετος εξοπλισμός (περιλαμβάνεται με τον ελεγκτή) Επιταχυνσιόμετρο 3 αξόνων, γυροσκόπιο 3 αξόνων, κωδικοποιητής ήχου, ενισχυτής, μετατροπείς και κυκλώματα διαχείρισης ισχύος, κυκλώματα προστασίας υπέρτασης και ρεύματος εισόδου
Παροχή ηλεκτρικού ρεύματος 6-12V DC, εξωτερικό προσαρμογέα δικτύουή μπαταρία LiPo RC 3P (11,1V) / 2P (7,4V)
Διαστάσεις θήκης 125*80*25 χλστ

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

Τι είναι σήμερα ευρέως διαθέσιμο στην αγορά για παιχνίδια ρομποτικής; Δεν εξετάζουμε το ενδεχόμενο κατασκευής σπιτικών σανίδων για κάθε έργο. Lego, raspi, arduino. Το Lego είναι υπέροχο, αλλά δυστυχώς πολύ, πολύ περιορισμένο. Τα Raspi και arduinos επεκτείνονται καλά, αλλά είναι αρκετά άβολα και γρήγορα μετατρέπονται σε ένα χάος από διάφορες κάρτες, πινακίδες και διατάξεις. Εδώ μπαίνουν στην αγορά οι τύποι της Αγίας Πετρούπολης με τον κατασκευαστή τους TRIC.

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

Έλαβα αυτό το σετ:

Γενικά, η τιμή των σετ τους κυμαίνεται από περίπου είκοσι έως εβδομήντα χιλιάδες ρούβλια. Είναι πιο ακριβό από τα lego; Οχι. Πριν ένα μήνα αγόρασα το Lego EV3. Η ζητούμενη τιμή είναι 370€ βασικό σετ + 100€ μπαταρία (τρελάθηκαν τελείως εκεί;!) Και δεν υπολόγισα ούτε τον φορτιστή για τριάντα ευρώ. Επιπλέον, το βασικό σετ δεν περιλαμβάνει ούτε βυθόμετρο (+35€) ούτε γυροσκόπιο (+35€). Και μπορείτε να ξεχάσετε εντελώς την κάμερα με ένα μικρόφωνο, χωρίς καν να αναφέρετε τη γενική έλλειψη πρόσβασης στο Linux της Legov.

Το σετ μου (είναι στρωμένο στην προηγούμενη φωτογραφία) περιλαμβάνει δύο ελεγκτές, δύο κάμερες, δύο μικρόφωνα, σόναρ, δύο τύποι αισθητήρων υπέρυθρης ακτινοβολίας, κουμπιά, έξι ηλεκτροκινητήρες με οπτικούς κωδικοποιητές, τρεις σερβομηχανές, δύο μηχανικές λαβές, μια δέσμη τροχών, συμπεριλαμβανομένων ολονομικών, φορτιστές, μπαταρίες, καλώδια, τροχοί ταχυτήτων, σχάρες και ένα σωρό μεταλλικές πλάκες και γωνίες (γεια σου παιδικά!). Ο κατασκευαστής είναι καθαρά για αρχή, μπορείτε να συνδέσετε σχεδόν οτιδήποτε έχετε αρκετή φαντασία στο χειριστήριο. Κεντρικός επεξεργαστής ARM9, ξεχωριστός επεξεργαστής για βίντεο, για να μην φορτώνει τον κεντρικό. Μπορείτε να προγραμματίσετε οτιδήποτε, από assembler έως C#, σας δίνεται μια κονσόλα root, καθώς και όλος ο κώδικας υλικολογισμικού είναι ανοιχτού κώδικα.

Έτσι μοιάζει το θαυματουργό κουτί μου:

Ως το πρώτο μου έργο, αποφάσισα να φτιάξω ένα αντίστροφο εκκρεμές, το οποίο φαίνεται στην εικόνα του τίτλου. Έτσι φαίνεται από πίσω:

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

Έχω λοιπόν στη διάθεσή μου έναν βαθμό ελευθερίας, επιταχυνσιόμετρο και γυροσκόπιο, δεν χρησιμοποίησα κωδικοποιητές από τους κινητήρες. Θα γράψω σε Qt Script.

Αισθητήρες ανάγνωσης

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

Γυροσκόπιο

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

Εδώ είναι ο κωδικός μου για την εργασία με το γυροσκόπιο, εδώ ενώ (true) είναι ο κύριος βρόχος του προγράμματος.
var gyr_x_angle = 0; var lasttime = Date.now(); while (true) (var G = brick.gyroscope().read(); G = G + 69; // drift correction var curtime = Date.now(); var dt = (curtime - lasttime)/1000.0; τελευταία φορά = gyr_x_rate = G * 0,07 gyr_x_angle = gyr_x_rate * dt)

Διαβάζω τις τιμές του αισθητήρα στον πίνακα G και στην επόμενη γραμμή διορθώνω τον άξονα που με ενδιαφέρει. Αποδεικνύεται ότι ο συγκεκριμένος αισθητήρας μου σε πλήρη ηρεμία δείχνει μέση ταχύτητα 69 μονάδων, οπότε τις αφαιρώ για να πάρω την ταχύτητα που με ενδιαφέρει.
Ο αισθητήρας παράγει έναν ακέραιο που πρέπει να μετατραπεί σε γωνίες. Σε κανονική λειτουργία λειτουργεί σε 2000 μοίρες/δευτ. (dps). Το φύλλο δεδομένων λέει ότι αυτό αντιστοιχεί σε σταθερά 70mdps/ψηφίο. Άρα G(ψηφία) * 0,07 (dps/ψηφίο) μας δίνει τη γωνιακή ταχύτητα. Μένει να το ενσωματώσουμε, πολλαπλασιάζοντάς το με το χρόνο μέτρησης dt.

Επιταχυνσιόμετρο

Είναι ακόμα πιο εύκολο να λάβετε τη γωνία από το επιταχυνσιόμετρο, αλλά το πρόβλημα είναι ότι είναι πολύ θορυβώδες και όταν το καρότσι αρχίσει να τραντάζεται μπρος-πίσω, σβήστε τα φώτα εντελώς. Έτσι φαίνεται ο κώδικας:
[...] ενώ (αληθές) ([...] var A = brick.accelerometer().read(); var a_x_angle = Math.atan(A / A) * 180.0 / pi; )

Μείωση θορύβου: συνδυάζει ενδείξεις επιταχυνσιόμετρου και γυροσκόπιου

[...] var CF_x_γωνία = 0; ενώ (αληθές) ([...] CF_x_angle = 0,98*(CF_x_angle+ gyr_x_rate*dt) + 0,02*a_x_angle; )
Αυτό απλά λέει ότι η τρέχουσα τιμή γωνίας είναι το 98% της προηγούμενης γωνίας που διορθώθηκε από το γυροσκόπιο και το 2% είναι η άμεση ανάγνωση της γωνίας από το επιταχυνσιόμετρο. Αυτός ο συνδυασμός σας επιτρέπει να καταπολεμήσετε το γυροσκόπιο που αιωρείται μακριά, σημειώστε ότι δεν χρησιμοποιήσαμε καθόλου τη μεταβλητή gyr_x_angle.

Ελεγκτής PID

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

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

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

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

πλήρης κωδικός προγράμματος

var gyr_x_angle = 0; var lasttime = Date.now(); var CF_x_γωνία = 0; var iTerm = 0; var CF_x_angle_prev = 0; var KP = 0; var KI = 0; var KD = 0; while (true) (var G = brick.gyroscope().read(); G = G + 69; // drift correction var curtime = Date.now(); var dt = (curtime - lasttime)/1000.0; lasttime = gyr_x_rate = G * 0,07 var A = brick.accelerometer(). Kp*cf_x_angle; .setPower(power);

Επιλογή σταθερών ΚΡ, ΚΙ, ΚΔ

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

Αρχικά, ας βρούμε τον συντελεστή KP. Ας θέσουμε το KI και το KD ίσο με μηδέν και ας αυξήσουμε το KP ξεκινώντας από το μηδέν μέχρι το καλάθι μας να αρχίσει να κάνει (περίπου) σταθερές ταλαντώσεις, κάπως έτσι (KP=8, KI=0, KD=0):

Προφανώς, αυτό είναι υπερβολικό, το καρότσι λαμβάνει πολύ ισχυρό σήμα από την αναλογική συνιστώσα, οπότε το μειώνουμε περίπου στο μισό, παίρνουμε αυτό (KP=5, KI=0, KD=0):

Τώρα το καλάθι δεν έχει καθαρά αναλογικό σήμα, ας αυξήσουμε την ταχύτητά του προσθέτοντας ένα στοιχείο ενσωμάτωσης. Αυξάνουμε σταδιακά το KI από το μηδέν, προσπαθώντας να φτάσουμε στη στιγμή που πάλι το καρότσι ταλαντώνεται γύρω από την επιθυμητή θέση (KP=5, KI=0,5, KD=0):

Τώρα προσθέτουμε ένα διαφοροποιητικό εξάρτημα, το οποίο θα παίξει το ρόλο ενός αποσβεστήρα, μειώνοντας τους κραδασμούς, αυτό είναι που παίρνω (KP=5, KI=0,5, KD=5):

συμπέρασμα

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

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

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

Ενημέρωση: Προδιαγραφές ελεγκτή

Πολλοί άνθρωποι δεν καταλαβαίνουν πώς διαφέρει ένας ελεγκτής Trick από έναν ελεγκτή Arduino ή Legov. Να λοιπόν το σημάδι:
Κεντρική μονάδα επεξεργασίας (CPU) OMAP-L138 C6-Integra™ DSP+ARM® SoC, Texas Instruments
Ταχύτητα ρολογιού CPU 375 MHz
Πυρήνας CPU ARM926EJ-S™ RISC MPU
Πυρήνας CPU DSP C674x Σταθερό/Floating-Point VLIW DSP
ΕΜΒΟΛΟ 256 MB
FLASH - μνήμη 16 MB
Περιφερικός επεξεργαστής (PP) MSP430F5510, Texas Instruments
Συχνότητα ρολογιού PP 24 MHz
Διεπαφές χρήστη USB 2.0, WiFi b/g/n, BlueTooth, 2*UART, 2*I2C, Micro-SD, Mic in (stereo), Line out (mono)
Διεπαφές κινητήρα DC 4 θύρες κινητήρα 6-12V DC, με ατομική προστασία από υπερένταση υλικού (έως 2Α ανά κινητήρα)
Περιφερειακές διεπαφές 19 θύρες σήματος γενικής χρήσης (6 μονοκάναλες και 13 διπλού καναλιού) με τροφοδοτικό 3,3-5V, 6 από τις οποίες μπορούν να λειτουργήσουν σε λειτουργία αναλογικής εισόδου
Διεπαφές αισθητήρων βίντεο 2 είσοδοι BT.656 VGA 640*480, υποστήριξη στερεοφωνικής λειτουργίας
Ενσωματωμένη οθόνη LCD 2,4” TFT, χρώμα, αφής, ανάλυση 320*240 pixel
Ενσωματωμένο ηχείο Ονομαστική ισχύς 1W, μέγιστη ισχύς 3W
Ένδειξη LED 2χρωμη, ελεγχόμενη από λογισμικό
Υποδοχές επέκτασης 2 * Υποδοχές μονάδας επέκτασης με σχισμή 26 ακίδων
Πρόσθετος εξοπλισμός (περιλαμβάνεται με τον ελεγκτή) Επιταχυνσιόμετρο 3 αξόνων, γυροσκόπιο 3 αξόνων, κωδικοποιητής ήχου, ενισχυτής, μετατροπείς και κυκλώματα διαχείρισης ισχύος, κυκλώματα προστασίας υπέρτασης και ρεύματος εισόδου
Παροχή ηλεκτρικού ρεύματος 6-12V DC, εξωτερικός μετασχηματιστής ρεύματος ή μπαταρία LiPo RC 3P (11,1V) / 2P (7,4V)
Διαστάσεις θήκης 125*80*25 χλστ

TRIC, ένας κυβερνητικός κατασκευαστής νέας γενιάς

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

Κατασκευαστής ΤΕΧΝΑΣΜΑΑυτό δεν είναι απλώς ένα διασκεδαστικό παιχνίδι, αλλά ένα εξαιρετικό κιτ για τη δημιουργία πρωτοτύπων ρομποτικών μοντέλων: ένας ισχυρός «σκελετός», βασικές μονάδες δίσκου και οι απαραίτητοι αισθητήρες.

Μεταλλικά μέρη ΤΕΧΝΑΣΜΑσυμβατό με Sovmetalkonstruktor, δηλαδή διάτρηση για M4 με βήμα 10mm. Δεν θέσαμε στον εαυτό μας στόχο να εφεύρουμε ένα νέο σετ μεταλλικών κατασκευών, αλλά μόνο να προσθέσουμε ό,τι ήταν απαραίτητο. Θεμελιώδης διαφοράαπό απλούς κατασκευαστές στα παρακάτω.

  • Δυνατό μέταλλο. Τα εξαρτήματα κατασκευάζονται με πάχη 0,75mm, 0,8mm, 1,0mm.
  • Σκληρό προφίλ. Δοκάρια σε σχήμα U.
  • Βολικό στη συναρμολόγηση. Παρέχονται αντάπτορες για την τοποθέτηση τυπικών κινητήρων, σερβοκινητήρων κ.λπ.

Ελεγκτής ΤΕΧΝΑΣΜΑκαθιστά εύκολη τη δημιουργία σύγχρονα ρομπότ, ικανό ακόμη και να «βλέπει» και να «ακούει». Ο κατασκευαστής βασίζεται σε αυτό ΤΕΧΝΑΣΜΑγια χρήση σε σχολεία και πανεπιστήμια. Τετάρτη οπτικός προγραμματισμόςΤο TRIKStudio σάς επιτρέπει να συνθέτετε προγράμματα ρομπότ από εικόνες με έτοιμους αλγόριθμους. Η απλότητα και η ευκολία κάνουν τον σχεδιαστή ένα ενδιαφέρον παιχνίδι για τον γενικό καταναλωτή που θέλει να δημιουργήσει το δικό του ρομπότ ή ραδιοελεγχόμενο μοντέλο. Ο ελεγκτής μας είναι ήδη έτοιμος, υπάρχουν διάφορα μοντέλα επίδειξης. Υπάρχουν προπαραγγελίες από σχολεία και πανεπιστήμια και έντονο ενδιαφέρον από ξένους συνεργάτες.

Το σετ κατασκευής πωλείται σε διαφορετικά σετ: από απλά έως πολύ μεγάλα. Η παραπάνω φωτογραφία δείχνει παραδείγματα των εξαρτημάτων που περιλαμβάνονται στο κιτ. Επίσης, όλα τα σετ πρέπει να περιέχουν έναν ελεγκτή ΤΕΧΝΑΣΜΑ, βιντεοκάμερα και μικρόφωνο. (Πως αλλιώς!)

Ελεγκτής

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

Το χειριστήριο είναι συμβατό με μια μεγάλη γκάμα περιφερειακών συσκευών και περιλαμβάνει τα πάντα απαραίτητο εξοπλισμόγια τον έλεγχο κινητήρων DC και σερβομηχανισμών, καθώς και για λήψη και επεξεργασία πληροφοριών από ψηφιακούς και αναλογικούς αισθητήρες, μικρόφωνα, μονάδες βίντεο. Το χειριστήριο είναι εξοπλισμένο με χρώμα οθόνη αφής, προγραμματιζόμενα κουμπιά, ναι Υποστήριξη WiFi, Bluetooth 4.0 (συμπεριλαμβανομένου LE) και ANT. Το χειριστήριο διαθέτει ενσωματωμένη προστασία έναντι υπερέντασης και βαθιάς εκφόρτισης της μπαταρίας.

Στον κεντρικό επεξεργαστή ARM του ελεγκτή ΤΕΧΝΑΣΜΑΟι εκδόσεις Linux, οι κινητήρες και οι αισθητήρες είναι προσβάσιμοι μέσω προγραμματισμού ακόμη και από σενάρια φλοιού. Επομένως, τα αυτόνομα μοντέλα μπορούν να προγραμματιστούν όχι μόνο σε C ή C++/Qt, αλλά και σε JavaScript, C#/F# (.NET), Python και Java. Και για αρχάριους προγραμματιστές χωρίς μεγάλη εμπειρίαυπάρχει οπτικό περιβάλλον προγραμματισμού



Έχετε ερωτήσεις;

Αναφέρετε ένα τυπογραφικό λάθος

Κείμενο που θα σταλεί στους συντάκτες μας: