====== Grupo 1 - T.E.D.E ======
Sobre o Tede:\\
"O mito, o gênio, o papa novinhas, o pedreiro." - BBC News\\
"Sabendo que era impossível, Tede foi lá e fez..." - The New York Times\\
"Até Chuck Norris chora ao ouvir seu nome..." - El Mundo\\
Tede tirando onda:\\
{{:cursos:introrobotica:2014-1:grupo01:tede_logo.jpg?300|}}
Uma fã tirando fotos para o Tede:\\
{{:cursos:introrobotica:2014-1:grupo01:1422614_10152401095164122_5558430836162289844_n.jpg|}}
\\
===== Integrantes =====
**T**iago Ruas - Computação.\\
**E**lias Soares - Computação.\\
**D**avid Henrique - Automação.\\
**E**ugênio Resende - MatComp.\\
==== Descrição ====
* O trabalho consiste em montar um robô com a Handyboard e kit lego que utilize no máximo 2 motores e que faça um caminho pré-determinado desenhando sempre dentro dos limites permitidos.
* O robô é da classificação RP com a seguinte geometria e workspace:
{{:cursos:introrobotica:2014-1:grupo01:rp.jpg?600|}}
* **Decisões de implementação em Interactive C:**
* A mais importante decisão foi a de dividir processos para cada motor, facilitando o entendimento individual.
* Além disso, foi percebido um padrão de repetição de ligar motor, esperar, desligar e esperar um tempo de sincronia para o próximo caminho, logo essa tarefa foi resumida em uma função //void OnSleepOffSync(int m, int power,float time,float sync)//.
* **Código Fonte :** {{:cursos:introrobotica:2014-1:grupo01:tede1-codigofonte.zip|}}
==== Imagens ====
* **Modularização: Braço, Base, Corpo**
{{:cursos:introrobotica:2014-1:grupo01:modulos.jpg?600}}
* **Menu** - Controlado pelo Knob
* M0 e M1 finos significa dar uma potência de + ou - 20 para o motor de acordo com o botão pressionado. Serve para testes manuais ou posicionar o robô em um local desejado.
{{:cursos:introrobotica:2014-1:grupo01:menu.jpg?600|}}
* **Detalhe da Garra:**
* Dois pregadores para acomodar diferentes canetas para testes
{{:cursos:introrobotica:2014-1:grupo01:garra.jpg?600|}}
* **Detalhes de Reduções**
* **Base:** 40:1 (Worm) * 1:1 * 40:8 = 40:1 * 5:1 = **200:1**
* **Corpo:** 24:8 * 24:8 = 3:1 * 3:1 = **9:1**
{{:cursos:introrobotica:2014-1:grupo01:sam_3934-.jpg?600|}}
* **Robô montado:**
{{:cursos:introrobotica:2014-1:grupo01:robo.jpg?600|}}
* **Resultado de Testes:**
{{:cursos:introrobotica:2014-1:grupo01:testes.jpg?600|}}
==== Videos ====
==== Desafios ====
* O controle dos motores é baseado apenas nas reduções feitas por engrenagens, nível de potência dado ao motor e tempo de funcionamento, o que dificulta os testes, que acabam sendo de aproximações por tentativa e erro.
* A autonomia da bateria é um fator crucial, pois como o controle dos motores é baseado em potencia e tempo, se a potencia diminui, o cálculo dos tempos já não é o mesmo.
* O balanceamento se torna complicado ao ter um braço móvel, provocando, por exemplo, mais atrito entre o papel e caneta quando o braço está estendido, ou a desconexão entre o papel e a caneta quando está retraído. Tais considerações devem ser levadas em conta para escolher o nível em que a caneta ficará. \\ Para tal, foi convencionado que deve-se retrair ao máximo o braço e escolher uma altura adequada para a caneta poder escrever. Isso acaba causando mais atrito na extensão, mas evita a desconexão na retração.
* Utilizar a versão de 4 páginas A4 e juntá-las para formar uma página A2 pode parecer simples, mas um pequeno desvio entre páginas pode causar o travamento de uma caneta, alterando o resultado.
* A folga entre os vários eixos nas reduções da base podem causar pequenas diferenças de resultados. Para minimizar esse efeito, é feito uma "média" dessa folga ao redor do ponto inicial.
====Versões e Testes Antigos====
* Fotos dos projetos: [[http://flic.kr/s/aHsjSvB6nb]]
* Vídeos dos testes: [[http://www.youtube.com/playlist?list=PL2Y9jEEmr2dKUs3hemZZe-rCVhkrV7ebR]]
----
----
----
===== Trabalho Prático 2 =====
==== Descrição e Decisões de Projeto ====
* **Descrição**:
* Robô terrestre diferencial de 3 rodas, sendo 2 motorizadas independentes e uma esférica não motorizada para dar estabilidade.
* {{:cursos:introrobotica:2014-1:grupo01:tp2_robo.jpg|}}
* **Calibragem**:
* Não era um requisito, mas achamos que a presença da calibragem ajudaria na execuções de testes e adaptações do robô ao terreno, bateria e outras mudanças, tirando assim a necessidade de recompilar toda vez que tivéssemos que mudar a potência e consequentemente os tempos relativos a um giro de 90 graus ou de andar 30 cm por exemplo.
* É acessada através de um item de menu, em que você escolhe a potência desejada, então por 3 segundos ele anda para frente, e te pede para retornar através do knob quantos cm ele andou, e depois o mesmo acontece em relação ao ângulo, fazendo um giro de duração de 3 segundos, e te pedindo para retornar através do knob quantos graus ele girou.
* Os dados coletados alimentam variáveis persistentes que são utilizadas para fazer relações de equivalência para funções como anda(x) e gira(y), sendo x o valor em cm, e y o valor em graus.
* **Avaliação Experimental**:
* Para a avaliação experimental, foi realizado uma calibragem para uma das potências disponíveis (20,40,60,80 e 100) e logo após essa calibragem, foram realizados 5 testes de translação( objetivo de desenhar uma linha de 20cm) e 5 testes de rotação( objetivo de rotacionar 90º).
* Os testes foram feitos em uma única cartolina (clique para abrir a imagem em um tamanho maior):{{:cursos:introrobotica:2014-1:grupo01:tp2_testes.jpg?600|}}
* Resultados (clique para abrir a imagem em um tamanho maior) :{{:cursos:introrobotica:2014-1:grupo01:tp2_medicoes.jpg?600|}}
* **Multitarefa**:
* __Leds:__ Foi utilizado os pinos SPI como recomendado no manual da Handyboard.Foi utilizado apenas comandos poke no endereço referente aos pinos SPI, e valores decritos na imagem são valores que acendem apenas 1 led de cada vez. A conexão foi feita da seguinte maneira descrita na imagem:(foi utilizado um cabo USB(4 fios)){{:cursos:introrobotica:2014-1:grupo01:tp2_led_.jpg|}}
* Não tivemos acesso ao LED azul, e utilizamos um branco em seu lugar.
* Os duração de cada acendimento foi programada para ser de 1 segundo, e durante a tarefa delimitada por 20 segundos de atividade é possível ver 20 acendimentos =)
* __Música:__ Lembra daqueles antigos compositores de ringtone em texto da Nokia? Eles utilizam a linguagem RTTTL (Ring Tone Text Transfer Language) e vários toques podem ser encontrados na internet. Como a linguagem é simples, apenas pesquisando como ela funciona foi possível criar um pequeno tradutor em C que lê o formato RTTTL e o traduz para o esquema tone(f,d) e sleep(d) que precisamos: (Utilizamos Voodoo Child do Jimi Hendrix){{:cursos:introrobotica:2014-1:grupo01:tp2_conversor.jpg?650|}}
* __Movimento:__ Para o movimento, apenas mandamos o robo girar de um lado a outro, simulando uma dança =)
* __Importante:__ Ao matar os processos após 20 segundos, um tom poderia continuar ativo, um led acesso, ou o motor continuar ativo, e portanto o tratamento de desligar corretamente algum resíduo é realizado.
*Código Fonte:{{:cursos:introrobotica:2014-1:grupo01:tede2-codigofonte.zip|}}
==== Imagens ====
* Vista detalhada superior: {{:cursos:introrobotica:2014-1:grupo01:tp2_detalhe_cima.jpg?600|}}
* Vista detalhada inferior:{{:cursos:introrobotica:2014-1:grupo01:tp2_detalhe_baixo.jpg?600|}}
* Mudanças (Já que o professor recomendou usar apenas os legos, o segurador foi atualizado para uma versão em que a gravidade nos ajuda) =) {{:cursos:introrobotica:2014-1:grupo01:tp2_mudanca_segurador.jpg?600|}}
* LEDs no lego, soldas e proteção com fita isolante:{{:cursos:introrobotica:2014-1:grupo01:tp2_solda_protecao.jpg?600|}}
* T.E.D.E 2 montado sem a Handyboard: {{:cursos:introrobotica:2014-1:grupo01:tp2_detalhe1.jpg?600|}}
* T.E.D.E 2 montado com a Handyboard e LEDs (Visto de cima):{{:cursos:introrobotica:2014-1:grupo01:tp2_topo.jpg?600|}}
* Esquema do Menu:
* {{:cursos:introrobotica:2014-1:grupo01:tp2_menu.jpg|}}
==== Vídeos ====
* TEDE 2 rebocado para não se mover, fazendo a opção Multitarefa por 20 segundos: acionando seus motores, piscando seus LEDs e tocando Jimi Hendrix.
*Aqui o robô foi calibrado na potência 60 de forma correta em relação ao ângulo, mas propositalmente errada em relação a distância, fazendo que o tempo de uma reta seja correspondente a um tamanho muito menor que os 30cm esperados.
*Ótimos resultados em pequena escala, mas quando calibrado de forma certa em relação a distância, um desvio para a esquerda quando andando em linha reta começou a atrapalhar os resultados, além do fato de que um pequeno erro angular no giro tem maior impacto quanto maior for a distância percorrida{{:cursos:introrobotica:2014-1:grupo01:tp2_problema.jpg?600|}}
***Melhorias:** Foi feito um submenu de calibragem responsavel pelo alinhamento, compensando as diferenças entre motores, o resultado já foi bem melhor.{{:cursos:introrobotica:2014-1:grupo01:tp2_melhoria.jpg?600|}}
----
----
----
===== Trabalho Prático 3 =====
==== Descrição e Decisões de Projeto ====
* O objetivo deste trabalho foi familiarizar a utilização de sensores para a realização de tarefas específicas, sendo elas:
* Identificar uma cor a partir do uso de 1 LDR e LEDs RGB
* Seguir uma linha utilizando apenas 1 sensor óptico reflexivo.
* **Sensores**:
* Foi utilizado um sensor óptico-reflexivo (TCRT5000) de acordo com a seguinte montagem:{{:cursos:introrobotica:2014-1:grupo01:tp3_optico-reflexivo.jpg?600|}}
* E uma combinação de um LED RGB de 4 pinos, com um LDR 7mm:{{:cursos:introrobotica:2014-1:grupo01:tp3_rgb-ldr.jpg?600|}}
* **Caracterização do sensor**:
*Como foram feitas as medições:
*{{:cursos:introrobotica:2014-1:grupo01:tp3_sensormedicoes.jpg?600|}}
* Para a coleta de dados, foi utilizado o sistema de collect_data e dump_data, e foi utilizado um emulador de terminal serial RS232, em que foi possível salvar toda a coleta em um arquivo de texto.(Nesse caso a utilização de carriage return se tornou desnecessária, uma vez que apenas o line feed provia uma formatação ao texto simples de se transferir a uma planilha)
* O sensor TCRT5000 montado no circuito mostrado anteriormente se mostrou bastante sólido, e não apresentou variações de sinal (ruídos) nas situações estacionárias. Infelizmente esse aspecto acaba com a intenção de detectar os ruídos nessa caracterização de sensor, mas mesmo assim foi realizado os experimentos(em 5 segundos, 100 ou 1000 medições continuavam a mostrar a consistência do sensor).
* {{:cursos:introrobotica:2014-1:grupo01:tp3_grafico1.png?600|}}
* Gráfico mostra a consistência do sensor quando imóvel e próximo ao bloco. Não existiram variações ( O sinal ficou estável em 138)
* {{:cursos:introrobotica:2014-1:grupo01:tp3_grafico2.png?600|}}
* Gráfico que ainda mostra a consistência do sensor quando imóvel e próximo ao bloco, mas com motores acionados. Uma pequena variação ocorreu em uma das medições (sinal 139).
* Apesar da consistência do sensor, essa pequena variação pode ser culpa dos motores acionados, uma vez que a drenagem da bateria pode influenciar na tensão envolvida para avaliar os sinais analógicos(Vsens).
* **Análise Experimental**:
* Foram realizadas 4 coletas de dados para cada bloco colorido ( Verde, Vermelho e Azul) referentes às distâncias de 5,10,15 e 20 mm:{{:cursos:introrobotica:2014-1:grupo01:tp3_sinalxdistancia_rgb_.png?600|}}
* De acordo com esses resultados, um sensor óptico reflexivo só será confiável para realizar identificações de cor quanto menor for a distância em que está operando (nesse caso 5mm), uma vez que é possível ver graficamente diferenças mais claras entre as respostas de cores diferentes.
* **Identificação de cor**:
* Como visto no item sensores, foi utilizado um LED RGB de 4 pinos e um LDR 7mm para a montagem do sensor.
* Veja vídeo da interface de identificação em funcionamento na seção de vídeos.
* A sua qualidade para identificar cores em relação ao sensor óptico reflexivo é bastante distinta, tendo muito mais qualidade tanto em relação a diferenciação de cores como em distância do bloco em relação ao sensor.
* Tal qualidade está associada ao grande brilho dos LEDs, associado com os shields que evitam a dispersão e também pelo fato de estar testando cada faixa de cor separadamente, ao invés de só uma faixa (infravermelho) como acontece no óptico reflexivo
* **Modificações:**
* O vídeo testa apenas verde, vermelho e azul, mas no laboratório existe um bloco amarelo. Ao se avaliar as características de resposta do amarelo, foi incluído sua opção de resposta à detecção de cor.
* **Line-Following**:
* Basicamente foi utilizado um simples algoritmo de sempre virar para um lado quando se está em um estado (dentro da linha), e de virar para o outro lado no outro estado (fora da linha)
* Foi utilizado o conceito de hysteresis para determinar os limiares de threshold superior e inferior.
* **Modificações:**
* A posição do sensor foi modificada de forma a ficar o mais longe possível do eixo, facilitando a identificação do estado por movimentos menores.
* A resposta do sensor era tão consistente que a obtenção dos limiares se tornava muito justa, e uma folga de 10% ajudou a melhorar o comportamento geral do algoritmo
* **Estrutura do Menu**:
* {{:cursos:introrobotica:2014-1:grupo01:tp3_menu.jpg?600|}}
* **Código Fonte**:{{:cursos:introrobotica:2014-1:grupo01:tede3-codigofonte.zip|}}
==== Imagens ====
* Vista superior:
* {{:cursos:introrobotica:2014-1:grupo01:tp3_superior.jpg?600|}}
* Vista superior detalhada ( As correntes foram retiradas, uma vez que poderiam ser prejudiciais ao funcionamento correto do robô):
* {{:cursos:introrobotica:2014-1:grupo01:tp3_superior2.jpg?600|}}
* Vista inferior:
* {{:cursos:introrobotica:2014-1:grupo01:tp3_inferior.jpg?600|}}
* Posição atualizada dos sensores:
* {{:cursos:introrobotica:2014-1:grupo01:tp3_posicao.jpg?600|}}
==== Vídeos ====
***Identificação de Cor:**
*
***Atualização:** Adição da cor amarela
*
***Line Following:**
*Primeiro teste de line_following utilizando calibração por hysteresis (cálculo ainda precisa de melhoras, pois é baseado em min e max de medições, que pelos gráficos se mostraram consistentes).
*
***Atualização:** Melhoria no cálculo, dando folga as medições que eram bastantes sólidas, ajudando a funcionar até em terrenos irregulares
*
----
----
----
===== Trabalho Prático 4 =====
==== Descrição e Decisões de Projeto ====
* O objetivo deste trabalho foi familiarizar a utilização de técnicas de controle, utilizando também odometria básica através de shaft-encoding.
* **Sensores**:
* Foram utilizados:
* 2 sensores óptico-reflexivo (TCRT5000), sendo um para a tarefa de wall-folowing e outro para identificar a proximidade um objeto a frente do robô.
* Uma combinação de um LED RGB de 4 pinos, com um LDR 7mm, para a identificação de cor
* 1 LDR diferencial(composto de 2 LDR comuns) com filtros polarizados, sendo um polarizado verticalmente e outro horizontalmente, para realizar a tarefa de localização.
* 2 sensores break beam PHCT 203, utilizados juntamente de engrenagens finas com 8 furos, confeccionadas a partir de um desenho recortado em tampas de plástico de sorvete, e pintadas para melhorar a quebra do sinal emitido.
* **Localização**:
* Basicamente, o robô gira 360º coletando dados do maior valor absoluto da diferença do valor do sensor e o valor de centro (valor relativo a mesma quantidade de luz em ambos os LDRs, em prática ficou em torno de 126).
* Devido a polarização, em uma base, valores menores que o centro indicam area de interesse, e em outra, valores maiores que o centro. Por isso foi utilizado a diferença absoluta entre o valor do sensor e o centro, para ter o mesmo sistema de obtenção de máximo em ambos os casos.
* Com o valor máximo atribuido, o robô gira até encontrar este mesmo ponto, estando assim direcionado para o campo e alinhado com a luz de base(uma vez que o LDR diferencial encontra-se apontado para trás).
* **Simple Feedback Control**:
* Primeiramente foi dada a opção de calibrar, em que se escolhe o lado que o sensor está (direito ou esquerdo), e depois os limiares interno e externo, que caracterizam a utilização do 3-state.
* Com tais informações calibradas, o algoritmo faz:
* Em sua forma normal: se valor do sensor está menor que o externo, faz hard_turn(P1=100, P2=0) para dentro (direita se a parede está à direita por exemplo), se está entre externo e interno, anda reto (P1=100,P2=100), e se está menor que o interno, faz hard_turn para fora(esquerda se a parede está à direita).
* Na sua forma Gentle Turn: O mesmo esquema, mas suas curvas são mais suaves, trabalhando em potencias como P1=100,P2=80. Esse método é mais suave e mais rápido que o normal.
* Foi incluido uma avaliação de distância de objeto, assim o robô segue a parede, mas para antes de bater com tudo em uma outra parede a sua frente.
* **Shaft Encoders**:
* Foram utilizados dois break-beams juntamente de dois círculos confeccionados de plastico fino com uma camada de tinta.
* Foram utilizadas as bibliotecas sencdr1.icb e sencdr0.icb para implementar shaft-encoding
* Através de medidas como o raio da roda e o raio de giro do robô, funções especificas foram feitas para retornar o valor objetivo de cliques utilizado como parâmetro no controlador PD
* O controlador PD foi feito de forma a ter p_gain e d_gain variáveis de forma a tentar compensar por diferenças de giros nas rodas
* **Problema**: Foi feito um controle baseado em distancia, o que facilitou erros de precisão. Foi apontado pelo professor que o controle deveria ser feito com a velocidade sendo objetivo. Esse problema será corrigido para o próximo trabalho.
* **Tomada de decisão** :
* Primeiramente, foi feito um controlador PD para andar em linha reta até o sensor de proximidade acusar que encontrou um objeto a sua frente. Aqui o controlador ajuda a evitar que o bloco seja atropelado, começando a diminuir a velocidade de uma forma suave.
* Logo que um objeto foi detectado, roda-se o algoritmo de detecção de cor.
* Para tal, simplesmente foi reaproveitado o código do trabalho anterior, modificando apenas para que logo depois de identificado, seja chamada uma função de giro ou um beep por exemplo.
* **Estrutura do Menu**:
* {{:cursos:introrobotica:2014-1:grupo01:tp4_menu.jpg?600|}}
* **Código Fonte**:{{:cursos:introrobotica:2014-1:grupo01:tede4_codigofonte.zip|}}
==== Imagens ====
* T.E.D.E 4:
* {{:cursos:introrobotica:2014-1:grupo01:tp4_vista.jpg?600|}}
* Vista Superior:
* {{:cursos:introrobotica:2014-1:grupo01:tp4_superior.jpg?600|}}
* Vista Superior Detalhada:
* {{:cursos:introrobotica:2014-1:grupo01:tp4_superior_det.jpg?600|}}
* Vista Inferior:
* {{:cursos:introrobotica:2014-1:grupo01:tp4_inferior.jpg?600|}}
* Shaft Encoder:
* {{:cursos:introrobotica:2014-1:grupo01:tp4_shaft.jpg?600|}}
* LDR Diferencial:
* {{:cursos:introrobotica:2014-1:grupo01:tp4_diff.jpg?600|}}
==== Vídeos ====
***Localização:**
*
***Wall Following:**
*
***Shaft Encoding:**
*
***Tomada de decisão:**
* Gravação no laboratório. Bateria fraca influenciou no último passo, detectando um bloco mesmo que não houvesse nenhum ainda.
*
* Gravação em casa. Mostrando um melhor funcionamento após carregar a bateria.
*
----
----
----
===== Competição =====
==== Descrição e Decisões de Projeto ====
* O objetivo deste trabalho foi juntar todo o conhecimento coletado durante os outros trabalhos e aplicá-los em uma situação de resgate.
* **Sensores**:
* Foram utilizados:
* 2 sensores óptico-reflexivo (TCRT5000), sendo um para a tarefa de line-following, outro para identificar a proximidade um objeto a frente da garra.
* Uma combinação de um LED RGB de 4 pinos, com um LDR 7mm, para a identificação de cor
* 1 LDR diferencial(composto de 2 LDR comuns) com filtros polarizados, sendo um polarizado verticalmente e outro horizontalmente, para realizar a tarefa de localização.
* 2 sensores break beam PHCT 203, utilizados juntamente de engrenagens finas com 8 furos, confeccionadas a partir de um desenho recortado em tampas de plástico de sorvete, e pintadas para melhorar a quebra do sinal emitido.
* 1 sensor de toque para identificar colisão com parede.
* 1 LDR para identificar a ativação da luz de partida
* **Controle**:
* Foi utilizado controles proporcionais e proporcionais derivativos para controlar a localização diferencial e os movimentos do robô.
* **Estrategias**:
* Sobrevivente: Pega o bloco azul e volta para a base colocando o bloco em cima da plataforma.
* Sobrevivente Delay: Pega o bloco azul e volta para a base e espera, colocando o bloco em cima da plataforma apenas 10 segundos para o fim da partida.
* Sobrevivente Mais (Esquerda ou Direita): Realiza a tarefa sobrevivente, e volta ao campo para procurar mais um bloco para trazer a base, ou um preto para colocar na base inimiga.
* Bloco (Esquerda ou Direita): Apenas procura um bloco para trazer a base, ou um preto para colocar na base inimiga.
* **A COMPETIÇÃO**:
* Infelizmente durante toda a primeira etapa da competição tivemos problemas com o que primeiramente achamos que era problema de bateria da handyboard, mas que foi descoberto ser um curto na fiação de um dos motores que estava impossibilitando o funcionamento da placa.
* Tal problema nos rendeu vários pontos negativos por não sair de dentro da base.
* **T.E.D.E muda o nome para PHOENIX**:
* Após muita correria no intervalo, e com a ajuda da integrante Letícia do grupo Letroy que nos emprestou um motor novo guardado no laboratóro de robótica, T.E.D.E volta a funcionar, com alguns probleminhas decorrentes a remontagem, mas consegue pontuar e diminuir a grande pontuação negativa.
* Na sua última volta, consegue realizar a estratégia sobrevivente, e por pouco não deixa o bloco na plataforma, se não fosse pelo encontro desagradável com o robô NI em sua base. (Mas manteve o bloco na garra).
* **Resumo**: Foi longe do desejado, e T.E.D.E com todo o seu potencial para realizar as maiores pontuações de plataforma ficou em penúltimo lugar com -2 pontos.
* **Estrutura do Menu**:
* {{:cursos:introrobotica:2014-1:grupo01:tp5_menu.jpg?|}}
* **Código Fonte**: {{:cursos:introrobotica:2014-1:grupo01:tede5_codigofonte.zip|}}
==== Imagens ====
* T.E.D.E 5:
* {{:cursos:introrobotica:2014-1:grupo01:tp5_1.jpg?600|}}
* Elevador:
* {{:cursos:introrobotica:2014-1:grupo01:tp5_2.jpg?600|}}
* Frente:
* {{:cursos:introrobotica:2014-1:grupo01:tp5_3.jpg?600|}}
* Trás:
* {{:cursos:introrobotica:2014-1:grupo01:tp5_4.jpg?600|}}
==== Vídeos ====
***Sobrevivente:**
*
----
----
----