Marina Silva Tavares

Tiago Menezes de Lima

KILOBOTS

Projeto Externo - 2018.2

Foram implementados módulos ArUrco ao OpenCV.

Os PETianos implementaram um sistema de reconhecimento de imagens com o OpenCV.

O estudo utilizou de visão computacional para detectar a posição dos Kilobots.

Durante o projeto, os PETianos programaram em linguagem Python.

Kilobots@UFSC:

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.

O carrinho do carrinho:

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.

Enxame de Kilobots
Departamento de Automação e Sistemas

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.

Projeto Externo Kilobots - OpenCV - 3
Logo do OpenCV
Kilobot identificado por blob com ID
Kilobot identificado por blob com ID
Kilobots identificados por blob com bugs
Kilobots identificados por blob com bugs
Marcadores ArUco
Marcadores ArUco
Kilobots sendo detectados através de ArUco com ID

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.