Tcc controle robótico referenciado por sistema de visão computacional utilizando o kinect Hamilton...
-
Upload
hamilton-sena -
Category
Documents
-
view
5.359 -
download
3
description
Transcript of Tcc controle robótico referenciado por sistema de visão computacional utilizando o kinect Hamilton...
1
FACULDADE ASSIS GURGACZ
HAMILTON JOSE DA SILVA SENA
CONTROLE ROBÓTICO REFERENCIADO POR SISTEMA DE VISÃO COMPUTACIONAL UTILIZANDO O KINECT®
CASCAVEL 2011
2
FACULDADE ASSIS GURGACZ
HAMILTON JOSE DA SILVA SENA
CONTROLE ROBÓTICO REFERENCIADO POR SISTEMA DE VISÃO COMPUTACIONAL UTILIZANDO O KINECT®
Trabalho apresentado como requisito para obtenção do título de bacharel em Engenharia de Controle e Automação da Faculdade Assis Gurgacz.
Orientador: Arthur Schuler da Igreja
CASCAVEL 2011
3
FACULDADE ASSIS GURGACZ
HAMILTON JOSE DA SILVA SENA
CONTROLE ROBÓTICO REFERENCIADO POR SISTEMA DE VISÃO COMPUTACIONAL UTILIZANDO O KINECT®
Trabalho apresentado no Curso de Engenharia de Controle e Automação, da Faculdade Assis Gurgacz, como requisito parcial para obtenção do título de Bacharel em Engenharia de Controle e Automação, sob orientação do Professor Especialista Arthur Schuler da Igreja.
BANCA EXAMINADORA
____________________________
Arthur Schuler da Igreja Faculdade Assis Gurgacz
____________________________
Ederson Zanchet Faculdade Assis Gurgacz
____________________________
Vânio da Maia Faculdade Assis Gurgacz
Cascavel, ___ de _______________ de 2011
4
DEDICATÓRIA
Primeiramente dedico este trabalho
a Deus, que me deu forças e
iluminou meu caminho; A minha
esposa Francielli que espera pelo
nosso primeiro filho, por toda a
paciência, compreensão e apoio
incondicional, a minha mãe Sandra
e meus irmãos Alisson, Milene e
Fabio que fazem parte dessa
trajetória e a meus avós Francisca
e Dermeval que hoje estão ao lado
do Pai todo poderoso.
5
AGRADECIMENTOS
Agradeço em primeiro lugar a Deus que iluminou o meu caminho durante esta
caminhada. Agradeço também a toda minha família em especial a minha mãe, meus
irmãos e minha esposa, que de forma especial e carinhosa me deu força e coragem,
me apoiando nos momentos de dificuldades, quero agradecer também ao Mauricio
Celestino Sena e João Carlos de Souza que acreditaram em mim e me deram a
oportunidade de estar hoje realizando um sonho.
Não posso deixar também de agradecer a todos os professores e em especial ao
meu orientador Arthur Schuler da Igreja de ter aceitado o convite para essa
empreitada e ao coordenador do curso Vânio da Maia que sempre teve um
relacionamento diferenciado com nossa turma.
Não posso deixar de citar também os companheiros de turma e em especial os
amigos Robson Molgaro, Augusto Peruffo, Darlan Dariva e o filhão Andre Fazioni
que sempre estiveram de prontidão nos momentos de dificuldade e alegrias.
Agradecer também a todos os membros da igreja Evangélica Livre que não
deixaram de orar por mim e minha família em especial ao amigo e pastor Sergio. E
não deixando de agradecer de forma grata e grandiosa minhas outras duas mães,
Sonia Dalbosco Sena e Edna Xavier Rego que cuidam de mim como se fosse o
próprio filho delas.
6
"Através da sabedoria uma casa é construída, e pelo entendimento é estabelecida; através do conhecimento, seus cômodos cheios com tesouros raros e bonitos."
PROV. 24:3-4
7
RESUMO A robótica, segundo estudos realizados no Japão e EUA, deve ser uma das 10
linhas de pesquisa com mais trabalhos, a nível mundial, nas próximas décadas. O
avanço tecnológico tem permitido a realização de cálculos computacionais
necessários em tempo real, e este fato tem possibilitado que novas descobertas e
aplicações possam ser feitas em sistemas de robótica, tornando essa área uma
fonte quase que inesgotável de pesquisa. Nesse contexto surge a necessidade de
ambientes de testes e simulação onde as ferramentas propiciem potencializar o
conhecimento e a difusão da pesquisa no âmbito da robótica, é nesse âmbito que o
atual trabalho se dedica. Integrando os conhecimentos de robótica com visão
computacional utilizando o Kinect®, considerado por muitos um dos acessórios mais
revolucionário da historia dos videogames.
Palavras chaves: robótica, Kinect®, visão computacional.
8
ABSTRACT
Robotics, according to studies conducted in Japan and the USA, must be one of the
10 research lines with more published papers worldwide in the coming decades.
Technological advances have allowed the execution of computations required in real
time, and this fact has enabled new discoveries and applications can be made in
robotic systems, making this area an almost inexhaustible source of research. In this
context arises the need for testing and simulation environments where tools
conducive to knowledge leverage and dissemination of research in the field of
robotics, it is in this context that the present study is dedicated. Integrating the
knowledge in robotics with computer vision using the Kinect®, considered by many
one of the most revolutionary accessories in the history of video games.
Keywords: robotics, Kinect ®, computer vision.
9
LISTA DE ILUSTRAÇÕES Figura 1: Célula de trabalho robotizada .................................................................... 16
Figura 2: Robô Articulado ou Antropomórfico com seu respectivo volume de trabalho. .................................................................................................................................. 18
Figura 3: Relação dos problemas da cinemática direta e inversa. ............................ 20
Figura 4: Braço robô ED-7220C ................................................................................ 25
Figura 5: Os 5 graus de liberdade do Ed-7220C. ...................................................... 25
Figura 6: Vista superior do volume de trabalho do ED-7220C. ................................. 26
Figura 7: Vista lateral do volume de trabalho do ED-7220C. .................................... 26
Figura 9: Unidade controladora ED-MK4, da empresa ED-Laboratory. .................... 28
Figura 10: Bombardeiro Tupolev Tu-4 ....................................................................... 31
Figura 11: Imagem digital e sua matriz correspondente ............................................ 34
Figura 12: Cálculo do centro de área de uma determinada região ............................ 38
Figura 13: Arquitetura básica do Kinect® ................................................................... 42
Figura 14: Resumo da arquitetura básica ................................................................. 42
Figura 15: Campo de visão alcançado pelo Kinect® ................................................. 43
Figura 16: Holograma projetado pelo Kinect® para leitura de profundidade. ............ 44
Figura 17: Método de identificação 3D por luz estruturada. ...................................... 44
Figura 18: Arquitetura da API OpenNI ....................................................................... 47
Figura 19: Arquitetura montada para identificação dos comandos de comunicação do controlador ED-MK4® com o RoboTalk® . ................................................................ 49
Figura 20: Código de comunicação serial do MATLAB com o ED-MK4 .................... 51
Figura 21: Código de inserção do comando "0D" no final de cada instrução de execução. .................................................................................................................. 52
Figura 22: Código de recebimento de dados serial via Matlab .................................. 52
Figura 23: Representação vetorial das juntas do robô ED-7220C ............................ 53
Figura 24: Configuração dos parâmetros de D-H na Robotics Toolbox .................... 54
Figura 25: Representação gráfica do robô ED-7220C via Robotics Toolbox ............ 55
Figura 26: Área de trabalho definida no laboratório de robótica para execução de testes ......................................................................................................................... 56
Figura 27: Cenário de testes completo ...................................................................... 57
Figura 28: Código de captura da imagem RGB e matriz de profundidade. ............... 57
Figura 29: Distancia do Kinect® até área de trabalho do robô .................................. 58
Figura 30: Pré-processamento da imagem vista pelo Kinect® .................................. 59
Figura 31: Comando para corte da figura RGB e de profundidade via Matlab® ....... 60
Figura 32: Código que efetua o espelhamento da imagem RGB e o da matriz de profundidade. ............................................................................................................ 61
Figura 33: Código de identificação do objeto vermelho. ............................................ 61
Figura 34: Identificação do centróide de um objeto. .................................................. 62
Figura 35: Medidas da área de trabalho e distância da base do robô até área de trabalho. .................................................................................................................... 63
Figura 36: Comprimento da área de trabalho ............................................................ 64
Figura 37: Distancia entre o Kinect® e a área de trabalho em visão lateral. ............. 64
Figura 38: Código de controle do eixo da base ......................................................... 67
Figura 39: Tela de controle de busca dos objetos. .................................................... 68
Figura 40: Script de comando para conexão via serial e transpor o sistema de controle do ED-MK4® para modo HOST. ................................................................. 69
Figura 41: Robô virtual criado via Robotic Toolbox atravês do drivebot. ................... 70
Figura 42: Robô ED-7220C® efetuado a pega do objeto. ......................................... 71
10
Figura 43: Imagem gerada pela câmera RGB do Kinect®. ....................................... 72
Figura 44: Visão superior da área de trabalho com o objeto vermelho a ser identificado na localização inferior. ............................................................................ 73
Figura 45: Visão superior da área de trabalho com o objeto vermelho a ser identificado na localização central. ............................................................................ 74
Figura 46: Visão superior da área de trabalho com o objeto vermelho a ser identificado na localização superior. .......................................................................... 74
11
SUMÁRIO
1 INTRODUÇÃO ................................................................................................... 12
2 FUNDAMENTAÇÃO TEÓRICA ............................. ............................................ 15
2.1 ROBÓTICA .................................................................................................. 15
2.1.1. Robótica Industrial........................................................................................ 15
2.1.2. Classificação dos robôs ............................................................................... 17
2.1.3. Modelagem Cinemática ................................................................................ 18
2.1.4. Cinemática direta ......................................................................................... 20
2.1.5. Cinemática inversa ....................................................................................... 20
2.1.6. Notação de Denavit-Hartenberg ................................................................... 21
2.1.7. Níveis de Controle Robótico ......................................................................... 22
2.1.8. ED-7220C® .................................................................................................. 24
2.2 ENGENHARIA REVERSA ........................................................................... 30
2.3 VISÃO COMPUTACIONAL .......................................................................... 32
2.3.1. Imagem Digital ............................................................................................. 33
2.3.2. Processamento de Imagem Digital............................................................... 34
2.3.3. Limiarização (Threholding) ........................................................................... 35
2.3.4. Reconhecimento de Objetos ........................................................................ 37
2.3.5. Luz Estruturada ............................................................................................ 39
2.4. KINECT® ...................................................................................................... 41
2.5 MATLAB® ..................................................................................................... 45
2.6 ROBOTICS TOOLBOX ................................................................................ 46
2.7 OPENNI ....................................................................................................... 46
3 METODOLOGIA ....................................... .......................................................... 48
3.1 ENGENHARIA REVERSA DA COMUNICAÇÃO ......................................... 48
3.2 ROBOTICS TOOLBOX ................................................................................ 53
3.3 KINECT® ..................................................................................................... 55
3.4 PROCESSAMENTO DA IMAGEM ............................................................... 59
3.5 REFERENCIA DO PONTO DE VISÃO ........................................................ 63
3.6 CONTROLE DO ROBÔ ED-7220C® ........................................................... 66
4 RESULTADOS E DISCUSSÕES ........................................................................ 69
4.1 COMUNICAÇÃO SERIAL ............................................................................ 69
4.2 ROBOTICS TOOLBOX ................................................................................ 70
4.3 RECONHECIMENTO DO OBJETO ............................................................. 71
5 CONCLUSÃO ......................................... ............................................................ 76
6 REFERÊNCIAS .................................................................................................. 77
ANEXOS ................................................................................................................... 80
12
1 INTRODUÇÃO
A disciplina de robótica tem o objetivo de prover o conhecimento no
desenvolvimento e análise de modelos de robôs industriais e a programação de
robôs manipuladores, com esse intuito a Faculdade Assis Gurgacz disponibiliza em
seu laboratório de robótica um robô didático, porém esse robô didático desenvolvido
pela empresa coreana ED-Laboratory fornece um software proprietário para
controle, simulação e testes, tendo limitadas opções de integração a outros meios de
controle via software, impedindo assim a interação do robô a projetos criados em
diversas outras disciplinas correlatas.
Esse impedimento estende-se também a própria disciplina de robótica, onde o
ensino da interação do robô com o ambiente é de extrema importância,
principalmente pela concepção de utilização de robôs, onde há a necessidade de ser
flexível na atuação em ambientes dinâmicos de forma robusta e versátil mantendo-
se operacional diante de mudanças em ambientes não estruturados.
Outro problema é a falta de uma plataforma que propicie desenvolvimentos
integrados entre robótica e visão computacional, onde geralmente o ensino fica
restrito a simulações via software, impedindo assim, um modelo que poderia
potencializar a elaboração de trabalhos mais sofisticados na área robótica e no
campo da visão computacional.
A robótica, segundo estudos realizados no Japão e EUA, deve ser uma das
10 linhas de pesquisa com mais trabalhos, a nível mundial, nas próximas décadas.
O avanço tecnológico tem permitido a realização de cálculos computacionais
necessários em tempo real, e este fato tem possibilitado que novas descobertas e
aplicações possam ser feitas em sistemas de robótica, tornando essa área uma
fonte quase que inesgotável de pesquisa.
13
Nesse contexto surge a necessidade de ambientes de testes e simulação
onde as ferramentas propiciem potencializar o conhecimento e a difusão da
pesquisa no âmbito da robótica, principalmente pelo fato de áreas como a da
inteligência artificial, sistema de controles avançados, sensores e atuadores,
controle de processo, programação, redes, micro controladores, identificação de
sistemas, entre outras, possam unir-se para como foi dito anteriormente propiciar
trabalhos mais sofisticados.
Para permitir a utilização desse trabalho para futuros projetos, serão
disponibilizados comandos via MATLAB® para controle do robô, pois o controle atual
é feito pelo software do fabricante do robô.
Outro ponto que justifica o desenvolvimento desse trabalho é o uso do Kinect®
enquanto sensor (sendo este um sensor por sistema de visão computacional
comercializado como controle para videogames pela empresa Microsoft®), pois para
referenciar um robô, são utilizados inúmeros sensores que em ambientes não
estruturados podem não ser efetivos, e que o Kinect pelo sensoriamento de
profundidade é um passo além dos sistemas de visão computacional que tem esta
restrição.
Com isso, o tema escolhido para esse trabalho, baseia-se na grande
relevância tanto para o ambiente industrial como acadêmico na atual conjuntura
mundial.
O trabalho tem como objetivo desenvolver um sistema que controle o robô
didático ED-7220C através do software MATLAB® efetuando o reconhecimento de
objetos de forma referenciada a partir do Kinect®. Para que o trabalho se conclua
será necessário estabelecer a comunicação com o controlador do robô via software
MATLAB®, elaborando o controle de cinemática inversa do sistema, identificando e
14
obtendo o posicionamento de objetos através de visão computacional, integrando
assim o sistema de visão computacional com o controle do robô.
15
2 FUNDAMENTAÇÃO TEÓRICA
2.1 ROBÓTICA
2.1.1. Robótica Industrial
O termo robô foi originalmente utilizado em 1921 pelo dramaturgo tcheco
Karen Capek, na peça teatral “Os Robôs Universais de Russum (R.U.R.)” como
referência a um autômato que acaba rebelando-se contra o ser humano. Robô
deriva da palavra "robota" de origem eslava, que significa "trabalho forçado". Na
década de 40, o escritor Isaac Asimov tornou popular o conceito de robô como uma
máquina de aparência humana não possuidora de sentimentos, onde seu
comportamento seria definido a partir de programação feita por seres humanos, de
forma a cumprir determinadas regras éticas de conduta. O termo robótica foi criado
por Asimov para designar a ciência que se dedica ao estudo dos robôs e que se
fundamenta pela observação de três leis básicas:
– Um robô não pode fazer mal a um ser humano e nem consentir,
permanecendo inoperante, que um ser humano se exponha a situação de
perigo;
– Um robô deve obedecer sempre às ordens de seres humanos, exceto em
circunstâncias em que estas ordens entrem em conflito com a primeira lei;
– Um robô deve proteger a sua própria existência, exceto em circunstâncias
que entrem em conflito com a primeira e a segunda lei [1].
Segundo a Robotic Industries Association (RIA), robô industrial é definido
como um "manipulador multifuncional reprogramável projetado para movimentar
16
materiais, partes, ferramentas ou peças especiais, através de diversos movimentos
programados, para o desempenho de uma variedade de tarefas” [2].
Uma definição mais ampla é apresentada pela norma ISO (International
Organization for Standardization) 10218, como sendo: "uma máquina manipuladora
com vários graus de liberdade controlada automaticamente, reprogramável,
multifuncional, que pode ter base fixa ou móvel para utilização em aplicações de
automação industrial" [1], conforme é mostrado na Figura 1.
Um robô industrial é formado pela integração dos seguintes componentes:
Manipulador mecânico: refere-se ao aspecto mecânico e estrutural do robô.
– Elos;
– Juntas;
– Sistema de transmissão;
Fonte [15] Figura 1: Célula de trabalho robotizada
17
Atuadores: São componentes que convertem energia elétrica, hidráulica ou
pneumática, em potência mecânica.
– Atuadores hidráulicos e pneumáticos;
– Atuadores eletromagnéticos;
Sensores: Fornecem parâmetros sobre o comportamento do manipulador.
Unidade de controle: Responsável pelo gerenciamento e monitoração dos
parâmetros operacionais do robô.
Unidade de potência: É responsável pelo fornecimento de potência
necessária à movimentação dos atuadores.
Efetuador: É o elemento de ligação entre o robô e o meio que o cerca.
2.1.2. Classificação dos robôs
Os robôs industriais podem ser classificados de acordo com o numero de
juntas, o tipo de controle, o tipo de acionamento, e a geometria. É usual classificar
os robôs de acordo como o tipo de junta, ou, mais exatamente, pelas 3 juntas mais
próximas da base do robô. Também pode ser classificada em relação ao espaço de
trabalho, ao grau de rigidez, a extensão de controle sobre o curso do movimento e
de acordo com as aplicações adequadas ou inadequadas a eles.
– Robô de Coordenadas Cartesianas;
– Robô de Coordenadas Cilíndricas;
– Robô de Coordenadas Esféricas;
– Robô SCARA;
– Robô Paralelo;
– E o robô Articulado ou Antropomórfico (caso de estudo desse trabalho);
eixo de movimento da junta de rotação da base é ortogonal às outras duas juntas de
rotação que são simétricas entre si. Este tipo de
mobilidade a robôs. Seu volume de trabalho apresenta uma geometria mais
complexa em relação à
tipo de robô e a sua representação do volume de trabalho.
2.1.3.
prismáticas ou rotacionais. Cada par
para um manipulador com N
primeiro elo é
fixados
conhecimento completo das variáveis articulares de um robô
Fonte [16]
Na configuração
eixo de movimento da junta de rotação da base é ortogonal às outras duas juntas de
rotação que são simétricas entre si. Este tipo de
mobilidade a robôs. Seu volume de trabalho apresenta uma geometria mais
complexa em relação à
tipo de robô e a sua representação do volume de trabalho.
.1.3. Modelagem C
Um manipulador mecânico consiste de elos, conectados por juntas
prismáticas ou rotacionais. Cada par
para um manipulador com N
primeiro elo é
fixados) e no seu último elo é incorporada a sua ferramenta de trabalho. O
conhecimento completo das variáveis articulares de um robô
Fonte [16] Figura 2 :
configuração antropomórfica, existem ao menos três juntas de rotação. O
eixo de movimento da junta de rotação da base é ortogonal às outras duas juntas de
rotação que são simétricas entre si. Este tipo de
mobilidade a robôs. Seu volume de trabalho apresenta uma geometria mais
complexa em relação às outras
tipo de robô e a sua representação do volume de trabalho.
Modelagem Cinemática
Um manipulador mecânico consiste de elos, conectados por juntas
prismáticas ou rotacionais. Cada par
para um manipulador com N
primeiro elo é à base de sustentação do robô (sistema de coordenadas
) e no seu último elo é incorporada a sua ferramenta de trabalho. O
conhecimento completo das variáveis articulares de um robô
: Robô Articulado ou Antropomórfico com seu res
antropomórfica, existem ao menos três juntas de rotação. O
eixo de movimento da junta de rotação da base é ortogonal às outras duas juntas de
rotação que são simétricas entre si. Este tipo de
mobilidade a robôs. Seu volume de trabalho apresenta uma geometria mais
s outras configurações
tipo de robô e a sua representação do volume de trabalho.
inemática
Um manipulador mecânico consiste de elos, conectados por juntas
prismáticas ou rotacionais. Cada par
para um manipulador com N graus de liberdade têm
base de sustentação do robô (sistema de coordenadas
) e no seu último elo é incorporada a sua ferramenta de trabalho. O
conhecimento completo das variáveis articulares de um robô
Robô Articulado ou Antropomórfico com seu res
antropomórfica, existem ao menos três juntas de rotação. O
eixo de movimento da junta de rotação da base é ortogonal às outras duas juntas de
rotação que são simétricas entre si. Este tipo de
mobilidade a robôs. Seu volume de trabalho apresenta uma geometria mais
configurações
tipo de robô e a sua representação do volume de trabalho.
Um manipulador mecânico consiste de elos, conectados por juntas
prismáticas ou rotacionais. Cada par junta-elo
graus de liberdade têm
base de sustentação do robô (sistema de coordenadas
) e no seu último elo é incorporada a sua ferramenta de trabalho. O
conhecimento completo das variáveis articulares de um robô
Robô Articulado ou Antropomórfico com seu res
antropomórfica, existem ao menos três juntas de rotação. O
eixo de movimento da junta de rotação da base é ortogonal às outras duas juntas de
rotação que são simétricas entre si. Este tipo de configuraçã
mobilidade a robôs. Seu volume de trabalho apresenta uma geometria mais
configurações [3]. Na
tipo de robô e a sua representação do volume de trabalho.
Um manipulador mecânico consiste de elos, conectados por juntas
elo constitui um grau de liberdade. Assim,
graus de liberdade têm-se N pares
base de sustentação do robô (sistema de coordenadas
) e no seu último elo é incorporada a sua ferramenta de trabalho. O
conhecimento completo das variáveis articulares de um robô
Robô Articulado ou Antropomórfico com seu res
antropomórfica, existem ao menos três juntas de rotação. O
eixo de movimento da junta de rotação da base é ortogonal às outras duas juntas de
configuração é o que permite maior
mobilidade a robôs. Seu volume de trabalho apresenta uma geometria mais
]. Na Figura 2 é
tipo de robô e a sua representação do volume de trabalho.
Um manipulador mecânico consiste de elos, conectados por juntas
constitui um grau de liberdade. Assim,
se N pares
base de sustentação do robô (sistema de coordenadas
) e no seu último elo é incorporada a sua ferramenta de trabalho. O
conhecimento completo das variáveis articulares de um robô
Robô Articulado ou Antropomórfico com seu respectivo volume de trabalho.
antropomórfica, existem ao menos três juntas de rotação. O
eixo de movimento da junta de rotação da base é ortogonal às outras duas juntas de
é o que permite maior
mobilidade a robôs. Seu volume de trabalho apresenta uma geometria mais
é demonstrado
Um manipulador mecânico consiste de elos, conectados por juntas
constitui um grau de liberdade. Assim,
se N pares juntas-elos, onde o
base de sustentação do robô (sistema de coordenadas
) e no seu último elo é incorporada a sua ferramenta de trabalho. O
conhecimento completo das variáveis articulares de um robô q i , determina o
pectivo volume de trabalho.
18
antropomórfica, existem ao menos três juntas de rotação. O
eixo de movimento da junta de rotação da base é ortogonal às outras duas juntas de
é o que permite maior
mobilidade a robôs. Seu volume de trabalho apresenta uma geometria mais
demonstrado esse
Um manipulador mecânico consiste de elos, conectados por juntas
constitui um grau de liberdade. Assim,
elos, onde o
base de sustentação do robô (sistema de coordenadas inerciais
) e no seu último elo é incorporada a sua ferramenta de trabalho. O
, determina o
pectivo volume de trabalho.
18
antropomórfica, existem ao menos três juntas de rotação. O
eixo de movimento da junta de rotação da base é ortogonal às outras duas juntas de
é o que permite maior
mobilidade a robôs. Seu volume de trabalho apresenta uma geometria mais
esse
Um manipulador mecânico consiste de elos, conectados por juntas
constitui um grau de liberdade. Assim,
elos, onde o
inerciais
) e no seu último elo é incorporada a sua ferramenta de trabalho. O
, determina o
19
posicionamento de sua ferramenta no sistema de coordenadas de trabalho. De um
modo geral, os três primeiros graus de liberdade de um robô são responsáveis pelo
posicionamento de sua ferramenta no espaço de tarefas e os restantes pela sua
orientação. Na maioria das aplicações industriais, a programação de tarefas de
robôs, é realizada por aprendizagem, consistindo no movimento individual de cada
junta.
Assim sendo, a programação de trajetórias de um robô torna-se muito fácil,
não necessitando de um conhecimento do modelo, sendo a fase de aprendizagem
basicamente uma operação de armazenamento de uma seqüência de incrementos
necessários para que o conjunto de variáveis articulares determine um
posicionamento final X i , especificado a partir de um perfil de trajetórias fornecido
(robô controlado a partir do sistema de coordenadas de juntas).
Como um robô é controlado através de suas variáveis articulares, a realização
do controle de posição em relação ao sistema de coordenadas cartesianas implicará
no desenvolvimento de metodologias para transformação de coordenadas. A
transformação de coordenadas articulares para cartesianas é normalmente realizada
em tempo real, onde a partir do conjunto de variáveis articulares serão obtidas a
posição e orientação de sua ferramenta [4].
A cinemática de robô manipulador pode ser dividida em dois tipos de
cinemática a cinemática direta e a inversa.
20
Fonte [7] Figura 3: Relação dos problemas da cinemática direta e inversa.
2.1.4. Cinemática direta
Na cinemática direta deseja-se obter a posição e velocidade do efetuador,
para uma dada posição das articulações, ou seja, programar a cinemática direta de
um manipulador é determinar as relações que exprimem um ponto no espaço
cartesiano, em função de um ponto no espaço das juntas.
2.1.5. Cinemática inversa
Enquanto a cinemática direta resulta no desenvolvimento imediato das
expressões do manipulador, a cinemática inversa procura determinar o conjunto de
valores das juntas que se adéquam a uma dada configuração do espaço operacional
ou cartesiano. A cinemática inversa pode ser vista com o conjunto de processos
para determinar as funções inversas do sistema das expressões da cinemática
direta. [4]
O problema da cinemática inversa é mais difícil que o problema da cinemática
direta, pois não há um procedimento sistemático explícito como o algoritmo DH
conforme [7]. Um resultado disto é que cada robô, ou classe de robôs, tem que ser
21
tratados separadamente. No entanto, a solução para o problema da cinemática
inversa é mais útil do que da cinemática direta, pois no controle da trajetória do robô
a cinemática inversa se faz necessária para escolha da melhor configuração das
juntas para um movimento de um ponto a outro com o mínimo de esforço, ou seja,
com o movimento de menos juntas possíveis. Além disso, a chave para fazer robôs
mais versáteis implica em usar feedbacks de sensores externos tais como o de
visão. Sensores externos alimentam informações sobre a localização e orientação
de objetos em termos de variáveis do espaço de configuração.
Estas informações são necessárias na determinação dos valores apropriados
das juntas do robô, para que o robô possa realizar determinada tarefa em
locais sujeitos a interferência de outros equipamentos no espaço de trabalho do
robô. Portanto deve-se encontrar o mapeamento da especificação de entrada do
espaço de configuração da ferramenta dentro de uma especificação de saída do
espaço das juntas. Resume-se desta forma o problema da cinemática inversa.
2.1.6. Notação de Denavit-Hartenberg
A evolução no tempo das coordenadas das juntas de um robô representa o
modelo cinemático de um sistema articulado no espaço tridimensional. A notação de
Denavit-Hartenberg (DH) é uma ferramenta utilizada para sistematizar a descrição
cinemática de sistemas mecânicos articulados com N graus de liberdade [3].
Aplicadas, as juntas têm de estar numeradas por ordem crescente,
começando pela base do manipulador. Pode ser dividido em 4 etapas fundamentais
que se subdividem em vários passos elementares repetidos parcialmente em ciclos,
consoante o numero de elos do manipulador. Na Tabela 1, é descrito o algoritmo,
22
admite-se que o manipulador tem n juntas e para ele se definirão n+1 sistemas de
coordenadas, sendo o último associado à mão ou garra. [4]
Tabela 1: Algoritmo de Denavit-Hartenberg para um manipulador com n juntas.
Fonte [4]
2.1.7. Níveis de Controle Robótico
O Controlador é a parte do robô que opera o braço mecânico e mantém
contato com seu ambiente. O dispositivo em si é composto por hardware e software,
combinados para possibilitar ao robô executar suas tarefas.
O controle do robô pode ser dividido em três níveis:
- Controle do acionador: ou controle de cada eixo do robô separadamente;
- Controle da trajetória: ou controle do braço do robô com coordenação entre
os eixos para percorrer a trajetória especificada subdividindo-se em controle ponto-
a-ponto (método utilizado nesse trabalho) e controle continuo;
23
- Controle de coordenação com o ambiente: é o controle do braço em
coordenação com o ambiente.
Esses níveis podem ser descritos como baixo, intermediário e alto,
respectivamente.
Nesse trabalho foi utilizado o controle de trajetória ponto-a-ponto onde neste
método, o caminho pelo qual o robô precisará passar, até um dado ponto final, é
definido como um conjunto de pontos intermediários. Estes pontos são enviados à
memória do sistema de controle pelo usuário como parte do processo de
aprendizado do robô. O curso de um ponto intermediário a outro não é pré-
determinado e não afeta a implementação da operação principal. Muitos sistemas de
controle de robôs industriais presentes no mercado são deste tipo.
O controle ponto-a-ponto é recomendado para robôs planejados para
executar tarefas em pontos pré-determinados (por exemplo, verter misturas em
moldes, carregar e descarregar partes, ou pontos de soldagem). Onde é necessário
ultrapassar obstáculos em movimento, o operador deve planejar antecipadamente a
introdução de pontos intermediários. Uma modificação mais sofisticada do controle
ponto-a-ponto possibilita a introdução de pontos proibidos no controle de
programação. O programa irá então ser capaz de assegurar que o robô evitará estes
pontos.
O robô pode ser ensinado sobre os pontos de seu trajeto de duas maneiras:
Movendo o robô manualmente para um ponto desejado, gravando este ponto
na memória do robô, e passando para o próximo ponto a ser ensinado - método por
aprendizagem (teach in). Definindo as coordenadas de cada ponto desejado e
gravando-as na memória do robô, sem que este tenha que ser movido fisicamente
para que os pontos sejam aprendidos - método de programação off-line.
24
Uma vez aprendidos os pontos do trajeto, programas podem ser escritos
direcionando o braço do robô para estes pontos, na ordem desejada,
indiferentemente da ordem em que foram ensinados.
O controle ponto-a-ponto é muito mais barato que o controle por
procedimento contínuo. No entanto, só é apropriado em operações em que o trajeto
entre os pontos definidos não é importante. Para executar caminhos mais
complicados, onde é necessário existir precisão do começo ao fim, o controle por
trajetória contínua deve ser usado.
2.1.8. ED-7220C®
O manipulador robótico ED-7220C ilustrado pela Figura 4 foi desenvolvido
pela empresa coreana ED-Laboratory com fins exclusivamente didáticos. Dentre os
fatores que contribuem para limitação de suas aplicações industriais estão
principalmente às limitações mecânicas de seu volume de trabalho, a baixa
velocidade proporcionada por seus atuadores e reduzida capacidade de carga do
robô.
25
Fonte [do Autor] Figura 4: Braço robô ED-7220C
Fonte [6]
Figura 5: Os 5 graus de liberdade do Ed-7220C.
O ED-7220C é um robô de orientação vertical e possui cinco graus de
liberdade, ilustrados na Figura 5, sendo três deles reservados para o
posicionamento e dois para a orientação de seu manipulador.
26
Fonte [6]
Figura 6: Vista superior do volume de trabalho do ED-7220C.
Esta posição refere-se à localização final do manipulador no interior de seu
volume de trabalho, Figuras 6 e 7, após a execução de um movimento e é
determinada através do cálculo cinemático resultante do acionamento dos motores
da base, ombro (shoulder) e cotovelo (elbow).
Fonte [6]
Figura 7: Vista lateral do volume de trabalho do ED-7220C.
As juntas são acionadas através de cinco servo motores de corrente contínua,
sendo o sentido da revolução determinado pela polaridade da voltagem de
operação. Cada motor apresenta um encoder acoplado ao eixo para prover as
informações de posição e velocidade para o efetivo controle em malha fechada. A
27
movimentação do eixo dos motores faz com que o encoder gere sinais de freqüência
que indicam a duração e o sentido do movimento. A unidade controladora do robô, o
ED-MK4, efetua a leitura destes sinais e calcula a trajetória a ser seguida.
Os encoders do projeto possuem uma resolução que permite o retorno de
valores de -32767 a 32767 posições diferentes, entretanto a construção mecânica
do ED-7220C permite apenas rotações completas na junta do “pulso” do robô,
referentes aos motores B e C. Todas as outras juntas têm limitações mecânicas de
movimento, impedindo a utilização da faixa completa de valores de encoder no
comando de um movimento para os motores do cotovelo, ombro e base, conforme
descrito na Tabela 2.
Tabela 2: Especificações do braço robótico ED-7220C
Fonte [6]
A detecção de sua limitação mecânica nos movimentos está associada
primeiramente há microinterruptores ou microswitches, encontrados juntos aos elos
do robô, entretanto, a unidade controladora é capaz de detectar uma eventual
sobrecarga nos motores.
A estrutura do robô carece de uma proteção externa, tendo suas conexões
das juntas e elos, engrenagens, sensores e motores expostos ao acadêmico. Sua
Número de articulações 5 articulações + garra
Construção Braço articulado na vertical
Transmissão Engrenagens, correia dentada e sem fim
Peso 25kg
Precisão (posição) +/- 0,5mm
Velocidade do movimento Aprox. 100mm/s máximo
Capacidade de carga 1kg
Atuador Servomotor DC (com encoder ótico)
Articulação da base +/- 150 graus
Articulação do ombro +130 graus/ -35 graus
Articulação do cotovelo +/- 130 graus
Rotação da garra 360 graus
Raio máximo de operação 610mm (24,4")
Abertura da garra 65mm (sem borracha: 75mm)
Proteção Sobrecarga de um atuador
Faixa de movimento
28
mecânica permite também a movimentação de suas juntas enquanto a garra
mantém-se fechada.
2.1.9. ED-MK4
A ED-MK4, Figura 8, é a unidade controladora desenvolvida pela ED-
Labotatory para controlar a movimentação do robô manipulador didático ED-7220C.
Fonte [6]
Figura 8: Unidade controladora ED-MK4, da empresa ED-Laboratory.
Dentre outros componentes, a controladora dispõe de elementos de potência,
terminais de entrada (para sensores), terminais de saída (para atuadores), o IHM
(Interface Homem-Máquina) Teach-Pendant, processadores e circuitos integrados
de memória, permitindo-a armazenar, executar e monitorar rotinas de programação
através das leituras de tensão, velocidade de revolução e aceleração dos servo
motores do robô. As especificações gerais da unidade controladora e seus
componentes são descritos na Tabela 3.
Tabela 3: Especificações da unidade controladora ED-MK4.
Fonte [6]
Terminal de entrada 8 portas e LEDs
Chave de entrada 8 chaves liga/desliga
Terminal de saída 8 portas e LEDs
Processador Processador de 16 bits, controlador do motor de 8 bits, programador manual de 8 bits
Software ED-72C Robo Talk
29
A programação do robô pode ser feita através de um protocolo de
comunicação serial próprio, onde o usuário utiliza o software RoboTalk no
computador conectado para gerar arquivos “.dat”, contendo as coordenadas
espaciais de cada ponto, e arquivos com extensão “.rt” no qual emprega-se a
linguagem de programação do robô, comandando-o para os pontos no espaço
gravados no arquivo “.dat”, de acordo com a tarefa desejada.
Estas rotinas são executadas através de uma comunicação serial, efetuada
através da interface RS-232 do PC, possibilitando o envio de informações para a
unidade controladora ED-MK4. Alternativamente, a programação pode ser efetuada
diretamente através do Teach-Pendant (controle remoto do robô ED-7220C), no
modo de aprendizado, sendo que a programação é enviada diretamente para a ED-
MK4, não necessitando de um interfaceamento com o computador.
A unidade controladora dispõe de dois modos de comando para efetuar a
movimentação e programação do ED-7220C, sendo eles: o modo de movimentação
livre que, quando selecionado, apresenta a palavra “PLAY” no display do Teach-
Pendant; e o modo de movimentação por software, que apresenta no display a
palavra “HOST”.
Uma das maiores motivações do desenvolvimento deste trabalho foram as
limitações de hardware (do Teach-Pendant) e software (RoboTalk) que impedem a
implementação de projetos como a visão de máquina, o comando via web, controle
com um joystick, geração de trajetórias senoidais, controle através de um software
de simulação, entre outros.
30
2.2 ENGENHARIA REVERSA
A engenharia reversa é uma atividade que trabalha com um produto existente
(um software, uma peça mecânica, uma placa de computador, entre outros)
tentando entender como este produto funciona, o que ele faz exatamente e como ele
se comporta em todas as circunstâncias. É executada a engenharia reversa quando
é necessário a trocar, modificação de uma peça (ou um software) por outro, com as
mesmas características ou entender como esta funciona no caso de não haver
documentação.
Não há um registro inicial de utilização da engenharia reversa, mas sabe-se
que quando ela surgiu, suas primeiras aplicações foram em equipamentos militares,
para que se alcançasse a superioridade militar, e até mesmo como método de
espionagem. Um exemplo do uso da engenharia reversa ocorreu em 1945, durante
a segunda guerra mundial, três bombardeiros americanos modelo B-29 foram
forçados a aterrissar em território russo. Os soviéticos os desmontaram e estudaram.
Usaram a engenharia reversa para copiar o bombardeiro nos mínimos detalhes. O
resultado foi o bombardeiro Tupolev Tu-4 demonstrado na Figura 9 que voou pela
primeira vez em 19 de maio de 1947. A produção em série do bombardeiro começou
neste mesmo ano.
31
Fonte [16]
Figura 9: Bombardeiro Tupolev Tu-4
A engenharia reversa por si própria não envolve modificar o sistema analisado
ou criar um novo sistema baseado no sistema analisado. A engenharia reversa é um
processo de exame apenas e não um processo de mudança ou de replicação [5].
É importante destacar que a engenharia reversa pode ser aplicada à qualquer
processo ou sistema sem caracterizar-se ilícita, entretanto, a divulgação de algumas
das informações adquiridas por esta técnica podem estar sujeitas à proteções
autorais e patentes, nestes casos a reprodução ou divulgação das informações
obtidas podem ferir as leis que a protegem.
Por haver o consentimento da empresa acerca das atividades e pesquisas
desenvolvidas, e por não objetivar nada além de atividades de caráter estritamente
disciplinar e educacional, a aplicação da engenharia reversa na comunicação do
robô manipulador didático ED-7220C não se caracteriza como ilícito.
32
A engenharia reversa também pode ser aplicada para efetuar a detecção de
avarias de sistemas ou ainda no aprendizado de um determinado protocolo de
comunicação [8].
2.3 VISÃO COMPUTACIONAL
Visão se mostra como um dos sentidos mais importantes para a interação de
um agente (humano ou robótico) com o mundo. Visão computacional, também
chamada de entendimento de imagens ou visão de máquinas, descreve a
determinação automática da estrutura e propriedades do ambiente tridimensional no
qual o agente está inserido, ambiente este possivelmente dinâmico, a partir de uma
única ou múltiplas imagens bidimensionais do ambiente. As imagens podem ser
monocromáticas ou coloridas, capturadas por uma ou múltiplas câmaras que, por
sua vez, podem ser estacionárias ou móveis [9].
A estrutura e propriedades a serem extraídas do ambiente podem ser
geométricas (formas, dimensões, localizações de objetos, por exemplo) ou materiais
(cores, texturas, por exemplo). Além disso, se o ambiente estiver mudando durante o
processo de imageamento, deseja-se também inferir a natureza desta mudança,
assim como fazer inferências acerca do futuro. Visão não é uma tarefa simples, uma
vez que o processo de formação de imagens consiste num mapeamento muitos -
para-um: uma grande variedade de superfícies, com diferentes materiais e
condições de iluminação, pode produzir imagens idênticas [10].
De certa forma, pode-se pensar em visão computacional como a tentativa de
“desfazer” parcialmente o processo de formação da imagem, em função disso é
considerado um problema inverso.
33
Infelizmente, não existe uma inversão própria e correta. No entanto, algumas
restrições podem ser impostas para resolver satisfatoriamente a ambigüidade
inerente ao processo visual. Além disso, o agente não precisa saber “tudo” acerca
do ambiente para poder atuar com sucesso.
Dependendo da aplicação, somente alguns aspectos tornam-se necessários.
Por exemplo, em tarefas de manipulação, as ações de segurar peças, encaixar,
inserir que são realizadas, necessitando somente de informações de forma e
localização das peças a serem manipuladas; em tarefas de navegação, ações como
encontrar caminho livre, evitar obstáculos, calcular velocidade e orientação, que são
necessárias, e assim por diante. Nenhuma destas tarefas requer a determinação da
descrição completa do ambiente para ser realizada com sucesso.
2.3.1. Imagem Digital
Um sinal que tenha um domínio contínuo e uma faixa de variação contínua é
chamado de sinal analógico; já um sinal que tenha um domínio discreto e uma faixa
de variação também discreta é chamado de sinal digital. Imagem Digital é uma
matriz de inteiros, onde cada inteiro representa o brilho da imagem num tempo
discreto e num ponto discreto do plano da imagem [9]. Um ponto desta matriz é
denominado pixel.
A transformação da imagem elétrica numa imagem digital envolve um
processo de amostragem e um de quantização. A amostragem discretiza o domínio
da função imagem, fornecendo a cada ponto discreto o valor da função naquele
ponto. A quantização discretiza a faixa de variação da função, mapeando o valor da
função em cada ponto a um valor dentre vários valores discretos. Tipicamente os
34
valores discretos assumidos pelos pontos numa imagem monocromática variam de 0
(preto) a 255 (branco). A Figura 10 mostra uma imagem e sua matriz
correspondente.
Fonte [1] Figura 10: Imagem digital e sua matriz correspondente
2.3.2. Processamento de Imagem Digital
O processo de imageamento introduz diversos ruídos e deformações na
informação contida nas imagens digitais. No entanto, esta informação não está
completamente perdida devida à grande redundância espacial existente, isto é,
pixels vizinhos numa imagem apresentam os mesmos (ou quase os mesmos)
parâmetros físicos. Um grande conjunto de técnicas explora esta redundância para
recuperar a informação contida na imagem. Estas técnicas executam
transformações na imagem, procurando extrair parâmetros intrínsecos tais como
descontinuidades de superfícies, distância, orientação de superfícies, entre outros.
Um dos objetivos mais comuns no processamento de imagens consiste em
eliminar ruídos e extrair as bordas (“edges”) contidas numa imagem. Bordas são
curvas no plano de imagem através das quais existe uma “significante” mudança no
brilho [11]. O interesse nas bordas de uma imagem consiste no fato de que elas
correspondem a importantes contornos da cena.
35
Caso a imagem seja colorida a mesma terá três dimensões onde cada
dimensão da matriz representará uma cor, dentre as cores primarias RGB (
vermelho, verde e azul ).
2.3.3. Limiarização (Threholding)
A limiarização é uma das mais importantes técnicas de segmentação de
imagem. É através dela que se consegue separar os objetos do fundo de uma
determinada imagem. Em uma imagem monocromática, por exemplo, com dois
conjuntos representando a conectividade entre os pixels, facilmente pode-se dizer
que um grupo representa o objeto na imagem e outro grupo, representa o fundo. O
dois grupos foram separados por um limiar T, fazendo com que o conjunto de
conectividade assuma um novo valor, tornando a imagem monocromática em uma
imagem binária. O limiar T pode ser facilmente entendido pela equação 1.
(1)
Onde: ),( yxf é a função que representa a intensidade luminosa na imagem, e
),( yxg , a nova função de luminosidade depois da separação do limiar T.
2.3.4 Método de Otsu
O método de Otsu elege o limiar ótimo maximizando a variância entre classes
36
(between - class variance) mediante uma busca exaustiva. Há diferentes métodos
para achar o limiar, a maioria deles não dá bons resultados quando se trabalha com
imagens do mundo real devido a presença de ruído, histogramas planos ou uma
iluminação inadequada [26]. Pelo contrário, o método de Otsu foi um dos melhores
métodos de seleção do limiar para imagens do mundo real. No entanto, este método
usa uma busca exaustiva para avaliar o critério para maximizar a variância entre
classes. Á medida que o número de classes de uma imagem aumenta, o método de
Otsu precisa de bem mais tempo para selecionar o limiar multi-nível adequado [2].
A importância do método de Otsu está na forma automática de encontrar o
limiar, isto é, não precisa supervisão humana nem informação prévia da imagem
antes de seu processamento.
O método Otsu, como foi dito, se baseia na escolha do valor de corte que maximize
a medida de variância entre duas partes do histograma separadas por um mínimo
local, ou seja, encontrar T que minimize a função:
(2)
onde:
- )(1 Tq é o número de pixels cuja intensidade é menor que T;
- )(2 Tq o número de pixels com intensidade superior a T;
- )(21 Tδ variância dos pixels cuja intensidade é menor que T;
- )(22 Tδ variância dos pixels cuja intensidade é maior que T;
37
2.3.4. Reconhecimento de Objetos
Reconhecimento consiste em identificar e determinar a posição e orientação
de cada objeto na cena em relação à câmera e, com as informações adquiridas na
fase de calibração, determinar sua localização em relação a um sistema de
coordenadas do ambiente (ou do robô), para tarefas de manipulação, por exemplo.
Com determinadas técnicas de processamento de imagem regiões podem ser
extraídas da imagem correspondem a objetos de interesse. Assim, propriedades
como área da região, perímetro, compactividade, centróide, distâncias mínima e
máxima, entre outras, são importantes na identificação e na determinação da
posição e orientação dos objetos.
A área A de uma região consiste na somatória dos pixels de um mesmo
rótulo. Para comparar a área da região com a área do objeto imageado num
determinado posicionamento, deve-se ter conhecimento da calibração da câmera,
que dá a relação (unidade de medida da imagem)/(unidade de medida real), além de
relacionar a posição da câmara com a posição do objeto na cena. O perímetro P
pode ser calculado pela somatória dos pixels pertencentes à borda de interesse. A
compactividade C de uma região é definida como sendo a relação:
A
PC
π4
2
= (2)
O centróide, que no caso corresponde ao centro de área, é usado para
determinar a posição dos objetos e é dado por:
A
yxfyX x y
C
),(..∑ ∑= ; (3)
A
yxfyY x y
C
),(...∑ ∑= (4)
38
sendo A a área, e as somatórias aplicadas à região de interesse. A Figura 11
ilustra este procedimento numa imagem 10x10, com quina superior esquerda sendo
(0,0). A região de interesse encontra-se de (1,2) a (5,8).
Fonte [1] Figura 11: Cálculo do centro de área de uma determinada região
Após a extração dos atributos da imagem, o próximo passo consiste em
corresponder os atributos e informações extraídos da imagem àqueles previamente
armazenados como modelos, numa fase de treinamento do sistema de visão.
A correspondência entre dados extraídos e modelos pode se dar
simplesmente através do uso de um classificador estatístico, permitindo certas
variações estatísticas no processo de comparação. Neste caso, o conjunto de
atributos (do modelo e o extraído da imagem) deve conter elementos em número e
importância significativa para identificar e localizar corretamente cada objeto,
evitando falsos positivos (classificando um objeto como sendo de uma classe
incorreta - diz que é um parafuso quando na verdade trata-se de uma caneta, por
exemplo) e falsos negativos (negando a classe correta na classificação do objeto -
diz que não é um parafuso, quando na verdade trata -se de um parafuso). Pode-se
também realizar um reconhecedor sintático de configuração, onde relações
estruturais são utilizadas, tais como relações entre atributos e/ou segmentos de
bordas.
39
A fase de treinamento dos sistemas de visão baseados em modelos
normalmente se dá através de treinamento supervisionado, onde objetos conhecidos
são apresentados ao sistema, que extrai automaticamente os atributos e relações e
armazena-os em modelos de cada objeto. Estes modelos também podem ser
fornecidos pelo usuário. No entanto, o melhor seria que o sistema os extraísse
automaticamente, para que se tenha uma garantia maior de que os mesmos
procedimentos serão executados para determinar dados dos modelos e da imagem
da cena, durante a fase de execução. O treinamento do sistema de visão deve ser
realizado sob condições mais próximo possível das condições de operação.
2.3.5. Luz Estruturada
Uma técnica para a obtenção de imagens em 3 dimensões é a reconstrução
com luz estruturada. Um sistema de reconstrução deste é composto por dois
conjuntos de ferramentas principais: um coletor de imagens e um conjunto de
programas computacionais. O coletor de imagens é construído baseado em uma
câmara digital de pequeno formato e um projetor de padrões de luz estruturada.
Estes padrões são projetados sobre a superfície do objeto a ser reconstruído e
capturado pela câmara digital que é solidária ao projetor. O cálculo das coordenadas
3D de pontos da superfície do objeto depende de dois conjuntos de elementos que
devem ser conhecidos: as coordenadas de imagem dos alvos projetados e os
vetores diretores destes padrões, ambos no referencial da imagem.
Na modelagem tridimensional por luz estruturada padrões de luz com
características conhecidas são projetados sobre a superfície do objeto e um
instrumento sensor captura a imagem dos padrões que são distorcidos pela
40
superfície de projeção. Pela medição desta distorção e pelo conhecimento das
características geométricas (e/ou radiométrica) dos padrões que são projetados
se faz a determinação das coordenadas de pontos que compõem a superfície do
objeto. Para isto, as relações geométricas existentes entre o sensor e os feixes
de raios luminosos do padrão projetado devem ser determinadas. Diferentes
padrões de luz podem ser usados (linhas, grades, círculos, senoidais). O projetor de
padrões simula uma segunda câmera, e torna a reconstrução 3D mais rápida que
no processo fotogramétrico convencional. Um programa computacional específico
processa estes dados e extrai as coordenadas 3D dos padrões projetados.[27]
41
2.4. KINECT®
Em novembro de 2010 a empresa Microsoft® lançou um acessório para o
videogame Xbox 360® acessório esse, batizado de Kinect® onde o objetivo do
produto é fazer com que o jogador seja capaz de controlar os jogos apenas como o
próprio corpo.
O Kinect® em seu lançamento chegou a marca de 8 milhões de peças
vendidas, entretanto até março de 2011, 10 milhões de exemplares já foram
vendidos no valor de USD 150,00.
A arquitetura básica do Kinect® é formada por um projetor de luz
infravermelha (invisível ao olho humano), uma câmera infravermelha, uma câmera
RGB comum, um conjunto de microfones e um motor, conforme indica a Figura 12.
Sendo a sua interface de dados via USB. Um dos pontos que se destaca no Kinect®
é que esta interface não está criptografada [14], fato que facilitou desde o início sua
utilização fora do XBOX®.
42
Fonte [17] Figura 12: Arquitetura básica do Kinect®
O Kinect® fornece três informações mediante os seus sensores, são eles:
Fonte [18] Figura 13: Resumo da arquitetura básica
- Image Stream (imagens): cada pixel representando uma cor, resolução de
640x480 pixels em 30 frames por segundo (fps) ou 1280x1024 em um máximo
de 15 fps. É possível obter tanto a imagem da câmera RGB quanto a da câmera
infravermelha;
- Depth Stream (informação de profundidade): cada pixel indicando a
distância do objeto em relação ao aparelho. O aparelho detecta cerca de 2000
níveis de sensibilidade e percebe objetos presentes de 1.2 a 3.5
aparelho
Fonte [18]
Além da informação de profundidade
pixel faz parte do corpo de um ser humano. O Kinect
corpos humanos em sua visada.
anulação
reconhecimento da fala em inglês.
uma luz infravermelha é projetada
espalhada por pela superfície com rugosidades da ordem do comprimento de onda
incidente onde ocorre a formação de uma estrutura granular no espaço livre à qual é
dado o nome de
Figura 1
níveis de sensibilidade e percebe objetos presentes de 1.2 a 3.5
aparelho, conforme é mostrado na Figur
Fonte [18]
m da informação de profundidade
pixel faz parte do corpo de um ser humano. O Kinect
corpos humanos em sua visada.
- Audio
anulação de ruído e eco, o Kinect
reconhecimento da fala em inglês.
Para o mapeamento 3D o
uma luz infravermelha é projetada
espalhada por pela superfície com rugosidades da ordem do comprimento de onda
incidente onde ocorre a formação de uma estrutura granular no espaço livre à qual é
dado o nome de
ura 15.
níveis de sensibilidade e percebe objetos presentes de 1.2 a 3.5
conforme é mostrado na Figur
Figura
m da informação de profundidade
pixel faz parte do corpo de um ser humano. O Kinect
corpos humanos em sua visada.
Audio Stream (fluxo de
de ruído e eco, o Kinect
reconhecimento da fala em inglês.
Para o mapeamento 3D o
uma luz infravermelha é projetada
espalhada por pela superfície com rugosidades da ordem do comprimento de onda
incidente onde ocorre a formação de uma estrutura granular no espaço livre à qual é
dado o nome de speckle
níveis de sensibilidade e percebe objetos presentes de 1.2 a 3.5
conforme é mostrado na Figur
Figura 14: Campo de visão alcançado pelo Kinect®
m da informação de profundidade
pixel faz parte do corpo de um ser humano. O Kinect
corpos humanos em sua visada.
(fluxo de
de ruído e eco, o Kinect
reconhecimento da fala em inglês.
Para o mapeamento 3D o Kinect
uma luz infravermelha é projetada
espalhada por pela superfície com rugosidades da ordem do comprimento de onda
incidente onde ocorre a formação de uma estrutura granular no espaço livre à qual é
speckle. O formato com essa luz é projeta pode ser visualizada pela
níveis de sensibilidade e percebe objetos presentes de 1.2 a 3.5
conforme é mostrado na Figura 14
Campo de visão alcançado pelo Kinect®
m da informação de profundidade também é
pixel faz parte do corpo de um ser humano. O Kinect
áudio): com um conjunto de 4
de ruído e eco, o Kinect® permite a gravação de áudio e o
Kinect® utiliza a tecnologia de luz estruturada onde
uma luz infravermelha é projetada na superfície dos objetos, sendo e
espalhada por pela superfície com rugosidades da ordem do comprimento de onda
incidente onde ocorre a formação de uma estrutura granular no espaço livre à qual é
O formato com essa luz é projeta pode ser visualizada pela
níveis de sensibilidade e percebe objetos presentes de 1.2 a 3.5
.
Campo de visão alcançado pelo Kinect®
também é possível retornar
pixel faz parte do corpo de um ser humano. O Kinect
): com um conjunto de 4
permite a gravação de áudio e o
utiliza a tecnologia de luz estruturada onde
na superfície dos objetos, sendo e
espalhada por pela superfície com rugosidades da ordem do comprimento de onda
incidente onde ocorre a formação de uma estrutura granular no espaço livre à qual é
O formato com essa luz é projeta pode ser visualizada pela
níveis de sensibilidade e percebe objetos presentes de 1.2 a 3.5
Campo de visão alcançado pelo Kinect®
possível retornar
pixel faz parte do corpo de um ser humano. O Kinect® consegue diferenciar até 6
): com um conjunto de 4
permite a gravação de áudio e o
utiliza a tecnologia de luz estruturada onde
na superfície dos objetos, sendo e
espalhada por pela superfície com rugosidades da ordem do comprimento de onda
incidente onde ocorre a formação de uma estrutura granular no espaço livre à qual é
O formato com essa luz é projeta pode ser visualizada pela
níveis de sensibilidade e percebe objetos presentes de 1.2 a 3.5 metros à frente do
possível retornar com exatidão se o
consegue diferenciar até 6
): com um conjunto de 4 microfones e a
permite a gravação de áudio e o
utiliza a tecnologia de luz estruturada onde
na superfície dos objetos, sendo e
espalhada por pela superfície com rugosidades da ordem do comprimento de onda
incidente onde ocorre a formação de uma estrutura granular no espaço livre à qual é
O formato com essa luz é projeta pode ser visualizada pela
43
à frente do
com exatidão se o
consegue diferenciar até 6
microfones e a
permite a gravação de áudio e o
utiliza a tecnologia de luz estruturada onde
na superfície dos objetos, sendo essa luz
espalhada por pela superfície com rugosidades da ordem do comprimento de onda
incidente onde ocorre a formação de uma estrutura granular no espaço livre à qual é
O formato com essa luz é projeta pode ser visualizada pela
43
à frente do
com exatidão se o
consegue diferenciar até 6
microfones e a
permite a gravação de áudio e o
utiliza a tecnologia de luz estruturada onde
ssa luz
espalhada por pela superfície com rugosidades da ordem do comprimento de onda
incidente onde ocorre a formação de uma estrutura granular no espaço livre à qual é
O formato com essa luz é projeta pode ser visualizada pela
Fonte [do Autor]
Fonte [do Autor]
Fonte [do Autor] Figura
Na Figura
Fonte [do Autor]
Figura 15: Holograma projetado pelo Kinect® para leitura de profundidade.
igura 16 é mostrado com se dá esse método de identificação.
Figura 16
Holograma projetado pelo Kinect® para leitura de profundidade.
é mostrado com se dá esse método de identificação.
16: Método de
Holograma projetado pelo Kinect® para leitura de profundidade.
é mostrado com se dá esse método de identificação.
Método de identificação 3D por luz estruturada.
Holograma projetado pelo Kinect® para leitura de profundidade.
é mostrado com se dá esse método de identificação.
identificação 3D por luz estruturada.
Holograma projetado pelo Kinect® para leitura de profundidade.
é mostrado com se dá esse método de identificação.
identificação 3D por luz estruturada.
Holograma projetado pelo Kinect® para leitura de profundidade.
é mostrado com se dá esse método de identificação.
identificação 3D por luz estruturada.
44
44
45
2.5 MATLAB®
O Matlab® (MATrix LABoratory) é um poderoso software de computação
numérica, de análise e de visualização de dados, com um propósito bem mais amplo
que o original “laboratório de matrizes”. O Matlab® é um sistema interativo e uma
linguagem de programação para computação técnica e científica em geral [19].
Devido a esses fatores o Matlab® da empresa Mathworks permite a resolução
de vários problemas numéricos, utilizando uma linguagem de alto nível para o
desenvolvimento de algoritmos. Possui diversas funções de tratamento numérico de
alto desempenho, capazes de resolver problemas computacionais de forma mais
eficiente que as tradicionais linguagens de programação, para aumentar a
vantagem, as soluções do Matlab® são expressas de uma forma muito parecida de
como são escritas matematicamente, disponibilizando várias ferramentas que
facilitam e agilizam todo o processo de programação, obtenção de dados e
manipulação dos mesmos, estando totalmente integrado com suas Toolboxes que
fornecem uma enorme variedade de soluções para muitos problemas da engenharia.
Além do ambiente interativo, outra facilidade do Matlab® é a possibilidade de
execução de arquivos texto contendo uma seqüência de instruções definidas pelo
usuário. Esses arquivos texto, que têm extensão '.m', podem ser criados e editados
dentro ou fora do seu ambiente [20].
46
2.6 ROBOTICS TOOLBOX
A Robotics Toolbox é uma ferramenta computacional de modelagem e
controle de robôs industriais desenvolvida por Peter Corke e disponível sob licença
LGPL.
A Robotics Toolbox proporciona muitas funções úteis para o estudo e
simulação com braço robótico, por exemplo, cinemática, dinâmica e geração de
trajetória. O Toolbox é baseado em um método generalista para representar a
cinemática e a dinâmica dos elos dos manipuladores.
Estes parâmetros são encapsulados em objetos no MATLAB®, onde o objeto
robô pode ser criado pelo usuário para representar qualquer elo do manipulador,
sendo também fornecida uma série de exemplos para estudo de robôs, como o
Puma 560 e o braço de Stanford, entre outros. O Toolbox também fornece funções
para a manipulação e conversão entre tipos de dados, tais como vetores,
transformações homogêneas e unidades geométricas que são necessários para
representação tridimensional tanto para a posição quanto orientação [21].
2.7 OPENNI
OpenNI (Interação Natural Open) é uma multi-linguagem, framework multi-
plataforma que define APIs (Interface de Programação de Aplicativos) para escrever
aplicações utilizando Interação Natural.
O principal objetivo do OpenNI é formar uma API padrão que permite a
integração de diversos sensores, entre eles os de audio e de visão. Com esse
framework é possivel efetuar a integração com o Matlab
poderosa ferramenta
“APLICAÇÃO” pode ser substituido por MATLAB
Fonte [
framework é possivel efetuar a integração com o Matlab
oderosa ferramenta
Na Figura
“APLICAÇÃO” pode ser substituido por MATLAB
Fonte [22]
framework é possivel efetuar a integração com o Matlab
oderosa ferramenta para controle de sistemas roboticos.
Na Figura 17 é demostrado a arquitetura básica da API, onde a informação de
“APLICAÇÃO” pode ser substituido por MATLAB
framework é possivel efetuar a integração com o Matlab
para controle de sistemas roboticos.
é demostrado a arquitetura básica da API, onde a informação de
“APLICAÇÃO” pode ser substituido por MATLAB
Figura 17 : Arquitetura da API OpenNI
framework é possivel efetuar a integração com o Matlab
para controle de sistemas roboticos.
é demostrado a arquitetura básica da API, onde a informação de
“APLICAÇÃO” pode ser substituido por MATLAB
: Arquitetura da API OpenNI
framework é possivel efetuar a integração com o Matlab
para controle de sistemas roboticos.
é demostrado a arquitetura básica da API, onde a informação de
“APLICAÇÃO” pode ser substituido por MATLAB®.
: Arquitetura da API OpenNI
framework é possivel efetuar a integração com o Matlab® tornando essa junção uma
para controle de sistemas roboticos.
é demostrado a arquitetura básica da API, onde a informação de
: Arquitetura da API OpenNI
tornando essa junção uma
é demostrado a arquitetura básica da API, onde a informação de
47
tornando essa junção uma
é demostrado a arquitetura básica da API, onde a informação de
47
tornando essa junção uma
é demostrado a arquitetura básica da API, onde a informação de
48
3 METODOLOGIA
3.1 ENGENHARIA REVERSA DA COMUNICAÇÃO
Devido as características da comunicação serial, fez-se necessário o
conhecimento do protocolo utilizado originalmente na comunicação entre o software
RoboTalk e a unidade controladora do robô. Segundo [23] e [24], os parâmetros
dessa comunicação equivalem aos valores listados na Tabela 4.
Tabela 4: Parâmetros de configuração da comunicação serial
Baudrate 9600
Databits 7
Stopbit 2
Parity Odd
RTS On Fonte: [23] e [24].
Entretanto, houve discrepância em alguns parâmetros listados pelas
bibliografias consultadas. Desta forma, a fim de comprovar o correto funcionamento
da comunicação serial envolvida no controle do robô, foram utilizadas técnicas de
engenharia reversa.
A compreensão, por parte da unidade controladora ED-MK4®, dos comandos
que seriam enviados através do Matlab® posteriormente, depende diretamente da
configuração da comunicação estar de acordo com a configuração do protocolo
original, uma vez que, se um parâmetro como o baudrate fosse erroneamente
configurado, acabaria por alterar completamente as características da informação,
invalidando o comando enviado.
Neste trabalho, esta técnica foi aplicada objetivando analisar a formatação e a
seqüência de comandos enviados à ED-MK4® durante o comando do robô e para
monitorar o tráfego da comunicação serial entre a unidade controladora e o
computador conectado foi utilizado o software Free Serial Port Monitor (FSPM) a
Figura 18 demonstra a forma completa de como foi efetuado a identificação dos
comandos.
49
Fonte: [do Autor] Figura 18: Arquitetura montada para identificação dos comandos de comunicação do controlador ED-
MK4® com o RoboTalk® .
50
Conforme identificação dos comandos uma tabela (Tabela 5) de códigos pode
ser gerada para utilização no script de controle via Matlab®.
Tabela 5: Comandos do controlador ED-MK4® Comando Descrição Retorno Parâmetro
AS Retorna qual motor está se movendo.
Valor decimal correspondente.
CG Habilita ou desabilita a garra
0 desabilita 1 habilita
TH Coloca o robô em modo HOST
GS Verifica status da garra 1 se fechada 0 se aberta
PA,m Verifica posição atual do motor
Retorna a posição em pulsos do encoder
M=A,B,C,D,E,F
HH Posiciona o robô na posição inicial
MA Movimenta todos os
motores de forma interpolada
MC Move os motores para posição de destino
MS,m Move o motor m para a posição armazenada no
registrador.
M=A,B,C,D,E,F
VC,m,d Seta a velocidade do motor
M = A,B,C,D,E,F – 100 <= d <= 100
GO Abre a garra GC Fecha a garra
Fonte [do Autor]
Após a identificação dos comandos de controle, o próximo passo foi identificar
a configuração correta da serial para controlar o robô via MATLAB. Configuração
essa que é mostrada na Tabela 6.
51
Tabela 6: Parâmetros de configuração da comunicação serial no MATLAB
Baudrate 9600
Databits 7
Stopbit 2
Parity Odd
Timeout 1000
Requesttosend On
Terminator CR/LF
FlowControl Hardware
DataTerminalReady Off
Fonte: do Autor.
A partir da obtenção dessas informações o script de controle pode ser criado.
Fonte [do Autor] Figura 19: Código de comunicação serial do MATLAB com o ED-MK4
Conforme a Figura 19 observa-se a configuração da serial via script Matlab,
onde caso a conexão não seja bem sucedida o sistema informa o erro e fecha todas
as portas seriais conectada no momento. Conforme o comentário do código, as flags
“Terminator” e “FlowControl” tiveram que ser configuradas para possibilitar a leitura
não só enviar comandos para execução, como também receber informação do
status do robô.
Foi necessário também efetuar a concatenação do código “0D” (onde na
tabela ASCII significa “\r” Carrier return ) no final de cada comando , pois esse
52
comando informa a controladora que a instrução a ser executada está terminada. Na
Figura 20 pode ser visto esse processo.
Fonte [do Autor] Figura 20: Código de inserção do comando "0D" no final de cada instrução de execução.
Outro ponto importante no script de comunicação é o sistema de leitura, onde
o script aguarda alguma resposta da controladora. Nesse ponto foi necessário
efetuar a leitura como o comando “fread”, pois era necessário definir a quantidade
de bytes a serem lidos para que o script não ficasse em um loop infinito lendo sujeira
da serial. Mesmo com essa técnica foi necessário utilizar o comando “flushinput”
para a cada leitura efetuar a limpeza do canal serial. Na figura 21 é demonstrado o
código de leitura para dois bytes.
Fonte [do Autor] Figura 21: Código de recebimento de dados serial via Matlab
Durante o processo de desenvolvimento do algoritmo percebeu-se a
necessidade de um intervalo de tempo entre os comandos, intervalo esse
encontrado via testes empíricos, onde o valor de 300 milissegundos foi suficiente
para deixar o código robusto para envio de comandos em serie.
53
3.2 ROBOTICS TOOLBOX
Após definir a comunicação como o robô, o passo subseqüente foi a utilização
do Toolbox Robotics para modelagem e geração de trajetória do robô.
Primeiramente foi definido o modelado cinemático do robô ED-7220C via
parâmetros de modelagem de Denavit-Hanterberg. Na Figura 22 é demonstrada a
vista do robô em forma de vetores de orientação, técnica utilizada para facilitar a
identificação do modelo de D-H.
Fonte [do Autor]
Figura 22: Representação vetorial das juntas do robô ED-7220C
54
Após aplicar o algoritmo de D-H os parâmetros do modelo cinemático do robô
ficaram da seguinte forma:
Tabela 7: Parâmetros de Denavit-Hartenberg
Links (elos)
iα
(Ângulo de
torção)
ia
(comprimento do
elo em mm)
iθ (Ângulo
de rotação)
id (Deslocamento
da junta em mm)
Nome
1 -90º 0.02 0 0.37 Base
2 0 0.22 0 0 Ombro
3 0 0.22 0 0 Cotovelo
4 -90º 0 0 0 Punho
5 0 0 0 0.080 Rotação
Fonte [do Autor]
Adicionando esses valores na Toolbox é possível verificar a forma como o
robô ficou configurado, na Figura 23 segue os comando executados para geração do
modelo no Robotics Toolbox.
Fonte [do Autor] Figura 23: Configuração dos parâmetros de D-H na Robotics Toolbox
Onde:
55
A utilização do comando “SerialLink” serve para criação do objeto “robo”, o
comando “transl” executa a matriz homogenia da cinemática direta, o comando
“robo.ikine” executa a cinemática inversa do robô, para as seguintes orientações da
cinemática direta e o comando “robo.plot” gera o gráfico do robô, conforme a Figura
24.
Fonte [do Autor] Figura 24: Representação gráfica do robô ED-7220C via Robotics Toolbox
3.3 KINECT®
Após a definição cinemática do robô, partiu-se para o sistema de
reconhecimento de imagem com o Kinect®.
56
Inicialmente foi definida a área de trabalho para posicionamento do Kinect®,
na Figura 25 é demonstrada a área de trabalho do robô defina no laboratório de
robótica da faculdade.
Fonte [do Autor] Figura 25: Área de trabalho definida no laboratório de robótica para execução de testes
57
Na Figura 26 demonstra todo o cenário, especialmente com a posição do Kinect®.
Fonte [do Autor] Figura 26: Cenário de testes completo
Antes de iniciar o trabalho com o Kinect®, foi necessário efetuar a instalação
dos drivers da OpenNI, como também a instalação e configuração dos scripts do
Matlab® criado por Tim Zaman. Para efetuar essas configurações foi utilizado o
tutorial do orientador desse trabalho, encontrado em [25].
O código utilizado para efetuar a captura da imagem RGB e da matriz de
profundidade, pode ser visto na Figura 27.
Fonte [do Autor] Figura 27: Código de captura da imagem RGB e matriz de profundidade.
58
Onde:
- mxNiCreateContext: é o comando que instancia as configurações existente
no arquivo de configuração ”SamplesConfig.xml”;
- option.adjust_view_point: opção que ajusta o ponto de vista do Kinect®;
- mxNiImage: comando responsável de capturar a imagem RGB e a matriz de
profundidade;
- mxNiDeleteContext: comando responsável de desalocar a memória quer foi
usada na criação dos parâmetros de configuração do Kinect®, caso esse comando
não seja usado o sistema vai rodar somente até quando toda a memória física e
virtual do computador seja alocada, nos testes isso ocorre em 3 tentativa em um
computador com 4GB de memória física;
Conforme informação do manual do Kinect ® a distancia recomenda entre o
Kinect® e o jogador é de no mínimo 1.8m, no caso deste trabalho a distancia do
Kinect® até a área de trabalho que o robô irá atuar é de 2,38m conforme a Figura
28.
Fonte [do Autor] Figura 28: Distancia do Kinect® até área de trabalho do robô
59
3.4 PROCESSAMENTO DA IMAGEM
Algumas técnicas foram executadas para uma melhor identificação dos
objetos. Como a câmera RGB do Kinect® gera fotos com 640x480 pixel de
resolução, a imagem inicial ficou com muita informação para poder ser processada,
pensando nisso foi efetuado um corte na figura depois da captação da imagem RGB.
Esse corte se deu na parte superior da área de trabalho do robô, com largura de
mesmo tamanho, dessa forma a imagem para ser processada foi reduzida
drasticamente, facilitando o processamento e melhorando o tempo de resposta do
script, na figura 29 é mostrada a visão frontal do cenário de teste, com o local
cortado pelo script representado pelas linhas pontilhadas.
Fonte [do Autor] Figura 29: Pré-processamento da imagem vista pelo Kinect®
60
O comando utilizado para efetuar esse corte foi o “imcrop” do Matlab® na
figura 30 é mostrado o código referente ao corte da imagem.
Fonte [do Autor] Figura 30: Comando para corte da figura RGB e de profundidade via Matlab®
Onde:
- 303: é a coordenada do pixel no eixo “X”;
- 188: é a coordenada do pixel no eixo “Y”;
- 31 e 18: é o tamanho da figura em pixel;
Esses valores podem ser modificados no momento da calibração da posição
do Kinect®, permitindo assim uma flexibilidade no posicionamento do Kinect® em
relação à área de trabalho.
Como pode ser visto no código, há dois sistemas de corte, o da figura RGB e
o da matriz de valores de profundidade, isso foi feito, pois ao encontrar o centróide
da imagem RGB, é feito a correlação da posição do centróide na matriz de
profundidade.
Para facilitar o calculo do sistema de coordenadas, foi efetuado um
espelhamento da imagem, fazendo com que a posição das peças a serem
identificadas fossem igual à posição real, Na figura 31 é mostrado o código usado
para efetuar esse espelhamento, lembrando sempre que, tudo que foi feito na figura
RGB, teve que ser feito na matriz de profundidade, para que a correlação
dimensional seja preservada.
61
Fonte [do Autor]
Figura 31: Código que efetua o espelhamento da imagem RGB e o da matriz de profundidade.
A partir desse ponto iniciou-se o processo de reconhecimento dos objetos, a
identificação foi feita pela cor, onde na área de trabalho duas peças de cor azul e
vermelha, foram dispostas em determinada posição dentro do limite da área de
trabalho. Na figura 32 é representado o código de reconhecimento do objeto
vermelho.
Fonte [do Autor]
Figura 32: Código de identificação do objeto vermelho.
Onde:
- imsubtract: comando responsável de subtrair uma imagem de outra, que
neste caso é a subtração de qualquer objeto de cor vermelha do resto da figura.
Com esse comando poderia ser subtraída qualquer imagem com alguma cor
especifica, bastando apenas definir o valor da cor em RGB.
- rgb2gray: comando responsável por transformar a imagem RGB em escala
de cinza.
62
- graythresh: comando responsável por definir o limite global da imagem
utilizando o método de Otsu.
- im2bw: Converte uma imagem para o formato binário, com base em um
determinado limite, neste caso o limite se dá pelo resultado do comando “graythrest”
multiplicado por fator de 0.9.
- bwareaopen: Remover todos os objetos da imagem com menos de x pixels,
que neste caso deu-se por objetos de 50 pixels.
A partir desse tratamento o resultado é uma imagem binária somente com o
objeto escolhido, neste caso o objeto vermelho, sendo então efetuada a identificação
do centróide do objeto, na Figura 33 segue o código de identificação do centróide.
Fonte [do Autor]
Figura 33: Identificação do centróide de um objeto.
Onde:
- imfill: Preenche regiões com buracos e outras falhas;
- regionprops: comando que extrai as propriedades morfológicas da região a
ser identificada;
3.5
referenciar o objeto em função da referenc
vista frontal com
convers
calculo dos
Fonte [do Autor]
REFERENCIA DO PONTO DE VISÃO
Depois de identificado o centróide da peça a ser capturada, partiu
referenciar o objeto em função da referenc
vista frontal com
conversão do valor
calculo dos pulsos para o motor de cada junta.
Fonte [do Autor] Figura 34 :
REFERENCIA DO PONTO DE VISÃO
Depois de identificado o centróide da peça a ser capturada, partiu
referenciar o objeto em função da referenc
vista frontal com as medidas da área de trabalho,
o valor da image
pulsos para o motor de cada junta.
: Medidas da área de trabalho e distância da base do robô até área de trabalho.
REFERENCIA DO PONTO DE VISÃO
Depois de identificado o centróide da peça a ser capturada, partiu
referenciar o objeto em função da referenc
as medidas da área de trabalho,
imagem em pixel, para medidas métricas e posteriormente
pulsos para o motor de cada junta.
Medidas da área de trabalho e distância da base do robô até área de trabalho.
REFERENCIA DO PONTO DE VISÃO
Depois de identificado o centróide da peça a ser capturada, partiu
referenciar o objeto em função da referencia da base do robô. Na Figura 3
as medidas da área de trabalho,
em pixel, para medidas métricas e posteriormente
pulsos para o motor de cada junta.
Medidas da área de trabalho e distância da base do robô até área de trabalho.
REFERENCIA DO PONTO DE VISÃO
Depois de identificado o centróide da peça a ser capturada, partiu
ia da base do robô. Na Figura 3
as medidas da área de trabalho, essa informação é
em pixel, para medidas métricas e posteriormente
pulsos para o motor de cada junta.
Medidas da área de trabalho e distância da base do robô até área de trabalho.
Depois de identificado o centróide da peça a ser capturada, partiu
ia da base do robô. Na Figura 3
essa informação é
em pixel, para medidas métricas e posteriormente
Medidas da área de trabalho e distância da base do robô até área de trabalho.
Depois de identificado o centróide da peça a ser capturada, partiu
ia da base do robô. Na Figura 3
essa informação é necessári
em pixel, para medidas métricas e posteriormente
Medidas da área de trabalho e distância da base do robô até área de trabalho.
63
Depois de identificado o centróide da peça a ser capturada, partiu-se para
ia da base do robô. Na Figura 34 segue a
necessária para
em pixel, para medidas métricas e posteriormente o
Medidas da área de trabalho e distância da base do robô até área de trabalho.
63
se para
a
para
o
Na Fi
trabalho
Fonte [do Autor]
Já a Figura 3
informação é muito importante, pois é com esse valor descontado dos valores
obtidos via matriz de profundidade que será possível identificar a distancia do objeto
até a base
Fonte [do Autor]
Figura 35
trabalho.
Fonte [do Autor]
Já a Figura 36
formação é muito importante, pois é com esse valor descontado dos valores
obtidos via matriz de profundidade que será possível identificar a distancia do objeto
até a base do robô
Fonte [do Autor] Figura
segue a vista superior onde
Figura
6 mostra a distancia do Kinect® até o inicio da área de trabalho, essa
formação é muito importante, pois é com esse valor descontado dos valores
obtidos via matriz de profundidade que será possível identificar a distancia do objeto
do robô, tanto para o eixo “X” como o “Y”.
Figura 36: Distancia entre o Kinect® e a área de trabalho em visão lateral.
segue a vista superior onde
Figura 35: Comprimento da área de trabalho
mostra a distancia do Kinect® até o inicio da área de trabalho, essa
formação é muito importante, pois é com esse valor descontado dos valores
obtidos via matriz de profundidade que será possível identificar a distancia do objeto
, tanto para o eixo “X” como o “Y”.
Distancia entre o Kinect® e a área de trabalho em visão lateral.
segue a vista superior onde
Comprimento da área de trabalho
mostra a distancia do Kinect® até o inicio da área de trabalho, essa
formação é muito importante, pois é com esse valor descontado dos valores
obtidos via matriz de profundidade que será possível identificar a distancia do objeto
, tanto para o eixo “X” como o “Y”.
Distancia entre o Kinect® e a área de trabalho em visão lateral.
segue a vista superior onde se mostra
Comprimento da área de trabalho
mostra a distancia do Kinect® até o inicio da área de trabalho, essa
formação é muito importante, pois é com esse valor descontado dos valores
obtidos via matriz de profundidade que será possível identificar a distancia do objeto
, tanto para o eixo “X” como o “Y”.
Distancia entre o Kinect® e a área de trabalho em visão lateral.
se mostra o comprimento da área de
Comprimento da área de trabalho
mostra a distancia do Kinect® até o inicio da área de trabalho, essa
formação é muito importante, pois é com esse valor descontado dos valores
obtidos via matriz de profundidade que será possível identificar a distancia do objeto
Distancia entre o Kinect® e a área de trabalho em visão lateral.
o comprimento da área de
mostra a distancia do Kinect® até o inicio da área de trabalho, essa
formação é muito importante, pois é com esse valor descontado dos valores
obtidos via matriz de profundidade que será possível identificar a distancia do objeto
Distancia entre o Kinect® e a área de trabalho em visão lateral.
64
o comprimento da área de
mostra a distancia do Kinect® até o inicio da área de trabalho, essa
formação é muito importante, pois é com esse valor descontado dos valores
obtidos via matriz de profundidade que será possível identificar a distancia do objeto
64
o comprimento da área de
mostra a distancia do Kinect® até o inicio da área de trabalho, essa
formação é muito importante, pois é com esse valor descontado dos valores
obtidos via matriz de profundidade que será possível identificar a distancia do objeto
65
Após aquisição desses dados iniciou-se os cálculos de referencia dos objetos nas
coordenadas “X”, “Y” e “Z”. Para coordenada X, ao encontrar o centróide da imagem
RGB a referencia dele foi relacionada com a matriz de profundidade, para que o
valor de profundidade fosse encontrado, evitando erro de pontos cegos na leitura do
Kinect®, o eixo “Y” da imagem foi definido com um, pois no corte da imagem o topo
da mesma, sempre estará preenchido pelo objeto, conforme a Figura 31.
Como o valor de profundidade lido pelo Kinect® é dado em milímetros e a
modelagem do robô é feita em metros, o calculo para identificar a distancia da peça
referente a base do robô foi:
1000
Prtan2380 ofundidadeciaMatrizDis− (5)
O resultado da equação 4 representa a coordenada no eixo “X”. Para identificar a
medida do eixo “Y” algumas conversões foram necessárias, primeiro foi convertido o
valor do eixo “X” da imagem em RGB de pixel para centímetros, onde:
- Para um total de 33 pixels o valor equivalente é 15cm;
- Como a distancia da base do robô até o inicio da área de trabalho é de 26
cm o resultado da conversão dos pixels é somado a essa medida, por exemplo:
Se o resultado do eixo “X” for igual a 29 pixel a distancia em centímetro é de
13.1818cm, somando isso a 26 cm, tem-se a distancia em centímetros do objeto em
relação a base do robô, mas como é necessário a conversão para metros, divide-se
esse valor por 100. Porém como a variação da peça não ocorre somente em uma
direção reta, é necessário aplicar Pitágoras no valor encontrado para que o
resultado seja real. Abaixo segue a formula de Pitágoras.
66
222 cba += (6)
Em relação ao eixo “Z”, como os objetos são de tamanhos fixos conhecido,
não foi necessário efetuar nenhum ajuste, pois a partir do posicionamento da garra
definiu-se um deslocamento fixo nessa coordenada.
3.6 CONTROLE DO ROBÔ ED-7220C®
Depois de calculado as distancias e efetuado a cinemática inversa para
descobrir a posição final que a garra deve ficar, foi necessário gerar uma relação
entre o resultado da cinemática inversa e o movimento dos eixos determinados,
entretanto o resultado da cinemática inversa é dado em deslocamento angular.
Como o eixo “Z” era fixo, os únicos elos que precisaram ser movimentados foi
o da base para a movimentação no eixo “X” e o do ombro, determinando o
deslocamento “Y”.
Para converter os valores referentes ao elo da base usou-se a seguinte
equação para o eixo da base:
7052.2
7100 1qi− (7)
Onde:
- 7100: é a total de pulsos necessário para o robô percorrer 150º, angulação
máxima permitida mecanicamente. Como a área de trabalho está apenas em um
quadrante, não foi necessário fazer o range de todo deslocamento angular permitido,
que nesse caso seria 300º;
- qi1: resultado da cinemática inversa para o eixo da base;
- 2.7052: Com o valor passado pela cinemática inversa está em formato de
radianos, esse valor equivale aos 150°;
67
Para o eixo do ombro, utilizou-se a seguinte equação:
4835.1
3174 2qi× (8)
Onde:
- 3174: total de pulsos possíveis do eixo do ombro;
- qi2: resultado da cinemática inversa para o eixo do ombro;
- 1.4835: Com o valor passado pela cinemática inversa está em formato de
radianos, esse valor equivale aos 85°;
Após essas conversões foi utilizado o script de envio de comando para o robô, onde
na Figura 37 demonstra o fragmento do código para movimentação do eixo da base,
que nesse caso é o motor representado pela letra F.
Fonte [do Autor]
Figura 37: Código de controle do eixo da base
68
Para acionar a busca do objeto, foi feito uma tela gráfica simples para escolha
de qual objeto pegar, segue a tela na Figura 38.
Fonte [do Autor]
Figura 38: Tela de controle de busca dos objetos.
69
4 RESULTADOS E DISCUSSÕES
4.1 COMUNICAÇÃO SERIAL
Com o código de envio de comandos para o ED-MK4® via serial pronto, os
testes feitos para determinar a robustez do script deram-se via Command Window
do Matlab®, onde inicialmente é necessário efetuar a conexão via serial e colocar o
robô em modo HOST, na Figura 39 segue o comando que efetua essas duas ações.
Fonte [do Autor] Figura 39: Script de comando para conexão via serial e transpor o sistema de controle do ED-MK4®
para modo HOST.
A taxa de sucesso na movimentação dos motores foi de 100%, em relação ao
tempo de resposta foi necessário apenas adicionar um intervalo de 300ms entre os
comandos, pois isso era uma das restrições do processador do ED-MK4®.
70
4.2 ROBOTICS TOOLBOX
Os testes feitos com a Toolbox Robotic, ocorreram na relação de verificar se a
modelagem cinemática estava correta e no erro gerado na questão da cinemática
inversa.
Para validação da modelagem foi gerado um robô virtual conforme a Figura
40 via comando da Toolbox Robotics drivebot.
Fonte [do Autor] Figura 40: Robô virtual criado via Robotic Toolbox atravês do drivebot.
Posteriormente foi determinada uma posição para garra a partir dos eixos “X”,
“Y” e “Z”, no robô ED-7220C®, inserindo esses dados na cinemática inversa via
comando ikine, determinaram-se os ângulos de rotação dos motores, que depois foi
inserido no robô virtual, para identificação do posicionamento. Em alguns resultados
desses testes o sistema mostrou até duas soluções onde a primeira deu-se com a
garra posicionada de cima para baixo e a outra com a garra em sentido de
71
acoplamento lateral. Para passagens desses valores para o robô real, não houve
problema, porque como o eixo “Z” foi colocado de forma fixa, a garra sempre efetuou
o posicionamento de cima para baixo, conforme mostrado na Figura 41.
Fonte [do Autor] Figura 41: Robô ED-7220C® efetuado a pega do objeto.
4.3 RECONHECIMENTO DO OBJETO
Como foi descrito anteriormente o sistema de reconhecimento iniciou-se com
muitos problemas, onde a priori a preparação do ambiente causou muito transtorno,
pois até então o processamento da imagem estava sendo feito com a imagem total
72
obtida pela câmera RGB que neste caso era uma imagem de 640x480 conforme a
Figura 42.
Fonte [do Autor]
Figura 42: Imagem gerada pela câmera RGB do Kinect®. Para resolver esse problema foi utilizada a técnica de corte descrita na
metodologia desse trabalho, a partir daí, foi gerado um sistema de teste para
verificar a precisão e repetibilidade do robô em conjunto com o sistema de visão. Por
precisão, entende-se a capacidade do robô de ir a uma posição desejada, com
respeito a um sistema de referencia fixo (normalmente a base do robô, como é o
caso desse trabalho), com um erro determinado (por exemplo ± 1mm). Trata-se de
precisão em posicionamento absoluto. Por repetibilidade, entende-se a capacidade
do robô de, uma vez conhecida e alcançada uma posição, e partindo-se da mesma
condição inicial, voltar a ir ("repetir") novamente a tal posição com um erro
determinado.
trabalho.
vermelho a ser pego, nesse caso o teste foi feito na
trabalho.
Fonte [do Autor]Figura
metodologia utilizada para precisão, foi a de verificar quantas vezes a pega do
objeto ocorreu no mesmo ponto e a de repetibilidade se ocorreu a pega do objeto
na Tabela
referente
Tabela
Fonte [do Autor]
Na Figura 4
determinado.
trabalho.
A Figura 4
vermelho a ser pego, nesse caso o teste foi feito na
trabalho.
Fonte [do Autor] Figura 43: Visão superior da área de trabalho com o objeto vermelho a ser identificado na localização
Foram feitos
metodologia utilizada para precisão, foi a de verificar quantas vezes a pega do
objeto ocorreu no mesmo ponto e a de repetibilidade se ocorreu a pega do objeto
na Tabela 8 pode ser visto a por
referente à Figura 4
Tabela 8: Teste de precisão e repetibilidade referente ao posicionamento da Figura 44Figura
43 (a)
43 (b)
43 (c)
Fonte [do Autor]
Na Figura 44 segue o teste referente
determinado. Abaixo segue os testes conforme posições do objeto na área de
Figura 43 mostra uma visão superior da área de trabalho com o o
vermelho a ser pego, nesse caso o teste foi feito na
Visão superior da área de trabalho com o objeto vermelho a ser identificado na localização
m feitos cinco
metodologia utilizada para precisão, foi a de verificar quantas vezes a pega do
objeto ocorreu no mesmo ponto e a de repetibilidade se ocorreu a pega do objeto
pode ser visto a por
Figura 43.
: Teste de precisão e repetibilidade referente ao posicionamento da Figura 44
segue o teste referente
Abaixo segue os testes conforme posições do objeto na área de
mostra uma visão superior da área de trabalho com o o
vermelho a ser pego, nesse caso o teste foi feito na
Visão superior da área de trabalho com o objeto vermelho a ser identificado na localização
cinco tentativas de pega do objeto em cada posição
metodologia utilizada para precisão, foi a de verificar quantas vezes a pega do
objeto ocorreu no mesmo ponto e a de repetibilidade se ocorreu a pega do objeto
pode ser visto a porcentagem de precisão para cada posição do objeto
: Teste de precisão e repetibilidade referente ao posicionamento da Figura 44Precisão
80%
60%
80%
segue o teste referente
Abaixo segue os testes conforme posições do objeto na área de
mostra uma visão superior da área de trabalho com o o
vermelho a ser pego, nesse caso o teste foi feito na
Visão superior da área de trabalho com o objeto vermelho a ser identificado na localização inferior.
tentativas de pega do objeto em cada posição
metodologia utilizada para precisão, foi a de verificar quantas vezes a pega do
objeto ocorreu no mesmo ponto e a de repetibilidade se ocorreu a pega do objeto
centagem de precisão para cada posição do objeto
: Teste de precisão e repetibilidade referente ao posicionamento da Figura 44
segue o teste referente à posição central da área de trabalho.
Abaixo segue os testes conforme posições do objeto na área de
mostra uma visão superior da área de trabalho com o o
vermelho a ser pego, nesse caso o teste foi feito na
Visão superior da área de trabalho com o objeto vermelho a ser identificado na localização inferior.
tentativas de pega do objeto em cada posição
metodologia utilizada para precisão, foi a de verificar quantas vezes a pega do
objeto ocorreu no mesmo ponto e a de repetibilidade se ocorreu a pega do objeto
centagem de precisão para cada posição do objeto
: Teste de precisão e repetibilidade referente ao posicionamento da Figura 44
posição central da área de trabalho.
Abaixo segue os testes conforme posições do objeto na área de
mostra uma visão superior da área de trabalho com o o
vermelho a ser pego, nesse caso o teste foi feito na parte inferior
Visão superior da área de trabalho com o objeto vermelho a ser identificado na localização
tentativas de pega do objeto em cada posição
metodologia utilizada para precisão, foi a de verificar quantas vezes a pega do
objeto ocorreu no mesmo ponto e a de repetibilidade se ocorreu a pega do objeto
centagem de precisão para cada posição do objeto
: Teste de precisão e repetibilidade referente ao posicionamento da Figura 44Repetibilidade
100%
80%
100%
posição central da área de trabalho.
Abaixo segue os testes conforme posições do objeto na área de
mostra uma visão superior da área de trabalho com o o
parte inferior da área de
Visão superior da área de trabalho com o objeto vermelho a ser identificado na localização
tentativas de pega do objeto em cada posição
metodologia utilizada para precisão, foi a de verificar quantas vezes a pega do
objeto ocorreu no mesmo ponto e a de repetibilidade se ocorreu a pega do objeto
centagem de precisão para cada posição do objeto
: Teste de precisão e repetibilidade referente ao posicionamento da Figura 44Repetibilidade
100%
100%
posição central da área de trabalho.
73
Abaixo segue os testes conforme posições do objeto na área de
mostra uma visão superior da área de trabalho com o objeto
da área de
Visão superior da área de trabalho com o objeto vermelho a ser identificado na localização
tentativas de pega do objeto em cada posição, a
metodologia utilizada para precisão, foi a de verificar quantas vezes a pega do
objeto ocorreu no mesmo ponto e a de repetibilidade se ocorreu a pega do objeto,
centagem de precisão para cada posição do objeto
: Teste de precisão e repetibilidade referente ao posicionamento da Figura 44
posição central da área de trabalho.
73
Abaixo segue os testes conforme posições do objeto na área de
bjeto
da área de
Visão superior da área de trabalho com o objeto vermelho a ser identificado na localização
, a
metodologia utilizada para precisão, foi a de verificar quantas vezes a pega do
,
centagem de precisão para cada posição do objeto
Fonte [do Autor]Figura
Tabela
Fonte [do Autor]
Na Figura 4
Fonte [do AutoFigura
Fonte [do Autor] Figura 44: Visão superior da área de trabalho com o objeto vermelho a ser identificado na locali
Tabela 9: Teste de precisão e repetibilidade referente ao posicionamento da Figura 45Figura
44 (a)
44 (b)
44 (c)
Fonte [do Autor]
Na Figura 45 segue
Fonte [do Autor] Figura 45: Visão superior da área de trabalho com o objeto vermelho a ser identificado na localização
Visão superior da área de trabalho com o objeto vermelho a ser identificado na locali
Teste de precisão e repetibilidade referente ao posicionamento da Figura 45
segue o teste referente à posição superior da área de trabalho.
Visão superior da área de trabalho com o objeto vermelho a ser identificado na localização
Visão superior da área de trabalho com o objeto vermelho a ser identificado na locali
Teste de precisão e repetibilidade referente ao posicionamento da Figura 45Precisão
80%
40%
80%
o teste referente à posição superior da área de trabalho.
Visão superior da área de trabalho com o objeto vermelho a ser identificado na localização
Visão superior da área de trabalho com o objeto vermelho a ser identificado na localicentral.
Teste de precisão e repetibilidade referente ao posicionamento da Figura 45
o teste referente à posição superior da área de trabalho.
Visão superior da área de trabalho com o objeto vermelho a ser identificado na localização superior.
Visão superior da área de trabalho com o objeto vermelho a ser identificado na localicentral.
Teste de precisão e repetibilidade referente ao posicionamento da Figura 45
o teste referente à posição superior da área de trabalho.
Visão superior da área de trabalho com o objeto vermelho a ser identificado na localização superior.
Visão superior da área de trabalho com o objeto vermelho a ser identificado na locali
Teste de precisão e repetibilidade referente ao posicionamento da Figura 45Repetibilidade
100%
60%
80%
o teste referente à posição superior da área de trabalho.
Visão superior da área de trabalho com o objeto vermelho a ser identificado na localização
Visão superior da área de trabalho com o objeto vermelho a ser identificado na locali
Teste de precisão e repetibilidade referente ao posicionamento da Figura 45 Repetibilidade
100%
o teste referente à posição superior da área de trabalho.
Visão superior da área de trabalho com o objeto vermelho a ser identificado na localização
74
Visão superior da área de trabalho com o objeto vermelho a ser identificado na localização
o teste referente à posição superior da área de trabalho.
Visão superior da área de trabalho com o objeto vermelho a ser identificado na localização
74
zação
Visão superior da área de trabalho com o objeto vermelho a ser identificado na localização
75
Tabela 10: Teste de precisão e repetibilidade referente ao posicionamento da Figura 46
Figura Precisão Repetibilidade
45 (a) 80% 100%
45 (b) 60% 80%
45 (c) 80% 100%
Fonte [do Autor]
A partir destes testes foi possível perceber uma imprecisão na busca dos
objetos na parte central da área de trabalho, para efetuar uma melhora na precisão
foi necessário adicionar alguns fatores de correção, porém isso criou um problema
de ajustes global onde em alguns pontos a pega do objeto ocorreu de forma perfeita
e de outras não.
Entretanto mesmo com alguns erros na pega do objeto em alguns pontos em
relação ao eixo “Y”, o posicionamento do eixo “X” teve uma precisão de quase
100%, informação validada a partir de testes somente de posicionamento do eixo da
base, que é determinado pelo eixo “X”.
76
5 CONCLUSÃO
A partir de todo esse trabalho, é possível identificar o quanto é importante o
uso de visão computacional para o controle robótico, tanto na facilidade de
implementação, quanto ao custo final do projeto. Entretanto muitos aspectos no
âmbito da robótica devem ser trabalhados na vida acadêmica para os cursos
correlatos, pois a utilização de robôs em aulas pratica com ferramentas que
possibilitem uma versatilidade para criação de métodos de controle, se faz muito
necessário, principalmente para profissionais que pretendem seguir esse ramo de
atividade.
Outro ponto muito importante que se pode concluir a partir desse trabalho é a
necessidade de capacitação de profissionais multidisciplinares, onde no âmbito
robótico requer um conhecimento vasto tanto na área de controle, quanto na área de
programação de sistema computacionais e/ou microprocessados, eletrônica, redes
de comunicação, mecânica, ótica e conhecimentos básicos como geometria e
calculo.
Em linhas gerais esse trabalho, além de agregar bastante conhecimento ao
seu desenvolvedor, deixa como legado uma trilha para utilização do robô ED-
7220C® via Matlab® com scripts prontos para utilização em diversas matérias
correlatas ao trabalho com sistemas robóticos. Sendo também um guia inicial para
quem pretende utilizar o Kinect® como uma ferramenta de reconhecimento de
imagens 3D.
Em relação aos objetivos específicos do trabalho, conclui-se que todos foram
alcançados de forma plena, sendo também esse trabalho, um ponto inicial para
diversos outros trabalhos no âmbito robótico.
77
6 REFERÊNCIAS
[1] ROMANO, Victor Ferreira. Robótica Industrial – Aplicações na indústria de
manufatura e de processos. São Paulo, 2002.
[2] RIVIN, E., Mechanical Design of Robots , 1 ed., McGraw-Hill Inc., New York,
1988.
[3] ROSÁRIO, João Maurício. Princípios de Mecatrônica . São Paulo: Prentice Hall,
2005.
[4] SANTOS, V. M. F. Robótica Industrial: Apontamentos teóricos, exercíc ios para aulas práticas e problemas de exames resolvido s, Universidade de Aveiro, 2003-2004. Disponível em: http://www.mec.ua.pt/. Acesso em: 25-03-2011 [5] CHIKOFSKY, E. J., CROSS, J. H., 1990, Reverse Engineering and Design Recovery: A Taxonomy , IEEE Software, v. 7, n. 1, 1990.
[6] MINIPA. ED-Laboratory: ED-7220C Arm Robot Trainer , Rio de Janeiro, 2003.
[7] SCHILLING, Robert Jr. Fundamentals of Robotics Analysis and Control.
Englewood Cliffs Prentice Hall. Cop, 1990;
[8] MULLER M. RS232 in-line data spy. Elektor Electronics , 10/2001
[9] NALWA, V. S. A., Guided Tour of Computer Vision , AT&T, 1993.
[10] MARR, D., Vision , Freeman, San Francisco, USA, 1982.
[11] RUSSEL, S., NORVIG, P., Artificial Intelligence: a modern approach,
Prentice-Hall Inc ., London, 1995.
78
[12] CENTENO, J., MITISHITA, E., Sensoriamento Remoto por LIDAR (LIDAR
Remote Sensing) Disponível em
<http://www.dsr.inpe.br/sbsr2007/?content=cursos> Acessado em 05-06-2011
[13] R. Lange et al., Time-of-flight range imaging with a custom so lid-state
image sensor , Proceedings of the SPIE, Vol. 3823, pp. 180-191, Munich 1999.
[14]FRIED L.,2011. DIY Kinect Hacking . Disponível em:
http://www.ladyada.net/learn/diykinect/ [Acesso 22/11/2011]
[15] http://eficienciavital.files.wordpress.com/2011/05/industrial_robots.jpg.
Disponível em 05-06-2011
[16] http://www.globalsecurity.org. Disponível em 21-11-2011
[17] PAULA, C. B., Adaptando e desenvolvendo jogos para uso com o Micr osoft
Kinect , TECPAR, 2011.
[18] MICROSOFT RESEARCH, 2011. Programming Guide: Getting Started
with the Kinect for Windows SDK Beta . Disponível em:
<http://research.microsoft.com/en-
us/um/redmond/projects/kinectsdk/docs/ProgrammingGuide_KinectSDK.docx>
Acesso em novembro de 2011.
[19] LAGES, Nobre L. Introdução ao MATLAB. 1999. Universidade Federal de
Alagoas – UFAL – Departamento de Engenharia Estrutural, Maceió/AL. Disponível
em:<http://www.ctec.ufal.br/professor/enl/metnum/Bibliografia/Introducao%20ao%20
MATLAB.pdf>. Acessado em Maio de 2011.
79
[20] FRANÇA, Isabella F. Apostila de introdução ao Matlab ®, 2008. Universidade
Federal Fluminense - UFF - Centro Tecnológico, Niterói/RJ. Disponível em :
<http://www.telecom.uff.br/pet/petws/downloads/apostilas/MATLAB.pdf>. Acessado
em Novembro de 2011
[21] CORKE, P., Robotics, Vision and Control: Fundamental Algorithm s in MATLAB , SPRINGER, 2011 [22] OpenNI User Guide . OpenNI organization. Disponível em:< http://75.98.78.94/images/stories/pdf/OpenNI_UserGuide_v4.pdf>. Acessado em Novembro de 2011. [23] MAIA, J. S.; SIQUEIRA, T. A. Controle remoto de um braço robótico através
de um navegador web . 2006. Trabalho de Conclusão de Curso (Graduação em
Ciência da Computação) – Departamento de Ciência da Computação. Instituto de
Ensino Superior Planalto, Brasília.
[24] SEVERINO, E. C. Joystick para Controle do Braço Mecânico ED-7220C .
2005. Trabalho de Conclusão de Curso (Graduação em Engenharia da Computação)
– Núcleo de Ciências Exatas e Tecnológicas – NCET. Centro Universitário Positivo –
UNICENP, Curitiba.
[25] Tutorial - KINECT + MATLAB . Disponível em:
<https://docs.google.com/viewer?a=v&pid=explorer&chrome=true&srcid=1q5Fg55dr
Ass4ZFQh4KLzusQZHmJ28F5fcUBQX4A_Qs_AP-qH2K01DLru1jo3&hl=pt_BR>
Acessado em: 10/04/2011.
[26] WOLF, C.; JOLION, J.-M. Model base d text detection in images and videos:
a learning approach . Laboratoire d’InfoRmatique en Images et Systèmes
d’information, Palmas, TO,Março 2004.
[27] REISS, M. L. L;TOMMSELLI A. M. G. Reconstrução 3d Por Luz Estruturada: Calibração Dos Vetores Diretores Dos Feixes De Padr ões Projetados. Artigo – Universidade Estadual Paulista – UNESP – SÃO PAULO
ANEXO
Anexo 1
Anexo 2imagem. %OBS: NECESSARIO EFETUAR A CONEXÃO COMO ROBO%envia_comando_robo_arm('th',1,0);%envia_comando_robo_arm('hh',0,0);%envia_comando_robo_arm('pd,F,0',0,0)%envia_comando_robo_arm('mc',0,0) function ROBO_________________________________
ANEXOS
Anexo 1 – Fluxograma do trabalho proposto
xo 2 – Script de controle do robô, controle do Kinect® e processamento imagem.
%OBS: NECESSARIO EFETUAR A CONEXÃO COMO ROBO%envia_comando_robo_arm('th',1,0);%envia_comando_robo_arm('hh',0,0);%envia_comando_robo_arm('pd,F,0',0,0)%envia_comando_robo_arm('mc',0,0)
function ScriptVisionComputerTCC_v2( viEscolha )
%% _____________________CONFIGURAÇÃO DO ROBO_________________________________
%COMO O TOOLBOX NOVO com os dados CERRRTTTTOOOS %%D&H Theta Di Ai Alpha R/P L(1)=Link([0 0.37 0.02 L(2) =Link([0 0 0.22 0 0]); L(3)=Link([0 0 0.22 0 0]); L(4)=Link([0 0 0 L(5)=Link([0 0.080 0 0 0]); robo = Serial
Fluxograma do trabalho proposto
Script de controle do robô, controle do Kinect® e processamento
%OBS: NECESSARIO EFETUAR A CONEXÃO COMO ROBO%envia_comando_robo_arm('th',1,0);%envia_comando_robo_arm('hh',0,0);%envia_comando_robo_arm('pd,F,0',0,0)%envia_comando_robo_arm('mc',0,0)
ScriptVisionComputerTCC_v2( viEscolha )
%% _____________________CONFIGURAÇÃO DO ROBO_________________________________
%COMO O TOOLBOX NOVO com os dados CERRRTTTTOOOS%%D&H Theta Di Ai Alpha R/PL(1)=Link([0 0.37 0.02
=Link([0 0 0.22 0 0]); L(3)=Link([0 0 0.22 0 0]); L(4)=Link([0 0 0 L(5)=Link([0 0.080 0 0 0]); robo = Serial Link(L,
Fluxograma do trabalho proposto
Script de controle do robô, controle do Kinect® e processamento
%OBS: NECESSARIO EFETUAR A CONEXÃO COMO ROBO%envia_comando_robo_arm('th',1,0);%envia_comando_robo_arm('hh',0,0);%envia_comando_robo_arm('pd,F,0',0,0)%envia_comando_robo_arm('mc',0,0)
ScriptVisionComputerTCC_v2( viEscolha )
%% _____________________CONFIGURAÇÃO DO ROBO_________________________________
%COMO O TOOLBOX NOVO com os dados CERRRTTTTOOOS%%D&H Theta Di Ai Alpha R/PL(1)=Link([0 0.37 0.02
=Link([0 0 0.22 0 0]); L(3)=Link([0 0 0.22 0 0]); L(4)=Link([0 0 0 L(5)=Link([0 0.080 0 0 0]);
Link(L, 'name'
Fluxograma do trabalho proposto
Script de controle do robô, controle do Kinect® e processamento
%OBS: NECESSARIO EFETUAR A CONEXÃO COMO ROBO%envia_comando_robo_arm('th',1,0); %envia_comando_robo_arm('hh',0,0); %envia_comando_robo_arm('pd,F,0',0,0) %envia_comando_robo_arm('mc',0,0)
ScriptVisionComputerTCC_v2( viEscolha )
%% _____________________CONFIGURAÇÃO DO ROBO_________________________________
%COMO O TOOLBOX NOVO com os dados CERRRTTTTOOOS%%D&H Theta Di Ai Alpha R/PL(1)=Link([0 0.37 0.02
=Link([0 0 0.22 0 0]); L(3)=Link([0 0 0.22 0 0]); L(4)=Link([0 0 0 L(5)=Link([0 0.080 0 0 0]);
'name' , 'ED7220'
Script de controle do robô, controle do Kinect® e processamento
%OBS: NECESSARIO EFETUAR A CONEXÃO COMO ROBO
ScriptVisionComputerTCC_v2( viEscolha )
%% _____________________CONFIGURAÇÃO DO
%COMO O TOOLBOX NOVO com os dados CERRRTTTTOOOS%%D&H Theta Di Ai Alpha R/PL(1)=Link([0 0.37 0.02 - pi/2 0]);
=Link([0 0 0.22 0 0]); L(3)=Link([0 0 0.22 0 0]); L(4)=Link([0 0 0 - pi/2 0]); L(5)=Link([0 0.080 0 0 0]);
'ED7220' );
Script de controle do robô, controle do Kinect® e processamento
%COMO O TOOLBOX NOVO com os dados CERRRTTTTOOOS %%D&H Theta Di Ai Alpha R/P
pi/2 0]); %BASE=Link([0 0 0.22 0 0]); %OMBRO
L(3)=Link([0 0 0.22 0 0]); %COTOVELOpi/2 0]); %PUNHO
L(5)=Link([0 0.080 0 0 0]); %ROTAÇÃ
Script de controle do robô, controle do Kinect® e processamento
%BASE %OMBRO %COTOVELO
%PUNHO OTAÇÃO
80
Script de controle do robô, controle do Kinect® e processamento da
80
da
81
%% _____________________IDENTIFICAÇÃO DA IMAGEM______________________________ % Instancia as configurações do kinect context = mxNiCreateContext( 'C:\Users\Hamilton\Documents\kinect\kinect\Config\S amplesConfig.xml' ); width = 640; height = 480; option.adjust_view_point = true; [rgb, depth] = mxNiImage(context, option); %Desaloca memoria criada pelo objeto context mxNiDeleteContext(context); % Efetua o corte da imagem, para mapear apenas o lo cal de interesse vmRGB = imcrop(rgb,[303 188 31 18]); vmDEPTH = imcrop(depth,[303 188 31 18]); %Invertendo a imagem, espelhando no eixo X para fic ar igual ao mundo real vmRGB_inv=vmRGB; [a b c]=size(vmRGB_inv); for i=1:b vmRGB_inv(:,i,:)=vmRGB(:,b-i+1,:); end vmDEPTH_inv=vmDEPTH; [a b c]=size(vmDEPTH_inv); for i=1:b vmDEPTH_inv(:,i,:)=vmDEPTH(:,b-i+1,:); end %% _______________PARA INDETIFICAR O OBJETO DE COR VERMELHA__________________ if (viEscolha == 1) disp( 'Objeto VERMELHO a ser identificado, aguarde...' ); voObjetoVermelho = imsubtract(vmRGB_inv(:,: ,1), rgb2gray(vmRGB_inv)); t = graythresh(voObjetoVermelho); % IM2BW - Converter imagem a imagem binária, com ba se no limite bw = im2bw(voObjetoVermelho,t*0.9); %Remover todos os pixels menos de 50px voObjetoVermelho = bwareaopen(bw,50); % Centroid - 1-por-Q vetor que especifica o centro de massa da região. % Note-se que o primeiro elemento de Centroid é a c oordenada % horizontal (ou coordenada x) do centro de massa, eo segundo elemento % é a coordenada vertical (ou y-coordenada). Todos os outros elementos % da Centroid estão em ordem de dimensão try bw2 = imfill(voObjetoVermelho, 'holes' ); s = regionprops(bw2, 'centroid' ); centroids = cat(1, s.Centroid); catch
82
centroids = [1 1]; %Para não da error end viCentroide = vmDEPTH_inv(1,(round(centroid s(1)))) %Caso o centroide encontrado seja 0 deslocar o cent roide para direita %procurando um valor diferente de 0 viIncremento = 0; if (viCentroide == 0) while (viCentroide == 0) viCentroide = vmDEPTH_inv(round(centroids(2)),round(centroids(1)+ viIncremento)); viIncremento = viIncremento + 1; end disp( 'Valor encontrado diferente de 0: ' ) disp(viCentroide) end %Calculos para definir posição no eixo X do plano d o Robo (MOTOR F) %A distancia entre o kinect e a coordenada 0 do eix o X se da a posição 2480mm %então: viCoordenadaXmm = (2480 - double(viCent roide))/1000 %Calculo da coordenada Y % 21 cm garra do centro da base % 26 cm da base ao inicio da area de trabalho % 41 cm da base ao termino da area de trabalho % % 44 cm da base nas extremidades % 31 cm da base nas pontas internas % % EXEMPLO: % 15cm - 33 pixel % x - 29 pixel % % x = 13.1818 % % 13.1818cm + 26cm = 39.1818cmm %Convertendo pixel em metros % 33 = COmprimento da figura em pixel % 15 = Comprimento da area de trabalho em cm % 26 = distancia da base ao inicio da area de traba lho viConvYmetros = ((((round(centroids(1))*15) )/33)+26)/100 viCoordenadaYmm = sqrt(0.125^2+viConvYmetr os^2) %Pitagoras c^2 = a^2+b^2 %EFETUANDO A CINEMATICA INVERSA T = transl(double(viCoordenadaXmm),double(v iCoordenadaYmm), 0.29)*trotx(0)*troty(pi)*trotz(pi/2); qi = robo.ikine(T, [0 0 0 0 0], [1 1 1 1 1 0]) viCoordenadaMotorEParcial = (round((((3174 *(qi(2)))/1.4835)))) viETeste = viCoordenadaMotorEParcial*(-1)
83
%TRATAMENTO DO MOTOR E if (viETeste >= 160) viCoordenadaMotorE = viCoordenadaMotorE Parcial - 300 %CONVERTENDO PARA PUSOS E ENVIANDO PARA O ROBO viCoordenadaMotorF = (round((7100*qi(1 ))/2.7052)) if (viCoordenadaMotorF < 0) viCoordenadaMotorF = viCoordenadaMo torF * (-1) end viDistancia = 1; end if (viETeste >= 20 && viETeste <= 100) viCoordenadaMotorE = viCoordenadaMotorE Parcial - 900 %CONVERTENDO PARA PUSOS E ENVIANDO PARA O ROBO viCoordenadaMotorF = (round((7100*qi(1 ))/2.7052))+100 if (viCoordenadaMotorF < 0) viCoordenadaMotorF = viCoordenadaMo torF * (-1) end viDistancia = 2; end if (viETeste <= 19) viCoordenadaMotorE = viCoordenadaMotorE Parcial - 1500 %CONVERTENDO PARA PUSOS E ENVIANDO PARA O ROBO viCoordenadaMotorF = (round((7100*qi(1 ))/2.7052)) if (viCoordenadaMotorF < 0) viCoordenadaMotorF = viCoordenadaMo torF * (-1) end viDistancia = 3; end end %% _______________PARA INDETIFICAR O OBJETO DE COR AZUL__________________ if (viEscolha == 2) disp( 'Objeto AZUL a ser identificado, aguarde...' ); voObjetoAzul = imsubtract(vmRGB_inv(:,:,3), rgb2gray(vmRGB_inv)); t = graythresh(voObjetoAzul); % IM2BW - Converter imagem a imagem binária, com ba se no limite bw = im2bw(voObjetoAzul,t*0.9); %Remover todos os pixels menos de 300px voObjetoAzul = bwareaopen(bw,50); % Centroid - 1-por-Q vetor que especifica o centro de massa da região. % Note-se que o primeiro elemento de Centroid é a c oordenada % horizontal (ou coordenada x) do centro de massa, eo segundo elemento % é a coordenada vertical (ou y-coordenada). Todos os outros elementos % da Centroid estão em ordem de dimensão
84
try bw2 = imfill(voObjetoAzul, 'holes' ); s = regionprops(bw2, 'centroid' ); centroids = cat(1, s.Centroid); catch centroids = [1 1]; %Para não da error end viCentroide = vmDEPTH_inv(1,(round(centroid s(1)))) %Caso o centroide encontrado seja 0 deslocar o cent roide para direita %procurando um valor diferente de 0 viIncremento = 0; if (viCentroide == 0) while (viCentroide == 0) viCentroide = vmDEPTH_inv(round(centroids(2)),round(centroids(1)+ viIncremento)); viIncremento = viIncremento + 1; end disp( 'Valor encontrado diferente de 0: ' ) disp(viCentroide) end viCoordenadaXmm = (2480 - double(viCent roide))/1000 viConvYmetros = ((((round(centroids(1))*15) )/33)+26)/100 viCoordenadaYmm = sqrt(0.125^2+viConvYmetr os^2) %Pitagoras c^2 = a^2+b^2 %EFETUANDO A CINEMATICA INVERSA T = transl(double(viCoordenadaXmm),double(v iCoordenadaYmm), 0.29)*trotx(0)*troty(pi)*trotz(pi/2); qi = robo.ikine(T, [0 0 0 0 0], [1 1 1 1 1 0]) viCoordenadaMotorEParcial = (round((((3174 *(qi(2)))/1.4835)))) viETeste = viCoordenadaMotorEParcial*(-1) %TRATAMENTO DO MOTOR E if (viETeste >= 160) viCoordenadaMotorE = viCoordenadaMotorE Parcial - 300 %CONVERTENDO PARA PUSOS E ENVIANDO PARA O ROBO viCoordenadaMotorF = (round((7100*qi(1 ))/2.7052)) if (viCoordenadaMotorF < 0) viCoordenadaMotorF = viCoordenadaMo torF * (-1) end viDistancia = 1; end if (viETeste >= 20 && viETeste <= 100) viCoordenadaMotorE = viCoordenadaMotorE Parcial - 900 %CONVERTENDO PARA PUSOS E ENVIANDO PARA O ROBO viCoordenadaMotorF = (round((7100*qi(1 ))/2.7052))+100
85
if (viCoordenadaMotorF < 0) viCoordenadaMotorF = viCoordenadaMo torF * (-1) end viDistancia = 2; end if (viETeste <= 19) viCoordenadaMotorE = viCoordenadaMotorE Parcial - 1500 %CONVERTENDO PARA PUSOS E ENVIANDO PARA O ROBO viCoordenadaMotorF = (round((7100*qi(1 ))/2.7052)) if (viCoordenadaMotorF < 0) viCoordenadaMotorF = viCoordenadaMo torF * (-1) end viDistancia = 3; end end %% _______________TRATAMENTO DOS DADOS PARA ENV IO DO ROBO__________________ %------ PREPARANDO POSICAO ------- envia_comando_robo_arm( 'pd,C,300' ,0,0); pause(0.3); envia_comando_robo_arm( 'pd,B,200' ,0,0); pause(0.3); envia_comando_robo_arm( 'pd,D,500' ,0,0); pause(0.3); envia_comando_robo_arm( 'mc' ,0,0); pause(0.3); envia_comando_robo_arm( 'go' ,0,0); pause(0.3); viTerminomovimento = envia_comando_robo_arm( 'sa' ,0,1); while (viTerminomovimento ~= '0' ) pause(0.5); viTerminomovimento = envia_comando_robo_arm ( 'sa' ,0,1); disp( 'Aguardando termino do movimento C e D' ); end %MOTOR F str1 = { 'pd,F,' }; % 1° PARTE DO COMANDO str2 = num2str(viCoordenadaMotorF); % CONVERTE VALOR PARA TIPO NUMERICO E CRIA A 2° PARTE DO COMANDO str_int = strcat(str1,str2); % CONCATENA AS STRINGS str_int_char = char(str_int); % CONVERTE O STR_INT PARA TIPO CHAR
86
envia_comando_robo_arm(str_int_char,0,0) % ENVIA COMANDO PARA A FUNCAO DE CONTROLE DO ROBO pause(0.3); envia_comando_robo_arm( 'mc' ,0,0) %Retorna a posição incial viTerminomovimento = envia_comando_robo_arm( 'sa' ,0,1); while (viTerminomovimento ~= '0' ) pause(0.5); viTerminomovimento = envia_comando_robo_arm ( 'sa' ,0,1); disp( 'Aguardando termino do movimento F' ); end %MOTOR E str1 = { 'pd,E,' }; % 1° PARTE DO COMANDO str2 = num2str(viCoordenadaMotorE); % CONVERTE VALOR PARA TIPO NUMERICO E CRIA A 2° PARTE DO COMANDO str_int = strcat(str1,str2); % CONCATENA AS STRINGS str_int_char = char(str_int); % CONVERTE O STR_INT PARA TIPO CHAR envia_comando_robo_arm(str_int_char,0,0) % ENVIA COMANDO PARA A FUNCAO DE CONTROLE DO ROBO pause(0.3); envia_comando_robo_arm( 'mc' ,0,0) viTerminomovimento = envia_comando_robo_arm( 'sa' ,0,1); while (viTerminomovimento ~= '0' ) pause(0.5); viTerminomovimento = envia_comando_robo_arm ( 'sa' ,0,1); disp( 'Aguardando termino do movimento E' ); end if (viDistancia == 1) envia_comando_robo_arm( 'pd,D,-400' ,0,0); end if (viDistancia == 2) envia_comando_robo_arm( 'pd,D,-250' ,0,0); end if (viDistancia == 3) envia_comando_robo_arm( 'pd,D,100' ,0,0); end pause(0.3); envia_comando_robo_arm( 'mc' ,0,0); viTerminomovimento = envia_comando_robo_arm( 'sa' ,0,1); while (viTerminomovimento ~= '0' ) pause(0.5); viTerminomovimento = envia_comando_robo_arm ( 'sa' ,0,1); disp( 'Aguardando termino do movimento D' ); end pause(0.3); envia_comando_robo_arm( 'gc' ,0,0); viTerminomovimento = envia_comando_robo_arm( 'sa' ,0,1);
87
while (viTerminomovimento ~= '0' ) pause(0.5); viTerminomovimento = envia_comando_robo_arm ( 'sa' ,0,1); disp( 'Aguardando termino Garra' ); end %DEPOSITA OBJETO ----------------------- pause(0.3) envia_comando_robo_arm( 'pd,D,800' ,0,0); pause(0.3) envia_comando_robo_arm( 'mc' ,0,0) viTerminomovimento = envia_comando_robo_arm( 'sa' ,0,1); while (viTerminomovimento ~= '0' ) pause(0.5); viTerminomovimento = envia_comando_robo_arm ( 'sa' ,0,1); disp( 'Aguardando termino do movimento D' ); end %MOTOR F viCoordenadaMotorF = viCoordenadaMotorF*(-1) str1 = { 'pd,F,' }; % 1° PARTE DO COMANDO str2 = num2str(viCoordenadaMotorF); % CONVERTE VALOR PARA TIPO NUMERICO E CRIA A 2° PARTE DO COMANDO str_int = strcat(str1,str2); % CONCATENA AS STRINGS str_int_char = char(str_int); % CONVERTE O STR_INT PARA TIPO CHAR envia_comando_robo_arm(str_int_char,0,0) % ENVIA COMANDO PARA A FUNCAO DE CONTROLE DO ROBO pause(0.3); envia_comando_robo_arm( 'mc' ,0,0) %Retorna a posição incial viTerminomovimento = envia_comando_robo_arm( 'sa' ,0,1); while (viTerminomovimento ~= '0' ) pause(0.5); viTerminomovimento = envia_comando_robo_arm ( 'sa' ,0,1); disp( 'Aguardando termino do movimento F' ); end %MOTOR E str1 = { 'pd,E,' }; % 1° PARTE DO COMANDO str2 = num2str(viCoordenadaMotorE); % CONVERTE VALOR PARA TIPO NUMERICO E CRIA A 2° PARTE DO COMANDO str_int = strcat(str1,str2); % CONCATENA AS STRINGS str_int_char = char(str_int); % CONVERTE O STR_INT PARA TIPO CHAR envia_comando_robo_arm(str_int_char,0,0) % ENVIA COMANDO PARA A FUNCAO DE CONTROLE DO ROBO pause(0.3); envia_comando_robo_arm( 'mc' ,0,0) viTerminomovimento = envia_comando_robo_arm( 'sa' ,0,1);
88
while (viTerminomovimento ~= '0' ) pause(0.5); viTerminomovimento = envia_comando_robo_arm ( 'sa' ,0,1); disp( 'Aguardando termino do movimento E' ); end if (viDistancia == 1) envia_comando_robo_arm( 'pd,D,-400' ,0,0); end if (viDistancia == 2) envia_comando_robo_arm( 'pd,D,-250' ,0,0); end if (viDistancia == 3) envia_comando_robo_arm( 'pd,D,100' ,0,0); end pause(0.3); envia_comando_robo_arm( 'mc' ,0,0); viTerminomovimento = envia_comando_robo_arm( 'sa' ,0,1); while (viTerminomovimento ~= '0' ) pause(0.5); viTerminomovimento = envia_comando_robo_arm ( 'sa' ,0,1); disp( 'Aguardando termino do movimento D' ); end pause(0.3); envia_comando_robo_arm( 'go' ,0,0); viTerminomovimento = envia_comando_robo_arm( 'sa' ,0,1); while (viTerminomovimento ~= '0' ) pause(0.5); viTerminomovimento = envia_comando_robo_arm ( 'sa' ,0,1); disp( 'Aguardando termino entrega' ); end pause(0.3) envia_comando_robo_arm( 'pd,D,800' ,0,0); pause(0.3) envia_comando_robo_arm( 'mc' ,0,0) viTerminomovimento = envia_comando_robo_arm( 'sa' ,0,1); while (viTerminomovimento ~= '0' ) pause(0.5); viTerminomovimento = envia_comando_robo_arm ( 'sa' ,0,1); disp( 'Aguardando termino do movimento D' ); end %-------------------------------------------- disp( 'Aguarde 3 segundos...' ); pause(3); envia_comando_robo_arm( 'pd,F,0' ,0,0); pause(0.3); envia_comando_robo_arm( 'pd,E,0' ,0,0); pause(0.3);
89
envia_comando_robo_arm( 'pd,D,0' ,0,0); pause(0.3); envia_comando_robo_arm( 'pd,E,0' ,0,0); pause(0.3); envia_comando_robo_arm( 'mc' ,0,0); viTerminomovimento = envia_comando_robo_arm( 'sa' ,0,1); while (viTerminomovimento ~= '0' ) pause(0.5); viTerminomovimento = envia_comando_robo_arm ( 'sa' ,0,1); disp( 'Aguardando termino do movimento D' ); end %PARA TODOS OS MOTORES disp( 'Desligando os motores' ) envia_comando_robo_arm( 'MA' ,0,0); pause(0.3); envia_comando_robo_arm( 'MA' ,0,0); pause(0.3); envia_comando_robo_arm( 'MA' ,0,0); pause(0.3); envia_comando_robo_arm( 'MA' ,0,0); pause(0.3); envia_comando_robo_arm( 'MA' ,0,0); pause(0.3); end Anexo 3 – Script de controle do ED-MK4® %Função responsavel por envio de comandos para o ro bo arm ed-7220-4 %Data da ultima atualização: 23/03/2011 %Autor: Hamilton Sena %Curso: Engenharia de controle e Automação %Licensa: GPL %Foma de usar o script: %envia_comando_robo_arm('Comando',Comunicar Serial) %Exemplo: envia_comando_robo_arm('th',1); %SE 1 = efetua a comunicação com a serial %SE 0 = Não efetua a comunicação serial %infos: % th -> Passa o robo para modo host % hh -> Inicializa o robo function [ viResp ] = envia_comando_robo_arm( vsComando, vi StatusCom, viLeitura ) %Se for passado o valor 1 será efuado a conexão com a porta serial. global voSerial; if (viStatusCom == 1)
90
try voSerial = serial( 'COM1' ); %'Terminator', 'CR/LF','FlowControl','hardware' %O flag a ser utilizado para funcionar a leitura set(voSerial, 'BaudRate' , 9600, 'Parity' , 'odd' , 'StopBit' , 2, 'DataBits' , 7, 'Timeout' , 1000, 'requesttosend' , 'on' , 'Terminator' , 'CR/LF' , 'FlowControl' , 'hardware' , 'DataTerminalReady' , 'off' ); fopen(voSerial); catch disp( 'Erro ao abrir a COM1' ); disp( 'Fechando COM1' ); newobjs = instrfind fclose(newobjs); end end vcComandoDec=(vsComando); vcComandoDec=dec2hex(vcComandoDec); %converte o comando para hexadecimal %--------------------------------------------- %Adiciona o comando D0 que representa o \r no final do comando vcComandoDec((length(vcComandoDec)+1),1)= '0' ; vcComandoDec((length(vcComandoDec)),2)= 'D' ; %--------------------------------------------- vcComandoDec2=hex2dec(vcComandoDec); %converte de hexadecimal para seu respectivo valor em decimal try fwrite(voSerial,vcComandoDec2); %envia o comando para o robo %CASO QUEIRA RECEBER A RESPOSTA DO COMANDO DESCOMENTE AS LINHAS %ABAIXO, CASO COMANDO ENVIADO NÃO ENVIE RESPOSTA, O PROGRAMA FICA %TENTANDO LER, NECESSARIO CRIAR UMA ROTINA PARA EVITAR A LEITURA DE %COMANDOS SEM RESPOSTAS if (viLeitura == 1) pause(0.3); %voSerial.BytesAvailable; if (voSerial.BytesAvailable == 2) resultado = fread(voSerial,1); %COMANDO EFETUADO PARA LEITURA %disp(hex2num(dec2hex(resultado))); %COMANDO EFETU ADO MOSTRAR LEITURA %voSerial.BytesAvailable %disp(resultado); %disp(int2str(resultado(1)-48)) vsPosicao = int2str(resultado(1 )-48); viResp = vsPosicao; end if (voSerial.BytesAvailable == 3) resultado = fread(voSerial,2); %COMANDO EFETUADO PARA LEITURA %disp(dec2hex(resultado)); %COMANDO EFETUADO MOSTR AR LEITURA %voSerial.BytesAvailable if (resultado(1) == 45) %disp(strcat('-',int2str(resultado(2)-48)))
91
vsPosicao = strcat( '-' ,int2str(resultado(2)-48)); viResp = vsPosicao; else vsPosicao = strcat(int2str( resultado(1)-48),int2str(resultado(2)-48)); viResp = vsPosicao; end end if (voSerial.BytesAvailable == 4) resultado = fread(voSerial,3); %COMANDO EFETUADO PARA LEITURA %disp(dec2hex(resultado)); %COMANDO EFETUADO MOSTR AR LEITURA %voSerial.BytesAvailable if (resultado(1) == 45) vsPosicao = strcat( '-' ,int2str(resultado(2)-48), int2str(resultado(3)-48)); viResp = vsPosicao; else vsPosicao = strcat(int2str( resultado(1)-48),int2str(resultado(2)-48), int2str(resultado(3)- 48)); viResp = vsPosicao; end end if (voSerial.BytesAvailable == 5) resultado = fread(voSerial,4); %COMANDO EFETUADO PARA LEITURA %disp(dec2hex(resultado)); %COMANDO EFETUADO MOSTR AR LEITURA %voSerial.BytesAvailable %disp(resultado); if (resultado(1) == 45) vsPosicao = strcat( '-' ,int2str(resultado(2)-48), int2str(resultado(3)-48), int2str(resultado(4)-48)) ; viResp = vsPosicao; else vsPosicao = strcat(int2str( resultado(1)-48),int2str(resultado(2)-48), int2str(resultado(3)- 48), int2str(resultado(4)-48)); viResp = vsPosicao; end end if (voSerial.BytesAvailable == 6) resultado = fread(voSerial,5); %COMANDO EFETUADO PARA LEITURA %disp(dec2hex(resultado)); %COMANDO EFETUADO MOSTR AR LEITURA %voSerial.BytesAvailable %disp(resultado); if (resultado(1) == 45) vsPosicao = strcat( '-' ,int2str(resultado(2)-48), int2str(resultado(3)-48), int2str(resultado(4)-48), int2str(resultado(5)-48));; viResp = vsPosicao; else vsPosicao = strcat(int2str( resultado(1)-48),int2str(resultado(2)-48), int2str(resultado(3)- 48), int2str(resultado(4)-48),int2str(resultado(5)-48));
92
viResp = vsPosicao; end end if (voSerial.BytesAvailable >= 8) resultado = fread(voSerial, 7); %COMANDO EFETUADO PARA LEITURA viResp = vsPosicao; %disp(resultado); end end flushinput(voSerial); % Flush na serial catch viResp = 1; %informa que o comando deu erro disp( 'OCORREU ALGUM ERRO'); end end