Hoje publicamos a história da transição de Andrei Vukolov para a TI. Um entusiasmo de infância pelo espaço o levou à ciência de foguetes no MSTU. A dura realidade me fez esquecer o sonho, mas tudo ficou ainda mais interessante. Estudar C ++ e Python nos permitiu fazer um trabalho não menos empolgante: programar a lógica dos sistemas de controle de robôs.
Iniciar
Durante toda a minha infância, tive sorte de elogiar o espaço. Portanto, depois da escola, não hesitei por um minuto em que ir estudar e entrei na Universidade Técnica do Estado de Moscou. Bauman, ao departamento de propulsão de foguetes. No entanto, o ramo do curso em si - motores em pó ou líquidos de foguetes espaciais - não precisou ser selecionado: em 2001, uma comissão especial do corpo docente distribuiu os grupos-alvo de candidatos. Eu fiquei "em um barril de pólvora".
Naquela época, o "boom do foguete" existia apenas em planos, os engenheiros recebiam salários escassos e trabalhavam em agências de projetos especiais e institutos de pesquisa praticamente sem perspectivas de carreira e crescimento profissional. Ainda assim, os foguetes em pó na Rússia são produtos puramente militares.
Agora, essa direção está em demanda, mas já durante meus estudos percebi que na ciência dos foguetes qualquer atividade por minha própria iniciativa é quase impossível. De fato, este é um serviço militar. Por exemplo, trabalhando na indústria de foguetes, eu seria completamente privado da oportunidade de desenvolver software, mesmo para mim, pois essa atividade é estritamente regulamentada.
Todos os produtos de software são desenvolvidos exclusivamente por pedido especial e com a aprovação do comitê de privacidade (agora é uma divisão do FSTEC). O desenvolvedor é necessário para registrar e licenciar literalmente todas as linhas de código. Todo o software é inicialmente secreto no nível da tarefa. Isso explica em parte por que o software atualmente usado para treinar estudantes de foguetes foi desenvolvido nos anos 90 do máximo no século XX.
Quando me formei, consegui trabalhar no Departamento de Teoria da Mecânica e comecei a desenvolver um simulador de treinamento do processo técnico em C ++, então tive um exemplo para comparação e pude pesar todos os prós e contras. A escolha foi óbvia e gradualmente comecei a me desviar para a TI e a robótica. Na mecânica aplicada, era muito mais divertido do que na ciência de foguetes: muitos problemas não resolvidos, um ambiente aberto, a falta de uma indústria de desenvolvimento e uma necessidade urgente de software de simulação. Em robótica - a arquitetura instável de software comum e a necessidade de implementar repetidamente algoritmos complexos, incluindo lógica difusa e o início da IA. Portanto, após meus primeiros programas de processamento de dados experimentais, quase não voltei aos foguetes (com exceção do projeto de graduação).
Como resultado, tive a oportunidade de trabalhar na especialidade por apenas quatro meses antes da graduação na fábrica de estruturas compostas para a indústria aeroespacial perto de Moscou. No final do treinamento, nem precisei procurar trabalho - vim imediatamente ensinar mecânica aplicada na Faculdade de Robótica.
Do ensino à programação
No Congresso Mundial da IFTOMM com estudantes - membros do grupo de pesquisa (eu estou à direita)No MSTU, na faculdade probotécnica, trabalhei por 10 anos, lecionei um curso de teoria dos mecanismos. Ele publicou artigos científicos (veja o final do artigo), passando gradualmente da mecânica para o CAD e a robótica. E no final, ele decidiu deixar de ensinar. Para ilustrar com mais clareza as razões dessa decisão, direi que, ao longo de uma década, o curso de estudo que li não mudou por vírgula. Embora a mecânica aplicada, a julgar pelas publicações, tenha tido muito, muito sucesso.
Além disso, o trabalho se assemelhava cada vez mais à burocracia - relatórios, programas, normas e toneladas de papel. Em tais condições, o prazer de ensinar foi substituído por relatórios sobre o recebimento desse prazer, e isso é mais do que desagradável para um especialista.
E finalmente cheguei à robótica assim: em 2007-2009, juntamente com os professores A. Golovin e N. Umnov, começamos a preparar os primeiros trabalhos científicos. Lá eu tive que usar algoritmos para determinar as trajetórias dos objetos de acordo com a fotografia estroboscópica. A partir deste tópico - um passo para a visão de máquina, o OpenCV e o sistema operacional robótico (embora eu nem pensasse nessa escala). Depois disso, enfoquei finalmente a mecânica aplicada e a robótica na pesquisa, e o desenvolvimento se tornou uma atividade auxiliar.
No entanto, para encontrar um novo emprego em robótica, foi necessário melhorar e complementar meus conhecimentos de programação. Afinal, especificamente em TI, com exceção de um curso universitário de um ano (ObjectPascal e Borland VCL em C ++), eu não estudei em nenhum lugar; confiei em matemática nos aspectos teóricos do desenvolvimento.
Inicialmente, considerei as opções para cursos em período integral no meu instituto de origem. É verdade que rapidamente ficou claro que combinar esses estudos com o trabalho no departamento seria praticamente impossível devido a um cronograma rasgado e a um trabalho frequente fora do próprio cronograma (substituição, etc.). Então, gradualmente, surgiu a idéia de concluir os cursos pagos remotamente. Fui ao GeekBrains por recomendação de professores do centro de treinamento Technopark Mail.ru localizado em Baumanka e entrei no curso de programador Python.
Os cursos não causaram dificuldades, um problema - constantemente teve que ser combinado: com trabalho no departamento, trabalhos científicos e eventos. Não havia tempo suficiente para sacrificar (felizmente, temporariamente) a maioria das conexões sociais fora de casa.
Lidar com a carga como esta: resolvido problemas na estrada. Essa habilidade, desenvolvida por inúmeras viagens de negócios, acabou sendo muito útil, pois sem ela eu não conseguia nem fazer todo o meu dever de casa (e também substitui a meditação ...). Eu me acostumei a programar em movimento usando um laptop, smartphone e teclados sem fio para um smartphone.
Eu tenho um laptop Dell Latitude 3470 e qualquer smartphone com uma diagonal de 5,5 polegadas ou mais emparelhado com um teclado Logitech K 810 BT serve. Em geral, eu recomendo produtos da Logitech para todos, é muito confiável e pode suportar condições de uso muito severas (e isso nunca é um anúncio).
Teclado Logitech K810Python está muito confortável com esse trabalho - com um bom editor. Outro truque de programação: use conexões remotas com a área de trabalho ou o tempo de execução. Concluí várias tarefas usando um servidor Web seguro executando o Django no meu computador em casa. Ele trabalhou ao mesmo tempo no trem, o software usou PyDroid, DroidEdit, Maxima.
Por que Python?
Resumidamente, tentei usar o PHP como uma linguagem de script do sistema. Python inicialmente independente e pouco a pouco estudou "por si mesmo". Decidi estudar seriamente depois de aprender sobre a existência de uma conexão eficaz entre Python e C ++ no nível do módulo - parecia interessante separar algoritmos e procedimentos otimizados para preparar dados em um idioma.
O exemplo mais simples: existe um poderoso sistema de controle de unidade não padrão implementado em uma máquina incorporada com um processador RISC, em C ++. O gerenciamento é feito por meio de uma API externa dependente da máquina que suporta, por exemplo, a comunicação entre subsistemas em uma rede. Em um nível alto, o algoritmo de operação do inversor não é depurado ou não é constante (o carregamento de vários algoritmos é necessário, dependendo do processo de trabalho).
Uma das melhores maneiras de obter esse sistema é usar os subsistemas API C ++ específicos da máquina como base do conjunto de classes Python usadas no interpretador de plataforma cruzada. Assim, o desenvolvedor de nível superior não precisará levar em consideração os recursos da máquina incorporada e de seu sistema operacional; ele simplesmente trabalhará com as classes Python, que atuam como "invólucros" da API de baixo nível.
Eu tive que aprender a ligação de C ++ e Python do zero. Logo se entendeu que os recursos orientados a objetos em um nível alto são muito mais importantes do que em um nível baixo. Por causa disso, tive que mudar completamente a abordagem para projetar e implementar a API, optando por classes no nível Python e compartilhando dados globais em C / C ++. Acostume-se à geração de código: por exemplo, a própria estrutura do ROS gera nomes e objetos em Python, portanto, você deve levar em consideração as diferenças de idiomas, especialmente na digitação, no design de suas interfaces.
Trabalho no presente: Python e a lógica dos sistemas de controle de robôs
Agora, trabalho como programador em Python e C ++ no centro de pesquisa e treinamento "Robótica" do MSTU. Implementamos projetos de pesquisa e ferramentas de software encomendadas por departamentos governamentais: desenvolvemos manipuladores com sistemas de visão integrados e algoritmos de controle automático de alto nível que são independentes dos sistemas.
Agora estou programando em Python uma lógica de alto nível dos sistemas de controle de robôs, essa linguagem conecta 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 um nível baixo - este é o firmware dos controladores do inversor, concentradores de linha de comunicação, subsistemas de interação com o operador.
Os algoritmos aqui são projetados para uma velocidade de execução controlada e confiabilidade que excedem o desempenho do robô como um todo. O último é necessário, pois a segurança de todo o sistema depende do software de controle de baixo nível.
O segundo grupo de algoritmos determina a operação do robô como um todo. Estes são programas de alto nível, cuja ênfase no desenvolvimento está na compreensibilidade e velocidade de implementação do algoritmo, geralmente bastante complexa. Além disso, o software de alto nível do robô sofre muitas vezes alterações durante o processo de configuração e teste. Linguagens de propósito geral interpretáveis são indispensáveis para esse desenvolvimento.
Que conhecimento é necessário para esse trabalho
É necessário aprender sobre a linguagem de modelos C ++, os recursos orientados a objetos do Python. Uma habilidade quase indispensável é a capacidade de projetar e documentar APIs. Não será supérfluo estudar os recursos de bibliotecas especializadas, como o Boost :: Python. Aqueles que trabalham com software de baixo nível definitivamente terão que lidar com multithreading (além disso, no nível do kernel), chamadas de sistema Linux / UNIX / QNX. Para aprimorar a compreensão dos princípios da construção de robótica, é muito útil se familiarizar com a estrutura do sistema operacional robótico.
Tento ter pelo menos uma linguagem de programação compilada e uma interpretada no ativo, em desenvolvimento e em demanda. Essa é uma estratégia vencedora para o trabalho em engenharia, onde você precisa constantemente desenvolver algoritmos altamente especializados (leia-se: incomuns) e implementá-los em linguagens de compilação. A tarefa de preparar dados para esse software é muito mais agradável de resolver usando 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 aprendizado dos alunos
O principal plano para o desenvolvimento profissional agora é tentar trazer a base científica para o uso de ferramentas profissionais de desenvolvimento de software na pedagogia, para desenvolver e testar métodos de ensino.
Em 2016, iniciei uma grande experiência na introdução de ferramentas de desenvolvimento - linguagens de programação, IDEs, geradores de documentação, sistemas de controle de versão - na prática pedagógica no ensino superior. Agora já conseguimos obter resultados que se prestam a uma generalização qualitativa.
Por exemplo, a introdução de versões de materiais no processo educacional melhora significativamente a qualidade do trabalho do aluno, no entanto, apenas sob a condição de que os alunos trabalhem juntos em projetos compartilhados. O desenvolvimento de métodos para o ensino de disciplinas técnicas usando ferramentas profissionais de desenvolvimento de software agora é conduzido ativamente pelas forças do meu grupo de pesquisa, composto por estudantes, candidatos e estudantes de programas de educação complementar do MSTU.
A propósito, eu não deixei a prática de ensino - desenvolvi o curso em pessoa do autor em dispositivos e administração Linux para o Instituto de Estudos Avançados do MSTU, e eu próprio ensino.
Trabalhos científicos
Trabalho inicialQuestões de planejamento da marcha no projeto de sistemas de caminhada quadrúpedes usando a marcha como cavalo (2010)
Sobre a questão da cinemática e do carregamento do elemento de apoio da perna dianteira do cavalo no estágio de abordagem do suporte como componentes do ciclo de trabalho de propulsão a quatro pernas (2012)
Desde o últimoAplicativo 3D para simular a produção de engrenagens para o ensino da teoria de mecanismos e máquinas (2019)
Reconhecimento de obstáculos estruturais e sua aplicação na busca de objetos de relevo (2018)
Outros trabalhos indexados por bancos de dados de citações científicas podem ser vistos no meu perfil do
ResearchGate . A maioria dos artigos é dedicada ao movimento de máquinas, existem trabalhos sobre pedagogia de engenharia e software educacional.