De foguetes a robôs e o que Python tem a ver com isso. História de ex-alunos do GeekBrains

De foguetes a robôs e o que Python tem a ver com isso. História de ex-alunos do GeekBrains
Hoje publicamos a história da transição de Andrey Vukolov para TI. Sua paixão infantil pelo espaço uma vez o levou a estudar ciência de foguetes na MSTU. A dura realidade me fez esquecer o sonho, mas tudo ficou ainda mais interessante. Estudar C++ e Python me permitiu realizar um trabalho igualmente emocionante: programar a lógica de sistemas de controle de robôs.

começo

Tive a sorte de delirar com o espaço durante toda a minha infância. Portanto, depois da escola, não duvidei nem por um minuto onde deveria estudar e entrei no MSTU. Bauman, para o Departamento de Engenharia de Propulsão de Foguetes. No entanto, o ramo do curso em si - motores de pólvora ou líquidos de foguetes espaciais - não precisou ser escolhido: em 2001, uma comissão especial do corpo docente ainda distribuía os grupos-alvo de candidatos. Fui pego em um barril de pólvora.

Naquela época, o “boom dos foguetes” existia apenas nos planos; os engenheiros recebiam salários escassos e trabalhavam em agências de design especiais e institutos de pesquisa fechados, praticamente sem perspectivas de carreira e crescimento profissional. Ainda assim, os foguetes de pólvora na Rússia são produtos puramente militares.

Agora esta área está em demanda, mas já durante meus estudos percebi que na ciência de foguetes qualquer atividade por iniciativa própria é quase impossível. Na verdade, este é o serviço militar. Por exemplo, trabalhando na indústria de foguetes, eu ficaria completamente privado da oportunidade de desenvolver software de forma independente, até mesmo para mim, uma vez que esta atividade é estritamente regulamentada.

Todos os produtos de software são desenvolvidos exclusivamente sob encomenda especial e com aprovação da comissão de sigilo (hoje uma divisão do FSTEC). O desenvolvedor é obrigado a registrar e licenciar literalmente cada linha de código. Todo software é inicialmente secreto no nível da tarefa. Isto explica em parte por que o software agora usado para treinar estudantes de ciências de foguetes foi desenvolvido, o mais tardar, na década de 90.

Quando me formei no instituto, consegui trabalhar no departamento de teoria de mecanismos e comecei a desenvolver um simulador de processos educacionais em C++, então tive um exemplo para comparação e pude pesar os prós e os contras. A escolha era óbvia e gradualmente comecei a migrar para TI e robótica. A mecânica aplicada era muito mais divertida do que a ciência de foguetes: muitos problemas não resolvidos, um ambiente aberto, falta de uma indústria de desenvolvimento, uma necessidade urgente de software de simulação. Na robótica, existe uma arquitetura instável de software comum e a necessidade de implementar repetidamente algoritmos complexos, incluindo lógica difusa e os primórdios da IA. Portanto, depois dos meus primeiros programas de processamento de dados experimentais, quase nunca mais voltei aos foguetes (com exceção do meu projeto de graduação).

Como resultado, tive a oportunidade de trabalhar na minha especialidade por apenas quatro meses antes de me formar em uma fábrica perto de Moscou para estruturas compostas para a indústria aeroespacial. Depois de terminar os estudos, nem precisei procurar emprego – vim imediatamente para lecionar mecânica aplicada no departamento de robótica.

Do ensino à programação

De foguetes a robôs e o que Python tem a ver com isso. História de ex-alunos do GeekBrains
No Congresso Mundial do IFTOMM com estudantes membros do grupo de pesquisa (eu à direita)

Trabalhei no MSTU no departamento de amostragem por 10 anos, ministrando um curso de teoria dos mecanismos. Publicou trabalhos científicos (ver final do artigo), passando gradativamente da mecânica para o CAD e a robótica. E no final ele decidiu deixar o ensino. Para ilustrar mais claramente as razões desta decisão, direi que em dez anos o curso que ministrei não mudou uma casa decimal. Embora a mecânica aplicada, a julgar pelas publicações, tenha avançado com muito, muito sucesso.

Além disso, o trabalho parecia cada vez mais burocrático - relatórios, programas, normas e toneladas de papel. Nessas condições, o prazer de ensinar foi substituído pelo relato do recebimento desse prazer, o que é mais do que desagradável para um especialista em exercício.

E finalmente cheguei à robótica assim: em 2007-2009, junto com os professores A. Golovin e N. Umnov, começamos a preparar os primeiros trabalhos científicos. Lá tive que usar algoritmos para determinar os caminhos dos objetos a partir da fotografia estroboscópica. A partir deste tópico é um passo para a visão de máquina, OpenCV e sistema operacional robótico (embora naquela época eu nem tenha pensado em tal escala). Depois disso, finalmente me concentrei em mecânica aplicada e robótica em pesquisa, e o desenvolvimento passou a ser uma atividade de apoio.

Porém, para encontrar um novo emprego na área de robótica, foi necessário aprimorar e complementar meus conhecimentos de programação. Afinal, nunca estudei especificamente TI, exceto em um curso universitário de um ano (ObjectPascal e Borland VCL em C++), e confiei na matemática para os aspectos teóricos do desenvolvimento.

No início, considerei opções de cursos de período integral em minha instituição natal. É verdade que rapidamente ficou claro que seria quase impossível conciliar esses estudos com o trabalho no departamento devido ao horário irregular e ao trabalho frequente fora do horário (substituição, etc.). Aos poucos, tive a ideia de fazer cursos pagos remotamente. Vim para o GeekBrains por recomendação de professores do centro de treinamento Mail.ru Technopark, localizado em Baumanka, e me matriculei no curso Python Programmer.

Os cursos não causaram dificuldades, o único problema é que tive que combiná-los constantemente com trabalhos no departamento, trabalhos científicos e eventos. O tempo estava tão apertado que a maioria das conexões sociais fora de casa tiveram de ser sacrificadas (felizmente, temporariamente).

Foi assim que lidei com a carga de trabalho: resolvi problemas na estrada. Esta habilidade, desenvolvida através de inúmeras viagens de negócios, revelou-se muito útil, pois sem ela não conseguiria sequer fazer todos os trabalhos de casa (e também substitui a meditação...). Aprendi a codificar em qualquer lugar usando meu laptop, smartphone e teclados de smartphone sem fio.

Meu laptop é um Dell Latitude 3470, e qualquer smartphone com diagonal de 5.5 polegadas ou mais emparelhado com um teclado Logitech K 810 BT serve. Em geral, recomendo os produtos Logitech a todos; eles são muito confiáveis ​​e podem suportar condições de uso muito adversas (e isso nunca é uma propaganda).

De foguetes a robôs e o que Python tem a ver com isso. História de ex-alunos do GeekBrains
Teclado Logitech K810

Python é muito propício para esse tipo de trabalho - se você tiver um bom editor. Outro hack de programação: use conexões remotas com a área de trabalho ou ambiente de execução. Concluí várias tarefas usando um servidor web seguro executando Django em meu computador doméstico. Trabalhei desde o trem, utilizando os softwares PyDroid, DroidEdit, Maxima.

Por que Python?

Não demorou muito para que eu tentasse usar PHP como linguagem de script de sistema. Inicialmente estudei Python sozinho e aos poucos “para mim”. Decidi estudar seriamente depois que descobri a existência de uma conexão efetiva entre Python e C++ em nível de módulo - me pareceu interessante compartilhar algoritmos otimizados e procedimentos de preparação de dados dentro da mesma linguagem.

O exemplo mais simples: existe um sistema de controle para um poderoso drive fora do padrão, implementado em uma máquina embarcada com processador RISC, em C++. O gerenciamento ocorre por meio de uma API externa dependente de máquina, que suporta, por exemplo, a comunicação entre subsistemas em uma rede. Em alto nível, o algoritmo de operação do drive não é depurado ou não é constante (é necessário carregar algoritmos diferentes dependendo do processo de trabalho).

Uma das melhores maneiras de alcançar tal sistema é usar a API do subsistema C++ específica da máquina como base para um conjunto de classes Python que são executadas em um interpretador de plataforma cruzada. Assim, o desenvolvedor de nível superior não terá que levar em conta os recursos da máquina embarcada e de seu sistema operacional; ele simplesmente trabalhará com classes Python que atuam como “invólucros” da API de baixo nível.

Tive que aprender a vinculação de C++ e Python quase do zero. Rapidamente ficou claro que as capacidades orientadas a objetos em alto nível eram muito mais importantes do que em baixo nível. Por conta disso, tivemos que mudar completamente a abordagem de projeto e implementação da API, optando por classes no nível Python e dados globais compartilhados em C/C++. Acostume-se com a geração de código: por exemplo, o próprio framework ROS gera nomes e objetos em Python, então você deve levar em consideração as diferenças de linguagem, principalmente na digitação, ao projetar suas interfaces.

Trabalhando no Presente: Python e Lógica de Controle de Robô

Agora trabalho como programador Python e C++ no Centro de Pesquisa e Educação em Robótica da Universidade Técnica Estadual de Moscou. Implementamos projetos de pesquisa e ferramentas de software encomendadas por departamentos governamentais: desenvolvemos manipuladores com sistemas de visão técnica integrados e algoritmos de controle automático de alto nível que são independentes de sistemas.

Atualmente, programo lógica de alto nível para sistemas de controle de robôs em Python; esta linguagem une módulos altamente otimizados escritos em C++, assembler e Go.

Na programação de algoritmos de controle de robôs, dois grandes grupos de algoritmos são usados. O primeiro deles é implementado diretamente no equipamento, em baixo nível - é o software integrado dos controladores de acionamento, concentradores de linha de comunicação e subsistemas de interação do operador.

Os algoritmos aqui são projetados para velocidade de execução controlada e confiabilidade que excede o desempenho do robô como um todo. Este último é obrigatório, pois a segurança de todo o sistema depende de um software de controle de baixo nível.

O segundo grupo de algoritmos determina a operação do robô como um todo. São programas de alto nível, cuja ênfase no desenvolvimento está na clareza e rapidez de implementação do algoritmo, muitas vezes bastante complexo. Além disso, o software de alto nível do robô está frequentemente sujeito a alterações durante o processo de configuração e teste. Para tal desenvolvimento, linguagens interpretadas de uso geral são indispensáveis.

Que conhecimento é necessário para esse trabalho?

Será obrigatório estudar a linguagem de modelo C++ e as capacidades orientadas a objetos do Python. Uma habilidade quase insubstituível é a capacidade de projetar e documentar APIs. Seria uma boa ideia explorar os recursos de bibliotecas especializadas como Boost::Python. Aqueles que trabalham com software de baixo nível definitivamente terão que lidar com multithreading (no nível do kernel) e chamadas de sistema Linux/UNIX/QNX. Para melhorar sua compreensão dos princípios da robótica, é muito útil familiarizar-se com a estrutura do Sistema Operacional Robótico.

Tento ter pelo menos uma linguagem de programação compilada e uma interpretada que esteja em desenvolvimento e em demanda. Esta é uma estratégia vencedora para trabalhar em engenharia, onde há uma necessidade constante de desenvolver algoritmos altamente especializados (leia-se: incomuns) e implementá-los em linguagens de compilação. A tarefa de preparar dados para esse tipo de software é muito mais agradável de resolver utilizando linguagens interpretadas. Inicialmente, meu conjunto incluía C++, Pascal e BASIC, posteriormente PHP e BASH foram adicionados.

Como as ferramentas de desenvolvimento podem ser úteis no ensino dos alunos

O principal plano de desenvolvimento profissional agora é tentar fornecer uma base científica para a utilização de ferramentas profissionais de desenvolvimento de software em pedagogia, para desenvolver e testar métodos de ensino.

Desde 2016, iniciei uma grande experiência de introdução de ferramentas de desenvolvimento – linguagens de programação, IDEs, geradores de documentação, sistemas de controle de versão – na prática docente no ensino superior. Conseguimos agora obter resultados que podem ser generalizados qualitativamente.

Por exemplo, a introdução de versionamento de materiais no processo educacional melhora significativamente a qualidade do trabalho dos alunos, porém, apenas sob uma condição obrigatória: alunos trabalhando juntos em projetos compartilhados. O desenvolvimento de métodos de ensino de disciplinas técnicas utilizando ferramentas profissionais de desenvolvimento de software está sendo realizado ativamente pelo meu grupo de pesquisa, formado por alunos, candidatos e alunos de programas de educação complementar do MSTU.

A propósito, não abandonei minha prática docente - desenvolvi meu próprio curso aprofundado em tempo integral sobre design e administração de Linux para o Instituto de Estudos Avançados do MSTU, e eu mesmo o ensino.

Trabalho científico

Trabalho cedo
Questões de planejamento de marcha ao projetar sistemas de caminhada quadrúpedes usando o exemplo da implementação da marcha de um cavalo (2010 g.)

Sobre a questão da cinemática e do carregamento do elemento de sustentação da pata dianteira do cavalo na fase de aproximação do apoio como componentes do ciclo de trabalho do motor quadrúpede (2012 g.)

Desde o último
Aplicativo de simulação de fabricação de engrenagens 3D para ensino de mecanismos e teoria de máquinas (2019 g.)

Método de reconhecimento de obstáculos estruturais e sua aplicação na busca de objetos de relevo (2018 g.)

Outros trabalhos indexados em bases de citações científicas podem ser vistos em meu perfil no ResearchGate. A maior parte dos artigos é dedicada à movimentação de máquinas, há trabalhos sobre pedagogia da engenharia e software educacional.

Fonte: habr.com

Adicionar um comentário