Desde foguetes ata robots e que ten que ver Python con iso. Historia de antigos alumnos de GeekBrains

Desde foguetes ata robots e que ten que ver Python con iso. Historia de antigos alumnos de GeekBrains
Hoxe publicamos a historia da transición de Andrey Vukolov ás TIC. A súa paixón infantil polo espazo levouno unha vez a estudar ciencia de foguetes na MSTU. A dura realidade fíxome esquecer o soño, pero todo resultou aínda máis interesante. Estudar C++ e Python permitiume facer un traballo igualmente emocionante: programar a lóxica dos sistemas de control do robot.

Comezar

Tiven a sorte de estar delirando polo espazo durante toda a miña infancia. Polo tanto, despois da escola, non dubidei nin un minuto a onde debería ir estudar e entrei na MSTU. Bauman, ao Departamento de Enxeñaría de Propulsión de Foguetes. Non obstante, a propia rama do curso -motores en po ou líquidos dos foguetes espaciais- non tivo que ser escollida en absoluto: en 2001, unha comisión especial do profesorado aínda distribuía os grupos obxectivo de aspirantes. Quedei atrapado nun barril de pólvora.

Nese momento, o "boom do foguete" existía só nos plans; os enxeñeiros recibían salarios escasos e traballaban en oficinas de deseño e institutos de investigación pechados especiais sen practicamente perspectivas de crecemento profesional e profesional. Aínda así, os foguetes en pó en Rusia son produtos puramente militares.

Agora esta área é demandada, pero xa durante os meus estudos decateime de que na ciencia dos foguetes calquera actividade por iniciativa propia é case imposible. De feito, isto é o servizo militar. Por exemplo, traballando na industria dos foguetes, estaría completamente privado da oportunidade de desenvolver software de forma independente, incluso para min, xa que esta actividade está estrictamente regulada.

Todos os produtos de software desenvólvense exclusivamente por orde especial e coa aprobación da comisión de segredo (agora unha división de FSTEC). O desenvolvedor debe rexistrarse e licenciar literalmente todas as liñas de código. Todo o software é inicialmente secreto a nivel de tarefa. Isto explica en parte por que o software que agora se usa para adestrar aos estudantes de ciencias de foguetes foi desenvolvido na década de 90 como moi tarde.

Cando me formei no instituto, conseguín traballar no departamento de teoría de mecanismos e comecei a desenvolver un simulador de procesos educativos en C++, polo que tiña un exemplo para comparar e podía sopesar os pros e os contras. A elección era obvia, e pouco a pouco comecei a derivar cara á informática e á robótica. A mecánica aplicada era moito máis divertida que a ciencia de foguetes: moitos problemas sen resolver, un ambiente aberto, a falta dunha industria de desenvolvemento, unha necesidade urxente de software de simulación. En robótica, hai unha arquitectura inestable de software común e a necesidade de implementar repetidamente algoritmos complexos, incluíndo a lóxica difusa e os inicios da IA. Por iso, despois dos meus primeiros programas de procesamento de datos experimentais, case nunca volvín aos foguetes (a excepción do meu proxecto de graduación).

Como resultado, tiven a oportunidade de traballar na miña especialidade só catro meses antes de graduarme nunha planta preto de Moscova de estruturas compostas para a industria aeroespacial. Despois de rematar os meus estudos, nin sequera tiven que buscar traballo: de inmediato vin a dar clases de mecánica aplicada ao departamento de robótica.

Da docencia á programación

Desde foguetes ata robots e que ten que ver Python con iso. Historia de antigos alumnos de GeekBrains
No Congreso Mundial IFTOMM con estudantes membros do grupo de investigación (eu á dereita)

Traballei na MSTU no departamento de mostraxe durante 10 anos, impartindo un curso sobre a teoría dos mecanismos. Publicou traballos científicos (ver o final do artigo), pasou aos poucos da mecánica cara ao CAD e a robótica. E ao final decidiu deixar a docencia. Para ilustrar con máis claridade as razóns desta decisión, direi que en dez anos o curso que impartín non cambiou nin un decimal. Aínda que a mecánica aplicada, a xulgar polas publicacións, avanzou con moito, moito éxito.

Ademais, o traballo semellaba cada vez máis ao traballo burocrático: informes, programas, normas e toneladas de papel. En tales condicións, o pracer de ensinar foi substituído por informar sobre a recepción deste pracer, e isto é máis que desagradable para un especialista en exercicio.

E finalmente cheguei á robótica así: no 2007-2009, xunto cos profesores A. Golovin e N. Umnov, comezamos a preparar os primeiros traballos científicos. Alí tiven que utilizar algoritmos para determinar os camiños dos obxectos a partir da fotografía estroboscópica. Desde este tema é un paso para a visión artificial, OpenCV e sistema operativo robótico (aínda que daquela nin sequera pensaba en tal escala). Despois diso, por fin centreime na mecánica aplicada e na robótica na investigación, e o desenvolvemento converteuse nunha actividade de apoio.

Non obstante, para atopar un novo traballo en robótica, foi necesario mellorar e complementar os meus coñecementos de programación. Despois de todo, nunca estudei informática específicamente, agás un curso universitario dun ano de duración (ObjectPascal e Borland VCL en C++), e confiei nas matemáticas para os aspectos teóricos do desenvolvemento.

Ao principio considerei opcións para cursos a tempo completo no meu instituto natal. Certo, axiña quedou claro que sería case imposible compaxinar tales estudos co traballo no departamento debido ao horario irregular e ao traballo frecuente fóra do propio horario (substitución, etc.). Así que pouco a pouco fun a idea de completar cursos de pago a distancia. Cheguei a GeekBrains por recomendación de profesores do centro de formación Mail.ru Technopark, situado en Baumanka, e matriculei no curso de Programador Python.

Os cursos non supuxeron dificultades, o único problema era que tiña que compaxinalos constantemente co traballo no departamento, traballos científicos e eventos. O tempo era tan axustado que a maioría das conexións sociais fóra da casa tiveron que ser sacrificadas (por sorte, temporalmente).

Así afrontei a carga de traballo: resolvín os problemas na estrada. Esta habilidade, desenvolvida a través de numerosas viaxes de traballo, resultou ser moi útil, xa que sen ela nin sequera sería capaz de completar todos os deberes (e tamén substitúe á meditación...). Aprendín a codificar en movemento usando os meus teclados portátiles, teléfonos intelixentes e teléfonos intelixentes sen fíos.

O meu portátil é un Dell Latitude 3470 e calquera teléfono intelixente cunha diagonal de 5.5 polgadas ou máis emparejado cun teclado Logitech K 810 BT servirá. En xeral, recoméndolles a todos os produtos Logitech; son moi fiables e poden soportar condicións de uso moi duras (e isto nunca é unha publicidade).

Desde foguetes ata robots e que ten que ver Python con iso. Historia de antigos alumnos de GeekBrains
Teclado Logitech K810

Python é moi propicio para tal traballo, se tes un bo editor. Outro truco de programación: use conexións remotas ao escritorio ou ao ambiente de execución. Completei varias tarefas usando un servidor web seguro que executa Django no meu ordenador doméstico. Traballei desde o tren, usando o software PyDroid, DroidEdit, Maxima.

Por que Python?

Non pasou moito tempo antes de que intentei usar PHP como linguaxe de script do sistema. Inicialmente estudei Python pola miña conta e pouco a pouco "para min". Decidín estudar seriamente despois de coñecer a existencia dunha conexión efectiva entre Python e C++ a nivel de módulo: parecía interesante compartir algoritmos optimizados e procedementos de preparación de datos dentro da mesma linguaxe.

O exemplo máis sinxelo: hai un sistema de control para unha unidade potente non estándar, implementado nunha máquina integrada cun procesador RISC, en C++. A xestión realízase mediante unha API externa dependente da máquina, que admite, por exemplo, a comunicación entre subsistemas a través dunha rede. A un nivel alto, o algoritmo de operación da unidade non está depurado ou non é constante (é necesario cargar diferentes algoritmos dependendo do proceso de traballo).

Unha das mellores formas de conseguir un sistema deste tipo é utilizar a API do subsistema C++ específica da máquina como base para un conxunto de clases de Python que se executan nun intérprete multiplataforma. Así, o desenvolvedor de nivel superior non terá que ter en conta as características da máquina integrada e do seu SO; simplemente traballará con clases de Python que actúan como "envoltorios" da API de baixo nivel.

Tiven que aprender a vinculación de C++ e Python case desde cero. Rápidamente quedou claro que as capacidades orientadas a obxectos a un nivel alto eran moito máis importantes que a un nivel baixo. Por iso, tivemos que cambiar completamente o enfoque para deseñar e implementar a API, optando por clases a nivel de Python e compartindo datos globais en C/C++. Acostúmbrate á xeración de código: por exemplo, o propio framework ROS xera nomes e obxectos en Python, polo que tes que ter en conta as diferenzas lingüísticas, especialmente na escritura, á hora de deseñar as túas interfaces.

Traballando no presente: Python e lóxica de control de robots

Agora traballo como programador de Python e C++ no Centro de Investigación e Educación de Robótica da Universidade Técnica Estatal de Moscova. Implementamos proxectos de investigación e ferramentas de software encargadas polos departamentos gobernamentais: desenvolvemos manipuladores con sistemas de visión técnica incorporados e algoritmos de control automático de alto nivel independentes dos sistemas.

Actualmente, programa lóxica de alto nivel para sistemas de control de robots en Python; esta linguaxe enlaza módulos altamente optimizados escritos en C++, ensamblador e Go.

Na programación de algoritmos de control de robots utilízanse dous grandes grupos de algoritmos. O primeiro deles implícase directamente no equipo, a un nivel baixo: este é o software integrado de controladores de unidades, concentradores de liñas de comunicación e subsistemas de interacción do operador.

Os algoritmos aquí están deseñados para unha velocidade de execución controlada e unha fiabilidade que supera o rendemento do robot no seu conxunto. Este último é obrigatorio, xa que a seguridade de todo o sistema depende dun software de control de baixo nivel.

O segundo grupo de algoritmos determina o funcionamento do robot no seu conxunto. Estes son programas de alto nivel, cuxa énfase no desenvolvemento está na claridade e velocidade de implementación do algoritmo, moitas veces bastante complexo. Ademais, o software de alto nivel do robot adoita sufrir cambios durante o proceso de configuración e proba. Para tal desenvolvemento, as linguas interpretadas de propósito xeral son indispensables.

Que coñecementos son necesarios para tal traballo?

Será obrigatorio estudar a linguaxe de modelos C++ e as capacidades orientadas a obxectos de Python. Unha habilidade case insubstituíble é a capacidade de deseñar e documentar API. Sería unha boa idea explorar as capacidades de bibliotecas especializadas como Boost::Python. Aqueles que traballen con software de baixo nivel definitivamente terán que facer fronte ao multithreading (a nivel do núcleo) e ás chamadas ao sistema Linux/UNIX/QNX. Para mellorar a súa comprensión dos principios da robótica, é moi útil familiarizarse co marco do sistema operativo robótico.

Intento ter polo menos unha linguaxe de programación compilada e interpretada que estea en desenvolvemento e demandada. Esta é unha estratexia gañadora para traballar en enxeñaría, onde existe unha necesidade constante de desenvolver algoritmos altamente especializados (léase: pouco comúns) e implementalos en linguaxes de compilación. A tarefa de preparar datos para tal software é moito máis agradable de resolver utilizando linguaxes interpretadas. Inicialmente, o meu conxunto incluía C++, Pascal e BASIC, máis tarde engadíronse PHP e BASH.

Como as ferramentas de desenvolvemento poden ser útiles no ensino dos estudantes

O principal plan de desenvolvemento profesional agora é tratar de proporcionar unha base científica para o uso de ferramentas profesionais de desenvolvemento de software en pedagoxía, para desenvolver e probar métodos de ensino.

Desde 2016, comecei un gran experimento na introdución de ferramentas de desenvolvemento - linguaxes de programación, IDEs, xeradores de documentación, sistemas de control de versións - na práctica docente na educación superior. Agora conseguimos obter resultados cualitativamente xeneralizables.

Por exemplo, a introdución de versións de materiais no proceso educativo mellora significativamente a calidade do traballo dos estudantes, non obstante, só baixo unha condición obrigatoria: os estudantes traballan xuntos en proxectos compartidos. O desenvolvemento de métodos para o ensino de disciplinas técnicas utilizando ferramentas profesionais de desenvolvemento de software agora está a ser levado a cabo activamente polo meu grupo de investigación, composto por estudantes, solicitantes e estudantes de programas de educación adicional na MSTU.

Por certo, non deixei a miña práctica docente: desenvolvín o meu propio curso profundo a tempo completo sobre deseño e administración de Linux para o Instituto de Estudos Avanzados da MSTU, e ensino eu mesmo.

Traballo científico

Primeiros traballos
Problemas de planificación da marcha ao deseñar sistemas de andar de catro patas usando o exemplo da implementación da marcha dun cabalo (2010)

Sobre a cuestión da cinemática e da carga do elemento de apoio da pata dianteira do cabalo na fase de achegamento ao apoio como compoñentes do ciclo de traballo do motor de catro patas (2012)

Dende o último
Aplicación de simulación de fabricación de engrenaxes 3D para o ensino da teoría de mecanismos e máquinas (2019)

Método de recoñecemento de obstáculos estruturais e a súa aplicación na busca de obxectos en relevo (2018)

Outros traballos indexados por bases de datos de citas científicas pódense ver no meu perfil en ResearchGate. A maioría dos artigos están dedicados ao movemento de máquinas, hai traballos sobre pedagoxía da enxeñería e software educativo.

Fonte: www.habr.com

Engadir un comentario