===== Membros ===== * **Luis Henrique O. Rios** - 2005041500 - lhrios@gmail.com - Ciência da Computação * **Nayara Maron Costa de Miranda** - 2004017060 - nayaramaron@gmail.com - Engenharia de Controle e Automação * **Rafael Griffo Goes** - 2005041674 - griffo@dcc.ufmg.br - Ciência da Computação * **Rodrigo Moreira López** - 2004017176 - rodrigo.mlopez@hotmail.com - Engenharia de Controle e Automação ===== Trabalho Final: Rôbos de Elite ====== ==== Objetivo ==== O objetivo desse trabalho e todo o ambiente envolvido estão descritos na página da competição: [[cursos:introrobotica:2007-2:competicao|Competicao]]. ==== Desenvolvimento ==== Tentamos aproveitar ao máximo o robô dos trabalhos práticos anteriores da disciplina. No entanto, não foi possível manter toda a estrutura e foi necessário alterá-la com o objetivo de realizar a tarefa com êxito. As principais alterações realizadas foram: diminuição da distância entre a roda esférica e o eixo de rodas comuns o que diminuiu o espaço ocupado provendo, assim, uma área maior para a construção dos manipuladores estático e móvel. O manipulador estático é apenas uma forma de peças fixas, no formato de um "U", que serve para atuar como um trator. O manipulador móvel é um braço com a forma de um "U", posicionado opostamente ao manipulador fixo, de tal forma que quando o braço fecha, o manipulador fixo e o móvel fecham em um "O". Assim, com o manipulador fechado é possível girar sem perder blocos já coletados, além de ser possível pegar blocos que estão mais a frente sem ter que se dirigir até lá. Também é possível manipular os "segredos industriais" com esse manipulador. Optamos por não usar o reconhecimento de cores já que para isso é necessário uma grande precisão do robô, pois uma pequena variação na posição do bloco pode confundir o sensor. Logo, as nossas estratégias se resumem a capturar o máximo de blocos possíveis, considerando a hipótese de que um bloco "inocente" anular 2 blocos criminosos da própria base. Portanto, capturando um mínimo de quatro blocos para garantir sempre uma pontuação positiva. Quando o manipulador estava muito cheio o robô não conseguia tocar os //switchs// da frente na parede. Desse modo, colocamos um terceiro sensor no meio dos dois para que os blocos o acionasse quando houvesse esse problema. === Sensores e atuadores === A atuação do robô é feita através de 3 motores. Dois são usadas para a locomoção (um em cada roda comum) de modo que elas podem girar independentemente. O terceiro motor é usado para atuar no manipulador móvel (no braço do robô). Existe um //shaft encoder// para controlar a rotação de cada motor. O sensor responsável por controlar a rotação do motor que atua o braço é um //break-beam//. Já nos motores das rodas usamos um sensor óptico e um papel em forma de círculo com faixas pretas e brancas. Além disso, usamos sensores de toques para detectar colisões com as paredes. Três //switchs// foram posicionados na frente e dois atrás. Um dos //switchs// da frente fica no meio do robô. Esse //switch// foi posicionado desse modo para evitar um situação onde o robô não encosta os //switchs// da frente porque existem muitos blocos em seu manipulador o que o impede de fazer isso. Além disso, para aumentar a robustez do robô existe um time-out. Se o robô encostar um de seus //switchs//, da frente ou de trás, o outro //switch// do mesmo lado deve ser encostado dentro de um tempo pré-determinado. Se isso não acontecer o controle considera que houve o toque e continua o processamento normalmente. Três sensores LDR foram usados. Um deles na parte de baixo para ler a luz de partida. Os dois outros foram montados em uma espécie de plataforma e são usados para orientar o robô usando a luz polarizada. A montagem realizada retorna um valor muito alto quando o sensor está próximo de uma extremidade do campo (os estudos e medidas realizados mostram que esse valor está próximo de 230) e um valor muito baixo quando o sensor está orientado para a outra extremidade do campo (aproximadamente 20). Para a orientação o robô roda até encontrar o valor esperado para o seu campo (valor esse calibrado antes da partida iniciar). Segue o esquema de montagem usado. {{:cursos:introrobotica:2007-2:grupo7:competicao:montagem_ldrs.png?244x184|LDRs}} O esquema a seguir mostra o posicionamento dos sensores e dos atuadores no robô. {{:cursos:introrobotica:2007-2:grupo7:competicao:esquema.png?300x200|Esquema de sensores e atuadores}} === Problemas encontrados === Durante a construção do robô enfrentamos algumas problemas. Discutiremos os principais nessa secção. O primeiro deles foram os fios dos //shaft-encoders//. Precisávamos usar várias portas analógicas e os fios não deixava que ligássemos os conectores na handyboard. Além disso, os fios estavam muito exposto então colocamos-os para dentro do robô a fim de protege-los de eventuais colisões e reconstruímos os conectores. O segundo problema foi o peso do braço móvel do robô. O motor não era capaz de levantá-lo. Assim, foi necessário aumentar a redução desse atuador a fim de resolver o problema. A luz de partida atrapalha os //shaft-encoders// das rodas. Foi necessário, portanto, incluir algumas peças Lego na montagem para criar uma sombra para "proteger" os sensores. Durante as batidas dos //switchs// nas paredes da mesa alguns deles se soltavam. Usando a unidade Lego e técnicas de travamento resolvemos o problema. Conseguir fazer um robô grande o suficiente que não ultrapassasse o limite de 30 cm imposto. Manter a simetria de cores de modo que o robô tivesse de um lado apenas peças azuis e do outro apenas peças vermelhas foi uma tarefa difícil. O nosso "kit Lego" não possui muitas peças azuis. Desse modo, tivemos de montar o atuador do manipulador móvel (que precisa de várias peças) do lado vermelho já que as peças vermelhas eram mais abundantes. === Estratégias === Antes de explicar as estratégias explicaremos como elas foram programadas. Existe um método muito importante chamado "Andar_reto". Esse método aceita a distância em centímetros como parâmetro (se negativa o robô vai andar para trás) e um número que indica se o robô deve parar quando um obstáculo bater nos seus //switchs//. Além dessa função, existem outras também importantes que foram usadas na programação das estratégias "Levanta_braco" , "Abaixa_braco" , "Girar_direita" e "Girar_esquerda". Para cada estratégia criada apresentamos um esquema que mostra a trajetória do robô para ela. Alguns detalhes são omitidos para aumentar a clareza da figura. Os movimentos exatos podem ser vistos no módulo "estrategias.ic". * "**Derrubar segredo**": usada para defender de robôs que pegam o segredo. Derruba o segredo colocando-o em um canto para tornar difícil a sua captura. Pega alguns blocos da base e no final para o robô na frente do segredo. {{:cursos:introrobotica:2007-2:grupo7:competicao:estrategias:trajeto_derrubar_segredo.jpg?244x184|Estratégia 1}} * "**Coletar segredo**": entra na base do inimigo e rouba o segredo dele. O segredo é então colocado de volta na nossa base. {{:cursos:introrobotica:2007-2:grupo7:competicao:estrategias:trajeto_coletar_segredo.jpg?244x184|Estratégia 2}} * "**Coletar todos base**": coleta todos os blocos da base através dos movimentos mostrados a seguir. {{:cursos:introrobotica:2007-2:grupo7:competicao:estrategias:trajeto_coletar_todos_base.jpg?244x184|Estratégia 3}} * "**Coletar base**": coleta alguns blocos da base com o movimento mostrado a seguir. {{:cursos:introrobotica:2007-2:grupo7:competicao:estrategias:trajeto_coletar_base.jpg?244x184|Estratégia 4}} * "**Prévia**": foi a estrátegia apresentada no dia da prévia. É capaz de coletar 5 blocos da base usando o seguinte movimento. {{:cursos:introrobotica:2007-2:grupo7:competicao:estrategias:trajeto_previa.jpg?244x184|Estratégia 5}} === Código fonte === O código fonte foi dividido em vários arquivos com o objetivo de facilitar sua manutenção e melhorar a legibilidade. Assim, os cinco arquivos que o compõe são: * {{:cursos:introrobotica:2007-2:grupo7:competicao:codigo.lis.txt|codigo.lis}}: contém apenas o nome dos quatro arquivos abaixo e é exigido pelo IC para projetos com mais de um arquivo. * {{:cursos:introrobotica:2007-2:grupo7:competicao:controle.ic.txt|controle.ic}}: contém todas as funções relacionadas com a locomoção e funções que interpretam os valores obtidos através dos sensores; * {{:cursos:introrobotica:2007-2:grupo7:competicao:estrategias.ic.txt|estrategias.ic}} : cotém todas as estratégias do robô. Ao todo temos 5 estratégias. As estratégias são programadas através das funções definidas no módulo "estrategias.ic"; * {{:cursos:introrobotica:2007-2:grupo7:competicao:menu.ic.txt|menu.ic}} : contém as funções relacionadas com o menu e a entrada de dados; * {{:cursos:introrobotica:2007-2:grupo7:competicao:main.ic.txt|main.ic}} : contém apenas o método "main". Invoca funções do módulo "menu.ic". ==== Fotos ==== ^ Versão Final do Robô: ^^^ |{{:cursos:introrobotica:2007-2:grupo7:competicao:P1010048.JPG?244x184|Foto 1}}|{{:cursos:introrobotica:2007-2:grupo7:competicao:P1010053.JPG?244x184|Foto 2}}|{{:cursos:introrobotica:2007-2:grupo7:competicao:P1010054.JPG?244x184|Foto 3}}| |{{:cursos:introrobotica:2007-2:grupo7:competicao:P1010055.JPG?244x184|Foto 4}}|{{:cursos:introrobotica:2007-2:grupo7:competicao:P1010058.JPG?244x184|Foto 5}}|{{:cursos:introrobotica:2007-2:grupo7:competicao:P1010060.JPG?244x184|Foto 6}}| |{{:cursos:introrobotica:2007-2:grupo7:competicao:P1010065.JPG?244x184|Foto 7}}|{{:cursos:introrobotica:2007-2:grupo7:competicao:P1010069.JPG?500x184|Foto 8}}|| ==== Apresentação ==== Esse é o **[[http://www.dcc.ufmg.br/~lhrios/robotica/competicao/ApresentacaoRobotica.ppt|link]]** da apresentação usada no dia da competição. ==== Conclusão ==== Com várias estratégias (comportamentos) funcionando bem, julgamos que o robô está preparado para a competição. Cada um dessas estratégias explora algumas falhas do inimigo. Assim, durante a competição escolheremos a estratégia usada em cada partida de acordo com o adversário. ==== Participação na competição ==== O desempenho do nosso robô na competição ficou aquém do que esperávamos. Participamos de quatro partidas e vencemos duas, empatamos uma e perdemos a outra. Como nosso robô não diferenciava os blocos precisaríamos pontuar positivamente em todas as partidas. No entanto, nas duas últimas partidas nosso robô falhou, por razões desconhecidas, comprometendo nosso desempenho na competição. Até a terceira partida tínhamos grandes chances de ir para final. Havíamos vencido o robô favorito (em nossa opinião) que era o robô especialista em coletar o segredo (usando a técnica de derrubar o nosso segredo) e vencido o robô engolidor. Naquele momento, o robô que competiria conosco na final era o robô do grupo 10. Contra ele perderíamos certamente já que o mesmo detectava a cor dos blocos, era rápido e assim que coletava um bloco o levava para sua base. Nossa única chance contra ele era usar a técnica de roubar segredos. Nas partidas seguintes, contudo, nosso robô falhou e não chegamos à final. Caso chegássemos com à final com o robô campeão acreditávamos ter grandes chances já que das nossas cinco estratégias programadas, existiam algumas feitas especialmente para combater os robôs que atuavam de modo semelhante ao campeão (ou seja, roubavam os blocos do inimigo). A estratégia era coletar poucos blocos e parar o robô de modo a atrapalhar adversário e proteger os blocos já coletados. Apesar de não termos chegado à final ficamos satisfeitos de participar da competição. Seu objetivo é divertir os alunos e o público e isso certamente aconteceu tendo como um dos seus protagonistas nosso robô. Além disso, como o importante é o aprendizado e com ela aprendemos muito atingimos o objetivo. Portanto, para nós a experiência de participar de uma competição como essa foi muito válida.