Este documento descreve o desenvolvimento de um sistema de controle para um braço robótico utilizando o sensor Microsoft Kinect. O sistema permite controlar o braço robótico através do reconhecimento de movimentos do braço humano capturados pelo Kinect. O sistema foi desenvolvido com ferramentas open source e permite que pessoas com deficiência física realizem tarefas de forma mais independente.
SUPERINTELIGÊNCIA ARTIFICIAL, SEUS BENEFÍCIOS E MALES E O QUE FAZER PARA EVIT...
Controle de braço robótico com Kinect
1. Controle de um Braço Robótico Utilizando o Sensor
Microsoft Kinect
Willian Rodrigues Alves1
, Reinel Beltrán Aguedo², Priscila Gomes de Souza¹, João
Batista Hidaka de Oliveira Gaia¹
1
Fundação Desembargador Paulo Feitoza - FPFTECH
Manaus – AM – Brazil
2
Fundação Centro de Análise, Pesquisa e Inovação Tecnológica - FUCAPI
Manaus – AM – Brazil
{wiilliian.alves, reinelbeltran71, priscila.gsouza21,
hidaka.gaia}@gmail.com
Abstract. This paper presents the process of developing a control system for a
robotic arm capable of performing tasks by recognizing patterns of movements of
a human arm captured by the Microsoft Kinect sensor through the skeletal
tracking algorithm. The control system was developed with Open Source tools
available in the community by creating a basic user interface that displays the
monitored skeleton, allowing you to control servo motors individually in each
skeleton member. Built with servo motors purchased in electronic commerce
companies and pieces printed on a 3D printer prototype of the robotic arm helps
disabled people to perform tasks that were previously only possible to be made
with third-party assistance, generating greater independence, better quality of
life, increased self-esteem and greater freedom.
Resumo. Este artigo apresenta o processo de desenvolvimento de um sistema de
controle para um braço robótico capaz de executar tarefas através do
reconhecimento de movimentos padrões de um braço humano capturados pelo
sensor Microsoft Kinect através do algoritmo de rastreamento esquelético. O
sistema de controle foi desenvolvido com ferramentas Open Source disponíveis
na comunidade, criando uma interface de usuário básica que exibe o esqueleto
monitorado, permitindo controlar servo motores individualmente em cada
membro do esqueleto. Construído com servo motores adquiridos em empresas de
comércio eletrônicos e peças impressas em uma impressora 3D o protótipo do
braço robótico auxilia deficientes físicos a realizar tarefas que antes só eram
possíveis de serem realizadas com auxílio de terceiros, gerando maior
independência, melhor qualidade de vida, aumento da autoestima e maior
liberdade.
Palavras-chave: braço robótico, arduino, processing, kinect.
2. 1. Introdução
Um estudo realizado pela Pesquisa Nacional de Saúde em parceria com o Ministério da
Saúde divulgado em agosto do ano passado, demonstrou que 6,2% da população brasileira
possui algum tipo de deficiência. Entre essas deficiências, existem quatro tipos: física,
auditiva, intelectual e visual. O estudo mostra também que 1,3% dos brasileiros são
deficientes físicos, e desse total 46,8% estão limitados a um grau intenso ou muito intenso
de limitações e somente 18,4% desse grupo frequentam serviços de reabilitação (EBC,
2015).
Pesquisas sobre novas tecnologias na área assistiva utilizando a interação natural evoluem
constantemente em possíveis soluções para maior autonomia de deficientes físicos. Por
meio dessas, pessoas com deficiências são capazes de realizar tarefas que antes eram
impossíveis, onde para garantir essas possibilidades é extremamente importante a
disponibilização de produtos de acessibilidade que potencializam plenamente as
capacidades de cada usuário em particular.
A tecnologia com sensor Microsoft Kinect veio para revolucionar a maneira de interação
com o mundo exterior, por exemplo, operar uma ferramenta de trabalho, como um
computador, com gestos vai proporcionar novas possibilidades às pessoas com deficiência
física. Com isso surgem soluções que possibilitam a criação de sistemas embarcados e/ou
inteligentes que permitam melhorar a qualidade de vida dessas pessoas através da
acessibilidade.
Por exemplo, o projeto Gameterapia (criado em 2014 pela instituição Casa de David), que
trata-se de uma terapia alternativa que utiliza como ferramentas videogames, mais
diretamente o NINTENDO WII® e Xbox360 Kinect, para a reabilitação clínica,
favorecendo a modernização terapêutica com o uso da realidade virtual nas intervenções
em arteterapia, esportes (modo geral), fisioterápicas e terapêuticas ocupacionais onde a
atividade cerebral e motora de deficientes é estimulada (CASA DE DAVID, 2014).
Outro exemplo, é o dos estudantes da Universidade Konstanz, Alemanha, que
desenvolveram um novo sistema chamado de Auxílio de Navegação para Deficientes
Visuais (NAVI) que utiliza o sensor Kinect para ajudar deficientes visuais a se deslocarem
dentro de ambientes fechados. No projeto, além das duas câmeras infravermelhas do
sensor Kinect, é utilizada uma câmera comum para mapear o ambiente em que a pessoa se
encontra e dar orientações via um fone de ouvido sobre o caminho e obstáculos, o sistema
precisa de uma série de dispositivos para funcionar tais como: sensores que vibram ao
redor da cintura, uma mochila com um laptop para rodar o software do sistema e um
capacete com o Kinect anexado. Apesar de não parecer confortável, o sistema é capaz de
orientar a pessoa pelo caminho e utiliza imagens de realidade aumentada para indicar
obstáculos (HEILIG, 2011).
Na literatura é apontado que “a utilização de tecnologia permite ampliar e enriquecer o
desenvolvimento sócio afetivo e cognitivo, em indivíduos com deficiência, favorecendo
um maior grau de autonomia, perpassando as dificuldades oriundas de suas limitações”
(ASSISTIVA, 2016).
O objetivo do trabalho é desenvolver uma aplicação para o controle de um braço robótico,
que irá ser controlado através de gestos utilizando o sensor Kinect. Sensores do dispositivo
Kinect são utilizados para reconhecer o movimento do braço esquerdo do usuário
3. deficiente e reproduzir no braço robótico. Neste contexto, a principal motivação deste
trabalho consiste em contribuir para a criação de sistemas aplicados em tecnologias
assistivas que tenham como característica uma metodologia de interação natural, isto é,
permitir que o usuário desempenhe suas funções mais independente através de uma
interface intuitiva.
2. Das Ferramentas
Nesta seção serão apresentadas as tecnologias e conceitos utilizados no desenvolvimento
deste trabalho.
Kinect - sensor de movimentos da Microsoft para videogames Microsoft Xbox 360 e
Microsoft Xbox One, este disponibiliza uma série de características dadas a seguir: uma
câmera, um sensor de profundidade, um sensor de movimentos. O sensor permite o
rastreamento do esqueleto (reconhece e pode representar o esqueleto), reconhecimento
facial (podendo a partir da leitura facial fazer o login do usuário nos consoles de jogos),
reconhecimento de voz (microfones estrategicamente posicionados dentro do sensor).
Todas estas características e funcionalidades integradas no sensor são comandadas e
controladas por um processador e softwares próprios da Microsoft permitindo que os
usuários interajam de forma intuitiva e sem qualquer dispositivo intermediário (XBOX,
2016).
Processing - linguagem de programação de código aberto e ambiente de desenvolvimento
integrado (IDE), construído para as artes eletrônicas e comunidades de projetos visuais
com objetivo de ensinar noções básicas de programação de computador em um contexto
visual e para servir como base para cadernos eletrônicos. O projeto foi iniciado em 2001
por Casey Reas e Ben Fry, ambos ex-membros do Grupo de Computação do MIT Media
Lab. A linguagem tem por base as capacidades gráficas da linguagem de programação Java
(PROCESSING, 2016).
Arduino - plataforma eletrônica de placa única e código aberto capaz de ler entrada como
sensor de luzes, um clique no botão e transformar em saída, ativar um motor, ligar um led
com simples conjunto de instruções para o microcontrolador na placa escritos na própria
IDE Arduino com objetivo de criar produtos acessíveis de custo baixo e descomplicados
para uso de usuários que não possuem conhecimento técnico (ARDUINO, 2016).
3. Sistema de controle do braço robótico
3.1 O braço robótico
Segundo pesquisas, um braço robótico é formado por elos, juntas, acionadores e um
sistema de controle. O braço é fixado na base, o punho contém várias juntas entre si que
possibilitam a orientação do efetuador na posição referente à tarefa a ser realizada. Na
extremidade do punho existe um efetuador (ferramenta ou mão) destinada a alcançar a
tarefa exigida pela aplicação (GROOVER, 1988).
Uma das principais características que definem os robôs é o chamado "Graus de
Liberdade" que este possui. Graus de liberdade corresponde dizer os números e tipos de
movimentos do braço robótico em si.
4. De acordo com esse conceito foi possível construir um protótipo de braço robótico,
seguindo os passos:
1. Definir quantos graus de liberdade teria o braço robótico: baseado em modelos
encontrados na literatura consultada. Foi definido 4 graus de liberdade e mais a
pinça foi o suficiente para modelar o braço humano.
2. Modelagem do braço robótico: a modelagem foi feita na ferramenta de CAD
SolidWorks, onde o dimensionamento físico do braço foi feito de acordo com os
pontos de encaixe dos servo motores comerciais, além de considerar a capacidade
de carga de cada servo motor, para algumas peças foram necessários cálculos, dos
quais também foram decisivos na escolha das medidas e formas de cada peça.
3. Prototipagem do braço robótico: uma vez feita a simulação, foi usada uma
impressora 3D do tipo Rip Rap para a impressão do braço robótico.
4. A partir de modelos similares foi possível realizar o dimensionamento, a confecção
e montagem física do braço robótico.
Figura 1. Braço robótico construído
A figura 1 mostra o braço robótico construído, o qual é composto pelas seguintes partes:
1 - Garra articulada, 2 - articulação da garra, 3 - braço articulado, 4 - base articulada.
3.2 O sistema de controle
Na figura 2 é apresentada a estrutura do sistema de controle do braço robótico, onde deve
reproduzir os movimentos de um braço humano.
No sistema, o Sensor Kinect é usado para reconhecer o braço humano além de detectar os
movimentos destes. O Sensor envia a informação via comunicação serial pela porta USB a
um computador, onde se encontra o software de comando e controle do braço robótico. A
interface entre o computador e o braço é o Arduíno (o braço robótico irá retirar um pão de
uma posição e mover para outra posição, controlado através de comandos enviados pelo
dispositivo Kinect ao microcontrolador).
5. Figura 2. Sistema de controle do braço robótico
Para controlar o braço robótico, o usuário deverá se posicionar em frente ao Kinect, que
reconhece o usuário pelo gesto do braço humano, o sistema supervisório filtra os dados do
Kinect para enviar as coordenadas ao braço robótico através do Arduino.
Para o sistema supervisório, o rastreamento de usuário vai tentar encontrar razoavelmente
um objeto em movimento no campo de visão do Kinect e irá acompanhar o seu
movimento, como o grande objeto em movimento na cena é geralmente uma pessoa, o
sistema irá reconhecê-lo como um “usuário”, embora até mesmo um móvel qualquer em
movimento pode ser detectado como um usuário.
Quando o usuário for detectado, o SimpleOpenNI pode reconhecer os dados de esqueleto e
obter coordenadas de todas as articulações do corpo do usuário. A calibração (como o
processo é chamado) é totalmente automático. Foi usado como plataforma de programação
a IDE Processing junto com a biblioteca simpleOpenNI. Esta biblioteca permite usar o
Sensor Kinect no IDE Processing.
Em primeira instância deve ser definido qual braço humano seria replicado pelo braço
robótico. Uma vez definido, o braço é criado e o esqueleto rastreado (skeleton tracking)
com o Sensor Kinect sem a necessidade do uso de recurso adicional de hardware e
software.
O SimpleOpenNI é uma evolução do OpenNI e NITE, porém nem todas as funcionalidades
destas são suportadas, entretanto isso significa oferecer um acesso mais simples a
funcionalidades essenciais.
OpenNI define Production Node (OPENI2, 2012) “nós de produção” conjunto de
componentes que estabelecem o processo de criação de dados necessários para aplicações
baseadas em NUI. Cada nó encapsula a funcionalidade que se relaciona com a geração do
tipo de dados específicos. Esses nós de produção são os elementos fundamentais da
interface OpenNI. No entanto, a API dos nós de produção apenas define a linguagem. A
lógica de geração de dados deve ser implementada pelos módulos que se conectam. Cada
nó de produção tem um tipo e pertence a uma das seguintes categorias: Produção de nós de
dispositivo sensor e Produção de nós de middleware.
6. As coordenadas estão em um sistema de coordenadas x, y e z que tem início [0,0,0] como
mostrado na figura 3 e as unidades são milímetros. Este coordenadas podem ser facilmente
convertidos em coordenadas (onde x, eixo dos y é o mesmo que na imagem profundidade e
a coordenada z representam a distância entre o sensor).
Figura 3. Sistema de coordenadas
O código da SimpleOpenNI funciona em um loop infinito. Os eventos de detecção geram
chamadas de callbacks ou de retornos (como a detecção de um novo usuário), mas o acesso
a seus dados pode ser feito de forma síncrona no loop principal da aplicação.
Na figura 4 é mostrado os pontos que são capturados pelo rastreamento de esqueleto, que
nada mais é que os dados do esqueleto de um usuário dentro do campo de visão do Kinect
capturando partes de cada região do corpo, possibilitando de forma fácil a criação de
aplicações baseadas em gestos com a simples chamada do método
simpleopenni.startTrackingSkeleton(int userid).
Figura 4. Skeleton Tracking
Foi possível gerar o esqueleto rastreado do usuário e o próximo passo foi juntar a parte do
braço esquerdo com o método getJointSkeleton (id_usuario, ponto, posicao), com essas
coordenadas salvas, foi chamada a comunicação serial para comunicar-se com Arduino e
passar esses dados ao servo motores de cada junta do braço robótico.
7. Inicialmente foram importadas as bibliotecas na IDE do processing e posteriormente o
sistema foi escrito com o seguinte código:
import SimpleOpenNI.*;
import cc.arduino.*;
import processing.serial.*;
O configuração:
size(640, 480); //tamanho da tela
context = new SimpleOpenNI(this); //objeto da SimpleOpenNI
context.enableDepth(); //pegar a profundidade
context.enableUser(); //habilitar o rastreamento de usuario
context.setMirror(true); // habilitar o rastreamento de forma espelhada
arduino = new Arduino(this, Arduino.list()[0], 57600); //objeto do arduino
arduino.pinMode(6, Arduino.SERVO); // controle de servo
4. Experimentos e Resultados
Inicialmente foram executados pequenos testes para representar o braço robótico sendo
acionado, a captura de imagens com o sensor Kinect, foi criado um ambiente preparado
para o acionamento de ambos, o sistema reconheceu gestos do braço esquerdo do
deficiente com o Kinect para os seguintes movimentos: o usuário levantou o braço e o
braço robótico executou uma ação replicados no braço robótico como mostra a figura 5 e
figura 6.
Figura 5. Teste executados (Braço levantado para cima)
8. Figura 6. Teste executados (Braço levantado para o lado)
Em todos os testes foram demonstrados boa estabilidade, tanto em relação aos movimentos
quanto com relação a detecção de movimentos de controle feito pelo Kinect, A integração
da placa Arduino do controlador e dos softwares se deu de forma não muito complexa. As
maiores dificuldades encontradas com relação ao sistema de controle foi no uso da
biblioteca SimpleOpenNI por ser de código legado. Já na detecção de movimentos e
controles feitos pelos algoritmos implementados utilizando o Kinect as dificuldades foram
com a calibração da taxa de comunicação entre o Processing e o Arduino sendo utilizado
métodos empiricos.
Os testes realizados parecem promissores, uma vez que a captura dos movimentos e
execução no braço robóticos é realizada com sucesso.
5. Conclusões
Este trabalho apresenta uma solução tecnológica para amenizar dependências enfrentadas
por pessoas com deficiência física. Os resultados obtidos nos testes foi possível comprovar
que o sistema de controle é viável, se comporta de forma estável e alcançou o objetivo,
sendo assim, a solução proposta mostrou-se um caminho a mais para ajudar a quem tem
necessidades especiais.
Como trabalho futuro, pretende-se executar melhorias na plataforma. Propõe-se melhorias:
na implementação da comunicação entre Arduino e o controlador (protocolo), na estrutura
física, no código de controle dando mais inteligência e autonomia, melhorando a suavidade
dos movimentos ou seja acrescentando várias outras tarefas a serem realizadas pelo braço
robótico com maior precisão. Este trabalho já está sendo utilizado como referência por
outro trabalho em andamento que é o de criar um exoesqueleto e acoplar no braço
deficiente do usuário e implementação de técnicas de inteligência artificial.
7. Referências
CAMPAGNOLO B.P., Adaptando e desenvolvendo jogos para uso com o Microsoft
Kinect, Proceedings of SBGames, Salvador - BA, 2011.
9. LEVY P.C., ANTONIO N.S., SOUZA T.R.B., CAETANO R., SOUZA P.G., ActiveIris:
uma solução para comunicação alternativa e autonomia de pessoas com deficiência
motora severa, In Proceedings of the 12th Brazilian Symposium on Human Factors in
Computing Systems (IHC'2013), Brazilian Computer Society, Porto Alegre - RS, 2013. p.
42-51.
DINIZ J.N., XAVIER F.P., GALENO C.O.Q.L., Incentivo ao desenvolvimento e
pesquisa em robótica educacional utilizando o Kinect Sensor, COBENGE - Juiz de
Fora - MG, 2014.
HEILIG M., NAVI – Navigational Aids for the Visually Impaired, A student project in
the course Blended Interaction, University of Konstanz, Germany, 2011.
GROOVER M. P.; Weiss, M.; Nagel, R. N.; Odrey, N. G. Robótica. Tecnologia e
Programação. McGraw-Hill, São Paulo, 1989.
BARRETO C. L.; OLIVEIRA L. C.; DA SILVA L. O. T. Aplicação da realidade
aumentada para automação de um braço robótico através do reconhecimento gestual
utilizando o kinect, Universidade Federal de Uberlândia - UFU, Uberlândia - MG, 2012.
ALVES W. G.; BROSCO M. C.; CAMILLO V.; COSTA F.O.; SILVA M.C.; SILVA
L.A.; KUNKEL M.E; Protótipo de exoesqueleto para reabilitação de membros
superiores, XXIV Congresso Brasileiro de Engenharia Biomédica - CBEB, 2014.
RIBEIRO L.C.; FARIAS A.B.; AMARAL E.M.A. Sistema de controle de uma
plataforma robótica experimental baseado em visão computacional utilizando kinect,
Mostra Nacional de Robótica (MNR) - Instituto Federal de Educação, Ciência e
Tecnologia do Espirito Santos - Serra - ES, 2012.
ASSISTIVA, 2016 - Assistiva Tecnologia e Educação.
Disponível em: <http://www.assistiva.com.br/tassistiva.html/>
Acesso em: 16 de Agosto de 2016.
LABDEGARAGEM, 2012 - Laboratório de Garagem.
Disponivel em: <http://labdegaragem.com/profiles/blogs/tutorial-arduino-com-servomotor/>
Acesso em: 20 de Setembro de 2016.
PROCESSING, 2016 - Processing.
Disponivel em: <https://processing.org/>
Acesso em: 22 de Setembro de 2016.
ARDUINO, 2016 - Arduino.
Disponivel em: <https://www.arduino.cc/en/Guide/Introduction>
Acesso em: 01 de Outubro de 2016.
KOLLMORGEN, 2016 - Servo Motor.
Disponivel em: <http://www.kollmorgen.com/pt-br/products/motors/servo/servo-motores/>
Acesso em: 01 de Outubro de 2016.
EBC, 2015 - Empresa Brasil de Comunicação S/A.
Disponivel em: <http://www.ebc.com.br/noticias/2015/08/ibge-62-da-populacao-tem-algum-tipo-de-deficiencia>
Acesso em: 04 de Outubro de 2016.
CASA DE DAVID, 2014 - Instituição sem fins lucrativos
10. Disponivel em: <http://casadedavid.net.br>
Acesso em: 06 de Outubro de 2016.
XBOX, 2016 - Microsoft.
Disponivel em: <http://support.xbox.com/pt-BR/browse/xbox-360/getting-started/Kinect>
Acesso em: 10 de Outubro de 2016.
CARDOSO G. S. Microsoft Kinect: Crie aplicações interativas, ed. Casa do Código, 2014.
Disponível em: <https://books.google.com.br/books?id=DW6CCwAAQBAJ>
Acesso em: 11 de Outubro de 2016.