Von Raketen bis zu Robotern und was hat Python damit zu tun? GeekBrains-Alumni-Geschichte

Von Raketen bis zu Robotern und was hat Python damit zu tun? GeekBrains-Alumni-Geschichte
Heute veröffentlichen wir die Geschichte von Andrey Vukolovs Übergang zur IT. Seine Kindheitsleidenschaft für den Weltraum veranlasste ihn einst, Raketenwissenschaft an der MSTU zu studieren. Die harte Realität ließ mich den Traum vergessen, aber alles wurde noch interessanter. Das Studium von C++ und Python ermöglichte mir eine ebenso spannende Arbeit: die Programmierung der Logik von Robotersteuerungssystemen.

Hauptseite

Ich hatte das Glück, meine ganze Kindheit lang vom Weltraum zu schwärmen. Deshalb habe ich nach der Schule keine Minute daran gezweifelt, wo ich studieren sollte, und habe mich an der MSTU angemeldet. Bauman, an die Abteilung für Raketenantriebstechnik. Der Zweig des Studiengangs selbst – Pulver- oder Flüssigkeitstriebwerke von Weltraumraketen – musste jedoch überhaupt nicht gewählt werden: Im Jahr 2001 verteilte eine spezielle Fakultätskommission noch die Zielgruppen der Bewerber. Ich wurde in einem Fass Schießpulver gefangen.

Zu dieser Zeit existierte der „Raketenboom“ nur in Plänen; Ingenieure erhielten magere Gehälter und arbeiteten in speziellen geschlossenen Designbüros und Forschungsinstituten ohne Aussicht auf Karriere und berufliches Wachstum. Dennoch sind Pulverraketen in Russland reine Militärprodukte.

Mittlerweile ist dieser Bereich gefragt, aber schon während meines Studiums wurde mir klar, dass in der Raketenwissenschaft jede Tätigkeit aus eigener Initiative nahezu unmöglich ist. Tatsächlich handelt es sich hierbei um Militärdienst. Wenn ich beispielsweise in der Raketenindustrie arbeite, wäre mir die Möglichkeit, selbständig Software zu entwickeln, völlig vorenthalten, da diese Tätigkeit streng reglementiert ist.

Alle Softwareprodukte werden ausschließlich im Sonderauftrag und mit Genehmigung der Geheimhaltungskommission (heute eine Abteilung von FSTEC) entwickelt. Der Entwickler dort ist verpflichtet, buchstäblich jede Codezeile zu registrieren und zu lizenzieren. Sämtliche Software ist zunächst auf Aufgabenebene geheim. Dies erklärt zum Teil, warum die Software, die heute zur Ausbildung von Raketenwissenschaftsstudenten verwendet wird, spätestens in den 90er Jahren entwickelt wurde.

Als ich das Institut abschloss, gelang es mir, in der Abteilung für Mechanismustheorie zu arbeiten und mit der Entwicklung eines Bildungsprozesssimulators in C++ zu beginnen, sodass ich ein Vergleichsbeispiel hatte und die Vor- und Nachteile abwägen konnte. Die Wahl lag auf der Hand und ich begann mich allmählich in Richtung IT und Robotik zu bewegen. Angewandte Mechanik machte viel mehr Spaß als Raketenwissenschaft: viele ungelöste Probleme, eine offene Umgebung, keine Entwicklungsindustrie, ein dringender Bedarf an Simulationssoftware. In der Robotik gibt es eine ungeklärte Architektur gängiger Software und die Notwendigkeit, immer wieder komplexe Algorithmen zu implementieren, einschließlich Fuzzy-Logik und den Anfängen der KI. Deshalb bin ich nach meinen ersten Programmen zur Verarbeitung experimenteller Daten fast nie wieder zu Raketen zurückgekehrt (mit Ausnahme meiner Abschlussarbeit).

Dadurch hatte ich nur vier Monate lang die Möglichkeit, in meinem Fachgebiet zu arbeiten, bevor ich meinen Abschluss in einem Werk in der Nähe von Moskau für Verbundstrukturen für die Luft- und Raumfahrtindustrie machte. Nach Abschluss meines Studiums musste ich nicht einmal einen Job suchen – ich kam sofort, um an der Robotik-Abteilung Angewandte Mechanik zu unterrichten.

Vom Unterrichten bis zum Programmieren

Von Raketen bis zu Robotern und was hat Python damit zu tun? GeekBrains-Alumni-Geschichte
Auf dem IFTOMM-Weltkongress mit studentischen Mitgliedern der Forschungsgruppe (ich rechts)

Ich habe 10 Jahre lang an der MSTU in der Probenahmeabteilung gearbeitet und einen Kurs über die Theorie der Mechanismen unterrichtet. Er veröffentlichte wissenschaftliche Arbeiten (siehe Ende des Artikels) und wechselte nach und nach von der Mechanik zum CAD und zur Robotik. Und am Ende beschloss er, die Lehrtätigkeit aufzugeben. Um die Gründe für diese Entscheidung am deutlichsten zu veranschaulichen, möchte ich sagen, dass sich der von mir unterrichtete Studiengang in den zehn Jahren nicht um eine Dezimalstelle verändert hat. Obwohl die angewandte Mechanik, den Veröffentlichungen nach zu urteilen, sehr, sehr erfolgreich vorankam.

Darüber hinaus ähnelte die Arbeit immer mehr einer bürokratischen Arbeit – Berichte, Programme, Standards und Tonnen von Papier. Unter solchen Bedingungen wurde die Freude am Unterrichten durch die Berichterstattung über den Erhalt dieser Freude ersetzt, was für einen praktizierenden Spezialisten mehr als unangenehm ist.

Und schließlich kam ich so zur Robotik: 2007-2009 begannen wir zusammen mit den Professoren A. Golovin und N. Umnov mit der Vorbereitung der ersten wissenschaftlichen Arbeiten. Dort musste ich mithilfe von Algorithmen die Bahnen von Objekten aus der Blitzfotografie ermitteln. Von diesem Thema aus ist es ein Schritt zu maschinellem Sehen, OpenCV und Robotic Operating System (obwohl ich damals noch nicht einmal über eine solche Größenordnung nachgedacht habe). Danach konzentrierte ich mich in der Forschung endgültig auf angewandte Mechanik und Robotik und die Entwicklung wurde zu einer unterstützenden Tä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 mich nie speziell mit IT befasst, abgesehen von einem einjährigen Universitätskurs (ObjectPascal und Borland VCL in C++), und habe mich bei den theoretischen Aspekten der Entwicklung auf Mathematik verlassen.

Zuerst dachte ich über Möglichkeiten nach, Vollzeitstudiengänge an meiner Heimathochschule zu absolvieren. Zwar wurde schnell klar, dass eine Vereinbarkeit des Studiums mit der Arbeit am Fachbereich aufgrund der unregelmäßigen Arbeitszeiten und häufigen Arbeiten außerhalb des eigenen Zeitplans (Vertretungen etc.) kaum möglich sein würde. So kam ich nach und nach auf die Idee, kostenpflichtige Kurse aus der Ferne zu absolvieren. Ich kam auf Empfehlung von Professoren des Mail.ru Technopark-Schulungszentrums in Baumanka zu GeekBrains und schrieb mich für den Python-Programmiererkurs ein.

Die Kurse bereiteten keine Schwierigkeiten, das einzige Problem war, dass ich sie ständig mit der Arbeit am Fachbereich, wissenschaftlichen Arbeiten und Veranstaltungen verbinden musste. Die Zeit war so knapp, dass die meisten sozialen Kontakte außerhalb des Hauses (glücklicherweise vorübergehend) geopfert werden mussten.

So habe ich die Arbeitsbelastung bewältigt: Ich habe unterwegs Probleme gelöst. Diese durch zahlreiche Geschäftsreisen entwickelte Fähigkeit erwies sich als sehr nützlich, da ich ohne sie nicht einmal alle meine Hausaufgaben erledigen könnte (und sie ersetzt auch die Meditation...). Ich habe gelernt, unterwegs mit meinem Laptop, meinem Smartphone und drahtlosen Smartphone-Tastaturen zu programmieren.

Mein Laptop ist ein Dell Latitude 3470 und jedes Smartphone mit einer Diagonale von 5.5 Zoll oder mehr in Kombination mit einer Logitech K 810 BT-Tastatur reicht aus. Generell kann ich Logitech-Produkte jedem empfehlen; sie sind sehr zuverlässig und halten sehr harten Einsatzbedingungen stand (und das ist niemals Werbung).

Von Raketen bis zu Robotern und was hat Python damit zu tun? GeekBrains-Alumni-Geschichte
Tastatur logitech k810

Python ist für solche Arbeiten sehr hilfreich – vorausgesetzt, Sie haben einen guten Editor. Ein weiterer Programmier-Hack: Nutzen Sie Remote-Verbindungen zur Desktop- oder Laufzeitumgebung. Ich habe mehrere Aufgaben mithilfe eines sicheren Webservers erledigt, auf dem Django auf meinem Heimcomputer ausgeführt wurde. Ich habe vom Zug aus gearbeitet und dabei die Software PyDroid, DroidEdit, Maxima verwendet.

Warum Python?

Es dauerte nicht lange, bis ich versuchte, PHP als Systemskriptsprache zu verwenden. Ich habe Python zunächst alleine und nach und nach „für mich selbst“ studiert. Ich beschloss, mich ernsthaft mit dem Studium zu befassen, nachdem ich von der Existenz einer effektiven Verbindung zwischen Python und C++ auf Modulebene erfahren hatte – es erschien mir interessant, optimierte Algorithmen und Datenaufbereitungsverfahren innerhalb derselben Sprache zu teilen.

Das einfachste Beispiel: Es gibt ein Steuerungssystem für einen nicht standardmäßigen leistungsstarken Antrieb, implementiert auf einer eingebetteten Maschine mit einem RISC-Prozessor in C++. Die Verwaltung erfolgt über eine externe maschinenabhängige API, die beispielsweise die Kommunikation zwischen Subsystemen über ein Netzwerk unterstützt. Auf hoher Ebene ist der Antriebsbetriebsalgorithmus nicht debuggt oder nicht konstant (je nach Arbeitsprozess müssen unterschiedliche Algorithmen geladen werden).

Eine der besten Möglichkeiten, ein solches System zu erreichen, besteht darin, die maschinenspezifische C++-Subsystem-API als Grundlage für eine Reihe von Python-Klassen zu verwenden, die auf einem plattformübergreifenden Interpreter ausgeführt werden. Daher muss der Top-Level-Entwickler die Funktionen der eingebetteten Maschine und ihres Betriebssystems nicht berücksichtigen; er arbeitet einfach mit Python-Klassen, die als „Wrapper“ der Low-Level-API fungieren.

Ich musste C++ und die Python-Bindung fast von Grund auf lernen. Es wurde schnell klar, dass objektorientierte Fähigkeiten auf einem hohen Niveau viel wichtiger sind als auf einem niedrigen Niveau. Aus diesem Grund mussten wir den Ansatz zum Entwerfen und Implementieren der API komplett ändern und uns für Klassen auf Python-Ebene und gemeinsame globale Daten in C/C++ entscheiden. Gewöhnen Sie sich an die Codegenerierung: Beispielsweise generiert das ROS-Framework selbst Namen und Objekte in Python, sodass Sie beim Entwerfen Ihrer Schnittstellen Sprachunterschiede, insbesondere bei der Typisierung, berücksichtigen müssen.

Arbeiten in der Gegenwart: Python und Robotersteuerungslogik

Jetzt arbeite ich als Python- und C++-Programmierer am Robotics Research and Education Center der Moskauer Staatlichen Technischen Universität. Wir realisieren Forschungsprojekte und Softwaretools im Auftrag von Regierungsbehörden: Wir entwickeln Manipulatoren mit integrierten technischen Bildverarbeitungssystemen und systemunabhängigen automatischen Steuerungsalgorithmen auf hohem Niveau.

Derzeit programmiere ich High-Level-Logik für Robotersteuerungssysteme in Python; diese Sprache verknüpft 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 direkt auf der Ausrüstung auf niedriger Ebene implementiert – dies ist die integrierte Software von Antriebssteuerungen, Kommunikationsleitungskonzentratoren und Bedienerinteraktions-Subsystemen.

Die Algorithmen sind hier auf eine kontrollierte Ausführungsgeschwindigkeit und Zuverlässigkeit ausgelegt, die die Leistung des Roboters als Ganzes übertrifft. Letzteres ist zwingend erforderlich, da die Sicherheit des gesamten Systems von einer Low-Level-Steuerungssoftware abhängt.

Die zweite Gruppe von Algorithmen bestimmt den Betrieb des Roboters als Ganzes. Hierbei handelt es sich um High-Level-Programme, bei deren Entwicklung der Schwerpunkt auf der Klarheit und Geschwindigkeit der Implementierung des oft recht komplexen Algorithmus liegt. Darüber hinaus unterliegt die High-Level-Software des Roboters während des Einrichtungs- und Testprozesses häufig Änderungen. Für eine solche Entwicklung sind universell interpretierte Sprachen unverzichtbar.

Welche Kenntnisse sind für eine solche Arbeit erforderlich?

Das Studium der C++-Vorlagensprache und der objektorientierten Fähigkeiten von Python ist obligatorisch. Eine nahezu unersetzliche Fähigkeit ist die Fähigkeit, APIs zu entwerfen und zu dokumentieren. Es wäre eine gute Idee, die Fähigkeiten spezialisierter Bibliotheken wie Boost::Python zu erkunden. Wer mit Low-Level-Software arbeitet, muss sich auf jeden Fall mit Multithreading (auf Kernel-Ebene) und Linux/UNIX/QNX-Systemaufrufen auseinandersetzen. Um Ihr Verständnis der Prinzipien der Robotik zu verbessern, ist es sehr nützlich, sich mit dem Robotic Operating System-Framework vertraut zu machen.

Ich versuche, mindestens eine kompilierte und eine interpretierte Programmiersprache zu haben, die sich entwickelt und nachgefragt wird. Dies ist eine erfolgreiche Strategie für die Arbeit im Ingenieurwesen, wo ständig die Notwendigkeit besteht, hochspezialisierte (sprich: ungewöhnliche) Algorithmen zu entwickeln und sie in Kompilierungssprachen zu implementieren. Die Aufgabe, Daten für eine solche Software aufzubereiten, lässt sich viel angenehmer mit interpretierten Sprachen lösen. Anfangs umfasste mein Set C++, Pascal und BASIC, später kamen PHP und BASH hinzu.

Wie Entwicklungstools beim Unterrichten von Studenten nützlich sein können

Der Hauptplan für die berufliche Weiterentwicklung besteht nun darin, zu versuchen, eine wissenschaftliche Grundlage für den Einsatz professioneller Softwareentwicklungstools in der Pädagogik zu schaffen, um Lehrmethoden zu entwickeln und zu testen.

Seit 2016 habe ich ein großes Experiment zur Einführung von Entwicklungstools – Programmiersprachen, IDEs, Dokumentationsgeneratoren, Versionskontrollsystemen – in die Lehrpraxis im Hochschulbereich gestartet. Es ist uns nun gelungen, qualitativ verallgemeinerbare Ergebnisse zu erhalten.

Beispielsweise verbessert die Einführung der Versionierung von Materialien in den Bildungsprozess die Qualität studentischer Arbeiten deutlich, allerdings nur unter der zwingenden Voraussetzung: Studierende arbeiten gemeinsam an gemeinsamen Projekten. Die Entwicklung von Methoden zur Vermittlung technischer Disziplinen unter Einsatz professioneller Softwareentwicklungstools wird derzeit von meiner Forschungsgruppe, bestehend aus Studierenden, Bewerbern und Studierenden zusätzlicher Bildungsprogramme an der MSTU, aktiv betrieben.

Übrigens habe ich meine Lehrpraxis nicht aufgegeben – ich habe für das Institute of Advanced Studies der MSTU meinen eigenen ausführlichen Vollzeitkurs zum Design und zur Verwaltung von Linux entwickelt und unterrichte ihn selbst.

Wissenschaftliche Arbeit

Frühe Arbeit
Fragen der Gangplanung bei der Gestaltung vierbeiniger Gehsysteme am Beispiel der Gangumsetzung eines Pferdes (2010)

Zur Frage der Kinematik und Belastung des tragenden Elements des Vorderbeins des Pferdes im Stadium der Annäherung an die Stütze als Bestandteile des Arbeitszyklus des vierbeinigen Läufers (2012)

Von letzterem
3D-Simulationsanwendung für die Herstellung von Zahnrädern zum Unterrichten von Mechanismen und Maschinentheorie (2019)

Verfahren zur Erkennung struktureller Hindernisse und seine Anwendung bei der Suche nach Reliefobjekten (2018)

Weitere von wissenschaftlichen Zitationsdatenbanken erfasste Werke finden Sie in meinem Profil auf Researchgate. Die meisten Artikel widmen sich der Bewegung von Maschinen, es gibt Arbeiten zur Ingenieurpädagogik und zu Lernsoftware.

Source: habr.com

Kommentar hinzufügen