No mundo da educação em engenharia, existem muitos cursos excelentes, mas geralmente o programa de estudo construído sobre eles apresenta uma séria desvantagem — a falta de uma boa conexão entre os diversos temas. Pode-se argumentar: como assim?
Quando um programa de estudo é elaborado, para cada curso são especificados pré-requisitos e uma ordem clara em que as disciplinas devem ser estudadas. Por exemplo, para montar e programar um robô móvel primitivo, é necessário ter um entendimento básico de mecânica para criar sua estrutura física; noções de eletricidade ao nível das leis de Ohm/Kirchhoff, representação de sinais digitais e analógicos; operações com vetores e matrizes para descrever sistemas de coordenadas e o movimento do robô no espaço; e fundamentos de programação ao nível de representação de dados, algoritmos simples e estruturas de controle, entre outros, para descrever o comportamento.
Está tudo isso presente nos cursos universitários? Com certeza. Contudo, às leis de Ohm/Kirchhoff juntam-se a termodinâmica e a teoria de campo; além das operações com matrizes e vetores, é necessário entender formas de Jordan; em programação, estudar polimorfismo — temas que nem sempre são necessários para resolver uma simples tarefa prática.
O ensino universitário é extensivo — o aluno avança por uma ampla gama de tópicos e muitas vezes não vê o sentido e a relevância prática do conhecimento que adquire. Decidimos inverter a paradigma do ensino universitário em STEM (Science, Technology, Engineering, Math) e criar um programa que se baseia na conexão do conhecimento, permitindo o aprofundamento no futuro, ou seja, implicando em uma assimilação intensiva das matérias.
O estudo de um novo campo pode ser comparado a explorar uma nova área. E existem duas opções: ou temos um mapa muito detalhado com uma imensidão de detalhes que precisam ser estudados (o que leva muito tempo), para entender onde estão os pontos principais e como eles se relacionam; ou podemos usar um plano primitivo, que mostra apenas os principais marcos e sua disposição mútua — tal mapa é suficiente para começar a seguir na direção certa, refinando os detalhes ao longo do caminho.
Testamos a abordagem de aprendizado intensivo em STEM durante a escola de inverno, que realizamos em conjunto com estudantes do MIT com o apoio de
Preparação do material
A primeira parte do programa da escola consistiu em uma semana de aulas sobre as principais disciplinas que incluíam álgebra, circuitos elétricos, arquitetura de computadores, programação em Python e familiarização com o ROS (Robot Operating System).
As disciplinas foram escolhidas intencionalmente: complementando-se, deveriam ajudar os alunos a ver a conexão entre, à primeira vista, coisas aparentemente diferentes — matemática, eletrônica e programação.
Claro, o objetivo principal não era dar muitas palestras, mas permitir que os alunos aplicassem assim que obtiveram os conhecimentos recebidos na prática.
Na seção de álgebra, os alunos puderam praticar operações com matrizes e resolução de sistemas de equações, que foram úteis no estudo de circuitos elétricos. Ao aprender sobre o funcionamento do transistor e dos elementos lógicos construídos com base nele, os estudantes puderam ver sua aplicação no funcionamento do processador e, após estudar os fundamentos da linguagem Python, escrever um programa para um robô real.

Duckietown
Uma das tarefas da escola era minimizar o uso de simuladores onde fosse possível. Portanto, foi preparado um grande conjunto de circuitos eletrônicos que os alunos deveriam montar em uma placa de ensaio com componentes reais e testá-los na prática, e Duckietown foi escolhido como base para os projetos.
Duckietown é um projeto aberto que inclui pequenos robôs autônomos chamados Duckiebots e uma rede de estradas pelas quais eles se movem. O Duckiebot é uma plataforma sobre rodas equipada com um microcomputador Raspberry Pi e uma câmera.
Com base nisso, preparamos um conjunto de possíveis tarefas, como a construção de um mapa de estradas, a busca por objetos e a parada ao lado deles, entre outras. Os alunos também podiam propor seus próprios problemas e não apenas escrever um programa para resolvê-los, mas também executá-lo imediatamente em um robô real.
Ensino
Durante as aulas, os professores apresentavam o conteúdo usando apresentações previamente preparadas. Algumas aulas eram gravadas em vídeo, proporcionando aos alunos a oportunidade de assisti-las em casa. Durante as aulas, os alunos utilizavam materiais em seus computadores, faziam perguntas, resolviam problemas em conjunto e individualmente, às vezes no quadro. No final, foi calculada uma classificação para cada aluno separadamente em diferentes disciplinas.

Vamos analisar a condução das aulas em cada disciplina com mais detalhes. A primeira disciplina foi Álgebra Linear. Os alunos estudaram vetores e matrizes, sistemas de equações lineares, etc., ao longo de um dia. As atividades práticas foram realizadas de maneira interativa: os problemas propostos eram resolvidos individualmente, e o professor e os outros alunos ofereciam comentários e dicas.

A segunda disciplina foi Eletricidade e Circuitos Simples. Os alunos estudaram os fundamentos da Eletrodinâmica: tensão, corrente, resistência, Lei de Ohm e Leis de Kirchhoff. As atividades práticas foram parcialmente realizadas em simuladores ou no quadro, mas mais tempo foi dedicado à construção de circuitos reais, como circuitos lógicos e circuitos oscilantes, etc.

O próximo tema — Arquitetura de Computadores — é, de certa forma, uma ponte que conecta física e programação. Os alunos estudaram a base fundamental, cuja importância é mais teórica do que prática. Como prática, os alunos projetaram de forma independente circuitos aritmético-lógicos em um simulador, recebendo pontos pelos trabalhos realizados.
O quarto dia — o primeiro dia de programação. A linguagem de programação escolhida foi Python 2, pois é a utilizada para programar em ROS. Este dia foi estruturado da seguinte forma: os instrutores apresentavam o conteúdo, fornecendo exemplos de resolução de problemas, enquanto os alunos os escutavam, sentados em frente aos computadores, e reproduziam o que o instrutor escrevia no quadro ou no slide. Em seguida, os alunos resolviam problemas semelhantes de forma independente, e as soluções eram avaliadas pelos instrutores.
O quinto dia foi dedicado ao ROS: os alunos se familiarizaram com a programação de robôs. Durante todo o dia letivo, os estudantes permaneceram em frente aos computadores, executando o código que o instrutor apresentava. Eles conseguiram iniciar as principais unidades do ROS de forma independente, além de se familiarizarem com o projeto Duckietown. Ao final deste dia, os alunos estavam prontos para iniciar a parte prática da escola — a resolução de problemas práticos.

Descrição dos projetos escolhidos
Os alunos foram convidados a se juntarem em equipes de três pessoas e escolherem um tema para o projeto. No final, os seguintes projetos foram aceitos:
1. Calibração de cores. O Duckiebot precisa calibrar a câmera ao mudar as condições de iluminação, portanto, há uma tarefa de calibração automática. O problema é que os intervalos de cores são muito sensíveis à iluminação. Os participantes implementaram uma ferramenta que destacava os cores necessários (vermelho, branco e amarelo) na imagem e construía intervalos para cada cor no formato HSV.
2. Duck Taxi. A ideia deste projeto é que o Duckiebot possa parar perto de um objeto, pegá-lo e seguir por um determinado trajeto. O objeto escolhido foi um pato amarelo brilhante.

3. Construção de um grafo de estradas. Existe a tarefa de construir um grafo de estradas e cruzamentos. O objetivo deste projeto é construir um grafo de estradas sem fornecer dados a priori sobre o ambiente para o Duckiebot, utilizando apenas os dados da câmera.
4. Carro patrulha. Este projeto foi concebido pelos próprios alunos. Eles propuseram ensinar um Duckiebot, "patrulheiro", a perseguir outro — o "infrator". Para isso, foi utilizado um mecanismo de reconhecimento de alvo por meio de um marcador ArUco. Assim que o reconhecimento é concluído, o "infrator" recebe um sinal de finalização da atividade.

Calibração de Cores
O objetivo do projeto Color Calibration foi ajustar a gama de cores reconhecíveis da sinalização sob novas condições de iluminação. Sem esses ajustes, o reconhecimento de linhas de parada, divisores de faixas e limites de estrada tornava-se incorreto. Os participantes propuseram uma solução baseada na pré-processamento de modelos de cores de sinalização: vermelho, amarelo e branco.
Para cada uma dessas cores, um intervalo HSV ou RGB pré-determinado é definido. Usando esse intervalo, todas as áreas na imagem que contêm cores apropriadas são identificadas, e a maior delas é selecionada. 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 o novo intervalo de cor.
Esse intervalo é gravado em arquivos de configuração da câmera Duckiebot e pode ser utilizado posteriormente. A abordagem descrita foi aplicada a todas as três cores, resultando na formação de intervalos para cada uma das cores de sinalização.
Os testes mostraram um reconhecimento quase perfeito das linhas de sinalização, exceto em casos onde materiais de sinalização refletivos foram utilizados, que refletiam tanto a luz que, sob o ângulo da câmera, a sinalização parecia branca, independentemente de sua cor original.

Duck Taxi
O projeto Duck Taxi envolve a construção de um algoritmo para localizar a patinha passageira na cidade e, em seguida, transportá-la para o ponto necessário. Os participantes dividiram essa tarefa em duas partes: detecção e movimentação pelo grafo.
Os estudantes realizaram a detecção da patinha, presumindo que uma patinha é qualquer área na imagem que pode ser reconhecida como amarela, com um triângulo vermelho (bico) nela. Assim que tal área é detectada em um quadro, o robô deve se aproximar dela e parar por alguns segundos, simulando a aterrissagem do passageiro.
Então, tendo previamente armazenado no memória o grafo das ruas de toda a duckietown e a posição do robô, além de receber como entrada o ponto de destino, os participantes constroem um caminho do ponto de partida ao ponto de chegada usando o algoritmo de Dijkstra para encontrar caminhos no grafo. A saída é apresentada na forma de um conjunto de comandos — voltas em cada um dos cruzamentos subsequentes.

Grafo de Ruas
O objetivo deste projeto foi construir um grafo - uma rede de ruas em Duckietown. Os nós do grafo resultante são as interseções, e as arestas são as ruas. Para isso, o Duckiebot deve explorar a cidade e analisar sua rota.
Durante o trabalho no projeto, foi considerada, mas depois abandonada, a ideia de fazer um grafo ponderado, em que o custo da aresta é determinado pela distância (tempo de percurso) entre as interseções. A implementação dessa ideia se mostrou muito trabalhosa e não haveria tempo suficiente no contexto da escola.
Quando o Duckiebot chega a uma nova interseção, ele escolhe a rua que sai da interseção pela qual ainda não passou. Quando todas as ruas em todas as interseções são percorridas, a memória do bot armazena uma lista de adjacências das interseções, que é transformada em uma imagem usando a biblioteca Graphviz.
O algoritmo proposto pelos participantes não é adequado para um Duckietown arbitrário, mas funcionou bem em uma pequena cidade composta por quatro interseções, utilizada no contexto da escola. A ideia era complementar cada interseção com um marcador ArUco, que contém o identificador da interseção, para rastrear a ordem de passagem pelas interseções.
O esquema de operação do algoritmo desenvolvido pelos participantes é mostrado na figura.

Patrulheiro
O objetivo deste projeto é localizar, perseguir e capturar o bot infrator na cidade de Duckietown. O bot patrulheiro deve circular pela via externa em busca de um bot infrator conhecido. Após a detecção do infrator, o bot patrulheiro deve seguir o infrator e forçá-lo a parar.
O trabalho começou com a busca por uma ideia de detecção do bot em um quadro e seu reconhecimento como infrator. A equipe sugeriu equipar cada bot na cidade com um marcador único na parte traseira - assim como os veículos reais têm números de registro. Para isso, foram escolhidos marcadores ArUco. Eles já haviam sido utilizados em Duckietown, pois são fáceis de trabalhar e permitem determinar a orientação do marcador no espaço e a distância até ele.
Em seguida, foi necessário garantir que o robô de patrulha se movesse estritamente pelo perímetro externo sem parar nos cruzamentos. Por padrão, o Duckiebot se movimenta na faixa e para na linha de parada. Em seguida, com a ajuda de sinais de trânsito, ele determina a configuração do cruzamento e decide a direção a seguir. Cada um dos passos descritos é gerenciado por um dos estados da máquina de estados do robô. Para eliminar as paradas nos cruzamentos, a equipe modificou a máquina de estados para que, ao se aproximar da linha de parada, o robô passasse imediatamente para o estado de atravessar o cruzamento em linha reta.
O próximo passo foi resolver a questão da parada do robô infrator. A equipe supôs que o robô de patrulha poderia acessar cada um dos robôs da cidade via SSH, ou seja, teria algumas informações sobre os dados de autenticação e qual ID cada robô possui. Assim, após a detecção de um infrator, o robô de patrulha começou a se conectar via SSH ao robô infrator e a desligar seu sistema.
Após a confirmação de que o comando de desligamento foi executado, o robô de patrulha também parava.
O algoritmo de funcionamento do robô patrulha pode ser representado no seguinte esquema:

Trabalho em projetos
O trabalho foi organizado em um formato semelhante ao Scrum: todas as manhãs, os alunos planejavam as tarefas do dia e, à noite, relatavam o trabalho realizado.
Nos primeiros e últimos dias, os alunos prepararam apresentações descrevendo a tarefa proposta e as formas de solucioná-la. Para ajudar os alunos a seguir os planos, docentes da Rússia e da América estavam sempre presentes nas salas onde o trabalho nos projetos acontecia, prontos para responder às perguntas. A comunicação ocorreu predominantemente em inglês.
Resultados e sua apresentação
O trabalho nos projetos durou uma semana, ao final da 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 e o que gostaram ou não gostaram. Depois disso, cada equipe apresentou seu projeto. Todas as equipes cumpriram as tarefas propostas.
A equipe responsável pela calibração de cores concluiu o projeto mais rápido que as outras, permitindo que eles também preparassem a documentação para seu programa. Já a equipe que trabalhava no gráfico de estradas se esforçou até o último dia antes da demonstração do projeto para aprimorar e corrigir seus algoritmos.

Conclusão
Após a conclusão da escola, pedimos aos alunos que avaliassem as atividades realizadas e respondessem a perguntas sobre o quanto a escola atendeu às suas expectativas, quais habilidades adquiriram, etc. Todos os alunos destacaram 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 realizados. E aqui se formaram duas grupos de avaliações: para alguns, os cursos não representaram grandes dificuldades, enquanto outros os avaliaram como extremamente difíceis.
Isso significa que a escola encontrou a posição correta, permanecendo acessível para iniciantes em suas respectivas áreas, mas também fornecendo materiais para revisão e consolidação para alunos mais experientes. É importante notar que o curso de programação (Python) foi praticamente unanimemente considerado como não difícil, mas útil. O curso considerado mais desafiador, na visão dos alunos, foi o de 'Arquitetura de Computadores'.
Quando os alunos foram questionados sobre os pontos fracos e fortes da escola, muitos responderam que gostaram do estilo de ensino escolhido, em que os professores ofereciam ajuda rapidamente e de forma individual e respondiam às perguntas que surgiam.
Os alunos ainda notaram que gostaram de trabalhar em um regime de planejamento diário de suas tarefas e de estabelecer prazos por conta própria. Como desvantagem, os alunos mencionaram a falta de conhecimentos fornecidos que eram necessários ao trabalhar com o bot: ao conectar, entender os fundamentos e princípios de seu funcionamento.
Praticamente todos os alunos destacaram que a escola superou suas expectativas, o que indica que a organização da escola seguiu o caminho certo. Portanto, é importante manter as diretrizes gerais ao organizar a próxima escola, levando em consideração e, se possível, eliminando as deficiências que foram apontadas por alunos e professores, talvez alterando a lista de cursos ou o tempo de ensino deles.
Autores do artigo: equipe em
P.S. Nosso blog corporativo tem um novo nome. Agora ele será dedicado aos projetos educacionais da empresa JetBrains.
Fonte: habr.com
