Projeto com o robot NXT da LEGO

No passado dia 9 de dezembro, eu e o meu grupo dos laboratórios de Portefólio MEEC tivemos a oportunidade de apresentar o nosso projeto final com o robot NXT da LEGO.

robot1

O objetivo deste projeto consistiu no desenvolvimento de um programa usando a linguagem NXT 2.1. que permitisse que aplicássemos os conhecimentos que foram sendo adquiridos ao longo das várias sessões de laboratório.

Aqui temos a representação geral do algoritmo por nós usado ( a imagem está um pouco desfocada devido à compressão do ficheiro).

robot2

O robot inicia o seu movimento ao longo da fita preta quando o sensor de som deteta um som forte como uma palma ou um estalar de dedos. De seguida percorre a fita preta até o seu sensor ultrassónico detetar um obstáculo. Aí o robot para, emite um som e dá uma volta de 180 graus. O robot ficará parado até detetar novamente o som forte, o que o faz reiniciar o movimento.

Em termos estruturais o programa divide-se em três principais partes: a instrução para o sensor de som, que desencadeia o movimento; a estrutura cíclica com o movimento em si, descrito por um processo de realimentação proporcional; e as últimas instruções, do sensor ultrassónico para interromper o ciclo, os blocos de paragem dos motores e de rotação e o bloco de emissão de som. Estas três estruturas são repetidas ciclicamente (daí o ciclo exterior).

Relativamente à primeira parte, como já referi, esta é constituída por um bloco de controlo que está associado ao sensor de som ligado à porta 2 do robot. De forma a evitar que perturbações sonoras externas afetassem o robot (fazendo-o iniciar o movimento quando não deveria), sensor foi configurado para apenas detetar um som acima do limiar de 66. E portanto o sensor detetará o tal som forte e o programa prosseguirá para as instruções seguintes, de movimento.

A 2ª parte, do movimento, consiste no programa baseado em realimentação proporcional. Novamente, todas os blocos de instruções são executados dentro de um loop. O primeiro bloco indica a percentagem de intensidade luminosa refletida pelo sensor de luz. Em seguida, é inserido um bloco aritmético que armazena uma constante: a percentagem de intensidade luminosa de referência (55%). Os valores das saídas destes dois blocos são ligadas às entradas de um outro bloco aritmético que efetua a subtração do valor de referência pelo valor so sensor. A saída deste bloco (erro) é ligada à entrada B de um outro bloco aritmético para multiplicação deste valor pela constante de amplificação K (definida pela entrada A). Em seguida é inserido outro bloco aritmético que armazena a constante da velocidade de referência (40%). A saída deste bloco é ligada às entradas A de outros dois blocos aritméticos, um de soma e outro de subtração. Às entradas B destes blocos é ligado o erro amplificado. Como é óbvio, o bloco de soma somará os dois valores e o resultado será ligado ao motor B (motor do lado direito) e o bloco de subtração irá subtrair os valores e ligar o resultado ao motor C (motor do lado esquerdo). Cada motor é definido com uma potência de 10% (das velocidades dadas como sinais de entrada) e movimento ilimitado. Testando o programa, verificámos que o movimento do robot é muito mais suave, deslocando-se este ao longo da fita preta sem grandes oscilações, sendo a diferença mais notória nas curvas. Uma limitação ao funcionamento do programa é o facto de o robot se desorientar caso esteja completamente na superfície branca. Em seguida efetuámos várias alterações aos parâmetros do programa para testar a sua influência no comportamento do robot. Verificámos que quer o aumento da constante K, quer o aumento da velocidade de referência, quer o aumento da potência têm o mesmo efeito: a diferença de velocidades dos motores aumenta e o movimento tem mais oscilações, havendo fortes desvios ao percurso, sobretudo nas curvas, entrando completamente na superfície branca (não retomando o percurso).

Por fim a 3ª parte inclui a interrupção do loop, com a deteção do obstáculo por parte dos sensores ultrassónicos e os blocos de instrução para parar os motores, reproduzir o som e rodar 180 graus. Após esta sequência de instruções, a deteção do som forte irá induzir novamente a mesma sequência.

robot3

Em termos de aspetos a melhorar no nosso projeto a velocidade poderia ter sido aumentada, controlando melhor as constantes. No entanto, não estávamos a conseguir manter o movimento coordenado do robot, como já referi. Um outro aspeto refere-se à estrutura do próprio robot. A proximidade entre o sensor ultrassónico e o sensor de som dificultaram por vezes os nossos ensaios, uma vez que ao aproximarmo-nos do sensor de som para produzir o som forte por vezes interrompíamos imediatamente o loop, pois o sensor ultrassónico detetava um obstáculo.

Com este trabalho conseguimos sistematizar as competências adquiridas ao longo das varias aulas de laboratório, conseguindo desenvolver um projeto funcional com o robot NXT da LEGO.

Termino esta página com um vídeo desse mesmo projeto

https://www.youtube.com/watch?v=KDWfICvSM94