De cohetes a robots y qué tiene que ver Python con ello. Historia de ex alumnos de GeekBrains

De cohetes a robots y qué tiene que ver Python con ello. Historia de ex alumnos de GeekBrains
Hoy publicamos la historia de la transición de Andrey Vukolov a las TI. Su pasión infantil por el espacio lo llevó una vez a estudiar ciencia espacial en MSTU. La dura realidad me hizo olvidar el sueño, pero todo resultó aún más interesante. Estudiar C++ y Python me permitió realizar un trabajo igualmente apasionante: programar la lógica de los sistemas de control de robots.

principio

Tuve la suerte de hablar maravillas del espacio durante toda mi infancia. Por eso, después de la escuela, no dudé ni un minuto dónde debía ir a estudiar y entré en MSTU. Bauman, al Departamento de Ingeniería de Propulsión de Cohetes. Sin embargo, no fue necesario elegir la rama del curso en sí: motores de cohetes espaciales en polvo o líquidos: en 2001, una comisión especial de profesores aún distribuía los grupos objetivo de solicitantes. Quedé atrapado en un barril de pólvora.

En aquel momento, el “boom de los cohetes” existía sólo en los planes: los ingenieros recibían salarios exiguos y trabajaban en oficinas de diseño e institutos de investigación especiales y cerrados, prácticamente sin perspectivas de carrera y crecimiento profesional. Aún así, los cohetes de pólvora en Rusia son productos puramente militares.

Ahora esta área tiene demanda, pero ya durante mis estudios me di cuenta de que en la ciencia espacial cualquier actividad por iniciativa propia es casi imposible. De hecho, esto es el servicio militar. Por ejemplo, trabajando en la industria de cohetes, me vería completamente privado de la oportunidad de desarrollar software de forma independiente, incluso para mí, ya que esta actividad está estrictamente regulada.

Todos los productos de software se desarrollan exclusivamente bajo pedido especial y con la aprobación de la comisión de secreto (ahora una división de FSTEC). El desarrollador debe registrarse y otorgar licencias literalmente para cada línea de código. Todo el software es inicialmente secreto a nivel de tarea. Esto explica en parte por qué el software que ahora se utiliza para formar a los estudiantes de ciencia espacial se desarrolló a más tardar en los años 90.

Cuando me gradué del instituto, logré trabajar en el departamento de teoría de mecanismos y comencé a desarrollar un simulador de procesos educativos en C++, así tenía un ejemplo para comparar y podía sopesar los pros y los contras. La elección era obvia y poco a poco comencé a inclinarme hacia la informática y la robótica. La mecánica aplicada era mucho más divertida que la ciencia espacial: muchos problemas sin resolver, un entorno abierto, falta de una industria de desarrollo, una necesidad urgente de software de simulación. En robótica, existe una arquitectura inestable de software común y la necesidad de implementar repetidamente algoritmos complejos, incluida la lógica difusa y los inicios de la IA. Por lo tanto, después de mis primeros programas de procesamiento de datos experimentales, casi nunca volví a los cohetes (a excepción de mi proyecto de graduación).

Como resultado, tuve la oportunidad de trabajar en mi especialidad durante sólo cuatro meses antes de graduarme en una planta cerca de Moscú de estructuras compuestas para la industria aeroespacial. Después de terminar mis estudios, ni siquiera tuve que buscar trabajo; inmediatamente vine a enseñar mecánica aplicada en el departamento de robótica.

De la enseñanza a la programación

De cohetes a robots y qué tiene que ver Python con ello. Historia de ex alumnos de GeekBrains
En el Congreso Mundial IFTOMM con estudiantes miembros del grupo de investigación (yo a la derecha)

Trabajé en MSTU en el departamento de muestreo durante 10 años, impartiendo un curso sobre teoría de mecanismos. Publicó trabajos científicos (ver al final del artículo), pasó gradualmente de la mecánica al CAD y la robótica. Y al final decidió dejar la docencia. Para ilustrar más claramente las razones de esta decisión, diré que en diez años la carrera que impartí no ha cambiado ni un decimal. Aunque la mecánica aplicada, a juzgar por las publicaciones, avanzó con mucho, mucho éxito.

Además, el trabajo se parecía cada vez más al trabajo burocrático: informes, programas, normas y toneladas de papel. En tales condiciones, el placer de enseñar fue reemplazado por informar sobre la recepción de este placer, y esto es más que desagradable para un especialista en ejercicio.

Y finalmente llegué a la robótica de esta manera: en 2007-2009, junto con los profesores A. Golovin y N. Umnov, comenzamos a preparar los primeros trabajos científicos. Allí tuve que utilizar algoritmos para determinar las trayectorias de los objetos a partir de fotografías estroboscópicas. De este tema hay un paso hacia la visión artificial, OpenCV y el sistema operativo robótico (aunque en ese momento ni siquiera pensé en tal escala). Después de eso, finalmente me centré en la mecánica aplicada y la robótica en la investigación, y el desarrollo se convirtió en una actividad de apoyo.

Sin embargo, para encontrar un nuevo trabajo en robótica, era necesario mejorar y complementar mis conocimientos de programación. Después de todo, nunca estudié TI específicamente, excepto un curso universitario de un año (ObjectPascal y Borland VCL en C++), y me basé en las matemáticas para los aspectos teóricos del desarrollo.

Al principio consideré opciones de cursos a tiempo completo en mi instituto natal. Es cierto que rápidamente quedó claro que sería casi imposible combinar tales estudios con el trabajo en el departamento debido al horario irregular y al trabajo frecuente fuera del propio horario (sustitución, etc.). Así que poco a poco se me ocurrió la idea de completar cursos pagos de forma remota. Llegué a GeekBrains por recomendación de profesores del centro de formación Mail.ru Technopark, ubicado en Baumanka, y me inscribí en el curso de Programador Python.

Los cursos no supusieron ninguna dificultad, el único problema fue que constantemente tenía que combinarlos con el trabajo en el departamento, trabajos científicos y eventos. El tiempo era tan escaso que hubo que sacrificar la mayoría de las conexiones sociales fuera del hogar (afortunadamente, temporalmente).

Así afronté la carga de trabajo: resolví problemas en el camino. Esta habilidad, desarrollada a través de numerosos viajes de negocios, resultó ser muy útil, ya que sin ella ni siquiera podría hacer todos mis deberes (y además reemplaza la meditación...). Aprendí a codificar mientras viajaba usando mi computadora portátil, mi teléfono inteligente y los teclados inalámbricos de mi teléfono inteligente.

Mi computadora portátil es una Dell Latitude 3470 y cualquier teléfono inteligente con una diagonal de 5.5 pulgadas o más combinado con un teclado Logitech K 810 BT servirá. En general, recomiendo los productos Logitech a todo el mundo; son muy fiables y pueden soportar condiciones de uso muy duras (y esto nunca es una publicidad).

De cohetes a robots y qué tiene que ver Python con ello. Historia de ex alumnos de GeekBrains
Teclado Logitech K810

Python es muy propicio para ese trabajo, si tienes un buen editor. Otro truco de programación: utilice conexiones remotas al escritorio o al entorno de ejecución. Completé varias tareas utilizando un servidor web seguro que ejecutaba Django en la computadora de mi casa. Trabajé desde el tren, usando el software PyDroid, DroidEdit, Maxima.

¿Por qué Python?

No pasó mucho tiempo antes de que intentara utilizar PHP como lenguaje de programación del sistema. Inicialmente estudié Python por mi cuenta y poco a poco “para mí”. Decidí estudiar seriamente después de enterarme de la existencia de una conexión efectiva entre Python y C++ a nivel de módulo; me pareció interesante compartir algoritmos optimizados y procedimientos de preparación de datos dentro del mismo lenguaje.

El ejemplo más simple: hay un sistema de control para un potente disco no estándar, implementado en una máquina integrada con un procesador RISC, en C++. La gestión se produce a través de una API externa dependiente de la máquina, que admite, por ejemplo, la comunicación entre subsistemas a través de una red. En un nivel alto, el algoritmo de operación del variador no está depurado o no es constante (es necesario cargar diferentes algoritmos dependiendo del proceso de trabajo).

Una de las mejores formas de lograr un sistema de este tipo es utilizar la API del subsistema C++ específica de la máquina como base para un conjunto de clases de Python que se ejecutan en un intérprete multiplataforma. Por lo tanto, el desarrollador de alto nivel no tendrá que tener en cuenta las características de la máquina integrada y su sistema operativo; simplemente trabajará con clases de Python que actúan como "envoltorios" de la API de bajo nivel.

Tuve que aprender a vincular C++ y Python casi desde cero. Rápidamente quedó claro que las capacidades orientadas a objetos en un nivel alto eran mucho más importantes que en un nivel bajo. Debido a esto, tuvimos que cambiar completamente el enfoque para diseñar e implementar la API, optando por clases a nivel de Python y datos globales compartidos en C/C++. Acostúmbrate a la generación de código: por ejemplo, el propio framework ROS genera nombres y objetos en Python, por lo que debes tener en cuenta las diferencias de idioma, especialmente al escribir, al diseñar tus interfaces.

Trabajando en el presente: Python y la lógica de control de robots

Ahora trabajo como programador en Python y C++ en el Centro de Educación e Investigación en Robótica de la Universidad Técnica Estatal de Moscú. Implementamos proyectos de investigación y herramientas de software encargados por departamentos gubernamentales: desarrollamos manipuladores con sistemas de visión técnicos integrados y algoritmos de control automático de alto nivel que son independientes de los sistemas.

Actualmente, programo lógica de alto nivel para sistemas de control de robots en Python; este lenguaje vincula módulos altamente optimizados escritos en C++, ensamblador y Go.

En la programación de algoritmos de control de robots, se utilizan dos grandes grupos de algoritmos. El primero de ellos se implementa directamente en el equipo, a bajo nivel: es el software integrado de los controladores de accionamiento, los concentradores de líneas de comunicación y los subsistemas de interacción del operador.

Los algoritmos aquí están diseñados para una velocidad de ejecución controlada y una confiabilidad que supera el rendimiento del robot en su conjunto. Esto último es obligatorio, ya que la seguridad de todo el sistema depende de un software de control de bajo nivel.

El segundo grupo de algoritmos determina el funcionamiento del robot en su conjunto. Se trata de programas de alto nivel, cuyo desarrollo se centra en la claridad y rapidez de implementación del algoritmo, a menudo bastante complejo. Además, el software de alto nivel del robot suele estar sujeto a cambios durante el proceso de configuración y prueba. Para tal desarrollo, los lenguajes interpretados de propósito general son indispensables.

¿Qué conocimientos se necesitan para tal trabajo?

Será obligatorio estudiar el lenguaje de plantillas C++ y las capacidades orientadas a objetos de Python. Una habilidad casi insustituible es la capacidad de diseñar y documentar API. Sería una buena idea explorar las capacidades de bibliotecas especializadas como Boost::Python. Aquellos que trabajan con software de bajo nivel definitivamente tendrán que lidiar con subprocesos múltiples (a nivel del kernel) y llamadas al sistema Linux/UNIX/QNX. Para mejorar su comprensión de los principios de la robótica, es muy útil familiarizarse con el marco del sistema operativo robótico.

Intento tener al menos un lenguaje de programación compilado y uno interpretado que esté en desarrollo y tenga demanda. Esta es una estrategia ganadora para trabajar en ingeniería, donde existe una necesidad constante de desarrollar algoritmos altamente especializados (léase: inusuales) e implementarlos en lenguajes de compilación. La tarea de preparar datos para dicho software es mucho más agradable de resolver utilizando lenguajes interpretados. Inicialmente, mi conjunto incluía C++, Pascal y BASIC, luego se agregaron PHP y BASH.

Cómo las herramientas de desarrollo pueden ser útiles para enseñar a los estudiantes

El plan principal para el desarrollo profesional ahora es tratar de proporcionar una base científica para el uso de herramientas de desarrollo de software profesionales en pedagogía, para desarrollar y probar métodos de enseñanza.

Desde 2016, comencé un gran experimento para introducir herramientas de desarrollo (lenguajes de programación, IDE, generadores de documentación, sistemas de control de versiones) en la práctica docente en la educación superior. Ahora hemos logrado obtener resultados que pueden generalizarse cualitativamente.

Por ejemplo, la introducción de versiones de materiales en el proceso educativo mejora significativamente la calidad del trabajo de los estudiantes, aunque sólo bajo una condición obligatoria: que los estudiantes trabajen juntos en proyectos compartidos. El desarrollo de métodos para la enseñanza de disciplinas técnicas utilizando herramientas profesionales de desarrollo de software ahora lo está llevando a cabo activamente mi grupo de investigación, formado por estudiantes, solicitantes y estudiantes de programas de educación adicional en MSTU.

Por cierto, no abandoné mi práctica docente: desarrollé mi propio curso profundo de tiempo completo sobre diseño y administración de Linux para el Instituto de Estudios Avanzados de MSTU, y lo enseño yo mismo.

Trabajos de investigacion

Trabajo temprano
Problemas de planificación de la marcha al diseñar sistemas de marcha de cuatro patas utilizando el ejemplo de la implementación de la marcha de un caballo (2010 g.)

Sobre la cuestión de la cinemática y la carga del elemento de soporte de la pata delantera del caballo en la etapa de aproximación al soporte como componentes del ciclo de trabajo del motor de cuatro patas (2012 g.)

De este ultimo
Aplicación de simulación de fabricación de engranajes en 3D para la enseñanza de teoría de máquinas y mecanismos (2019 g.)

Método de reconocimiento de obstáculos estructurales y su aplicación en la búsqueda de objetos en relieve. (2018 g.)

Otros trabajos indexados por bases de datos de citas científicas se pueden ver en mi perfil en ResearchGate. La mayoría de los artículos están dedicados al movimiento de máquinas, hay trabajos sobre pedagogía de la ingeniería y software educativo.

Fuente: habr.com

Añadir un comentario