Heute veröffentlichen wir die Geschichte von Andrei Vukolovs Übergang zur IT. Die Begeisterung der Kindheit für den Weltraum führte ihn einst zur Raketenwissenschaft an der MSTU. Die harte Realität ließ mich den Traum vergessen, aber alles wurde noch interessanter. Durch das Studium von C ++ und Python konnten wir nicht weniger spannende Arbeiten ausführen: die Programmierung der Logik von Robotersteuerungssystemen.
Starten Sie
Ich hatte während meiner ganzen Kindheit das Glück, vom Weltraum zu schwärmen. Deshalb zögerte ich nach der Schule keine Minute, wo ich studieren sollte, und ging an die Moskauer Staatliche Technische Universität. Bauman, an die Abteilung für Raketenantrieb. Der Zweig des Kurses selbst - Pulver- oder Flüssigkeitsmotoren von Weltraumraketen - musste jedoch überhaupt nicht ausgewählt werden: Im Jahr 2001 verteilte eine spezielle Fakultätskommission die Zielgruppen der Bewerber. Ich habe "in einem Fass Schießpulver".
Zu dieser Zeit gab es den "Raketenboom" nur in Plänen, Ingenieure erhielten magere Gehälter und arbeiteten in speziellen geschlossenen Designbüros und Forschungsinstituten, die praktisch keine Aussichten auf Karriere und berufliches Wachstum hatten. Pulverraketen in Russland sind jedoch rein militärische Produkte.
Jetzt ist diese Richtung gefragt, aber schon während meines Studiums wurde mir klar, dass in der Raketenwissenschaft jede Aktivität von sich aus fast unmöglich ist. In der Tat ist dies ein Militärdienst. Wenn ich zum Beispiel in der Raketenindustrie arbeite, würde mir die Möglichkeit, selbst für mich selbst Software zu entwickeln, völlig entzogen, da diese Aktivität streng reguliert ist.
Alle Softwareprodukte werden ausschließlich auf Sonderbestellung und mit Genehmigung des Datenschutzausschusses entwickelt (jetzt ist es eine Abteilung des FSTEC). Der Entwickler dort muss buchstäblich jede Codezeile registrieren und lizenzieren. Die gesamte Software ist auf Aufgabenebene zunächst geheim. Dies erklärt teilweise, warum die Software, die derzeit zur Ausbildung von Raketenschülern verwendet wird, in den 90er Jahren des Maximums des 20. Jahrhunderts entwickelt wurde.
Als ich meinen Abschluss machte, schaffte ich es, am Department of Mechanics Theory zu arbeiten und begann mit der Entwicklung eines Trainingssimulators für den technischen Prozess in C ++, sodass ich ein Beispiel zum Vergleich hatte und alle Vor- und Nachteile abwägen konnte. Die Wahl lag auf der Hand und ich begann allmählich, mich der IT und der Robotik zuzuwenden. In der angewandten Mechanik hat es viel mehr Spaß gemacht als in der Raketenwissenschaft: viele ungelöste Probleme, eine offene Umgebung, das Fehlen einer Entwicklungsindustrie und ein dringender Bedarf an Simulationssoftware. In der Robotik - die instabile Architektur gängiger Software und die Notwendigkeit, wiederholt komplexe Algorithmen zu implementieren, einschließlich Fuzzy-Logik und den Anfängen der KI. Daher bin ich nach meinen ersten Programmen zur Verarbeitung experimenteller Daten fast nicht zu Raketen zurückgekehrt (mit Ausnahme des Abschlussprojekts).
Infolgedessen hatte ich die Möglichkeit, nur vier Monate in der Spezialität zu arbeiten, bevor ich meinen Abschluss im Verbundwerkwerk für die Luft- und Raumfahrtindustrie in der Nähe von Moskau machte. Am Ende der Ausbildung musste ich nicht einmal nach Arbeit suchen - ich kam sofort, um an der Fakultät für Robotik angewandte Mechanik zu unterrichten.
Vom Unterrichten bis zum Programmieren
Auf dem IFTOMM-Weltkongress mit Studenten - Mitgliedern der Forschungsgruppe (ich bin auf der rechten Seite)An der MSTU, an der probotechnischen Fakultät, habe ich 10 Jahre gearbeitet und einen Kurs in Theorie der Mechanismen unterrichtet. Er veröffentlichte wissenschaftliche Arbeiten (siehe Ende des Artikels) und wechselte schrittweise von der Mechanik zu CAD und Robotik. Und am Ende beschloss er, mit dem Unterrichten aufzuhören. Um die Gründe für diese Entscheidung am anschaulichsten zu veranschaulichen, möchte ich sagen, dass sich der von mir gelesene Studiengang im Laufe eines Jahrzehnts nicht durch ein Komma geändert hat. Obwohl die angewandte Mechanik nach den Veröffentlichungen sehr, sehr erfolgreich verlief.
Darüber hinaus ähnelte die Arbeit immer mehr Bürokraten - Berichten, Programmen, Standards und Tonnen Papier. Unter solchen Bedingungen wurde die Freude am Unterrichten durch Berichte über den Erhalt dieser Freude ersetzt, und dies ist für einen praktizierenden Spezialisten mehr als unangenehm.
Und schließlich bin ich so zur Robotik gekommen: 2007-2009 haben wir zusammen mit den Professoren A. Golovin und N. Umnov begonnen, die ersten wissenschaftlichen Arbeiten vorzubereiten. Dort musste ich Algorithmen verwenden, um die Flugbahnen von Objekten gemäß der stroboskopischen Fotografie zu bestimmen. Von diesem Thema - ein Schritt zu Machine Vision, OpenCV und dem Robotic Operating System (obwohl ich damals noch nicht einmal über eine solche Skala nachgedacht habe). Danach konzentrierte ich mich schließlich auf angewandte Mechanik und Robotik in der Forschung, und die Entwicklung wurde zu einer Hilfstätigkeit.
Um jedoch einen neuen Job in der Robotik zu finden, war es notwendig, meine Programmierkenntnisse zu verbessern und zu ergänzen. Schließlich habe ich, insbesondere IT, bis auf einen einjährigen Universitätskurs (ObjectPascal und Borland VCL in C ++) nirgendwo studiert und mich in den theoretischen Aspekten der Entwicklung auf Mathematik verlassen.
Zuerst habe ich über die Möglichkeiten für Vollzeitkurse an meinem Heimatinstitut nachgedacht. Es wurde zwar schnell klar, dass die Kombination solcher Studien mit der Arbeit in der Abteilung aufgrund eines zerrissenen Zeitplans und häufiger Arbeiten außerhalb des eigenen Zeitplans (Ersatz usw.) praktisch unmöglich wäre. So kam nach und nach die Idee, bezahlte Kurse aus der Ferne zu beenden. Er kam auf Empfehlung von Professoren des Technopark Mail.ru-Schulungszentrums in Baumanka zu GeekBrains und schrieb sich für den Python Programmer-Kurs ein.
Die Kurse verursachten keine Schwierigkeiten, ein Problem - mussten ständig kombiniert werden: mit Arbeit in der Abteilung, wissenschaftlichen Arbeiten und Veranstaltungen. Es gab nicht genug Zeit, so dass ich (zum Glück vorübergehend) die meisten sozialen Verbindungen außerhalb des Hauses opfern musste.
Mit der Last so umgehen: Probleme auf der Straße gelöst. Diese Fähigkeit, die durch zahlreiche Geschäftsreisen entwickelt wurde, erwies sich als sehr nützlich, da ich ohne sie nicht einmal alle meine Hausaufgaben erledigen konnte (und sie ersetzt auch die Meditation ...). Ich habe mich daran gewöhnt, unterwegs mit einem Laptop, Smartphone und drahtlosen Tastaturen für ein Smartphone zu programmieren.
Ich habe einen Dell Latitude 3470-Laptop und jedes Smartphone mit einer Diagonale von 5,5 Zoll oder mehr, das mit einer Logitech K 810 BT-Tastatur gepaart ist, reicht aus. Im Allgemeinen empfehle ich Logitech-Produkte jedem, sie sind sehr zuverlässig und halten sehr harten Nutzungsbedingungen stand (und dies ist niemals eine Werbung).
Tastatur Logitech K810Python ist mit solchen Arbeiten sehr vertraut - mit einem guten Editor. Ein weiterer Programmier-Hack: Verwenden Sie Remote-Verbindungen zum Desktop oder zur Laufzeit. Ich habe mehrere Aufgaben mit einem sicheren Webserver ausgeführt, auf dem Django auf meinem Heimcomputer ausgeführt wird. Er arbeitete zur gleichen Zeit vom Zug aus, die Software verwendete PyDroid, DroidEdit, Maxima.
Warum Python?
Ganz kurz habe ich versucht, PHP als System-Skriptsprache zu verwenden. Python zunächst unabhängig und nach und nach "für sich" studiert. Er beschloss, ernsthaft zu studieren, nachdem er von der Existenz einer effektiven Verbindung zwischen Python und C ++ auf Modulebene erfahren hatte - es schien interessant, optimierte Algorithmen und Verfahren zur Datenaufbereitung in einer Sprache zu trennen.
Das einfachste Beispiel: Auf einem eingebetteten Computer mit einem RISC-Prozessor in C ++ ist ein nicht standardmäßiges leistungsstarkes Laufwerkssteuerungssystem implementiert. Die Verwaltung erfolgt über eine externe maschinenabhängige API, die beispielsweise die Kommunikation zwischen Subsystemen über ein Netzwerk unterstützt. Auf hoher Ebene wird der Antriebsbetriebsalgorithmus nicht debuggt oder ist nicht konstant (das Laden verschiedener Algorithmen ist je nach Arbeitsprozess erforderlich).
Eine der besten Möglichkeiten, ein solches System zu erhalten, besteht darin, die maschinenspezifischen API C ++ - Subsysteme als Grundlage für die auf dem plattformübergreifenden Interpreter verwendeten Python-Klassen zu verwenden. Daher muss der Top-Level-Entwickler die Funktionen des eingebetteten Computers und seines Betriebssystems nicht berücksichtigen, sondern arbeitet einfach mit Python-Klassen, die als „Wrapper“ der Low-Level-API fungieren.
Ich musste die Bindung von C ++ und Python von Grund auf lernen. Es wurde schnell klar, dass objektorientierte Merkmale auf hoher Ebene viel wichtiger sind als auf niedriger Ebene. Aus diesem Grund musste ich den Ansatz zum Entwerfen und Implementieren der API vollständig ändern, mich für Klassen auf Python-Ebene entscheiden und globale Daten in C / C ++ gemeinsam nutzen. Gewöhnen Sie sich an die Codegenerierung: Beispielsweise generiert das ROS-Framework selbst Namen und Objekte in Python, sodass Sie die Unterschiede in den Sprachen berücksichtigen müssen, insbesondere beim Tippen und Entwerfen Ihrer Schnittstellen.
Arbeiten Sie in der Gegenwart: Python und die Logik von Robotersteuerungssystemen
Jetzt arbeite ich als Programmierer in Python und C ++ im Forschungs- und Ausbildungszentrum "Robotics" der MSTU. Wir implementieren Forschungsprojekte und Softwaretools, die von Regierungsabteilungen in Auftrag gegeben wurden: Wir entwickeln Manipulatoren mit integrierten Bildverarbeitungssystemen und systemunabhängigen automatischen Steuerungsalgorithmen auf hoher Ebene.
Jetzt programmiere ich in Python eine übergeordnete Logik von Robotersteuerungssystemen. Diese Sprache verbindet hochoptimierte Module, die in C ++, Assembler und Go geschrieben sind.
Bei der Programmierung von Robotersteuerungsalgorithmen werden zwei große Gruppen von Algorithmen verwendet. Die erste davon wird auf niedriger Ebene direkt auf dem Gerät implementiert - dies ist die Firmware der Antriebssteuerungen, Kommunikationsleitungskonzentratoren und Subsysteme für die Interaktion mit dem Bediener.
Algorithmen sind hier auf eine kontrollierte Ausführungsgeschwindigkeit und Zuverlässigkeit ausgelegt, die die Leistung des gesamten Roboters übertreffen. Letzteres ist notwendig, da die Sicherheit des gesamten Systems von der Low-Level-Steuerungssoftware abhängt.
Die zweite Gruppe von Algorithmen bestimmt den Betrieb des Roboters als Ganzes. Hierbei handelt es sich um hochrangige Programme, deren Schwerpunkt auf der Verständlichkeit und Geschwindigkeit der Implementierung des Algorithmus liegt, die häufig recht komplex sind. Darüber hinaus ändert sich die High-Level-Software des Roboters sehr häufig im Prozess der Inbetriebnahme und Prüfung. Interpretierbare Allzwecksprachen sind für eine solche Entwicklung unverzichtbar.
Welches Wissen wird für einen solchen Job benötigt?
Das Erlernen der C ++ - Vorlagensprache, der objektorientierten Funktionen von Python, ist erforderlich. Eine fast unverzichtbare Fähigkeit ist die Fähigkeit, APIs zu entwerfen und zu dokumentieren. Es wird nicht überflüssig sein, die Fähigkeiten spezialisierter Bibliotheken wie Boost :: Python zu untersuchen. Diejenigen, die mit Low-Level-Software arbeiten, müssen sich definitiv mit Multithreading (darüber hinaus auf Kernel-Ebene) und Linux / UNIX / QNX-Systemaufrufen befassen. Um das Verständnis der Prinzipien der Gebäuderobotik zu verbessern, ist es sehr nützlich, sich mit dem Robotic Operating System Framework vertraut zu machen.
Ich versuche, mindestens eine kompilierende und eine interpretierte Programmiersprache im Asset zu haben, die sich entwickelt und gefragt ist. Dies ist eine erfolgreiche Strategie für die Arbeit im Ingenieurwesen, bei der Sie ständig hochspezialisierte (sprich: ungewöhnliche) Algorithmen entwickeln und in Kompilierungssprachen implementieren müssen. Die Aufgabe, Daten für eine solche Software vorzubereiten, ist mit interpretierten Sprachen viel besser zu lösen. Anfangs enthielt mein Set C ++, Pascal und BASIC, später wurden PHP und BASH hinzugefügt.
Wie Entwicklungswerkzeuge beim Lernen von Schülern nützlich sein können
Der Hauptplan für die berufliche Entwicklung besteht nun darin, die wissenschaftliche Grundlage für den Einsatz professioneller Softwareentwicklungstools in der Pädagogik zu schaffen, um Lehrmethoden zu entwickeln und zu testen.
2016 begann ich ein großes Experiment zur Einführung von Entwicklungswerkzeugen - Programmiersprachen, IDEs, Dokumentationsgeneratoren, Versionskontrollsystemen - in die pädagogische Praxis der Hochschulbildung. Jetzt ist es uns bereits gelungen, Ergebnisse zu erzielen, die sich für eine qualitative Verallgemeinerung eignen.
Beispielsweise verbessert die Einführung der Versionierung von Materialien in den Bildungsprozess die Qualität der studentischen Arbeit erheblich, jedoch nur unter der Bedingung, dass die Studenten gemeinsam an gemeinsamen Projekten arbeiten. Die Entwicklung von Methoden zum Unterrichten technischer Disziplinen mit professionellen Softwareentwicklungstools wird jetzt aktiv von den Kräften meiner Forschungsgruppe durchgeführt, die sich aus Studenten, Bewerbern und Studenten von Zusatzausbildungsprogrammen der MSTU zusammensetzt.
Übrigens habe ich die Unterrichtspraxis nicht verlassen - ich habe den ausführlichen persönlichen Kurs des Autors über Linux-Geräte und -Verwaltung für das Institute of Advanced Studies der MSTU entwickelt und unterrichte selbst.
Wissenschaftliche Arbeiten
Frühe ArbeitFragen der Gangplanung bei der Gestaltung von vierbeinigen Laufsystemen am Beispiel des Pferdegangs (2010)
Zum Thema Kinematik und Belastung des Stützelements des Vorderbeins des Pferdes in der Phase der Annäherung an die Stütze als Bestandteile des vierbeinigen Antriebszyklus (2012)
Vom letzten3D-Anwendung zur Simulation der Herstellung von Zahnrädern zur Vermittlung der Theorie von Mechanismen und Maschinen (2019)
Erkennung struktureller Hindernisse und deren Anwendung bei der Suche nach Reliefobjekten (2018)
Weitere von wissenschaftlichen Zitierdatenbanken indizierte Werke sind in meinem
ResearchGate- Profil zu sehen. Die meisten Artikel widmen sich der Bewegung von Maschinen, es gibt Arbeiten zur Ingenieurpädagogik und Lernsoftware.