Grupo 06 - Vomisa

ROBÔ DDC

Membros

  • André de Castro Hermuche - 2009017832
  • Bruno Aguar dos Santos Cazarim - 2009017905
  • Bruno Milagres Mesquita - 2009017930

Trabalhos Práticos

Esta seção contém os trabalhos práticos designados, bem como o desenvolvimento e resultados dos mesmos.

TP1

O Trabalho Prático 1 tem como objetivo principal familiarizar os alunos com o Kit Lego e o software Interactive C. As tarefas deste TP são:

  1. Montar um robô similar ao “HandyBug”, com um marcador para indicar sua trajetória.
  2. Medir erros de translação e rotação dos motores utilizados.
  3. Na apresentação, fazer o robô realizar: uma trajetória quadrada de 30 cm x 30 cm por 3 vezes consecutivas e uma trajetória circular de raio 30 cm por 3 vezes consecutiva.

Montagem do robô

Neste estágio, definimos algumas características como a base para a construção do robô. A primeira delas é que os 2 motores serão conectados às engrenagens por meio de uma rosca sem fim. A segunda é o posicionamento dos itens externos ao robô. A caneta ficará posicionada o mais próximo possível do centro do eixo do robô, em uma cavidade. Já a Handy Board ficará na parte superior do robô, apoiada sobre uma estrutura firme. Para a terceira roda, a biruta, foi escolhido a esfera de um desodorante roll on.

Medições e calibração

Definimos que o parâmetro para regular as funções direcionais do robô, como andar para a frente, seria o tempo. No momento em que fomos iniciar os testes e medições, nos deparamos com um grave problema. Um dos motores disponíveis estava em más condições, muito instável e produzindo pouco torque. Tentamos diversas soluções, inclusive alterando a estrutura inicial do robô, mas nenhuma delas foi eficiente. Dessa forma, não foi possível proceder com as medições pedidas.

Em vista do problema apresentado, também não foi possível calibrar os motores de forma correta e coerente, uma vez que o motor danificado apresentava comportamento aleatório, sem nenhum padrão que pudéssemos usar na calibração.

TP2

O Trabalho Prático 2 tem como objetivo principal introduzir os alunos à utilização de sensores, incluindo montagem e processamento dos sinais gerados. As tarefas deste TP são:

  1. Caracterizar o sensor.
  2. Validar o resultado.
  3. Verificar a influência da superfície e cor do objeto.
  4. Interface de sensores.
  5. Proceder com o sensoriamento avançado.

Caracterização do sensor

Seguimos os passos listados no enunciado deste TP. Os resultados obtidos foram:

- Curva de dados, sensor ótico:

Sem iluminação ambiente, os dados variam muito pouco, praticamente só entre dois pontos, como pode ser observado acima. A iluminação ambiente causa uma variação maior na leitura do sensor, uma perturbação.

- Curva Sinal x Distância:

A curva acima é uma exponencial, que decai com o aumento da distância. Como observado acima, em duas regiões, nós aproximamos uma reta que representa bem as mesmas.

- Curva de dados, com robô em movimento:

Com o motor funcionando, surgem ruídos eletromagnéticos. Esses ruídos implicam em rápidas variações, observadas na curva acima.

Validação

No Matlab, calculamos um vetor de erros lineares para cada reta ajustada. O vetor de erro linear 1 contém desvios lineares, um para cada distância medida, até 22mm aproximadamente. O vetor de erro linear 2 é idêntico, só que para distâncias acima de 22mm aproximadamente. Os vetores são:

  • Erro linear 1: 0.1068 / 0.0701 / 0.0275
  • Erro linear 2: 0.0662 / 0.1242 / 0.1188

Influência da superfície e cor do objeto

Para determinar qual a melhor distância para distinguir blocos de diferentes cores, pegamos a distância que gerou o menor erro e a utilizamos como a melhor distancia para diferenciar as cores dos objetos. Essa distância foi:

  • Distância D = 15 milímetros

O gráfico abaixo mostra os valores de tensão de leitura do sensor para cada cor medida. Todos os valores são para a distância de 15mm.

  • 1 = vermelho espuma
  • 2 = vermelho isopor
  • 3 = verde espuma
  • 4 = verde isopor
  • 5 = amarelo
  • 6 = azul isopor
  • 7 = azul espuma
  • 8 = preto papel
  • 9 = preto isopor
  • 10 = marrom

TP 3

O Trabalho Prático 3 tem como objetivo trabalhar com sensoriamento avançado, tanto na construção como na utilização de sensores. As tarefas desse TP são:

  1. Construção e utilização de sensores ópticos ativos, sensores diferenciais e shatf encoders.
  2. Mostrar que o robô consegue se localizar
  3. Mostrar que o robô consegue seguir uma linha, identificar blocos e tomar ações baseadas na cor, simultaneamente
  4. Mostrar que o robô consegue seguir em linha reta por meio de um controlador PD

Localização

Para garantir que o robô consiga se localizar de acordo com o pedido no enunciado deste TP, montamos um sensor de luz diferencial, com dois LDRs e duas superfícies polarizadas diferentes entre si.

Implementação

O algoritmo criado funciona da seguinte maneira: primeiramente, escolhe-se por meio de um menu para qual luz o robô deve seguir. Em seguida, ele dá um giro em 360 graus, coletando dados através do sensor diferencial. Feito isso, ele verifica qual foi a menor (ou maior) medição e gira novamente até se alinhar a onde essa medida foi encontrada, com uma margem de erro de algumas unidades, já que é muito difícil encontrar o mesmo valor medido primeiramente. Por fim, ele se movimenta em direção à luz.

De acordo com os testes, verificamos que faixas de valores em torno de 90 correspondem à uma das luzes polarizadas e faixas de valores em torno de 180 correspondem à outra. Para valores em torno de 120, significa nenhuma das duas luzes.

Identificação de blocos e tomada de decisões

Para esta tarefa, reutilizamos o que já estava pronto do TP2, no que diz respeito a sensores, métodos de identificação de cores e como seguir a linha preta. A novidade para esta tarefa foi a criação de um menu onde pode-se escolher o que o robô vai fazer quando encontrar determinados blocos, e a maneira de se escrever o código para aliar todas essas instruções.

Implementação

Conforme dito anteriormente, reutilizamos boa parte dos códigos já escritos para o TP2. Criamos um menu onde o usuário pode escolher as ações a serem tomadas pelo robô por meio do botão “Knob” da Handyboard. Ainda neste menu, deve ser feita a calibração das cores a serem identificadas, posicionando-as sequencialmente em frente ao LED.

A grande diferença desta tarefa foi a necessidade de se implementar o algoritmo de maneira concorrente (multi-tasking). Isso gerou algumas dúvidas e dificuldades na hora de criar o código. Cada “ação” do robô foi definida como um processo, os quais deveriam executar concorrentemente regulados por um algoritmo de prioridades. Utilizamos a função “Prioritize.c” para estem fim.

Após a calibração, o robô inicia seu movimento seguindo linhas pretas (prioridade 1). Se o mesmo encontrar algum bloco a sua frente, ele pára e identifica a cor do mesmo (prioridade 2). Com base na cor identificada, o robô realiza a ação pré-definida no menu.

Seguir em linha reta

Construímos sensores do tipo shaft encoders para esta tarefa. Utilizamos encoders de mouse, aliado a sensores do tipo break-beam, um para cada motor. Com esse conjunto, conseguimos obter uma boa resolução na medição.

Implementação

Para esta tarefa, a ideia inicial era desenvolver um controlador PD com base na resposta dos shaft encoders para garantir a direção do robô. Contudo, durante os testes, verificamos que apenas um controlador proporcional foi suficiente para atingir o objetivo. Acreditamos que isso seja resultado da boa resolução obtida com os sensores.

Prévia

Para a prévia da competição, a principal tarefa era reunir todo o conhecimento e soluções já desenvolvidas em uma só. Entretanto, algumas funções novas devem ser desenvolvidas, para adequar o robô às regras da competição.

As novas funções incluem iniciar sua missão após o piscar da lâmpada, capturar um bloco, subir e descer uma rampa e encerrar suas atividades após 60 segundos. A última versão do robô se encontra abaixo.

Novas funções

Neste tópico serão descritas brevemente como foram implementadas as novas funções desenvolvidas para a competição.

Inicialização da missão do robô

De acordo com as regras da competição, o robô deve iniciar suas atividades após o piscar de uma lâmpada. Para tal, foi criado um processo que deixa o robô em modo de espera, aguardando o piscar da lâmpada. Esse evento será capturado pelos sensores infravermelhos situados embaixo do robô. Quando houver uma mudança na medida destes sensores, o robô entende que deve começar a atuar. Para que isso funcione, este processo tem a mais alta prioridade.

Subir e descer rampa

O robô foi construído de maneira a ser capaz de subir e descer uma rampa, no que diz respeito à sua altura. A única preocupação era em relação aos motores, saber se eles forneceriam torque suficiente para realizar esta tarefa. Após os testes, verificamos que o torque gerado é sim suficiente para que o robô consiga subir e descer a rampa.

Encerrar suas atividades após 60s

Esta também é uma das regras da competição, o robô deve parar tudo o que estiver fazendo e ficar imóvel após 60 segundos (tempo das partidas). Para implementar esta tarefa, também foi criado um processo específico, no qual é disparado um timer que conta até 60 segundos. Após o timeout, este processo ganha a CPU e suspende todas as outras ações do robô, deixando-o parado. Para funcionar, este processo recebeu a mais alta prioridade.

cursos/introrobotica/2012-2/grupo06/index.txt · Última modificação: 2012/12/15 10:02 por andcahe