Kilobots – Kilobots@UFSC OLD

O Projeto:

Este projeto foi desenvolvido pelos PETianos Marina Silva e Tiago Menezes em parceria com o grupo Kilobots@UFSC, seu foco principal foi o desenvolvimento de um algoritmo para detecção de objetos, voltado à área de visão computacional.
O grupo Kilobots@UFSC foi criado por professores e alunos do Departamento de Controle e Automação da UFSC com o objetivo de construir Kilobots – robôs de baixo custo projetados na Universidade de Harvard para estudo de enxames de robôs – e usá-los em atividades de pesquisa, ensino e extensão envolvendo sistemas multi-robôs. O estudo com Kilobots pode ser uma porta de entrada para um estudo mais amplo no campo da robótica, envolvendo áreas como as de inteligência artifcial e visão computacional – esta última sendo a qual deu fruto a parceria com o PET.
Devido às limitações impostas pelas simplicidade dos Kilobots, o algoritmo desenvolvido visava uma detecção dos robôs que viria a permitir maior controle sobre eles, auxiliando na tomada de decisões com base no acompanhamento constante de suas posições.
O retorno das coordenadas de todos os Kilobots capturados pela câmera permitiria a sua integração com envio de comandos aos robôs através de um controlador construído especificamente para os Kilobots, o OHC. Esta foi a tarefa assumida pelos PETianos, detectar a posição dos Kilobots no plano e retornar suas coordenadas para que fosse realizada a integração ao OHC.

Plataforma:

A ferramenta utilizada para tratar com visão computacional foi a biblioteca multiplataforma OpenCV, sigla para Open Computer Vision Library, iniciada pela Intel Research. A OpenCV possui diversos módulos, sendo o principal utilizado para este projeto o de Processamento de Imagem e Video/IO, o qual lida com processamento em tempo real. A possibilidade do uso com diversas linguagens de programação, como C++ e Python, e o seu amplo uso, tanto na comunidade
acadêmica quanto no âmbito comercial, possibilitaram que diversos módulos e bibliotecas estivessem bem documentadas e sendo discutidas em diversos fóruns online, facilitando a compreensão e utilização da ferramenta.
A preferência em inicialmente optar pela linguagem de programação Python se deu devido à sua simplicidade quando comparada com a alternativa, C++. Como agilidade e gerenciamento de memória não eram de nossa preocupação, aproveitar da fácil sintaxe do Python a tornaram uma escolha ideal.

Detecção por Blobs:

Depois de definir a plataforma utilizada, o primeiro método de detecção utilizado pelos PETianos foi a detecção por blobs, que são basicamente agrupamentos de pixels de cor semelhante. Como o plano no qual os Kilobots se movimentam é uma mesa branca, a detecção por blobs pareceu uma ótima, ideia, visto que a cor dos robôs iria contrastar muito com a cor do plano de fundo, facilitando a identificação. Dentro da linguagem Python na biblioteca OpenCV, a detecção de cada blob foi feita por funções da classe SimpleBlobDetector, que reduz a imagem a um aglomerado de pixels pretos ou brancos, comparando e agrupando grupos pretos próximos e retornando a coordenada x,y de seu centro geométrico.
Ao aplicar o reconhecimento de blobs e atribuir-lhes IDs específicas, os PETianos perceberam que a detecção por blobs possuía diversas falhas e bugs, portanto passaram a utilizar outra metodologia, o reconhecimento por ArUcos.

Detecção por ArUcos:

Visando integrar formas alternativas de identificação dos Kilobots – algo mais sofisticado do que apenas atribuir IDs na ordem com que são encontrados –, foi cogitado a utilização de QR Codes específicos para cada robô. Entretanto, o módulo da OpenCV que faz a leitura desses tipos de códigos requer um tamanho relativamente grande das impressões para garantir um reconhecimento estável. Na busca
por outros métodos, nos deparamos com o ArUco, o qual havia sido criado especificamente para a OpenCV e consequentemente possuía um reconhecimento mais apurado.

O módulo do ArUco permite a utilização da função detectMarkers que automaticamente identfica todos os ArUcos encontrados pela câmera, mostrando em tela o ID reconhecido e as respectivas coordenadas de seus quatro vértices.

Após detectar os ArUcos e reconhecer seus IDs, o desafio foi exportar todos os valores de ID e coordenadas x,y para um arquivo .txt associado. O resultado foi ótimo e todas as coordenadas eram atualizadas e impressas de forma quase que contínua, utilizando ArUcos de apenas 1x1cm.

O projeto foi entregue ao grupo Kilobots@UFSC com sucesso e aliou a capacidade de gestão dos membros do PET EEL a um grande desenvolvimento de suas capacidades nas áreas de programação Python e reconhecimento de imagens.

Progresso 100%