Desde cohetes hasta robots y qué tiene que ver Python con él. GeekBrains Alumni Story


Hoy publicamos la historia de la transición de Andrei Vukolov a TI. Un entusiasmo infantil por el espacio una vez lo llevó a la 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 nos permitió hacer un trabajo no menos emocionante: programar la lógica de los sistemas de control de robots.

Inicio


Tuve la suerte de toda mi infancia de hablar sobre el espacio. Por lo tanto, después de la escuela, no dudé ni un minuto a dónde ir a estudiar y entré en la Universidad Técnica del Estado de Moscú. Bauman, al departamento de propulsión de cohetes. Sin embargo, la rama del curso en sí misma - motores en polvo o líquidos de cohetes espaciales - no tuvo que seleccionarse en absoluto: en 2001, una comisión especial de la facultad distribuyó los grupos objetivo de solicitantes. Me metí "en un barril de pólvora".

En ese momento, el "auge de los cohetes" solo existía en los planes, los ingenieros recibían sueldos exiguos y trabajaban en oficinas especiales de diseño cerradas e institutos de investigación prácticamente sin perspectivas de crecimiento profesional y profesional. Aún así, los cohetes en polvo en Rusia son productos puramente militares.

Ahora, esta dirección es muy solicitada, pero ya durante mis estudios me di cuenta de que en la ciencia de cohetes cualquier actividad por mi propia iniciativa es casi imposible. De hecho, este es un servicio militar. Por ejemplo, trabajando en la industria de los cohetes, estaría completamente privado de la oportunidad de desarrollar software yo mismo, incluso para mí mismo, ya que esta actividad está estrictamente regulada.

Todos los productos de software se desarrollan exclusivamente por pedido especial y con la aprobación del comité de privacidad (ahora es una división de la FSTEC). El desarrollador debe registrarse y licenciar literalmente cada línea de código. Todo el software es inicialmente secreto en el nivel de tarea. Esto explica en parte por qué el software que actualmente se usa para entrenar a los estudiantes de cohetes se desarrolló en los años 90 del siglo XX como máximo.

Cuando me gradué, logré trabajar en el Departamento de Teoría de la Mecánica y comencé a desarrollar un simulador de capacitación del proceso técnico en C ++, así que tenía un ejemplo de comparación y podía sopesar todos los pros y los contras. La elección fue obvia, y gradualmente comencé a derivar hacia TI y robótica. En la mecánica aplicada fue mucho más divertido que en la ciencia de cohetes: muchos problemas no resueltos, un entorno abierto, la falta de una industria de desarrollo y una necesidad urgente de software de simulación. En robótica, la arquitectura inestable del 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 para procesar datos experimentales, casi no volví a los cohetes (con la excepción del proyecto de graduación).

Como resultado, tuve la oportunidad de trabajar en la especialidad durante solo cuatro meses antes de graduarme en la planta de estructuras compuestas para la industria aeroespacial cerca de Moscú. Al final de la capacitación, ni siquiera tuve que buscar trabajo; inmediatamente vine a enseñar mecánica aplicada a la Facultad de Robótica.

De la enseñanza a la programación.



En el Congreso Mundial de IFTOMM con estudiantes, miembros del grupo de investigación (estoy a la derecha)

En MSTU, en la facultad probotécnica, trabajé durante 10 años, impartí un curso sobre teoría de mecanismos. Publicó artículos científicos (ver el final del artículo), gradualmente pasó de la mecánica al CAD y la robótica. Y al final, decidió dejar de enseñar. Para ilustrar más vívidamente las razones de esta decisión, diré que en el transcurso de una década, el curso de estudio que leí no ha cambiado por una coma. Aunque la mecánica aplicada, a juzgar por las publicaciones, fue muy, muy exitosa.

Además, el trabajo se parecía cada vez más a burócratas: informes, programas, estándares y toneladas de papel. En tales condiciones, el placer de enseñar fue reemplazado por informes 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 artículos científicos. Allí tuve que usar algoritmos para determinar las trayectorias de los objetos según la fotografía estroboscópica. A partir de este tema: un paso hacia la visión artificial, OpenCV y el sistema operativo robótico (aunque ni siquiera pensé en tal escala entonces). Después de eso, finalmente me concentré en la mecánica aplicada y la robótica en la investigación, y el desarrollo se convirtió en una actividad auxiliar.

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

Al principio, consideré las opciones para cursos de tiempo completo en mi instituto nativo. Es cierto que rápidamente se hizo evidente que combinar tales estudios con el trabajo en el departamento sería prácticamente imposible debido a un horario desgarrado y un trabajo frecuente fuera del propio horario (reemplazo, etc.). Entonces, gradualmente, se me ocurrió la idea de terminar los cursos pagos de forma remota. Fui a GeekBrains por recomendación de profesores del centro de capacitación Technopark Mail.ru ubicado en Baumanka e ingresé al curso Python Programmer.

Los cursos no causaron ninguna dificultad, un problema, constantemente tuvo que combinarse: con el trabajo en el departamento, trabajos científicos y eventos. No hubo tanto tiempo que tuve que sacrificar (afortunadamente, temporalmente) la mayoría de las conexiones sociales fuera del hogar.

Hacer frente a la carga de esta manera: problemas resueltos en el camino. Esta habilidad, desarrollada por numerosos viajes de negocios, resultó ser muy útil, ya que sin ella ni siquiera podría completar toda mi tarea (y también reemplaza la meditación ...). Me acostumbré a programar sobre la marcha usando una computadora portátil, un teléfono inteligente y teclados inalámbricos para un teléfono inteligente.

Tengo una computadora portátil Dell Latitude 3470, y cualquier teléfono inteligente con una diagonal de 5.5 pulgadas o más emparejado con un teclado Logitech K 810 BT funcionará. En general, recomiendo los productos de Logitech a todos, es muy confiable y puede soportar condiciones de uso muy duras (y esto nunca es un anuncio).


Teclado Logitech K810

Python se siente muy cómodo con ese trabajo, con un buen editor. Otro truco de programación: use conexiones remotas al escritorio o tiempo de ejecución. Completé varias tareas usando un servidor web seguro que ejecuta Django en la computadora de mi casa. Trabajó al mismo tiempo desde el tren, el software utilizó PyDroid, DroidEdit, Maxima.

Por que Python


Brevemente, traté de usar PHP como lenguaje de programación del sistema. Python inicialmente de forma independiente y poco a poco estudió "por sí mismo". 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 separar los algoritmos y procedimientos optimizados para preparar los datos en un idioma.

El ejemplo más simple: hay un potente sistema de control de unidades no estándar implementado en una máquina integrada con un procesador RISC, en C ++. La administración se realiza 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 se depura o no es constante (la carga de varios algoritmos es necesaria dependiendo del proceso de trabajo).

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

Tuve que aprender el enlace de C ++ y Python desde cero. La comprensión llegó rápidamente a que las características orientadas a objetos en un nivel alto son mucho más importantes que en un nivel bajo. Debido a esto, tuve 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úmbrese a la generación de código: por ejemplo, el marco ROS en sí genera nombres y objetos en Python, por lo que debe tener en cuenta las diferencias en los idiomas, especialmente al escribir y diseñar sus interfaces.

Trabajo en el presente: Python y la lógica de los sistemas de control de robots.


Ahora trabajo como programador en Python y C ++ en el centro de investigación y capacitación "Robotics" en MSTU. Implementamos proyectos de investigación y herramientas de software encargadas por los departamentos gubernamentales: desarrollamos manipuladores con sistemas de visión integrados y algoritmos de control automático de alto nivel que son independientes de los sistemas.

Ahora estoy programando en Python una lógica de alto nivel de sistemas de control de robots, este lenguaje conecta 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, en un nivel bajo: este es el firmware de los controladores de la unidad, los concentradores de línea de comunicación, los subsistemas de interacción con el operador.

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

El segundo grupo de algoritmos determina el funcionamiento del robot en su conjunto. Estos son programas de alto nivel, cuyo énfasis en el desarrollo está en la comprensibilidad y la velocidad de implementación del algoritmo, a menudo bastante complejo. Además, el software de alto nivel en el robot a menudo sufre cambios durante el proceso de configuración y prueba. Los lenguajes interpretables de uso general son indispensables para tal desarrollo.

¿Qué conocimiento se necesita para tal trabajo?


Se requiere aprender sobre el lenguaje de plantilla C ++, las características orientadas a objetos de Python. Una habilidad casi indispensable es la capacidad de diseñar y documentar API. No será superfluo estudiar las capacidades de las bibliotecas especializadas, como Boost :: Python. Aquellos que trabajan con software de bajo nivel definitivamente tendrán que lidiar con subprocesos múltiples (además, a nivel del núcleo), llamadas al sistema Linux / UNIX / QNX. Para mejorar la comprensión de los principios de la construcción de robótica, es muy útil familiarizarse con el marco del sistema operativo robótico.

Intento tener al menos un lenguaje de programación de compilación e interpretado en el activo, en desarrollo y en demanda. Esta es una estrategia ganadora para trabajar en ingeniería, donde constantemente necesita desarrollar algoritmos altamente especializados (leer: inusuales) e implementarlos en lenguajes de compilación. La tarea de preparar datos para dicho software es mucho más fácil 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 en el aprendizaje de los estudiantes


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

En 2016, comencé un gran experimento sobre la introducción de herramientas de desarrollo (lenguajes de programación, IDE, generadores de documentación, sistemas de control de versiones) en la práctica pedagógica en la educación superior. Ahora ya hemos logrado obtener resultados que se prestan a una generalización cualitativa.

Por ejemplo, la introducción de versiones de materiales en el proceso educativo mejora significativamente la calidad del trabajo de los estudiantes, sin embargo, solo bajo la condición de 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 es conducido activamente por las fuerzas de mi grupo de investigación, compuesto por estudiantes, solicitantes y estudiantes de programas de educación complementaria de MSTU.

Por cierto, no abandoné la práctica docente: desarrollé el curso presencial en profundidad del autor sobre dispositivos y administración de Linux para el Instituto de Estudios Avanzados de MSTU, y yo mismo enseño.

Trabajos cientificos


Trabajo temprano
Problemas de planificación de la marcha en el diseño de sistemas de caminar de cuatro patas utilizando la marcha de los caballos como ejemplo (2010)

Sobre el tema de la cinemática y la carga del elemento de soporte de la pata delantera del caballo en la etapa de acercarse al soporte como componentes del ciclo de trabajo de propulsión de cuatro patas (2012)

Desde el ultimo
Aplicación 3D para simular la producción de engranajes para enseñar la teoría de mecanismos y máquinas (2019)

Reconocimiento de obstáculos estructurales y su aplicación en la búsqueda de objetos en relieve (2018)

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

Source: https://habr.com/ru/post/468523/


All Articles