Existem muitos cursos excelentes no mundo da educação em engenharia, mas muitas vezes o currículo construído sobre eles tem uma séria desvantagem - a falta de boa conectividade entre diferentes tópicos. Pode-se objetar: como?
Quando um programa de treinamento está sendo formado, os pré-requisitos e uma ordem clara em que as disciplinas devem ser estudadas são indicados para cada curso. Por exemplo, para montar e programar um robô móvel primitivo, você precisa conhecer um pouco de mecânica para criar sua estrutura física; os conceitos básicos de eletricidade no nível das leis de Ohm / Kirchhoff, a representação de sinais digitais e analógicos; operações com vetores e matrizes para descrever os sistemas de coordenadas e o movimento do robô no espaço; noções básicas de programação no nível da apresentação de dados, algoritmos simples e estruturas de transferência de controle, etc. para descrever o comportamento.
Está tudo em cursos universitários? Claro que existe. No entanto, para as leis de Ohm / Kirchhoff, obtemos termodinâmica e teoria de campo; além de operações com matrizes e vetores, você precisa lidar com os formulários da Jordânia; estudar polimorfismo em programação - tópicos que nem sempre são necessários para resolver um problema prático simples.
A educação universitária é extensa - o aluno tem uma ampla frente e muitas vezes não vê o significado e o significado prático do conhecimento que recebe. Decidimos reverter o paradigma do ensino universitário STEM (das palavras Ciência, Tecnologia, Engenharia, Matemática) e criar um programa que se baseie na coerência do conhecimento, permitindo a construção da completude no futuro, ou seja, envolve desenvolvimento intensivo de disciplinas.
O estudo de uma nova área de estudo pode ser comparado com o estudo de uma determinada área. E aqui estão duas opções: ou temos um mapa muito detalhado com uma enorme quantidade de detalhes que precisam ser estudados (e isso leva muito tempo) para entender onde estão os principais pontos de referência e como eles se relacionam; ou você pode usar o plano primitivo, que mostra apenas os pontos principais e suas posições relativas - esse mapa é suficiente para começar imediatamente a se mover na direção certa, esclarecendo detalhes ao longo do caminho.
Testamos a abordagem intensiva de aprendizado STEM na escola de inverno, que realizamos em conjunto com os alunos do MIT com o apoio da
JetBrains Research.Preparação de material
A primeira parte do programa escolar foi uma semana de aulas nas principais áreas, incluindo álgebra, circuitos elétricos, arquitetura de computadores, programação em Python e uma introdução ao ROS (Robot Operating System).
As direções não foram escolhidas por acaso: complementando-se, elas deveriam ajudar os alunos a ver a conexão entre coisas aparentemente diferentes, à primeira vista, coisas - matemática, eletrônica e programação.
Obviamente, o objetivo principal não era dar muitas palestras, mas dar aos alunos a oportunidade de colocar em prática eles mesmos os conhecimentos que acabaram de adquirir.
Na seção de álgebra, os alunos podiam ser treinados em operações com matrizes e sistemas de equações de resolução que eram úteis no estudo de circuitos elétricos. Aprendendo sobre o dispositivo transistor e os elementos lógicos construídos com base nisso, os alunos puderam ver sua aplicação no dispositivo processador e, depois de aprender o básico da linguagem Python, escrever um programa para um robô real.

Duckietown
Uma das tarefas da escola era minimizar o trabalho com simuladores sempre que possível. Portanto, um grande conjunto de circuitos eletrônicos foi preparado, que os alunos tiveram que montar em uma placa de ensaio a partir de componentes reais e testá-los na prática, e Duckietown foi escolhido como base para os projetos.
Duckietown é um projeto de código aberto que inclui pequenos robôs autônomos chamados Duckiebot e uma rede de estradas pelas quais eles viajam. O Duckiebot é uma plataforma com rodas equipada com um microcomputador Raspberry Pi e uma única câmera.
Com base nisso, preparamos um conjunto de tarefas possíveis, como construir um mapa de estradas, encontrar objetos e parar ao lado deles, entre outros. Os alunos também podem propor seu próprio problema e não apenas escrever um programa para resolvê-lo, mas também lançá-lo imediatamente em um robô real.
Ensino
Durante a palestra, os professores contaram o material usando apresentações pré-preparadas. Algumas aulas foram gravadas em vídeo, então os alunos tiveram a oportunidade de assisti-las em casa. Durante as palestras, os alunos usavam materiais em seus computadores, faziam perguntas, resolviam problemas juntos e de forma independente, às vezes no quadro-negro. Com base nos resultados do trabalho, foi calculada a classificação de cada aluno separadamente para diferentes disciplinas.

Considere a realização de aulas sobre cada assunto em mais detalhes. O primeiro assunto foi álgebra linear. Os alunos estudaram um dia vetores e matrizes, sistemas de equações lineares, etc. As tarefas práticas foram construídas de forma interativa: as tarefas propostas foram resolvidas individualmente e o professor e outros alunos fizeram comentários e dicas.

O segundo assunto é eletricidade e circuitos simples. Os alunos estudaram o básico da eletrodinâmica: tensão, corrente, resistência, lei de Ohm e leis de Kirchhoff. As tarefas práticas foram parcialmente realizadas no simulador ou realizadas no quadro, mas foi dedicado mais tempo à construção de circuitos reais, como circuitos lógicos, circuitos oscilatórios etc.

O próximo tópico é Arquitetura de computadores - em certo sentido, uma ponte que conecta física e programação. Os alunos estudaram a base fundamental, cujo significado é mais teórico do que prático. Como prática, os alunos projetaram de forma independente circuitos aritméticos-lógicos no simulador, para pontos que receberam pontos.
O quarto dia é o primeiro dia de programação. O Python 2 foi escolhido como a linguagem de programação, pois é usado na programação sob o ROS. Este dia foi construído da seguinte maneira: os professores contaram o material, deram exemplos de solução de problemas, enquanto os alunos os ouviram, sentados em computadores e repetiram o que o professor escreveu no quadro ou slide. Em seguida, os alunos resolveram problemas semelhantes por conta própria; posteriormente, as soluções foram avaliadas pelos professores.
O quinto dia foi dedicado ao ROS: os caras se familiarizaram com a programação de robôs. Durante o dia escolar, os alunos sentaram-se em computadores, executando o código do programa sobre o qual o professor falava. Eles foram capazes de lançar independentemente as unidades básicas do ROS e também se familiarizaram com o projeto Duckietown. No final deste dia, os alunos estavam prontos para começar a parte de design da escola - resolvendo problemas práticos.

Descrição dos projetos selecionados
Os alunos foram convidados a participar de equipes de três pessoas e escolher um tópico do projeto. Como resultado, foram adotados os seguintes projetos:
1. Calibração de cores. O Duckiebot precisa calibrar a câmera ao alterar as condições de iluminação, para que haja a tarefa de calibração automática. O problema é que as faixas de cores são muito sensíveis à luz. Os participantes implementaram um utilitário que destacaria as cores desejadas no quadro (vermelho, branco e amarelo) e criaria intervalos para cada uma das cores no formato HSV.
2. Duck Taxi. A idéia deste projeto é que o Duckiebot possa parar perto de algum objeto, buscá-lo e seguir uma determinada rota. Um pato amarelo brilhante foi escolhido como objeto.

3. Construir um gráfico de estradas. Há a tarefa de construir um gráfico de estradas e cruzamentos. O objetivo deste projeto é construir um gráfico de estradas sem fornecer dados ambientais a priori para o Duckiebot, contando apenas com os dados da câmera.
4. Carro de patrulha. Este projeto foi inventado pelos próprios alunos. Eles se ofereceram para ensinar um Duckiebot, a "patrulha", a perseguir o outro, o "intruso". Para esse fim, foi utilizado um mecanismo de reconhecimento de alvo pelo marcador ArUco. Assim que o reconhecimento é concluído, um sinal de conclusão é enviado ao "intruso".

Calibração de cores
O objetivo do projeto Calibração de cores era ajustar a gama de cores de marcação reconhecíveis para as novas condições de iluminação. Sem esses ajustes, o reconhecimento de linhas de parada, divisores de pista e limites de estradas ficou incorreto. Os participantes propuseram uma solução baseada em modelos de cores de layout de pré-processamento: vermelho, amarelo e branco.
Cada uma dessas cores possui uma faixa preliminar de valores HSV ou RGB. Usando esse intervalo, todas as áreas que contêm cores adequadas são encontradas no quadro e a maior é selecionada a partir delas. Essa área é considerada a cor a ser lembrada. Em seguida, são utilizadas fórmulas estatísticas, como o cálculo da média e do desvio padrão, para avaliar a nova faixa de cores.
Esse intervalo é gravado nos arquivos de configuração da câmera Duckiebot e pode ser usado posteriormente. A abordagem descrita foi aplicada às três cores, formando intervalos para cada uma das cores de marcação.
Os testes mostraram um reconhecimento quase perfeito das linhas de marcação, exceto quando uma fita brilhante foi usada como material de marcação, refletindo tão fortemente as fontes de luz que, no ângulo de visão da câmera, a marcação apareceu em branco, independentemente da cor original.

Táxi de pato
O projeto Duck Taxi envolveu a construção de um algoritmo de busca para um passageiro na cidade e, em seguida, seu transporte até o ponto desejado. Os participantes dividiram esta tarefa em duas: detecção e movimento ao longo do gráfico.
Os alunos realizaram a detecção de um pato, assumindo que o pato é chamado de qualquer área no quadro que possa ser reconhecida como amarela, com um triângulo vermelho (bico). Assim que essa área for detectada no próximo quadro, o robô deve se aproximar e parar por alguns segundos, simulando um pouso de passageiros.
Em seguida, tendo um gráfico de estrada pré-armazenado de toda a cidade e a posição do bot, além de receber o destino como entrada, os participantes constroem um caminho do ponto de partida até o ponto de chegada usando o algoritmo de Dijkstra para procurar caminhos no gráfico. A saída é apresentada como um conjunto de comandos - gira em cada uma das seguintes interseções.

Gráfico de estradas
O objetivo deste projeto era construir um gráfico - uma rede de estradas em Duckietown. Os nós do gráfico resultante são interseções e os arcos são estradas. Para fazer isso, Duckiebot deve explorar a cidade e analisar sua rota.
Durante o trabalho no projeto, a ideia foi considerada, mas depois a idéia de criar um gráfico ponderado no qual o custo da aresta é determinado pela distância (tempo a superar) entre as interseções foi rejeitada. A implementação desta ideia provou ser muito trabalhosa e não haveria tempo suficiente dentro da estrutura da escola.
Quando Duckiebot chega ao próximo cruzamento, ele escolhe a estrada deixando o cruzamento para o qual ainda não se moveu. Quando todas as estradas em todas as interseções são cobertas, uma lista gerada de adjacências de interseção permanece na memória do bot, que é convertida em uma imagem usando a biblioteca Graphviz.
O algoritmo proposto pelos participantes não é adequado para Duckietown arbitrário, mas funcionou bem em uma pequena cidade composta por quatro cruzamentos usados dentro da escola. A idéia era suplementar cada interseção com um marcador ArUco contendo o identificador da interseção para rastrear a interseção.
O esquema de trabalho do algoritmo desenvolvido pelos participantes é mostrado na figura.

Carro-patrulha
O objetivo deste projeto é procurar, processar e deter um bot invasor em Duckietown. A patrulha bot deve se mover ao longo do anel externo da estrada na cidade em busca de um bot invasor conhecido. Depois que o invasor é detectado, o bot de patrulha deve seguir o invasor e fazê-lo parar.
O trabalho começou com a busca da idéia de detectar um bot no quadro e reconhecer o intruso nele. A equipe sugeriu equipar cada bot da cidade com um marcador exclusivo na parte de trás - assim como carros reais têm números de registro de estado. Para isso, os marcadores ArUco foram escolhidos. Eles foram usados anteriormente na cidade dos patos, pois é fácil trabalhar com eles e permitem determinar a orientação do marcador no espaço e a distância a ele.
Em seguida, foi necessário fazer o bot de patrulha se mover estritamente no círculo externo sem parar nos cruzamentos. Por padrão, o Duckiebot se move em uma faixa e para em uma linha de parada. Em seguida, usando sinais de trânsito, determina a configuração do cruzamento e faz uma escolha sobre a direção do cruzamento. Para cada uma das etapas descritas, um dos estados da máquina de estado do robô é responsável. Para se livrar das paradas no cruzamento, a equipe mudou a máquina de estado para que, ao se aproximar da linha de parada, o bot fosse imediatamente direto para o estado de passagem do cruzamento.
O próximo passo foi resolver o problema de parar o bot do invasor. A equipe assumiu que o bot de patrulha pode ter acesso SSH a cada um dos bots da cidade, ou seja, tem algumas informações sobre quais dados de autorização e qual o ID de cada bot. Assim, depois que o invasor foi detectado, o bot de patrulha começou a se conectar via SSH ao bot do invasor e desligou o sistema.
Depois de confirmar que o comando de desligamento foi concluído, o bot de patrulha também parou.
O algoritmo do robô patrulha pode ser representado como o seguinte esquema:

Trabalho de projeto
O trabalho foi organizado em um formato semelhante ao Scrum: todas as manhãs os alunos planejavam tarefas para o dia atual e à noite relatavam o trabalho realizado.
No primeiro e no último dia, os alunos prepararam apresentações descrevendo a tarefa e como resolvê-la. Para ajudar os alunos a seguir os planos escolhidos, nas salas onde os projetos estavam sendo trabalhados, havia constantemente professores da Rússia e da América que respondiam perguntas. A comunicação ocorreu principalmente em inglês.
Resultados e sua demonstração
O trabalho em projetos durou uma semana, após o qual os alunos apresentaram seus resultados. Todos prepararam apresentações nas quais contaram o que aprenderam nesta escola, quais foram as lições mais importantes de que gostaram ou não. Depois disso, cada equipe apresentou seu projeto. Todas as equipes lidaram com as tarefas.
A equipe que implementa a calibração de cores concluiu o projeto mais rapidamente do que outros, então eles conseguiram preparar a documentação para seu programa. E a equipe envolvida no gráfico de estradas, mesmo no último dia antes da demonstração do projeto, tentou finalizar e corrigir seus algoritmos.

Conclusão
Depois da escola, pedimos aos alunos que avaliassem atividades passadas e respondessem perguntas sobre como a escola atendeu às suas expectativas, que habilidades adquiriram etc. Todos os alunos observaram que aprenderam a trabalhar em equipe, distribuir tarefas e planejar seu tempo.
Os alunos também foram convidados a avaliar a utilidade e a complexidade dos cursos. E aqui se formaram dois grupos de avaliações: para alguns, os cursos não foram muito difíceis, enquanto outros os classificaram como os mais difíceis.
Isso significa que a escola assumiu a posição correta, permanecendo acessível para iniciantes em uma área específica, mas também fornecendo materiais para repetição e consolidação para alunos experientes. Deve-se notar que quase todo mundo observou um curso de programação (Python) como simples, mas útil. O mais difícil, segundo os alunos, foi o curso "Arquitetura de Computadores".
Quando os alunos foram questionados sobre as deficiências e vantagens da escola, muitos responderam que gostaram do estilo de ensino escolhido, no qual os professores prestavam assistência imediata e individualmente e respondiam a perguntas.
Os alunos também observaram que gostavam de trabalhar no modo de planejamento diário de suas tarefas e de estabelecer prazos de forma independente. Os alunos observaram a falta de conhecimento fornecido, necessário ao trabalhar com o bot: ao conectar, entender as bases e os princípios de seu trabalho como deficiências.
Quase todos os alunos notaram que a escola excedeu suas expectativas, e isso indica a direção certa da organização da escola. Assim, devem ser mantidas disposições gerais ao organizar a próxima escola, levando em consideração e, se possível, eliminando as deficiências apontadas pelos alunos e professores, possivelmente alterando a lista de cursos ou o tempo de seu ensino.
Autores: Equipe do
laboratório de algoritmos de robôs móveis da JetBrains ResearchPS Nosso blog corporativo tem um novo nome. Agora será dedicado aos projetos educacionais do JetBrains.