Ferramentas do usuário

Ferramentas do site


cursos:introrobotica:2018-1:grupo02:index

Tabela de conteúdos

Grupo 2 - BH Dynamics

Membros

  • Danilo Favato
  • William da Conceição Abreu
  • Lucas Merhi Faria
  • Pedro Teixeira de Souza Pereira

TP1

O grupo decidiu por fazer o projeto 1 que consiste em um manipulador que deve conseguir alcançar pontos fixos ao redor dele. Para isso decidimos em aliar uma junta de revolução na base do manipulador com uma junta prismática no elo do efetuador (caneta).

No primeiro dia foi desenvolvido a junta prismática e a base rotatória.

O próximo passo foi o desenvolvimento das caixas de redução para controle das duas juntas e a garra para segurar a caneta.

Com as juntas desenvolvidas e as caixas de revolução iniciaram-se os testes com os motores.

Os testes mostram o primeiro problema não esperado: quando o braço estava totalmente esticado ou retraído a força do motor fazia com que as engrenagens travadas começassem a forçar a estrutura o que acabava estragando os encaixes do robô. Em alguns casos as engrenagens perdiam o contato inutilizando a junta prismática.

Para resolver esse problema um diferencial foi adicionado à caixa de redução do motor da junta prismática. O diferencial é o responsável por desviar o torque para um eixo livre quando o braço está em algum dos pontos máximos.

Com a parte mecânica em funcionamento passamos a desenvolver a programação. O primeiro desafio era saber por quanto tempo os motores deveriam sem o auxílio de nenhum tipo de sensor.

Para evitar um pouco da abordagem tentativa e erro, marcamos no template o centro da junta de revolução e calculamos os ângulos entre cada um dos pontos. Os elos da junta prismática foram desenvolvidos de forma que quando o braço estava totalmente esticado ele alcança os pontos P2 e P4 e quando está totalmente recolhido alcança os pontos P1, P3, P5 e P6.

Essa abordagem nos permite calcular quanto tempo em cada uma das seções o braço gastaria a uma velocidade constante de rotação, então bastaria ajustar a velocidade do braço.

O problema com essa abordagem foi que em alguns momentos o braço deveria rodar a uma velocidade muito baixa. Nesses casos o motor simplesmente não se movia.

Para corrigir esses problemas foi necessária uma abordagem de tentativa e erro que terminou por produzir o seguinte resultado.

—-

                                                 ====TP2====

*O segundo projeto da disciplina consiste em desenvolver um robô móvel ,além de um sensor capaz de detectar cores. Para tanto o problema foi proposto em três partes , a primeira na qual o robô deverá percorrer uma série de percursos previamente programado e em um ambiente plano , a segunda , na qual deverá ser mostrado o funcionamento do sensor que realiza-rá leituras e deverá identificar alguns blocos coloridos , e a terceira parte que precisará do funcionamento de ambas etapas anteriores , uma vez que o robô uma vez identificando o bloco deverá realizar uma ação com base na cor lida.

                                                   1ªparte

*Para a construção de um robô capaz de se movimentar é necessário considerar em como dará-se sua locomoção ,como trata-se de um ambiente controlado ,ele andará curtas distâncias em um plano , serão usadas rodas ,provenientes do próprio kit lego , para a locomoção , sendo duas com tração do motor e uma terceira livre para dar equilíbrio , sendo que esta roda é esférica e portanto tem movimentação livre (3DoF).

*Foram usados dois motores para movimentação do robô , sendo um responsável por girar ambas as rodas em um mesmo sentido , podendo ser tanto para frente quanto para trás , e o outro que produz o giro nas rodas em sentido inverso , provocando assim um movimento de rotação sob o eixo .

*O esquema de engrenagens segue o esquema Dual Differential Drive , que consiste no uso de dois diferenciais que dependendo do sentido que são rotacionados em relação ao outro produzem nas rodas o movimento de modo inverso. Esse modelo mostrou-útil não só na facilidade maior na programação do movimento que dependeu somente na escolha da potência e tempo do giro dos motores para realizar os movimentos , como garante que as rodas vão girar , independente do caso , com a mesma velocidade ,produzindo ,em tese , movimento retilíneos e rotações com o centro do eixo fixo .Todavia também mostrou-se uma desvantagem quanto a potência que o motor deveria entregar ,uma vez que para um motor mover ambas as rodas a força exigida será maior do que se cada roda tivesse seu próprio .

*Os movimentos a serem feitos consistem em uma linha , um triângulo e um quadrado.

*Para o movimento em linha ,basicamente o motor 1(responsável pelo deslocamento) , girasse para frente, aproximadamente por uma distância de 30cm com base em um tempo ,e pelo mesmo girasse ao contrário , retornando o robô de ré para a posição inicial. *Para o movimento do triângulo , foi experimentado empiricamente o potência e tempo necessário para o motor 2(responsável pela p rotação) rotar um ângulo de 45º , obtendo esse valor como módulo de uma função foi feito o deslocamento para frente ,depois rotacionado em 90º(2*|45º|) , outro deslocamento , uma rotação desta vez de 135º(3*|45º|) ,um deslocamento porém maior em cerca de 40% ,e uma última rotação de também 135º. *Para o movimento do quadrado foram feitos quatro movimentos do tipo deslocamento frontal e rotação de 90º ,respectivamente .

OBS: Quando posto a funcionar com a pilha , a queda de carga da mesma resulta numa perda de potência dos motores ,ocasionando distâncias menores percorridas , havendo diferença inclusive no ponto de parada e inicial nos percursos , assim como um erro sistemático no ângulo de rotação . Houve também falha relacionado a quebra de engrenagens do funcionamento do diferencial quando ocasionalmente ocorria de algo forçar contra o sentido de movimento do robô ,embora isso pareça uma precaução simples ,a falta de resistência a esse tipo de evento deve-se em parte ao motor estar funcionando em potência máxima na maioria do tempo , que é uma consequência vista da escolha do esquema de engrenagens.

                                                    2ªParte

*A construção do sensor de cores , consiste na junção de um LDR(Light Dependent Resistor) com um led RGB .O LDR funciona de forma generalizada a quanto maior a luminosidade incidida ,menor será sua resistência e portanto , para uma mesma voltagem , maior a corrente .Como o tempo de retorno dessa resistência é rápido , é possível que quando emitida uma luz monocromática(a primárias ,vermelho ,verde e azul no caso ) sob um objeto também monocromático (os blocos no caso )a luminosidade que retorna ao LDR , considerando um ambiente não saturado , alta ou baixa de acordo com qual bem essa cor é absorvida ou refletida pelo objeto , levando a identificar por meio desses valores qual cor está sendo lida , obtendo uma identidade para cor com base na combinação de intensidade dos feixes monocromáticos ,COR X= (vermelho(0⇐x1⇐255) ;verde(0⇐x2⇐255) ;azul(0⇐x3⇐255)).

*Porém essa ideia não funciona de forma precisa , uma vez que o LDR não é preciso ,e as cores não refletem com padrões de intensidade iguais podendo ter resposta que são muito altas(como o amarelo) ou muito baixas (como o azul)e nesta inclusive no seu próprio feixe que em tese deveria responder com algo próximo do teto. Devido a isso foi necessária uma função de calibragem do sensor ,que tem como base medir o valor de um objeto branco que idealmente deveria ser BRANCO(255;255;255) e outro preto , PRETO(0;0;0) ,definindo uma nova margem de leitura e depois a nivelando numa escala de 0 à 255 .Desta forma todos os blocos deverão ficar nessa margem e a diferença de intensidade para cada led ficaria normalizada nesse intervalo.

*O sensor foi posicionado na frente do robô ,virado para baixo a um altura próxima a altura do bloco , com espaço suficiente para o encaixe , assim a luminosidade do ambiente , que pode variar , pode ser atenuada , obtendo uma leitura mais precisa.

*Para definir as cores ,foram definidas , com base em medidas empíricas do nosso próprio sensor , padrões de intensidade que identificam cada cor ,(vermelho , amarelo,verde ,azul ,preto(não o mesmo da calibragem))

  • Vermelho = leitura maior e alta em Red e significativamente maior que as outras.
  • Amarelo = leitura alta de Red e Green e maiores que Blue.
  • Verde = leitura maior em Green e significativamente maior que outras.
  • Azul = leitura maior em Blue e significativamente maior que outras.
  • Preto = leitura baixa em todas e com valores próximos.

*

*

*OBS: A parte de identificar os padrões de calibragem , em especial para o preto e o azul , que possuem as leituras em média menores .O bloco preto é precário possuindo tantos manchas brancas ,do próprio isopor quanto pintadas , por isso usamos um material diferente do bloco para calibrar o programa .E como o preto ,assim como um branco é monocromaticamente neutro as leituras para este podem ter qualquer uma das três cores como maior , sendo o seu padrão algo baixo porém com valores proporcionalmente próximos ,o que dificultou e prendeu-nos muito a essa parte ,devido a quantidade alta de testes feitas até identificar esse comportamento .

  • A princípio tentamos usar um led RGB dual pin , diferente do usado que também é único mas tem quatro pinos (três entradas ,uma para cada cor , e uma saída comum) ,porém o controle da luz o primeiro led é muito complicada ,necessitando de um programa específico e relativamente complexo para o controle.
                                               3ªparte

*Esta etapa consiste em o robô locomover-se com o sensor ligado e quando este identificar um bloco realizar uma ação , que consiste em mudar a direção do movimento e passar a locomover-se por ela.

*A implementação desta consiste em conciliar as etapas diferentes , mas ,com o detalhe que o sensor deverá “saber” quando não há bloco ou uma cor não válida . A ideia por nos pensada e utilizada foi que quando sem bloco sob o sensor a luz do ambiente que incide no LDR é maior , portanto os dados de leitura saturam , inclusive passando o teto ,uma vez que esse é uma leitura de branco mas próximo , assim quando os valores que são lidos deixam de saturar e voltam ao intervalo padrão é porque o sensor leu algo diferente da mesa , provavelmente um bloco.

*Quando lido e a cor identificada ,o robô executa uma ação específica para cada cor ,não antes de um leve recuo para liberar o bloco e não arrastá-lo junto ao movimento ,e assim que executada volta a leitura de mesa e continuando a procura , quando não pedido para encerrar a rotina.

—-


                                               ====TP3====
                                                     
                                                     
                                                     
                                                                                                                

*O trabalho prático 3 , consiste na construção e aplicação de três sensores e na atuação dos mesmos , que possuem funcionamento independente entre si ,embora todos ,para a aplicação, necessitem da movimentação e controle das rodas. *E quanto a mobilidade do robô , essa foi alterada em relação ao TP anterior , uma vez que o modelo antigo ,dual differential drive , demonstrou problemas , dentre eles , a função de andar em linha reta movimentando ambas as rodas com um motor , pois , a tensão produzidas nas engrenagens resultou em problemas ,inclusive danificando algumas , e por isso a sua movimentação começou a apresentar desvios enquanto em movimento. *A solução foi ir para o modelo básico diferencial ,com cada roda com motor independente , com exceção da roda esférica de apoio.

  1. —Os Sensores —-
  1. LDR DIFERENCIAL ,COM A FUNÇÃO DE LOCALIZAR_SE QUANDO EXPOSTO À UMA LUZ POLARIZADA
  • Para essa tarefa forma necessários dois LDR's , montados de forma independente ,e postos em uma estrutura de LEGO que isole um do outro fisicamente .De forma mais precisa deixando dois espaços na frente da estrutura que foram tampados por polaroídes , sendo que estes foram fixados para estarem perpendicular ao sentido de polarização um do outro . Com isso um LDR captará toda a intensidade da luz polarizada na vertical e parte da horizontal e o inverso valerá para o outro LDR.
  • O uso prático deste consiste em , uma mesa iluminada por lanternas polarizadas ,uma na vertical e outra na horizontal , nas extremidades da mesma , e que o robô deverá alinhar-se com a lanterna que estiver mais próxima.
  • Para isso a programação dos LDR's em captar as leituras de cada e compará-las afim de ver qual será maior .Assim , o robô será instruído a girar sob o próprio eixo no sentido do LDR maior , e durante o movimento novos valores estão sendo colhidos e a luz captada começa a cada vez mais ficar mais “pura” aumentando a leitura do que já estava maior e diminuindo ou crescendo pouco a leitura do outro que passa a ter cada vez menos influência da outra lanterna , chegando à um valor de diferença máxima entre eles , e seria nesse momento a posição de alinhamento.

*sensor: LDR diferencial

  1. ÓPTICO-REFLEXIVO SEGUINDO UM LINHA PRETA NA MESA
  • Este sensor consiste em um diodo emissor e outro receptor de luz , no caso infra-vermelha .O funcionamento ,basicamente , é quanto mais intensa a luz recaptada menor é o valor lido e vale a recíproca .Dessa forma , para a atuação forma usados dois destes sensores ,e assim montados de forma a ficarem isolados fisicamente um do outro , afim de evitar interferência um no outro.
  • O funcionamento para a tarefa consiste em cada sensor detectar se está sob uma superfície clara ou escura.Quando posto fora da linha o robô andará até um dos sensores encontrar uma linha preta , posicionando-se a partir disso em direção a linha afim de que ambos estejam lendo a linha .A partir daí o robô será instruído a permanecer em movimento retilíneo até um dos ópticos acusar que saiu da linha ,quando isso acontece as rodas giram em sentido a convergir à linha , o que muitas da vezes terminava em o robô tender a escapar para o outro lado após um tempo.
  • Quando em uma bifurcação , se ele a atravessa em um sentido inclinado acaba por voltar à condição anterior ,mas no caso se estar perfeitamente alinhado , ambos sensores a acusariam estarem fora da linha e portanto ele procuraria encontrá-la de novo ,mas agora girando em torno do seu eixo , ou encontrando um novo caminho ou retornando ao anterior.

*sensor:óptico-reflexivo

*OBS: Durante a execução do trabalho ,houve problemas em falhas de funcionamento não sistemáticas dos nossos sensores e códigos , de forma que ao tentar resolvê-los ,gastamos muito tempo, o que resultou em não conseguirmos aplicar o odômetro no nosso projeto , uma vez que esse foi o último sensor que faríamos e os outros já estavam em fase de testes quando o problema foi detectado. Portanto , a descrição do encoder e seu funcionamento será em relação a montagem dele , que foi previamente feita e do que pretendíamos aplicar para seu uso.

  1. ENCODER NA FUNÇÂO DE ODÔMETRO E EXECUÇÃO DE UM CIRCUITO FECHADO COM FEEDBACK (MALHA FECHADA)

*Esse sensor ,ele atua de forma a gerar um pulso a cada vez que uma rotação de seu pino é feita , de forma que se mensurados o tempo entre cada pulso ,obteremos um frequência de rotação que dadas as medidas da roda do robô ,poderá ser utilizado para o cálculo da velocidade .

*A montagem deste é um pouco mais complicada que os anteriores , pois precisa estar atrelado de forma fixa à estrutura do robô e de forma que o giro deste consiga girar o pino do encoder de forma natural e que não atrapalhe a rotação de ambos. Assim foram feitos apêndices laterais ao robô ,aonde está o sensor , vide foto abaixo ,de forma que esse fique alinhado ao centro de uma engrenagem do sistema de marchas. Um ponto intermediário da caixa de marchas foi escolhido de forma a atenuar a questão que , se posto rente ao motor , a rotação elevada poderia danificar a estrutura de cola-quente e fita isolante que prende o pino do sensor ao eixo , e se posto direto no roda , o erro acumulado do giro das engrenagens iria acumular-se produzindo erros sistemáticos de leitura maiores.

*A atuação dele daria-se via código , com exceção da frequência de pulsos, PWM(Pulse Widht Modulation) captadas pelo sensor , pois o cálculo da velocidade seria feita pelo programa , uma vez que as medidas das rodas e da redução da marchas fossem coletadas de maneira manual e prévia e considerando que não haja variação relevante nelas.

*Na execução do percurso , a velocidade enviada ao motor seria controlada levando em consideração a distância já percorrida e a velocidade devolvida de cada sensor afim de mantê-las iguais ou opostas de forma a percorrer de maneira robusta uma linha reta ou um giro sob o eixo , sem depender de mensurar as diferenças de potências entre motores. *OBS: A maneira como o controle das velocidades e distâncias deveriam ser feitas não foi completada pelo grupo devido a problemas anteriormente relatados

*sensor: encoder

*robô final



                                             TP4 /Competição
                                             

*O quarto e último trabalho consta e usar os principais fundamentos dos projetos anteriores para montar um robô para ser usado na competição ,que está descrita na página inicial da disciplina , e para esta alguns requisitos mínimos foram necessários , sendo as demais funcionalidades a critério dos grupos e das estratégias por eles elaborada.

*No nosso desenvolvimento ,trabalhamos de forma resolver as funções individualmente e a partir daí integrando-as. *O primeiro passo ,e mais simples , foi conectar um LDR embaixo do robô , e programá-lo de forma que quando com pouca luminosidade , luz da mesa desligado , o estado seria 1 e quando acesa muda para zero ,dessa forma sendo capaz distinguir o estado da lâmpada.

*Depois a localização pela luz polarizada , é praticamente a mesma coisa feita no TP3 ,mas com a diferença que realocamos o sensor na parte traseira do robô , pois como desta vez precisávamos que ele saia da base ,ele já se localizaria parando à frente ao centro da mesa.

*A parte de reconhecimento da cor blocos é exatamente a mesma do TP2 , mas ,para garantir que o robô está parado lendo um bloco , colocamos na frente do robô um LDR e um led posicionados de frente para o outro em um esquema de break-beam , para quando o um bloco entrar naquela espaço ele vai bloquear a luz do led , por conseguinte mudando o estado do LDR , assim informando que algo entrou no espaço de leitura , o robô para e o sensor de cor é acionado.

*A parte de navegação ,foram tentadas duas formas , uma simplesmente seguindo a linha ,tomando a decisão de virar a direita sempre que o sensor entrasse em um estado de indecisão (ambos sensores fora da linha).O que se mostrou eficiente somente quando completado o primeiro quadrante ,ficando preso contra a parede na linha lateral da base.

*Como primeira solução ,tentamos usar a odometria , que embora não a tenhamos completado à tempo no TP3 depois conseguimos completá-la , de forma a mapear a região e ao mesmo tempo seguir a linha , usando as informações odométricas para tomar as decisões .Mas ,embora a movimentação do robô simplesmente odométricas funcionassem com uma margem de erro aceitável , por exemplo andar em linha reta e rotações sobre o eixo , quando usado não para executar um movimento ,mas para calcular a posição num espaço essa solução mostrou resultados muito inconstantes ,vezes executando de forma parecida a idealizada ,vezes apresentando resultados “esquisitos” , como rotações em linha reta .

*Por fim , usamos a parte funcional de ambas as soluções .Usamos o sensor de linha para guiar o robô até o primeiro bloco à direita e usando a odometria para levar o bloco a base ou rejeitá-lo , ambos com um giro e uma movimentação retilínea e o retorno , com a diferença dentre esse casos o sentido de rotação .Aliado à isso , um contador de blocos foi adicionado ,pois como cada lado teria dois blocos ,quando recolhidos os dois , o robô iria virar a esquerda e tomar as decisões com base nessa nova orientação .

*Por último e não menos importante , uma condição de looping no programa , para a partir da luz de partida iniciar um contador de 60,000 milisegundos (1 minuto) ,para quando esse valor for alcançado o robô parar qualquer execução.

*OBS: Embora a ideia , fosse desenvolver junto a essa estrutura um manipulador capaz de agarrar os blocos no degrau central da mesa , e algo também capaz de posicionar os blocos na parte alta das extremidades , como o desenvolvimento dessas funções não era obrigatória ,optamos por simplesmente ignorá-las após perceber que isso complicaria em muito a nossa estratégia e minaria em muito o nosso tempo para o desenvolvimento desta atividade.

*foto do robô final.

*vídeo da competição.

*Apresentação exibida na competição , contendo imagens da parte móvel ,sensores e estratégia.

*https://docs.google.com/presentation/d/1A-IFbRCcDRetcn-2L09FTxiQDEo_-C0ZD79Xos_R4_g/edit#slide=id.g3a1e98b6b2_0_229

cursos/introrobotica/2018-1/grupo02/index.txt · Última modificação: 2018/06/21 15:45 por introrobotica-grupo2

Ferramentas da página