Des fusées aux robots et qu'est-ce que Python a à voir avec cela. Histoire d'anciens élèves de GeekBrains

Des fusées aux robots et qu'est-ce que Python a à voir avec cela. Histoire d'anciens élèves de GeekBrains
Aujourd'hui, nous publions l'histoire de la transition d'Andrey Vukolov vers l'informatique. Sa passion d'enfance pour l'espace l'a amené à étudier la science des fusées au MSTU. La dure réalité m'a fait oublier le rêve, mais tout s'est avéré encore plus intéressant. Étudier le C++ et Python m'a permis de faire un travail tout aussi passionnant : programmer la logique des systèmes de contrôle des robots.

début

J’ai eu la chance de m’extasier sur l’espace toute mon enfance. Par conséquent, après l'école, je n'ai pas douté une minute de l'endroit où je devrais aller étudier et je suis entré au MSTU. Bauman, au Département d'ingénierie de propulsion de fusée. Cependant, la branche elle-même du cours - moteurs à poudre ou liquides de fusées spatiales - n'avait pas du tout besoin d'être choisie : en 2001, une commission facultaire spéciale répartissait encore les groupes cibles de candidats. J'ai été pris dans un baril de poudre.

À cette époque, le « boom des fusées » n'existait que dans les plans ; les ingénieurs recevaient de maigres salaires et travaillaient dans des bureaux d'études et des instituts de recherche spéciaux fermés, sans pratiquement aucune perspective de carrière et d'évolution professionnelle. Pourtant, les fusées à poudre en Russie sont des produits purement militaires.

Aujourd’hui, ce domaine est en demande, mais déjà au cours de mes études, j’ai réalisé qu’en science des fusées, toute activité de sa propre initiative est presque impossible. En fait, c'est le service militaire. Par exemple, travaillant dans l'industrie des fusées, je serais complètement privé de la possibilité de développer des logiciels de manière indépendante, même pour moi-même, puisque cette activité est strictement réglementée.

Tous les produits logiciels sont développés exclusivement sur commande spéciale et avec l'approbation de la commission du secret (maintenant une division du FSTEC). Le développeur doit s'enregistrer et obtenir une licence pour littéralement chaque ligne de code. Tout logiciel est initialement secret au niveau des tâches. Cela explique en partie pourquoi le logiciel actuellement utilisé pour former les étudiants en science des fusées a été développé au plus tard dans les années 90.

Au moment où j'ai obtenu mon diplôme de l'institut, j'ai réussi à travailler au département de théorie des mécanismes et j'ai commencé à développer un simulateur de processus pédagogique en C++. J'avais donc un exemple de comparaison et je pouvais peser le pour et le contre. Le choix s’est imposé et j’ai progressivement commencé à m’orienter vers l’informatique et la robotique. La mécanique appliquée était bien plus amusante que la science fusée : de nombreux problèmes non résolus, un environnement ouvert, l'absence d'industrie de développement, un besoin urgent de logiciels de simulation. En robotique, il existe une architecture instable de logiciels courants et la nécessité de mettre en œuvre de manière répétée des algorithmes complexes, notamment la logique floue et les débuts de l’IA. Ainsi, après mes premiers programmes de traitement de données expérimentales, je ne suis quasiment jamais revenu aux fusées (à l'exception de mon projet de fin d'études).

En conséquence, j'ai eu l'opportunité de travailler dans ma spécialité pendant seulement quatre mois avant d'obtenir mon diplôme dans une usine près de Moscou de structures composites pour l'industrie aérospatiale. Après mes études, je n’ai même pas eu besoin de chercher un emploi : je suis immédiatement venu enseigner la mécanique appliquée au département de robotique.

De l'enseignement à la programmation

Des fusées aux robots et qu'est-ce que Python a à voir avec cela. Histoire d'anciens élèves de GeekBrains
Au Congrès mondial IFTOMM avec les étudiants membres du groupe de recherche (moi à droite)

J'ai travaillé au MSTU dans le département d'échantillonnage pendant 10 ans, enseignant un cours sur la théorie des mécanismes. Il publie des ouvrages scientifiques (voir fin de l'article), passe progressivement de la mécanique vers la CAO et la robotique. Et finalement, il a décidé d’abandonner l’enseignement. Pour illustrer le plus clairement les raisons de cette décision, je dirai qu'en dix ans, le cursus que j'ai enseigné n'a pas changé d'une décimale. Bien que la mécanique appliquée, à en juger par les publications, ait progressé avec beaucoup de succès.

De plus, le travail ressemblait de plus en plus à du travail bureaucratique : rapports, programmes, normes et tonnes de papier. Dans de telles conditions, le plaisir d'enseigner a été remplacé par le reportage sur la réception de ce plaisir, ce qui est plus que désagréable pour un spécialiste en exercice.

Et finalement je suis arrivé à la robotique comme ceci : en 2007-2009, avec les professeurs A. Golovin et N. Umnov, nous avons commencé à préparer les premiers travaux scientifiques. Là, j'ai dû utiliser des algorithmes pour déterminer les trajectoires des objets à partir de la photographie stroboscopique. De ce sujet, il n’y a qu’un pas vers la vision industrielle, OpenCV et le système d’exploitation robotique (même si à l’époque je n’avais même pas pensé à une telle échelle). Après cela, je me suis finalement orienté vers la mécanique appliquée et la robotique en recherche, et le développement est devenu une activité de support.

Cependant, pour trouver un nouvel emploi en robotique, il était nécessaire d'améliorer et de compléter mes connaissances en programmation. Après tout, je n'ai jamais étudié spécifiquement l'informatique, hormis un cursus universitaire d'un an (ObjectPascal et Borland VCL en C++), et je me suis appuyé sur les mathématiques pour les aspects théoriques du développement.

Au début, j'ai envisagé la possibilité de suivre des cours à temps plein dans mon institut d'origine. Certes, il est vite devenu évident qu'il serait presque impossible de combiner de telles études avec un travail au département en raison de l'horaire irrégulier et du travail fréquent en dehors de son propre horaire (remplacement, etc.). J’ai donc progressivement eu l’idée de suivre des cours payants à distance. Je suis venu chez GeekBrains sur la recommandation de professeurs du centre de formation Mail.ru Technopark, situé à Baumanka, et je me suis inscrit au cours Python Programmer.

Les cours n'ont posé aucune difficulté, le seul problème était que je devais constamment les combiner avec du travail au département, des travaux scientifiques et des événements. Le temps était si serré que la plupart des liens sociaux en dehors du foyer ont dû être sacrifiés (heureusement, temporairement).

C'est ainsi que j'ai géré la charge de travail : j'ai résolu des problèmes sur la route. Cette compétence, développée au fil de nombreux voyages d'affaires, s'est avérée très utile, puisque sans elle je ne pourrais même pas faire tous mes devoirs (et elle remplace aussi la méditation...). J'ai appris à coder en déplacement en utilisant les claviers de mon ordinateur portable, de mon smartphone et de mon smartphone sans fil.

Mon ordinateur portable est un Dell Latitude 3470, et n'importe quel smartphone d'une diagonale de 5.5 pouces ou plus associé à un clavier Logitech K 810 BT fera l'affaire. De manière générale, je recommande à tout le monde les produits Logitech, ils sont très fiables et résistent à des conditions d'utilisation très rudes (et ce n'est jamais une publicité).

Des fusées aux robots et qu'est-ce que Python a à voir avec cela. Histoire d'anciens élèves de GeekBrains
Clavier Logitech K810

Python est très propice à un tel travail - si vous disposez d'un bon éditeur. Un autre hack de programmation : utilisez des connexions à distance au bureau ou à l'environnement d'exécution. J'ai effectué plusieurs tâches en utilisant un serveur Web sécurisé exécutant Django sur mon ordinateur personnel. J'ai travaillé depuis le train, en utilisant les logiciels PyDroid, DroidEdit, Maxima.

Pourquoi Python ?

Il n'a pas fallu longtemps avant que j'essaye d'utiliser PHP comme langage de script système. J’ai d’abord étudié Python seul et petit à petit « pour moi ». J'ai décidé d'étudier sérieusement après avoir appris l'existence d'une connexion efficace entre Python et C++ au niveau des modules - il m'a semblé intéressant de partager des algorithmes optimisés et des procédures de préparation de données au sein du même langage.

L'exemple le plus simple : il existe un système de contrôle pour un variateur puissant non standard, implémenté sur une machine embarquée avec un processeur RISC, en C++. La gestion s'effectue via une API externe dépendante de la machine, qui prend en charge, par exemple, la communication entre les sous-systèmes sur un réseau. À un niveau élevé, l'algorithme de fonctionnement du variateur n'est pas débogué ou n'est pas constant (il est nécessaire de charger différents algorithmes en fonction du processus de travail).

L'un des meilleurs moyens de parvenir à un tel système consiste à utiliser l'API du sous-système C++ spécifique à la machine comme base pour un ensemble de classes Python qui s'exécutent sur un interpréteur multiplateforme. Ainsi, le développeur de haut niveau n’aura pas à prendre en compte les fonctionnalités de la machine embarquée et de son OS ; il travaillera simplement avec des classes Python qui font office de « wrappers » de l’API de bas niveau.

J'ai dû apprendre la liaison C++ et Python presque à partir de zéro. Il est rapidement devenu évident que les capacités orientées objet à un niveau élevé étaient bien plus importantes qu'à un niveau faible. Pour cette raison, nous avons dû changer complètement l'approche de conception et de mise en œuvre de l'API, en optant pour des classes au niveau Python et en partageant des données globales en C/C++. Habituez-vous à la génération de code : par exemple, le framework ROS génère lui-même des noms et des objets en Python, vous devez donc prendre en compte les différences de langage, notamment au niveau de la frappe, lors de la conception de vos interfaces.

Travailler au présent : Python et la logique de contrôle des robots

Je travaille maintenant comme programmeur Python et C++ au Centre de recherche et d'enseignement en robotique de l'Université technique d'État de Moscou. Nous mettons en œuvre des projets de recherche et des outils logiciels commandés par les services gouvernementaux : nous développons des manipulateurs dotés de systèmes de vision technique intégrés et d'algorithmes de contrôle automatique de haut niveau, indépendants des systèmes.

Actuellement, je programme une logique de haut niveau pour les systèmes de contrôle de robots en Python ; ce langage relie des modules hautement optimisés écrits en C++, assembleur et Go.

Dans la programmation des algorithmes de contrôle des robots, deux grands groupes d'algorithmes sont utilisés. Le premier d'entre eux est implémenté directement sur l'équipement, à un niveau bas : il s'agit du logiciel intégré des contrôleurs d'entraînement, des concentrateurs de lignes de communication et des sous-systèmes d'interaction avec l'opérateur.

Les algorithmes ici sont conçus pour une vitesse d’exécution contrôlée et une fiabilité qui dépassent les performances du robot dans son ensemble. Cette dernière est obligatoire, puisque la sécurité de l’ensemble du système dépend d’un logiciel de contrôle de bas niveau.

Le deuxième groupe d'algorithmes détermine le fonctionnement du robot dans son ensemble. Il s'agit de programmes de haut niveau dont l'accent est mis dans le développement sur la clarté et la rapidité de mise en œuvre de l'algorithme, souvent assez complexe. De plus, les logiciels de haut niveau présents sur le robot sont très souvent sujets à modification au cours du processus de configuration et de test. Pour un tel développement, les langages interprétés à usage général sont indispensables.

Quelles connaissances sont nécessaires pour un tel travail ?

Il sera obligatoire d'étudier le langage de modèle C++ et les capacités orientées objet de Python. Une compétence presque irremplaçable est la capacité à concevoir et documenter des API. Ce serait une bonne idée d'explorer les capacités de bibliothèques spécialisées comme Boost::Python. Ceux qui travaillent avec des logiciels de bas niveau devront certainement faire face au multithreading (au niveau du noyau) et aux appels système Linux/UNIX/QNX. Pour améliorer votre compréhension des principes de la robotique, il est très utile de vous familiariser avec le framework Robotic Operating System.

J'essaie d'avoir au moins un langage de programmation compilé et interprété qui est en développement et en demande. Il s’agit d’une stratégie gagnante pour travailler en ingénierie, où il existe un besoin constant de développer des algorithmes hautement spécialisés (lire : inhabituels) et de les implémenter dans des langages de compilation. La tâche de préparation des données pour de tels logiciels est beaucoup plus agréable à résoudre en utilisant des langages interprétés. Initialement, mon ensemble comprenait C++, Pascal et BASIC, puis PHP et BASH ont été ajoutés.

Comment les outils de développement peuvent être utiles pour enseigner aux étudiants

Le principal plan de développement professionnel est désormais d'essayer de fournir une base scientifique pour l'utilisation d'outils de développement de logiciels professionnels en pédagogie, de développer et de tester des méthodes d'enseignement.

Depuis 2016, j'ai commencé une vaste expérience visant à introduire des outils de développement - langages de programmation, IDE, générateurs de documentation, systèmes de contrôle de versions - dans la pratique pédagogique de l'enseignement supérieur. Nous avons maintenant réussi à obtenir des résultats qualitativement généralisables.

Par exemple, l'introduction du versionnage des matériels dans le processus éducatif améliore considérablement la qualité du travail des étudiants, mais uniquement sous une condition obligatoire : les étudiants travaillent ensemble sur des projets communs. Le développement de méthodes d'enseignement des disciplines techniques à l'aide d'outils de développement de logiciels professionnels est désormais activement mené par mon groupe de recherche, composé d'étudiants, de candidats et d'étudiants des programmes de formation complémentaire du MSTU.

À propos, je n'ai pas abandonné ma pratique d'enseignement - j'ai développé mon propre cours approfondi à temps plein sur la conception et l'administration de Linux pour l'Institut d'études avancées du MSTU, et je l'enseigne moi-même.

Articles de recherche

Travail précoce
Enjeux de planification de la marche lors de la conception de systèmes de marche à quatre pattes à partir de l'exemple de mise en œuvre de la démarche d'un cheval (2010)

Sur la question de la cinématique et du chargement de l'élément d'appui de la jambe avant du cheval dans la phase d'approche de l'appui en tant que composantes du cycle de travail du moteur à quatre pattes (2012)

Du dernier
Application de simulation de fabrication d'engrenages 3D pour l'enseignement de la théorie des mécanismes et des machines (2019)

Procede de reconnaissance d'obstacles structurels et son application a la recherche d'objets en relief (2018)

D'autres ouvrages indexés par les bases de données de citations scientifiques peuvent être consultés dans mon profil sur ResearchGate. La plupart des articles sont consacrés au mouvement des machines, il existe des ouvrages sur la pédagogie de l'ingénierie et les logiciels pédagogiques.

Source: habr.com

Ajouter un commentaire