Από ρουκέτες μέχρι ρομπότ και τι σχέση έχει η Python με αυτό. GeekBrains Alumni Story

Από ρουκέτες μέχρι ρομπότ και τι σχέση έχει η Python με αυτό. GeekBrains Alumni Story
Σήμερα δημοσιεύουμε την ιστορία της μετάβασης του Andrey Vukolov στην πληροφορική. Το παιδικό του πάθος για το διάστημα τον οδήγησε κάποτε να σπουδάσει πυραυλική επιστήμη στο MSTU. Η σκληρή πραγματικότητα με έκανε να ξεχάσω το όνειρο, αλλά όλα έγιναν ακόμα πιο ενδιαφέροντα. Η μελέτη της C++ και της Python μου επέτρεψε να κάνω εξίσου συναρπαστική δουλειά: τον προγραμματισμό της λογικής των συστημάτων ελέγχου ρομπότ.

ΑΡΧΙΚΗ

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

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

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

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

Όταν αποφοίτησα από το ινστιτούτο, κατάφερα να δουλέψω στο τμήμα θεωρίας μηχανισμών και άρχισα να αναπτύσσω έναν προσομοιωτή εκπαιδευτικής διαδικασίας σε C++, οπότε είχα ένα παράδειγμα για σύγκριση και μπορούσα να ζυγίσω τα υπέρ και τα κατά. Η επιλογή ήταν προφανής και σταδιακά άρχισα να στρέφομαι προς την πληροφορική και τη ρομποτική. Η εφαρμοσμένη μηχανική ήταν πολύ πιο διασκεδαστική από την πυραυλική επιστήμη: πολλά άλυτα προβλήματα, ανοιχτό περιβάλλον, έλλειψη βιομηχανίας ανάπτυξης, επείγουσα ανάγκη για λογισμικό προσομοίωσης. Στη ρομποτική, υπάρχει μια άστατη αρχιτεκτονική κοινού λογισμικού και η ανάγκη επανειλημμένης εφαρμογής πολύπλοκων αλγορίθμων, συμπεριλαμβανομένης της ασαφούς λογικής και των απαρχών της τεχνητής νοημοσύνης. Ως εκ τούτου, μετά τα πρώτα μου προγράμματα για την επεξεργασία πειραματικών δεδομένων, σχεδόν ποτέ δεν επέστρεψα στους πυραύλους (με εξαίρεση το έργο της αποφοίτησής μου).

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

Από τη διδασκαλία στον προγραμματισμό

Από ρουκέτες μέχρι ρομπότ και τι σχέση έχει η Python με αυτό. GeekBrains Alumni Story
Στο Παγκόσμιο Συνέδριο IFTOMM με φοιτητές μέλη της ερευνητικής ομάδας (εγώ στα δεξιά)

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

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

Και τελικά έφτασα στη ρομποτική ως εξής: το 2007-2009, μαζί με τους καθηγητές A. Golovin και N. Umnov, ξεκινήσαμε την προετοιμασία των πρώτων επιστημονικών εργασιών. Εκεί έπρεπε να χρησιμοποιήσω αλγόριθμους για να προσδιορίσω τις διαδρομές των αντικειμένων από τη φωτογραφία στροβοσκοπίου. Από αυτό το θέμα είναι ένα βήμα στη μηχανική όραση, το OpenCV και το ρομποτικό λειτουργικό σύστημα (αν και εκείνη την εποχή δεν είχα καν σκεφτεί μια τέτοια κλίμακα). Μετά από αυτό, επικεντρώθηκα τελικά στην εφαρμοσμένη μηχανική και τη ρομποτική στην έρευνα και η ανάπτυξη έγινε υποστηρικτική δραστηριότητα.

Ωστόσο, για να βρω μια νέα δουλειά στη ρομποτική, ήταν απαραίτητο να βελτιώσω και να συμπληρώσω τις γνώσεις μου στον προγραμματισμό. Άλλωστε, ποτέ δεν σπούδασα συγκεκριμένα πληροφορική, εκτός από ένα πανεπιστημιακό μάθημα διάρκειας ενός έτους (ObjectPascal και Borland VCL σε C++), και βασίστηκα στα μαθηματικά για τις θεωρητικές πτυχές της ανάπτυξης.

Στην αρχή σκέφτηκα επιλογές για μαθήματα πλήρους απασχόλησης στο ινστιτούτο της πατρίδας μου. Είναι αλήθεια ότι γρήγορα έγινε σαφές ότι θα ήταν σχεδόν αδύνατο να συνδυαστούν τέτοιες σπουδές με εργασία στο τμήμα λόγω του ακανόνιστου προγράμματος και της συχνής εργασίας εκτός του δικού του προγράμματος (υποκατάσταση κ.λπ.). Έτσι σταδιακά κατέληξα στην ιδέα να ολοκληρώσω τα επί πληρωμή μαθήματα εξ αποστάσεως. Ήρθα στο GeekBrains μετά από σύσταση καθηγητών από το εκπαιδευτικό κέντρο Mail.ru Technopark, που βρίσκεται στην Baumanka, και γράφτηκα στο μάθημα προγραμματιστή Python.

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

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

Ο φορητός υπολογιστής μου είναι Dell Latitude 3470 και κάθε smartphone με διαγώνιο 5.5 ιντσών ή μεγαλύτερη σε συνδυασμό με ένα πληκτρολόγιο Logitech K 810 BT θα το κάνει. Γενικά, προτείνω τα προϊόντα Logitech σε όλους· είναι πολύ αξιόπιστα και αντέχουν σε πολύ σκληρές συνθήκες χρήσης (και αυτό δεν είναι ποτέ διαφήμιση).

Από ρουκέτες μέχρι ρομπότ και τι σχέση έχει η Python με αυτό. GeekBrains Alumni Story
Πληκτρολόγιο Logitech K810

Η Python είναι πολύ ευνοϊκή για μια τέτοια δουλειά - εάν έχετε έναν καλό επεξεργαστή. Άλλο ένα hack προγραμματισμού: χρησιμοποιήστε απομακρυσμένες συνδέσεις στην επιφάνεια εργασίας ή στο περιβάλλον χρόνου εκτέλεσης. Ολοκλήρωσα πολλές εργασίες χρησιμοποιώντας έναν ασφαλή διακομιστή ιστού που εκτελεί το Django στον οικιακό μου υπολογιστή. Εργάστηκα από το τρένο, χρησιμοποιώντας το λογισμικό PyDroid, DroidEdit, Maxima.

Γιατί Python;

Δεν πέρασε πολύς καιρός πριν προσπάθησα να χρησιμοποιήσω την PHP ως γλώσσα προγραμματισμού συστήματος. Αρχικά σπούδασα Python μόνος μου και σιγά σιγά «για τον εαυτό μου». Αποφάσισα να μελετήσω σοβαρά αφού έμαθα για την ύπαρξη μιας αποτελεσματικής σύνδεσης μεταξύ Python και C++ σε επίπεδο ενότητας - μου φάνηκε ενδιαφέρον να μοιράζομαι βελτιστοποιημένους αλγόριθμους και διαδικασίες προετοιμασίας δεδομένων στην ίδια γλώσσα.

Το απλούστερο παράδειγμα: υπάρχει ένα σύστημα ελέγχου για μια μη τυπική ισχυρή μονάδα δίσκου, που υλοποιείται σε ένα ενσωματωμένο μηχάνημα με επεξεργαστή RISC, σε C++. Η διαχείριση πραγματοποιείται μέσω ενός εξωτερικού API που εξαρτάται από τη μηχανή, το οποίο υποστηρίζει, για παράδειγμα, επικοινωνία μεταξύ υποσυστημάτων μέσω ενός δικτύου. Σε υψηλό επίπεδο, ο αλγόριθμος λειτουργίας του δίσκου δεν έχει διορθωθεί ή δεν είναι σταθερός (είναι απαραίτητο να φορτωθούν διαφορετικοί αλγόριθμοι ανάλογα με τη διαδικασία εργασίας).

Ένας από τους καλύτερους τρόπους για να επιτευχθεί ένα τέτοιο σύστημα είναι η χρήση του API υποσυστήματος C++ για τη μηχανή ως βάση για ένα σύνολο κλάσεων Python που εκτελούνται σε έναν διερμηνέα πολλαπλών πλατφορμών. Έτσι, ο προγραμματιστής ανώτατου επιπέδου δεν θα χρειάζεται να λάβει υπόψη τα χαρακτηριστικά του ενσωματωμένου μηχανήματος και του λειτουργικού του συστήματος· απλώς θα εργαστεί με κλάσεις Python που λειτουργούν ως «περιτύλιγμα» του API χαμηλού επιπέδου.

Έπρεπε να μάθω το δέσιμο C++ και Python σχεδόν από την αρχή. Γρήγορα έγινε σαφές ότι οι αντικειμενοστρεφείς δυνατότητες σε υψηλό επίπεδο ήταν πολύ πιο σημαντικές από ό,τι σε χαμηλό επίπεδο. Εξαιτίας αυτού, έπρεπε να αλλάξουμε εντελώς την προσέγγιση για το σχεδιασμό και την υλοποίηση του API, επιλέγοντας κλάσεις σε επίπεδο Python και κοινοποιούμενα παγκόσμια δεδομένα σε C/C++. Συνηθίστε τη δημιουργία κώδικα: για παράδειγμα, το ίδιο το πλαίσιο ROS δημιουργεί ονόματα και αντικείμενα στην Python, επομένως πρέπει να λαμβάνετε υπόψη τις γλωσσικές διαφορές, ειδικά στην πληκτρολόγηση, όταν σχεδιάζετε τις διεπαφές σας.

Εργασία στο παρόν: Python and Robot Control Logic

Τώρα εργάζομαι ως προγραμματιστής Python και C++ στο Κέντρο Έρευνας και Εκπαίδευσης Ρομποτικής στο Κρατικό Τεχνικό Πανεπιστήμιο της Μόσχας. Υλοποιούμε ερευνητικά έργα και εργαλεία λογισμικού που ανατέθηκαν από κυβερνητικές υπηρεσίες: αναπτύσσουμε χειριστές με ενσωματωμένα τεχνικά συστήματα όρασης και αλγόριθμους αυτόματου ελέγχου υψηλού επιπέδου που είναι ανεξάρτητοι από συστήματα.

Επί του παρόντος, προγραμματίζω τη λογική υψηλού επιπέδου για συστήματα ελέγχου ρομπότ στην Python· αυτή η γλώσσα συνδέει άκρως βελτιστοποιημένες ενότητες γραμμένες σε C++, assembler και Go.

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

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

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

Τι γνώσεις χρειάζονται για μια τέτοια εργασία;

Θα είναι υποχρεωτική η μελέτη της γλώσσας προτύπου C++ και των αντικειμενοστρεφών δυνατοτήτων της Python. Μια σχεδόν αναντικατάστατη δεξιότητα είναι η ικανότητα σχεδιασμού και τεκμηρίωσης API. Θα ήταν καλή ιδέα να εξερευνήσετε τις δυνατότητες εξειδικευμένων βιβλιοθηκών όπως το Boost::Python. Όσοι εργάζονται με λογισμικό χαμηλού επιπέδου θα πρέπει σίγουρα να αντιμετωπίσουν κλήσεις πολλαπλών νημάτων (σε επίπεδο πυρήνα) και κλήσεις συστήματος Linux/UNIX/QNX. Για να βελτιώσετε την κατανόησή σας σχετικά με τις αρχές της ρομποτικής, είναι πολύ χρήσιμο να εξοικειωθείτε με το πλαίσιο του Robotic Operating System.

Προσπαθώ να έχω τουλάχιστον μια μεταγλωττισμένη και μια ερμηνευμένη γλώσσα προγραμματισμού που αναπτύσσεται και είναι σε ζήτηση. Αυτή είναι μια στρατηγική που κερδίζει για να εργαστείτε στη μηχανική, όπου υπάρχει συνεχής ανάγκη ανάπτυξης εξαιρετικά εξειδικευμένων (διαβάστε: ασυνήθιστων) αλγορίθμων και εφαρμογής τους στη μεταγλώττιση γλωσσών. Το έργο της προετοιμασίας δεδομένων για τέτοιο λογισμικό είναι πολύ πιο ευχάριστο να επιλυθεί χρησιμοποιώντας γλώσσες διερμηνείας. Αρχικά, το σετ μου περιελάμβανε C++, Pascal και BASIC, αργότερα προστέθηκαν PHP και BASH.

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

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

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

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

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

Επιστημονική εργασία

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

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

Από το τελευταίο
Εφαρμογή προσομοίωσης κατασκευής 3D εργαλείων για διδασκαλία μηχανισμών και θεωρίας μηχανών (2019)

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

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

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο