Prévia do material em texto
Mestrado em Engenharia Eletrónica e de Computadores Robótica Avançada Ivo Dias nº16998 Rafael Fernandes nº1699 Pedro Guimarães nº16992 2021/2022 Mestrado em Engenharia Eletrónica e de Computadores Robótica Avançada 2 29 de julho de 2022 Resumo Este relatório é parte integrante do trabalho realizado na unidade curricular de Robótica avançada, cujo objetivo consiste em aprofundar o conhecimento sobre Robôs industriais, e a infinidade de soluções que estes podem ter e como estes podem ser programados para atingir esses resultados. A partir da Terceira Revolução Industrial, a automatização no chão de fábrica tem se desenvolvido cada dia mais, com processos e máquinas inteligente e avançadas. O que algum dia fez parte apenas de filmes, como “Tempos Modernos”, hoje já faz parte das indústrias e os robôs industriais são peças fundamentais nesse processo. Robôs industriais são máquinas que desempenham tarefas que necessitam de esforços repetitivos, precisão, resistência, rapidez e força. Ele pode mover ferramentas, dispositivos especiais, peças e outros itens. Optar por um robô industrial aumenta a produtividade e reduz os custos da empresa. Além dos robôs industriais tradicionais, existem também os robôs colaborativos, aqueles que trabalham em parceria com os humanos, o que traz mais conforto e segurança para os funcionários. Afinal, nada mais enfadonho e cansativo do que fazer gestos repetitivos como encaixar uma peça sempre no mesmo lugar. Então, por que não deixar um robô fazer esta tarefa, enquanto o funcionário fica responsável por gerir o trabalho ou assumir outra atividade com maior valor agregado? Palavras-Chave (Tema): Indústria, KUKA, Interrupção Palavras-Chave (Tecnologias): Kinect, Comunicação https://pollux.com.br/blog/robos-colaborativos-os-robos-que-estao-revolucionando-o-chao-de-fabrica/ Mestrado em Engenharia Eletrónica e de Computadores Robótica Avançada 3 29 de julho de 2022 Índice 1. Introdução.................................................................................................................. 5 1.1 Enquadramento .................................................................................................. 5 1.2 Apresentação do Trabalho ................................................................................. 5 1.3 Tecnologias utilizados ....................................................................................... 5 1.4 Organização do relatório .................................................................................... 5 2. Contexto Teórico ....................................................................................................... 7 2.1 Tipos de Robôs ....................................................................................................... 8 2.1.1 Robôs Cartesianos ............................................................................................ 8 2.1.2 Robôs SCARA ................................................................................................. 9 2.1.3 Robôs Delta ...................................................................................................... 9 2.1.4 Robôs Articulados .......................................................................................... 10 2.1.5 Robôs Cilíndricos ........................................................................................... 11 2.2 Qual o robô ideal ................................................................................................... 12 3. Implementação Prática ............................................................................................ 13 4. Discussão ................................................................................................................. 30 5. Conclusão ................................................................................................................ 31 Mestrado em Engenharia Eletrónica e de Computadores Robótica Avançada 4 29 de julho de 2022 Índice de Ilustrações Figura 1 - Robô Cartesiano ........................................................................................................................... 9 Figura 2 - Robô SCARA .............................................................................................................................. 9 Figura 3 - Robô Delta ................................................................................................................................. 10 Figura 4 - Robô Articulado ......................................................................................................................... 11 Figura 5 - Robô Cilíndrico ......................................................................................................................... 12 Figura 6 - KUKA KR 6 R900 ..................................................................................................................... 13 Figura 7 - Axis data .................................................................................................................................... 14 Figura 8 - Espaço de trabalho ..................................................................................................................... 14 Figura 9 - Arquitetura dos elementos do projeto ........................................................................................ 15 Figura 10 - Imagens onde a bola ficava sem detalhe e com arrasto............................................................ 16 Figura 11 - Imagem explicativa das diferenças entre FPS, com a bola a percorrer a mesma velocidade quanto maior for os fps maior é a nitidez da bola .................................................................................................. 17 Figura 12 – Representação da distancia focal numa lente .......................................................................... 17 Figura 13 – Fotos tiradas a posição da bola em diferentes ângulos ............................................................ 18 Figura 14 – Plot das retas traçadas que mostram a posição da bola ........................................................... 18 Figura 15 - Mini rede criada com dois PC´s ............................................................................................... 19 Figura 16 - Sistema de deteção de imagem com duas câmaras .................................................................. 19 Figura 17 -Leep motion e algumas imagens da mesma .............................................................................. 20 Figura 18 – Sistema do projeto final .......................................................................................................... 20 Figura 19 - Fotos de calibração .................................................................................................................. 21 Figura 20 - Código python de calibração ................................................................................................... 21 Figura 21 - Comparação da imagem depois da distroção ........................................................................... 22 Figura 22 - Linha de código da distorção de imagem ................................................................................. 22 Figura 23 - imagem da bola utilizada no projeto ........................................................................................ 22 Figura 24 - Código da Segmentação da bola .............................................................................................. 23 Figura 25 - Código da deteção da bola ....................................................................................................... 23 Figura 26 - Imagens reais da deteção da bola .............................................................................................24 Figura 27 - Código dos cálculos para obter a posição da bola .................................................................... 24 Figura 28 - Código da regressão linear para detetar a trajetória da bola .................................................... 25 Figura 29 - Imagem modelo para calibração .............................................................................................. 25 Figura 30 - Código que envia para a KUKA as coordenadas com um nível de segurança ......................... 26 Figura 31 – Sistema de comunicação do nosso projeto .............................................................................. 27 Figura 32 – Código Kuka ........................................................................................................................... 27 Figura 33 – Código KUKA SAVEBALL() ................................................................................................ 28 Figura 34- Código KUKA EMERGENCY() .............................................................................................. 28 Figura 35 – Código KUKA loop ................................................................................................................ 29 file:///C:/Users/rafae/OneDrive%20-%20Instituto%20Politécnico%20do%20Cávado%20e%20do%20Ave/IPCA/Mestrado/2º%20Semestre/Robótica/Relatório-robotica.docx%23_Toc110221389 file:///C:/Users/rafae/OneDrive%20-%20Instituto%20Politécnico%20do%20Cávado%20e%20do%20Ave/IPCA/Mestrado/2º%20Semestre/Robótica/Relatório-robotica.docx%23_Toc110221391 file:///C:/Users/rafae/OneDrive%20-%20Instituto%20Politécnico%20do%20Cávado%20e%20do%20Ave/IPCA/Mestrado/2º%20Semestre/Robótica/Relatório-robotica.docx%23_Toc110221394 file:///C:/Users/rafae/OneDrive%20-%20Instituto%20Politécnico%20do%20Cávado%20e%20do%20Ave/IPCA/Mestrado/2º%20Semestre/Robótica/Relatório-robotica.docx%23_Toc110221395 file:///C:/Users/rafae/OneDrive%20-%20Instituto%20Politécnico%20do%20Cávado%20e%20do%20Ave/IPCA/Mestrado/2º%20Semestre/Robótica/Relatório-robotica.docx%23_Toc110221396 file:///C:/Users/rafae/OneDrive%20-%20Instituto%20Politécnico%20do%20Cávado%20e%20do%20Ave/IPCA/Mestrado/2º%20Semestre/Robótica/Relatório-robotica.docx%23_Toc110221397 file:///C:/Users/rafae/OneDrive%20-%20Instituto%20Politécnico%20do%20Cávado%20e%20do%20Ave/IPCA/Mestrado/2º%20Semestre/Robótica/Relatório-robotica.docx%23_Toc110221398 file:///C:/Users/rafae/OneDrive%20-%20Instituto%20Politécnico%20do%20Cávado%20e%20do%20Ave/IPCA/Mestrado/2º%20Semestre/Robótica/Relatório-robotica.docx%23_Toc110221399 file:///C:/Users/rafae/OneDrive%20-%20Instituto%20Politécnico%20do%20Cávado%20e%20do%20Ave/IPCA/Mestrado/2º%20Semestre/Robótica/Relatório-robotica.docx%23_Toc110221399 file:///C:/Users/rafae/OneDrive%20-%20Instituto%20Politécnico%20do%20Cávado%20e%20do%20Ave/IPCA/Mestrado/2º%20Semestre/Robótica/Relatório-robotica.docx%23_Toc110221400 file:///C:/Users/rafae/OneDrive%20-%20Instituto%20Politécnico%20do%20Cávado%20e%20do%20Ave/IPCA/Mestrado/2º%20Semestre/Robótica/Relatório-robotica.docx%23_Toc110221401 file:///C:/Users/rafae/OneDrive%20-%20Instituto%20Politécnico%20do%20Cávado%20e%20do%20Ave/IPCA/Mestrado/2º%20Semestre/Robótica/Relatório-robotica.docx%23_Toc110221402 file:///C:/Users/rafae/OneDrive%20-%20Instituto%20Politécnico%20do%20Cávado%20e%20do%20Ave/IPCA/Mestrado/2º%20Semestre/Robótica/Relatório-robotica.docx%23_Toc110221403 file:///C:/Users/rafae/OneDrive%20-%20Instituto%20Politécnico%20do%20Cávado%20e%20do%20Ave/IPCA/Mestrado/2º%20Semestre/Robótica/Relatório-robotica.docx%23_Toc110221404 file:///C:/Users/rafae/OneDrive%20-%20Instituto%20Politécnico%20do%20Cávado%20e%20do%20Ave/IPCA/Mestrado/2º%20Semestre/Robótica/Relatório-robotica.docx%23_Toc110221405 file:///C:/Users/rafae/OneDrive%20-%20Instituto%20Politécnico%20do%20Cávado%20e%20do%20Ave/IPCA/Mestrado/2º%20Semestre/Robótica/Relatório-robotica.docx%23_Toc110221406 file:///C:/Users/rafae/OneDrive%20-%20Instituto%20Politécnico%20do%20Cávado%20e%20do%20Ave/IPCA/Mestrado/2º%20Semestre/Robótica/Relatório-robotica.docx%23_Toc110221408 file:///C:/Users/rafae/OneDrive%20-%20Instituto%20Politécnico%20do%20Cávado%20e%20do%20Ave/IPCA/Mestrado/2º%20Semestre/Robótica/Relatório-robotica.docx%23_Toc110221413 file:///C:/Users/rafae/OneDrive%20-%20Instituto%20Politécnico%20do%20Cávado%20e%20do%20Ave/IPCA/Mestrado/2º%20Semestre/Robótica/Relatório-robotica.docx%23_Toc110221419 file:///C:/Users/rafae/OneDrive%20-%20Instituto%20Politécnico%20do%20Cávado%20e%20do%20Ave/IPCA/Mestrado/2º%20Semestre/Robótica/Relatório-robotica.docx%23_Toc110221420 file:///C:/Users/rafae/OneDrive%20-%20Instituto%20Politécnico%20do%20Cávado%20e%20do%20Ave/IPCA/Mestrado/2º%20Semestre/Robótica/Relatório-robotica.docx%23_Toc110221421 file:///C:/Users/rafae/OneDrive%20-%20Instituto%20Politécnico%20do%20Cávado%20e%20do%20Ave/IPCA/Mestrado/2º%20Semestre/Robótica/Relatório-robotica.docx%23_Toc110221422 file:///C:/Users/rafae/OneDrive%20-%20Instituto%20Politécnico%20do%20Cávado%20e%20do%20Ave/IPCA/Mestrado/2º%20Semestre/Robótica/Relatório-robotica.docx%23_Toc110221423 Mestrado em Engenharia Eletrónica e de Computadores Robótica Avançada 5 29 de julho de 2022 1. Introdução 1.1 Enquadramento Trabalho prático realizado no âmbito da unidade curricular de Robótica avançada do 2º semestre do 1º ano do mestrado em Engenharia Eletrónica e de Computadores lecionada pelo docente João Vilaça. 1.2 Apresentação do Trabalho A realização deste projeto tem como objetivo aprofundar o conhecimento sobre Robôs industriais, e a infinidade de soluções que estes podem ter e como estes podem ser programados para atingir esses resultados. Para tal foram abordados, a nível prático, o funcionamento do braço robótico da KUKA e como este poderia ser utilizado, através da sua programação e utilização de inputs e outputs. 1.3 Tecnologias utilizados Para a realização deste projeto também foram utilizados alguns softwares. Para a realização da parte do projeto utilizada no computador, controlando assim a câmara Kinect, foi utilizado o programa PyCharm. Este é um Ambiente de Desenvolvimento Integrado ou IDE com um editor de código e um compilador para escrever e compilar programas em uma ou várias linguagens de programação. Para a programação do braço robótico através do computador foi utilizado o software OrangeEdit. Este é o ambiente de edição mais popular para programas de robôs. 1.4 Organização do relatório Este relatório assenta numa estrutura com um total de 5 capítulos onde, no primeiro capítulo, é realizada uma breve exposição do conteúdo que será apresentado ao longo do documento, assim como a sua organização. O desenvolvimento surge de seguida com a Mestrado em Engenharia Eletrónica e de Computadores Robótica Avançada 6 29 de julho de 2022 explicação detalhada do funcionamento de todas as componentes necessárias para a implementação do sistema. Por fim são apresentados os resultados e as conclusões do projeto, assim como as possibilidades para o desenvolvimento de trabalhos futuros. Mestrado em Engenharia Eletrónica e de Computadores Robótica Avançada 7 29 de julho de 2022 2. Contexto Teórico Em 1961, o primeiro robô industrial foi instalado numa fabricante de automóveis em New Jersey, nos EUA. Ele pegava em peças aquecidas de metal e empilhava-as. Desde então, houve uma crescente adoção dessa tecnologia que surpreende pela precisão, velocidade e robustez. Atualmente, com a constante evolução, há uma variedade enorme de robôs industriais aptos a auxiliar o trabalho nas fábricas. Robôs industriais são manipuladores multiuso reprogramáveis e controlados automaticamente, programáveis em vários eixos. Esta definição é dada pela Organização Internacional de Normalização (ISO). Os robôs possuem diferentes graus de liberdade que identificam a sua versatilidade. Ou seja, o número de movimentos individuaisdas articulações pode variar. Apresentam base fixa ou móvel e são usados em aplicações de automação industrial. Os robôs são capazes de mover peças, dispositivos, materiais ou ferramentas, auxiliando diversas operações na cadeia produtiva. Possuem características similares na sua composição: • braço mecânico para manipulações controlável; • componentes rígidos que atuam como elos, conhecidos como links; • conexões de juntas rotativas ou lineares; • atuadores, que podem ser, por exemplo, motores elétricos, pneumáticos ou hidráulicos; • extremidades manipuladoras (garra, pinça ou ferramenta) nos seus braços robóticos. Estes robôs têm como atividades comuns a fundição, pintura, soldadura e montagem. Além disso, eles são aplicados em movimentação de cargas, inspeção de produtos e deslocamento. https://blog.kalatec.com.br/tipos-de-automacao/ Mestrado em Engenharia Eletrónica e de Computadores Robótica Avançada 8 29 de julho de 2022 Podem, ainda, manipular, explorar, transportar e armazenar materiais. Isso contribui inclusive para livrar os operários de atividades não ergonômicas. Além dos modelos multitarefa, existem também os chamados robôs colaborativos – que interagem com os trabalhadores. Esse tipo é seguro para trabalhar no chão de fábrica, sem a necessidade de isolamentos. Há ainda outros robôs que fazem a transferência de itens ou produtos por toda a extensão das linhas de produção, atuando como verdadeiros operadores. O investimento na tecnologia robótica é fundamental para inserir a empresa no conceito de Indústria 4.0. 2.1 Tipos de Robôs 2.1.1 Robôs Cartesianos Este modelo de robô realiza movimentos perpendiculares usando os eixos cartesianos X, Y e Z. Também conhecido como robô retilíneo. Com anatomia retangular, é muito adotado para a soldadura. A sua configuração é bastante flexível, podendo ser personalizado para diversas tarefas industriais, como: selecionar itens, montar, colocar, carregar e descarregar materiais. A programação e operação destes são consideradas simples. Além disso, são rentáveis, tornando-se um modelo de robô muito atrativo para as fábricas. https://blog.kalatec.com.br/chao-de-fabrica/ https://blog.kalatec.com.br/linha-de-producao/ https://blog.kalatec.com.br/industria-4-0/ Mestrado em Engenharia Eletrónica e de Computadores Robótica Avançada 9 29 de julho de 2022 2.1.2 Robôs SCARA Esta sigla é originada da denominação em inglês Selective Compliance Assembly Robot Arm, que significa Braço Robótico para Montagem de Conformidade Seletiva. Também conhecido como robô paralelo, é semelhante ao modelo cartesiano. Muito utilizado em processos de montagem e aplicações de peças, por conta da capacidade de girar o final de seu braço robótico. Este robô consegue estender e retrair seu braço, com uma área de trabalho em forma de anel. Tem boa repetibilidade e é fácil de programar. Figura 2 - Robô SCARA 2.1.3 Robôs Delta Figura 1 - Robô Cartesiano Mestrado em Engenharia Eletrónica e de Computadores Robótica Avançada 10 29 de julho de 2022 Também conhecido como robô de link paralelo ou robô aranha. O layout é formado por ligações paralelas de junções unidas a uma base, configurando uma pirâmide invertida. Excelente para transferir e coletar materiais devido a sua alta precisão de movimentos. Opera em alta velocidade, graças ao fácil controle de cada um de seus braços. Este robô é muito utilizado nas indústrias farmacêutica, eletrónica e alimentar. 2.1.4 Robôs Articulados Chamado também de antropomórfico, este tipo de robô apresenta pelo menos três juntas de rotação, garantindo alta mobilidade. Amplamente utilizado na indústria, tem um braço robótico ligado a uma base, permitindo o movimento giratório. Sua estrutura imita a anatomia do braço humano. Pode alcançar altas velocidades e alinha facilmente a coordenadas. É flexível para atuar em pequenos espaços. Este tipo de robô é o que será utilizado e abordado ao longo deste trabalho prático. Figura 3 - Robô Delta Mestrado em Engenharia Eletrónica e de Computadores Robótica Avançada 11 29 de julho de 2022 Figura 4 - Robô Articulado 2.1.5 Robôs Cilíndricos Este modelo de robô industrial redundante opera ferramentas em diversas posições. Sua estrutura é composta de ao menos uma junta prismática e uma junta rotativa, permitindo movimentos de duas translações e uma rotação. Sua forma de trabalho é baseada em sua estrutura cilíndrica. É capaz de realizar movimentos lineares verticais e horizontais. Indicado para aplicações como recolher, girar e colocar. Mestrado em Engenharia Eletrónica e de Computadores Robótica Avançada 12 29 de julho de 2022 Figura 5 - Robô Cilíndrico 2.2 Qual o robô ideal Para escolher os robôs industriais ideais, é preciso saber quais serão as suas aplicações. Geralmente, os equipamentos eleitos para manufatura estão entre os tipos demonstrados acima. Eles são definidos de acordo com a função que irão realizar e quais suas vantagens para a empresa em questão. Também é preciso considerar o número de eixos, a sua velocidade, o alcance e a capacidade de carga, de maneira que atenda às exigências de cada negócio. Um dos benefícios principais de um robô é a sua capacidade de executar funções repetitivas sem erros, podendo atuar em ambientes considerados perigosos. Sendo assim, além de aumentar a produtividade, ele também eleva a segurança do trabalho. Mestrado em Engenharia Eletrónica e de Computadores Robótica Avançada 13 29 de julho de 2022 3. Implementação Prática Para a realização deste projeto foi utilizado o braço robótico articulado da KUKA, com o modelo KR 6 R900 sixx, demonstrado na figura seguinte. Além de ser funcional, o compacto KUKA R900 Sixx estabelece o padrão de segurança, simplificando a interação humana e máquina. Este é composto por: • 6 eixos • Carga máxima de 6kg • Alcance máximo de 901.5 mm • Peso de aproximadamente 52 kg Estes 6 eixos, numerados de A1 a A6 têm diferentes alcances de movimento, demonstrados na figura seguinte. Figura 6 - KUKA KR 6 R900 Mestrado em Engenharia Eletrónica e de Computadores Robótica Avançada 14 29 de julho de 2022 Este deve estar a uma temperatura ambiente entre 5 e 45ºC, contendo também um índice de proteção IP54, em que o primeiro dígito (5), refere-se à proteção limitada contra a entrada de pó e resíduos e o segundo dígito (4), a este ser protegido de spray de água de qualquer direção. Este robô, tem vários tipos de montagem diferentes, poderá ser montado na vertical, para baixo ou para cima, ou na horizontal, por exemplo numa parede. Na figura seguinte, está representado um gráfico relativo ao espaço de trabalho em que este consegue operar. Figura 7 - Axis data Figura 8 - Espaço de trabalho Mestrado em Engenharia Eletrónica e de Computadores Robótica Avançada 15 29 de julho de 2022 4. Projeto 4.1 Projeto Inicial versão 1.0 O projeto inicial apresentado na disciplina de robótica tinha como conceito a construção de um sistema em que a KUKA iria jogar ping pong, onde iriamos ter uma kinect que com ajuda de um programa Python iria detetar a bola e executar todos os cálculos necessários para prever a trajetória da bola e trespassar para a KUKA essa informação para esta se mover para o respetivo lugar e devolver a bola para o outro lado da mesa. Como podemos observar a Kinect iria ser disposta numa posição obliqua para obter uma melhor visão de todo ao espaço e da bola, para executar os cálculos da trajetória da bola com exatidão. No projeto inicialmente idealizado foi executado uma pequenainterface de interação as imagens a seguir mostram um pouco dessa interface. Figura 9 - Arquitetura dos elementos do projeto Mestrado em Engenharia Eletrónica e de Computadores Robótica Avançada 16 29 de julho de 2022 4.1.1 Testes e conclusões Com o decorrer do projeto deparamo-nos com alguns problemas um dos primeiros problemas foi os baixos FPS que a Kinect nos fornecia (que era no máximo 30 FPS e por vezes apenas dava 20, 15) o que fazia com que a deteção da bola fosse impossível pois em certas velocidades, a bola ficava com arrasto e era impossível detetar o centro da mesma com exatidão. Explicando um pouco o porque deste desfoque, é só pensar que a câmara tem 30 fps ou seja por segundo ela capta 30 imagens, se a bola percorrer a uma velocidade de 1 m/s em diferenças de frame a bola percorre 3 cm, como a bola tinha 2 cm ela aparecia em dois frames o que criava o arrasto e falta de precisão na deteção do centro. Figura 10 - Imagens onde a bola ficava sem detalhe e com arrasto Mestrado em Engenharia Eletrónica e de Computadores Robótica Avançada 17 29 de julho de 2022 Então a solução passou por tentar arranjar câmaras com mais fps, para então mitigar esta perda de informação devido ao arrasto, posto isto optamos por câmaras do telemóvel com 60 fps onde a diferença de frames era de 1.6 cm o que já dava uma precisão melhor. Com a perspetiva que agora tudo iria dar certo usamos então duas câmaras com 60 fps para detetar a posição 3D da bola. A estratégia usada levou algum tempo e estudo até conseguirmos alcançá-la com exatidão, pois era necessário ter um pouco de estudo na aré de projeção 3D com planos 2D. Mas basicamente cada câmara detetava a bola e de seguida era criada uma reta se serial projetada num espaço 3D, esta reta era criada sabendo a distância focal da câmara em uso o que por sua vez não era fácil de descobrir, (era preciso alguma pesquisa), sabendo a distância focal, e a posição da bola no plano da câmara criava-se a reta virtual em espaço 3D. Executando este método em ambas as câmaras temos então duas retas descritas num plano 3D que apesar de não se cruzarem devido a erros de calibrações e as câmaras serem diferentes, entre outros fatores, elas ficam próximas no ponto onde a bola se encontra, então é aplicada uma Figura 11 - Imagem explicativa das diferenças entre FPS, com a bola a percorrer a mesma velocidade quanto maior for os fps maior é a nitidez da bola Figura 12 – Representação da distancia focal numa lente Mestrado em Engenharia Eletrónica e de Computadores Robótica Avançada 18 29 de julho de 2022 função que mostra a reta com os pontos mais próximos das duas retas e o ponto medio dessa reta é o centro da nossa bola. Como mostra a figura a seguir foi capturada duas imagens em ângulos diferentes. E executou-se o método anterior descrito e obteve-se o resultado descrito na figura a seguir onde conseguimos ver claramente que o método deteta com pouco erro a posição da bola Porem com esta evolução para 2 câmaras surgiu um problema que foi a sincronização das mesmas, ou seja, ambas as câmaras tirarem o mesmo frame. Foram realizados testes fizemos uma pequena rede onde tínhamos dois PC ligados, onde um era o server e outro o cliente era mandado um trigger do cliente, para ser capturada a imagem no server e no cliente, para fim de testes colocamos um cronometro até a escala de milissegundos para ver o desfasamento das imagens e Figura 14 – Plot das retas traçadas que mostram a posição da bola Figura 13 – Fotos tiradas a posição da bola em diferentes ângulos Mestrado em Engenharia Eletrónica e de Computadores Robótica Avançada 19 29 de julho de 2022 concluímos que era um desfasamento que iria trazer problemas na exatidão da localização da bola pois num dos frames a bola iria estar. Com isto decidimos usar Raspberry pi para fazer esta sincronização de câmaras pois lemos um artigo que seria possível, então decidimos experimentar, configuramos a Raspeberry pi com todas as librarias necessárias usamos uma câmara usb e uma câmara dedicada para Raspberry pi apesar de termos conseguido mitigar o tempo de desfasamento das imagens tivemos o problema de FPS como antigamente era muitos poucos FPS, acreditamos que fosse pelo falta de processamento das Raspeberry pi então demos um upgrade para um versão a cima mas o mesmo acontecia reparamos que o processador aquecia muito, então compramos um dissipador de calor mas obtivemos os mesmos resultados, iriamos precisar de um dissipador com ventoinha. Por última tentativa de continuar com a ideia inicial, decidimos tentar com duas Leep motion uma câmara que deteta infra vermelhos onde a ideia era pintar a bola com uma cor refletora, ou colocar um led infravermelho dentro da bola para a câmara detetar, ao inicio gostamos dos resultados que estávamos a ter, porem deparamo-nos com um problema que foi o facto de que a câmara tinha pouca resolução e uma angulo de visão enorme então iriamos perder o detalhe ou seja a distancia entre pixéis era enorme uma vez que a nossa bola era muito pequena. Figura 15 - Mini rede criada com dois PC´s Figura 16 - Sistema de deteção de imagem com duas câmaras Mestrado em Engenharia Eletrónica e de Computadores Robótica Avançada 20 29 de julho de 2022 Em suma concluímos que o material necessário seria câmaras com trigger´s, com bons FPS e com uma ótima resolução, como não tínhamos material desse a mão decidimos então alterar a abordagem. Então decidiu-se aumentar o tamanho da bola e fazer um jogo diferente. 4.2 Projeto versão 2.0 Depois de todas as conclusões tiradas ao longo do tempo de testes, vimos que a nossa abordagem estava muito difícil de se concretizar, então decidimos aumentar o tamanho a bola e trocar o conceito do jogo, este agora consistia em atirarmos a bola ao longo de uma mesa e a KUKA servir como guarda-redes depois de apanhar a bola iria guardar em diferentes caixas dispostas numa mesa ao lado. 4.2.1 Visão Para obter a posição de interseção da bola e da KUKA, vários passos foram necessários para tornar este processo possível e fiável. Todos os passos necessários estão descritos abaixo. Figura 17 -Leep motion e algumas imagens da mesma Figura 18 – Sistema do projeto final View Mestrado em Engenharia Eletrónica e de Computadores Robótica Avançada 21 29 de julho de 2022 4.2.1.1 Calibração da câmara Com o objetivo de remover a distorção ótica da imagem, foi necessário um processo de calibração. Este processo consiste em usar um tabuleiro de xadrez para conseguir obter os parâmetros intrínsecos da câmara, para depois ser possível, remover a distorção da imagem. Figura 19 - Fotos de calibração Foram tiradas 45 fotos ao tabuleiro de xadrez, tentado apanhar todos os cantos da imagem para conseguir remover a distorção de forma uniforme. Após isso, os vértices dos quadrados do xadrez foram detetados. Com isso é possível calcular a matriz fundamental da imagem (distancia focal e centro ótico) e obter os coeficientes de distorção da KINECT. A figura 21 destaca o código usado para a calibração Uns exemplos dos resultados da remoção da distorção encontram-se registados na figura 22 Figura 20 - Código python de calibração Mestrado em Engenharia Eletrónica e de Computadores Robótica Avançada 22 29 de julho de 2022 Figura 21 - Comparação da imagem depois da distorção Após ser obtido um frame é sempre necessário remover a distorção utilizando os coeficientes obtidos na calibração (ver figura 23) Figura 22 - Linha de código da distorção de imagem 4.2.1.2 Segmentação da bola Para detetar a posição da bola no espaço, primeiro é preciso detetar a bola da imagem capturadapela Kinect. Para isso foi usada uma bola rosa, para que a sua segmentação fosse mais fácil e precisa. A bola tinha cerca de 20cm de diâmetro e encontra-se ilustrada na figura 23 Figura 23 - imagem da bola utilizada no projeto O primeiro passo para conseguir detetar a bola, é converter a imagem do espaço RGB para o espaço HSV, que nos permite mais facilmente segmentar a cor Rosa. Após a cor rosa ter sido segmentada é aplicado um filtro de erosão seguido de uma dilatação, com o objetivo de diminuir qualquer espécie de ruido ou pequenos pontos que tenham ficado após a segmentação da cor. A figura 24 corresponde ao código usada para segmentar a bola. Mestrado em Engenharia Eletrónica e de Computadores Robótica Avançada 23 29 de julho de 2022 Figura 24 - Código da Segmentação da bola Após a cor estar segmenta é usada a função “cv2.findContours()” que vai procurar contornos na imagem. O objetivo é detetar os contornos da bola, para poder detetar o seu centro. Como este processo não é perfeito, por vezes contornos serão detetados que não são a bola. Para fazer uma seleção de qual dos contornos detetados é a bola, primeiro contorno com uma área menor do que 125 pixels são eliminados. Após isso, será testado se o contorno detetado é redondo. Para isso, é desenhado um círculo no centro do contorno, com o raio correspondente a um círculo com a área do contorno. Assim é possível contar quantos pixels do contorno se encontram dentro desse círculo. Se mais de 25% dos pixels estiverem fora do contorno, o objeto não é considerado redondo, logo não é a bola. Se um dos contornos detetados verificar estas condições é considerado a bola. A figura 26 apresenta o código correspondente á deteção da bola. Figura 25 - Código da deteção da bola Mestrado em Engenharia Eletrónica e de Computadores Robótica Avançada 24 29 de julho de 2022 A figura 27 representa o processo descrito previamente. Figura 26 - Imagens reais da deteção da bola 4.2.1.3 Interpolação 3D Para obter a posição mundo da bola, são necessários alguns parâmetros previamente obtidos durante a fase de calibração da câmara. • Centro – Centro ótico da imagem (pixels) • Focalp – Distancia focal (pixels) • Dist_mesa = distancia da Kinect á mesa Figura 27 - Código dos cálculos para obter a posição da bola Com isto obteremos a posição mundo da bola em relação á câmara. Depois será necessário converter para o mundo da KUKA. 4.2.1.4 Cálculo da Trajetória Este processo está dividido em duas fases: • Análise da Trajetória • Cálculo da trajetória e do ponto de Interseção Mestrado em Engenharia Eletrónica e de Computadores Robótica Avançada 25 29 de julho de 2022 A análise da trajetória começa quando a bola estiver a mover-se em direção á KUKA, e se encontrar dentro do espaço de análise, que é determinado pelo utilizador. Este espaço é necessário pois se a decisão for tomada tarde a KUKA não terá tempo suficiente para atingir a posição. Neste momento, a cada frame captado pela câmara, a posição munda da bola e guardada sucessivamente. Após a bola passar o espaço de análise, é calculado a trajetória que melhor descreve o movimento da bola, e em seguida, é calculado o ponto de interseção para onde a KUKA se irá mover. Para calcular a trajetória que melhor descreve o movimento da bola, foi usado uma regressão linear baseado numa rede neuronal. Esta rede assemelha o movimento da bola a uma reta “y = mx + b”. Após isso é calculado o ponto mais próximo desta reta á posição onde a KUKA se encontra, que é a posição HOME. Figura 28 - Código da regressão linear para detetar a trajetória da bola 4.2.1.5 Enviar para a KUKA Para ser possível calibrar as coordenadas da câmara com a KUKA, é necessário ajustar a base da KUKA para coincidir com base da câmara. Para isso foi usada a seguinte imagem: Figura 29 - Imagem modelo para calibração Mestrado em Engenharia Eletrónica e de Computadores Robótica Avançada 26 29 de julho de 2022 Esta imagem era colocada em cima da mesa, e era detetada a sua posição no mundo. De Seguida, o ponto preto era definido como a origem da Base. Assim este ponto será a origem da KUKA (0,0,0) e no teremos a coordenada correspondente ao mundo da câmara (cx, cy, cz), o que torna possível calcular o offset. Para finalizar é necessário alinhar os eixos X e Y da KUKA com os da câmara. Para isso a imagem é movida no sentido X da câmara e é definido como eixo dos X na base da KUKA. O mesmo é feito para o eixo dos Y. Com os eixos alinhados, será apensas necessário subtrair o offset (cx,cy,cz) ao ponto resultante da etapa anterior (calculo da trajetória), para obtermos o ponto para envia á KUKA. Após obter o ponto é necessário enviar a informação num frame que será reconhecido pela KUKA (ver figura 31). Caso o valor para enviar á KUKA fosse superior ao seu WORKSPACE, o código emitia uma mensagem de erro e parava o programa. Figura 30 - Código que envia para a KUKA as coordenadas com um nível de segurança 4.2.3 KUKA código Em paralelo ao Código python foi executado o código da KUKA que iria controlar a mesma para executar todos os movimentos idealizados e processar os dados enviados do python para ela na imagem a seguir mostra a arquitetura de ligações do nosso projeto. Mestrado em Engenharia Eletrónica e de Computadores Robótica Avançada 27 29 de julho de 2022 A KUKA antes de começar o seu programa é calibrada com as duas bases que iram ser usadas no programa. A base do apanhar a bola é calibrada em conjunto com a câmara já explicado anteriormente, a segunda base e calibrada manualmente. Depois são escolhidos os pontos de HOME e o programa está pronto a ser executado. O código começa inicial mente colocar a KUKA na sua posição de HOME e inicia algumas variáveis que vão ser utilizadas mais a frente no código, também inicializa duas funções de interrupção uma que é ativada por uma interrupção externa outra por uma variável enviada pelo python e por fim ativamos a interrupção 2. Figura 31 – Sistema de comunicação do nosso projeto Figura 32 – Código Kuka Mestrado em Engenharia Eletrónica e de Computadores Robótica Avançada 28 29 de julho de 2022 De seguida iremos descrever a função SAVEBALL() está função é ativada por um sensor de proximidade quando a bola entrava no cesto o sensor ficava a 1 e disparava a interrupção. Esta executava então a desativação da respetiva interrupção, depois executava um PTP que era um pequeno movimento de lift e giratório para a bola não sair do cesto, de seguida definíamos a nova base de orientação que era a mesa com as caixas para colocar as bolas. A variável G69_X definia em qual base iria ser colocada a bola esta variável era decrementada e incrementada consoante a caixa que a bola era colocada. Se esta variável fosse 1 então a bola iria ser colocada na caixa 1 executando os PTP definidos e de seguida a variável era incrementada se a G69_X fosse 2 então ela colocaria na caixa 2 a bola executando os respetivos PTP e decrementando a variável. No final desta função era trocado a base novamente, mas agora para a de apanhar a bola e fazia um PTP HOME para voltar a posição inicial de apanhar. A segunda função EMERGENCY() é uma função como o próprio nome diz de emergência onde nesta função os motores da KUKA são forçados a parar por algum motivo que vejamos necessário, inicialmente era para caso a câmara deteta-se uma pessoa no workspace da KUKA ou quando pressiona-se mos o botão da interface, que por falta de tempo não criamos. Figura 33 – Código KUKA SAVEBALL() Figura 34- Código KUKA EMERGENCY() Mestrado em Engenharia Eletrónica e de Computadores Robótica Avançada 29 29 de julho de 2022 Por fim temos o código do LOOP da KUKA onde o programa corre, neste LOOP temos então a condiçãoIF que testa se a variável enviada pelo python está ativa quanto esta está ativa ela anula a flag G69_ACT e ativa a G69_BUSY que faz com que o python não consiga enviar mais nenhuma coordenada a KUKA para não haver conflitos posto isto de seguida executa então o LIN REF_POS que executa o movimento para as coordenadas enviadas pelo python, depois ativa a interrupção 4 referente ao SAVEBALL (). A função é so ativada aqui por motivos que o sensor pode ativar por alguma interferência ou por algum motivo ele ativou e nos não queremos que ele execute e função SAVEBALL () desnecessária mente então ativamos só quando realmente a KUKA tem intenções de apanhar a bola. A razão pela qual escolhemos o movimento LIN no LOOP e não o PTP é que no PTP a KUKA escolhe qual o caminho mais rápido para atingir o ponto final o que fazia com que muitas vezes a KUKA mexe-se se nos eixos nos Z, uma vez que a tool estava muito próxima da mesa esta por vezes batia, então optamos pelo LIN que executa o seu movimento ao longo de uma linha reta, o que resolve o problema que tínhamos de a tool bater na mesa. Verificamos também que o PTP a velocidade de execução é muito mais rápida que o LIN então tivemos de fazer algumas alterações no sistema global do projeto para que a KUKA acerta-se o alvo. Figura 35 – Código KUKA loop Mestrado em Engenharia Eletrónica e de Computadores Robótica Avançada 30 29 de julho de 2022 5. Discussão Ao testarmos e estudarmos os diversos temas que queríamos que fossem o objetivo do trabalho fomos nos deparando com diversas adversidades, desde a velocidade do robô, velocidade de captação das câmaras até a calibração destas, que nos invalidavam o primeiro objetivo proposto ao docente “KUKA Pong”. Para nós foi um trabalho bastante esclarecedor porque foi a forma mais fácil para nos fazer aprender acerca do funcionamento do robô porque fomos sempre utilizando a tentativa e erro. O facto de termos que trabalhar com o Software PyCharm e interligar com a KUKA também nos fez crescer em termos da integração de várias linguagens de programação, e visto que o braço robótico é um elemento móvel, foi de maior agrado nosso o facto de podermos testar o nosso projeto, a uma velocidade baixa, mas com a perceção do funcionamento ou não deste projeto. Mestrado em Engenharia Eletrónica e de Computadores Robótica Avançada 31 29 de julho de 2022 6. Conclusão O trabalho foi concluído com sucesso e de acordo com as nossas expectativas, porque conseguimos obter o que desejávamos com uma boa precisão. Ao longo do trabalho, fomos deparando como surgimento de várias adversidades, estando estas associadas a erros cometidos da nossa parte, estando estes relacionados com a falta de prática e erros de precisão do hardware utilizado. Assim, denotamos que as aulas teóricas e práticas e a ajuda do docente revelaram-se bastante importantes, porque estas permitiram-nos ter o suporte necessário para a realização deste trabalho. Finalmente, através deste trabalho somos capazes de testar e compreender diversas utilizações sobre braços robóticos e como os integrar com o ser humano sempre com as devidas seguranças.