Buscar

Relatório de Robótica - Garra para Servir Copos

Prévia do material em texto

UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL
RELATÓRIO DO LABORATÓRIO NÚM. 4
ÉMERSON DOS SANTOS PASSARI
GIULIANO MESQUITA DE VARGAS
Porto Alegre
2017
Introdução
Nos últimos anos a tecnologia avançou de forma ampla e intensa, se especificando e criando diversas áreas. Com o desenvolvimento da área de mecanismos e surgimento das tecnologias eletrônicas, surge o campo da robótica, o qual logo ganhou amplo espaço na indústria.
É notável que a diversidade de operações que um robô é capaz de realizaré um de seus pontos de destaque e uma das razões pelas quais, gradativamente estes vem substituindo a mão de obra humana. Seu trabalho ininterrupto, a aptidão de trabalhar em ambientes insalubres, sua precisão, entre outras características, tornam o robô industrial o mais indicado para diversas aplicações.
Por outro lado, o robô é incapaz de operar qualquer tarefa sem uma programação adequada, sendo necessário que um operador informe quais movimentos e trajetórias ele deverá seguir, obedecendo por exemplo, velocidades determinadas, entre outros parâmetros. 
Sendo assim, na disciplina de Robótica da UFRGS, os alunos vivem a experiência de programar tarefas a serem realizadas por um robô industrial, no intuito de aprimorar seus conhecimentos sobre a linguagem e a lógica de programação, assim como identificar as dificuldades que podem surgir em determinadas operações.
No Laboratório 4, o qual será relatado neste trabalho, a tarefa a ser realizada é a de programar um robô articulado da marca ABB para que este pegue uma garrafa plástica contendo 500ml de uma solução e distribua igualmente o liquido entre três copos enfileirados, para que então por fim, descarregue a garrafa vazia em um ponto final.
Metodologia
Dada uma configuração inicial, conformea figura 1, a tarefa consiste em programar o robô para que faça os seguintes movimentos: Movimentar-se ao ponto de carga (Pc) e pegar a garrafa que está sobre o ponto, iraté o primeiro copo localizado sobre o ponto médio (Pm) e despejar 1/3da solução contida na garrafa, ir ao segundo copo localizado a 80mm em x de Pm e despejar metade da solução contida na garrafa, ir até o terceiro copo localizado a 160mm em x de Pm e despejar o restante da solução, resultando em uma distribuição por igual do liquido nos três copos. Por fim, o robô deve descarregar a garrafa vazia em um ponto de descarga (Pd) e afastar-se da área de trabalho.
Figura 1. Distribuição dos pontos na mesa
Para realizar a tarefa com sucesso, inicialmente foram assinalados estes três pontos de forma manual utilizando o Teach Pendant (TP) para gravar na memória as posições do tipo “CONST”. Além disso, é importante ressaltar que o efetuador utilizado, uma garra pneumática paralela, se encontra acoplado ao flange do robô, em seu Tool Central Point (TCP). O acionamento de abertura ou fechamento da garra é realizado através de sinais binários emitidos da placa de I/Os do controlador do robô para a válvula solenoide de acionamento da garra.
Com os três pontos gravados e já pré-determinados antes do inicio da tarefa, a escolha de quais seriam as velocidades de translação e rotação, distâncias entre os copos, ângulosque a garra iria girar para servir, bem como o tempo que ela esperaria antes de voltar a vertical, foram escolhidas de forma arbitrária, uma vez que era notável que poderiam sofrer modificações a partir dos testes realizados no laboratório com o robô.
Para facilitar os cálculos de distância, o espaçamento entre os copos foi definido como nulo, ou seja, as bordas dos copos se tocariam afim de que o “offset”entre um copo e o seguinte seria apenas o diâmetro de um copo. Além disto, as velocidades de rotação da garrafa para servir o copo foram todas configuradas como 30º/s de forma que o processo fosse cadenciado e o liquido não saísse bruscamente pela garrafa.
Resultados Obtidos
Logo no início dos testes já pudemos notar que a velocidade de rotação considerada inicialmente de 45º/s era muito alta e teríamos que alterá-la. Alteramos então para 30º/s que se mostrou um valor adequado para nossa aplicação. 
O seguinte problema a aparecer foi um erro de programação nas coordenadas dos pontos. Inicialmente a declaração dos pontos dos copos foi dada dentro de um comando FOR que ajustaria o offset em X a cada iteração do ciclo, porém este método não se mostrou eficaz já que a nossa distribuição possuía apenas 3 copos. Alteramos então a declaração dos pontos de modo que fossem feitas individualmente, conforme pode ser notado no código em anexo. Esta alteração solucionou o problema e após alguns ajustes de medida obtivemos as coordenadas ideais para cada ponto.
Conforme mencionado anteriormente, após a movimentaçãodo efetuador até o ponto de cada copo, era realizada a rotação do mesmo afim de despejar a solução da garrafa igualmente entre os três copos. Estas rotações se mostraram mais difíceis de serem executadas que o esperado,uma vez que o manipulador alcançava o ponto desejado com determinada configuração que o impossibilitava de girar a junta nos ângulos desejados.
Os ângulos programados inicialmente foram: 83,5º para o primeiro copo, 93º para o segundo e 110º para o terceiro. Destas três rotações, somente a primeira de 78º foi bem-sucedida na primeira tentativa. Tentamos então alterar os outros dois ângulos para valores menores, porém não obtivemos sucesso. Sendo assim, tivemos que revisar nossa programação para que o efetuador se aproximasse destes pontos com uma orientação diferente da inicialmente pensada. Revisamos e alteramos nosso código para que o efetuador se aproximasse destes pontos pelo lado oposto do que havia sido tentando inicialmente.
Definimos então os seguintes ângulos para os dois copos restantes nesta nova programação: 92,5º para o segundo copo e 103º para o último. Estasalterações solucionaram nosso problema. O manipulador foi capaz de efetuar todas as rotações nos pontos desejados. Restava agora apenas ajustar a quantidade de solução despejada em cada um dos copos. Para este ajuste foi necessário realizar quatro testes variando apenas o parâmetro “tempo de espera” do efetuador após cada rotação, até atingirmos a distribuição igualitária entre todos os copos.
Resultados finais:
Velocidade de rotação: 30º/s
Ângulos de rotação: 83,5º, 93,5º e 103º
Tempos de espera: 1,9s, 1,2s e 4,5s
Conclusão
Ao final dos nossos testes pudemos concluir que o braço robótico possui diversas restrições de movimentação as quais muitas vezes não são possíveis de serem previstas. Contrariando o pensamento inicial que indicava que a parte do trabalho com maior complexidade seria definir a velocidade de rotação da garra, a divisão da solução em três partes iguais se mostrou extremamente trabalhosa, requerendo a realização de quatro testes com parâmetros variados conforme mencionado nos resultados obtidos. 
Com estas dificuldades, pode-se imaginar que em certas aplicações industriais é necessário não apenas programar o robô para executar uma determinada tarefa, como também testar, conferir os resultados e ajustar, talvez inúmeras vezes, para que o resultado atinja o esperado uma vez que a cinemática do robô é de conhecimento exclusivo do fabricante (com exceção de tipos especiais) e o usuário apenas tem controle sobre a aplicação. Baseado nisto, a implantação do processo tem que ser acompanhada de forma constante desde o planejamento até a execução uma vez que possíveis problemas cinemáticos possam surgir.
Referências
Santos MFV. Robótica Industrial – apontamentos teóricos, exercícios para aulas práticas e problemas de exame resolvidos. Departamento de Engenharia Mecânica - Universidade de Aveiro. 2003. Disponível em: http://www.ece.ufrgs.br/~rventura/RoboticaIndustrial.pdf;
Anexo
Em anexo, segue o código da tarefa para a linguagem RAPID da ABB
%%%
 VERSION:1
 LANGUAGE:ENGLISH
%%%
MODULE TRAB4
!definição do Pcarga
 CONST robtargetPc:=[[730.14,-524.16,613.28],[0.639351,-0.266042,0.657948,-0.295901],[-1,-1,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];!definição do Pdescarga
 CONST ROBTARGET Pd1:=[[768.67,496,597.8],[0.639509,-0.265741,0.657941,-0.295844],[0,0,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
!definição do Pcentro (medio)
 CONST ROBTARGET Pm:=[[892.62,-24.37,599.28],[0.63945,-0.265854,0.657928,-0.2959],[-1,0,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
!definição do ponto flutuante
VAR ROBTARGET F;
!definição da velocidade
VAR SPEEDDATA Vmedia;
PROC main()
!declaração da velocidade
Vmedia:=[120,30,1,1];
!aproxima até em cima da garrafa
MoveJOffs(Pc,0,0,170),v5000,z1,tool0; !fica em cima do ponto inicial
!desligar os sinais da garra
Reset DO7;
Reset DO8;
WaitTime 0.3;
Set DO7; !abre a garra
WaitTime 0.1;
Reset DO7; !desliga o sinal 7
WaitTime 0.1;
MoveLPc,v500,fine,tool0; !aproxima
Set DO8; !fecha
WaitTime 0.3;
 Reset DO8; !libera o sinal
MoveLOffs(Pc,0,0,100),v1000,fine,tool0; !afasta
!movimentação para preencher os copos
!primeiro copo
F:=Offs(Pm, 0, -150, 100); !atribuição do ponto flutuante
MoveJF,v500,fine,tool0; !leva até o ponto de servir
MoveLRelTool(F, 0,0,0 \Rz:= -83.5),Vmedia,fine,tool0; !gira 83.5º horario
WaitTime 1.9;
MoveLF,Vmedia,fine,tool0; !retorna para a posição vertical
!segundo copo
F:=Offs(Pm, 0, 235, 120); !atribuição do ponto flutuante
MoveJF,v500,fine,tool0; !leva até o ponto de servir
MoveLRelTool(F, 0,0,0 \Rz:= 92.5),Vmedia,fine,tool0; !gira 85º horario para servir o primeiro copo e 93.5 para o segundo
WaitTime 1.2;
MoveLF,Vmedia,fine,tool0; !retorna para a posição vertical
!ultimo copo
F:=Offs(Pm, 0, 305, 120); !atribuição do ponto flutuante
MoveJF,v500,fine,tool0; !leva até o ponto de servir
MoveLRelTool(F, 0,0,0 \Rz:= 103),Vmedia,fine,tool0; !gira 135º servir o ultimo copo
WaitTime 4.5;
MoveLF,Vmedia,fine,tool0; !retorna para a posição vertical
! ponto de descarga da garrafa vazia
MoveJ Offs(Pd1,0,0,100),v1000,fine,tool0;
MoveL Pd1,v500,fine,tool0;
Set DO7; !abre a garra
WaitTime 0.3;
Reset DO7; !desliga o sinal 7
MoveL Offs(Pd1,0,0,170),v1000,fine,tool0;
!vai para um ponto distante
MoveJOffs(Pc,-30,0,200),v5000,fine,tool0; !sai da area de trabalho
ENDPROC
ENDMODULE

Continue navegando