====== 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:** * ---- ---- ----