SlideShare uma empresa Scribd logo
1 de 68
Baixar para ler offline
Instituto Politécnico do Cávado e do Ave
Escola Superior de Tecnologia

Engenharia Eletrotécnica e de Computadores

José João de Deus Parreira Marques da Fonseca N.º 7629

Motion Tracking Glove

Setembro de 2013
Instituto Politécnico do Cávado e do Ave
Escola Superior de Tecnologia

Engenharia Eletrotécnica e de Computadores

Relatório de Projeto

Trabalho efetuado sob a orientação de:
Professor António Herculano de Jesus Moreira
Professor Dr. João Luís Araújo Martins Vilaça

Setembro de 2013
ii
Agradecimentos
Este foi o culminar de uma etapa, há muito desejada na minha vida, e é por
isso imperioso referir e agradecer a todos os que acompanharam este projeto e me
ajudaram a crescer intelectualmente, profissionalmente e como pessoa.
Ao Professor António Moreira, orientador deste projeto, pelo interesse, pela
orientação, pela dedicação, pela transmissão de conhecimento estimulante e muito
esclarecedor que demonstrou em todas as fases e disponibilizou ao longo do mesmo,
refiro ainda que sem esses inputs não teria sido possível a conclusão em tempo útil.
Ao Dr. João Vilaça a oportunidade de poder frequentar o ICVS e pelo seu
encorajamento e orientação.
Ao Professor Pedro Rodrigues pela ajuda na aplicação 3D.
À equipa do ICVS, por me terem acolhido de uma forma fantástica no seio
deste grupo de investigação, a todos vós o meu muito obrigado pelo tempo e apoio
disponibilizado.
Agradeço à minha esposa Carla, aos meus filhos Flávio e Carolina, bem como
aos meus Sogros José e Olívia pela compreensão, apoio e incentivo que me deram
para que eu tivesse tempo disponível para me dedicar ao projeto.
À STMicroelectronics pela disponibilização de 12 conjuntos de sensores e ao
meu colega Mário Silva pela ajuda e disponibilidade em me ajudar a soldar todas as
placas do meu projeto.
Por último, agradeço a Deus pelo discernimento, sabedoria e a inclusão das
pessoas acima mencionadas durante este projeto. Ele resume tudo e é o motivo de
tudo.
Um projeto final de uma Licenciatura envolve muito mais do que o estudo de
uma determinada matéria, envolve objetivos, dedicação e pessoas. O trabalho que
aqui apresento é muito mais do que o resultado de vários meses de esforço, é acima
de tudo o esforço de todos os que me acompanharam nesta etapa.
A todos o meu muito OBRIGADO!

iii
Resumo
A realização deste trabalho foi o culminar de uma importante etapa
académica. Esta proporcionou a aquisição e consolidação das várias matérias
aprendidas no universo do Curso de Engenharia Eletrotécnica e de Computadores, do
Instituto Politécnico de Cávado e do Ave, bem como outras que desenvolvi ao longo
do mesmo.
Realizado no âmbito de projeto final do 3º ano e consistiu no desenvolvimento
de uma luva de “motion tracking” fundamental para a fisioterapia e para animação de
personagens.
Foi desenvolvida uma luva de motion tracking, que é constituída com 11
sensores MARG (Magnetic, Angular Rate, and Gravity), um microcontrolador CortexM4, dois multiplexers de I2C e um sistema Bluetooth. Os dados calculados, são
enviados em tempo real para o computador, através da ligação Bluetooth.
Foram utilizados algoritmos de filtragem de sensores inerciais já conhecidos
para obtermos a posição real dos dedos (Yaw, Pitch e Roll). Foi também desenvolvida
uma ferramenta de visualização da respetiva movimentação da mão em tempo real.
Implementou-se uma aplicação em C#, que tem por objetivo o
armazenamento dos dados provenientes da luva, em SQL. Estes poderão vir a ser
utilizados pela aplicação 3D, com o intuito de rever movimentos previamente
executados podendo desta forma compará-los com outros existentes. Esta
ferramenta poderá ser utilizada para tratamentos de fisioterapia ou até mesmo para
inclusão do respetivo movimento numa animação da mão de uma personagem.
Este projeto levou ao desenvolvimento de um sistema complexo que será
abordado ao longo deste relatório.
Palavras-chave (Tema):

Motion Glove, Acelerómetro, Magnetómetro,
Giroscópio, I2C, Tracking Glove, 3D, IMU, DCM.

Palavras-chave (Tecnologias):

Matlab, 3D, I2C, Bluetooh, Xbee, C#, Qt/C++, VTK,
mdk-arm (Keil), Atollic True Studio, ARM.

v
Índice
Agradecimentos ........................................................................................................iii
Resumo ......................................................................................................................v
Índice ....................................................................................................................... vii
Índice de Figuras ....................................................................................................... ix
Índice de Tabelas ...................................................................................................... xi
Notação e Glossário ................................................................................................ xiii
1

Introdução ......................................................................................................... 1
1.1

Enquadramento ................................................................................................... 1

1.2

Apresentação do projeto ..................................................................................... 2

1.3

Motivação ............................................................................................................ 2

1.4

Planeamento do projeto ...................................................................................... 2

1.5

Estado da Arte ..................................................................................................... 3

1.5.1

DG5-VHand Glove ........................................................................................................ 3

1.5.2

CyberGlove II ............................................................................................................... 4

1.6
1.7

Contributos deste trabalho .................................................................................. 6

1.8

Objetivos.............................................................................................................. 7

1.9

2

Tecnologias utilizadas .......................................................................................... 6

Organização do relatório ..................................................................................... 7

Desenvolvimento .............................................................................................. 9
2.1

Especificação do sistema e sensores .................................................................... 9

2.2

Desenvolvimento das placas para acomodar os sensores. ................................. 15

2.2.1

Conceção e desenho da PCB para o IMU .................................................................... 16

2.2.2

Conceção e desenho da PCB para a placa de controlo................................................. 18

2.2.3

Teste das Placas e equipamento para o efeito ............................................................ 22

2.3

Aquisição dos sensores e implementação de algoritmos ................................... 22

vii
2.3.1

Calibração dos IMUs .................................................................................................. 34

2.3.2

Protocolo I2C.............................................................................................................. 38

2.4
2.4.1

2.5

Transmissão dos dados de forma remota para o PC. ......................................... 40
Comunicação Bluetooth ............................................................................................. 40

Desenvolvimento de um simulador virtual 3D ................................................... 42

3

Análise e melhoramentos................................................................................ 46

4

Conclusões....................................................................................................... 48
4.1
4.2

Outros trabalhos realizados ............................................................................... 49

4.3

Limitações & trabalho futuro ............................................................................. 50

4.4

5

Objetivos realizados........................................................................................... 48

Apreciação final ................................................................................................. 51

Bibliografia ..................................................................................................... 53

viii
Índice de Figuras
Figura 1 – DG5 – Vhand 2.0................................................................................................................. 4
Figura 2 – CyberGlove II. ..................................................................................................................... 5
Figura 3 – Placa STM32F3 Discovery. ................................................................................................ 10
Figura 4 – STM32F303VCT6 package. ................................................................................................ 10
Figura 5 – Diagrama de blocos do FX0S8700CQ Xtrinsic 6-Axis Sensor da freescale. ........................... 11
Figura 6 – Dispositivo LSM303 – pin out. ........................................................................................... 12
Figura 7 – Dispositivo LSM303 – pin out. ........................................................................................... 13
Figura 8 – Diagrama de Blocos do sistema conceptual. ...................................................................... 14
Figura 9 – Tracking Glove. ................................................................................................................. 14
Figura 10 – Colocação dos IMUs........................................................................................................ 16
Figura 11 – Esquema elétrico para o IMU. ......................................................................................... 16
Figura 12 – Placa IMU vista de ambas as faces. ................................................................................. 17
Figura 13 – Placa IMU. ...................................................................................................................... 18
Figura 14 – Esquema elétrico para a placa de controlo. ..................................................................... 19
Figura 15 – Placa da Controlo vista de ambas as faces. ..................................................................... 20
Figura 16 – Seleção do endereço do PCA9548A.................................................................................. 20
Figura 17 – Placa de controlo. ........................................................................................................... 21
Figura 18 – Placa proveniente do fornecedor de PCB. ........................................................................ 22
Figura 19 – Sensor HMC5843 da Sparkfun. ........................................................................................ 23
Figura 20 – Gráfico com dados ideais de um magnetómetro. ............................................................. 24
Figura 21 – Calibração de Soft e Hard-iron do sensor 1. ..................................................................... 25
Figura 22 – Calibração de Soft e Hard-iron do sensor 2. ..................................................................... 25
Figura 23 – Diagrama de blocos da representação do algoritmo de Madwick. ................................... 26
Figura 24 – Fluxograma do código implementado no microcontrolador. ............................................ 28
Figura 25 – Orientação dos eixos dos sensores. ................................................................................. 32
Figura 26 – Símbolo do I2C, retirado da wikipédia. ............................................................................. 38
Figura 27 – Um esquemático simples com um Master, três nós de slave e resistências de pull-up. ...... 38

ix
Figura 28 – Envio de dados Master – Slave. ....................................................................................... 39
Figura 29 – Envio de dados Slave – Master. ....................................................................................... 39
Figura 30 – Start e Stop Bits. ............................................................................................................. 40
Figura 31 – Bluetooth HC-05. ............................................................................................................ 40
Figura 32 – Tabela para alterar os parâmetros da interface série do módulo Bluetooth. .................... 41
Figura 33 – Menu principal do simulador 3D. .................................................................................... 42
Figura 34 – Botão “serial port”. ......................................................................................................... 42
Figura 35 – Menu acesso à porta série. ............................................................................................. 43
Figura 36 – Botões de controlo do menu da porta série. .................................................................... 43
Figura 37 – Menu de configurações da porta série............................................................................. 43
Figura 38 – Controlo manual dos IMUs.............................................................................................. 44
Figura 39 – Pontos para desenho da mão 3D. .................................................................................... 45
Figura 40 – Interface para leitura e armazenamento dos dados em SQL. ........................................... 49
Figura 41 – Novos sensores da ST com 9 Dof. .................................................................................... 50
Figura 42 – Proposta para uma luva. ................................................................................................. 50

x
Índice de Tabelas
Tabela 1 – Pin-out dos LEDS da placa STM32F3. ................................................................................ 27
Tabela 2 – Calibração do acelerómetro. ............................................................................................ 35
Tabela 3 – Calibração do magnetómetro. .......................................................................................... 36
Tabela 4 – Calibração do giroscópio. ................................................................................................. 37
Tabela 5 – Tempos de impressão....................................................................................................... 47

xi
Notação e Glossário
ADC

Analog-to-digital converter

AHB

Advanced High-performance Bus

CCMSRAM

Core coupled memory Static read access memory

DCM

Direction cosine matrix

DMA

Direct memory access

Eagle

Software para desenho de PCB

PCB

Printed circuit board

DAC

Digital-to-analog converter

Dof

Degrees of freedom

I2C

Inter-Integrated Circuit

SDA

Serial data line

SCL

Serial clock line

Wifi

Wireless Fidelity

MARG

Magnetic, Angular Rate, and Gravity

IMU

Inertial Measurement Unit

LQE

Linear quadratic estimation

IDE

Integrated Development Environment

MDK

Microcontroler Development Kit

MEMS

Microelectromechanical systems

USB

Universal serial bus

3D

Três dimensões (Three-dimensional)

DSP

Digital Signal Processor

xiii
ALU

Arithmetic logic unit

KB

Kilobyte

MCU

Microcontroller

FPU

Floating Point Unit

MIPS

Millions of Instructions Per Second

DPS

Degrees Per Second

LGA

Land grid array

SMD

Surface-mount device

PGA

Pin Grid Array

SRAM

Static Random Access Memory

xiv
Introdução

Motion Tracking Glove

1 Introdução
1.1 Enquadramento
Com o avanço da nanotecnologia conseguiu-se reduzir o tamanho dos
Microelectromechanical systems (MEMS), nomeadamente os acelerómetros,
magnetómetros e giroscópios ao ponto de se conseguir fazer um IMU de 9 graus de
liberdade do tamanho de uma unha.
Nos dias de hoje é importante a determinação da posição e orientação em
vários campos da nossa sociedade, nomeadamente em navegação de carros, aviões e
outros equipamentos. Tem sido bastante analisado e estudado o movimento do
corpo, em especial o das mãos para diversas aplicações de reabilitação, animação de
personagens animadas em filmes e jogos 3D. Em todos estes sistemas a tecnologia
usada requer uma referência externa, podendo ser do tipo ótico, magnético e/ou
acústico, para a localização do respetivo objeto.
Atualmente os sensores inerciais através da captação ou medição das
quantidades físicas, nomeadamente a aceleração e velocidade angular, permitem
determinar a orientação de um objeto a que está diretamente associado. Sendo estes
sensores referenciados internamente e imunes a interferências, conseguem efetuar a
localização de corpos sem restrições [1].
Nestes sistemas o maior desafio é determinar a orientação, pois esta é obtida
através da integração temporal de sinais provenientes de giroscópios, magnetómetros
e acelerómetros que podem ter desvios e ruídos. Para melhorar estas variáveis e ter
mais precisão de posicionamento, tradicionalmente são utilizados filtros de Kalman
(KFs) também conhecidos por “linear quadratic estimation” (LQE). Estes têm uma
aplicação vasta dentro de equipamentos de navegação, como por exemplo os
telemóveis que já utilizam esta técnica em jogos e orientação.

José Fonseca

1
Introdução

Motion Tracking Glove

1.2 Apresentação do projeto
O projeto tem como objetivo a criação de uma luva constituída por sensores
inerciais de 6 Dof (Acelerómetro e magnetómetro), posicionados nas extremidades
dos dedos para a simulação em tempo real do movimento da mão.
A luva permitirá determinar a orientação relativa de cada dedo em tempo real
e enviar os dados para um PC com um simulador 3D por Bluetooth.
O sistema terá aplicabilidade em tratamentos de fisioterapia e animação de
personagens 3D.

1.3 Motivação
A motivação para a realização deste projeto surgiu pelo desafio das áreas
envolventes que o abrangiam. Foi necessário da minha parte incluir a
interdisciplinaridade e acesso a várias matérias desconhecidas.
Atualmente as áreas de sistemas embebidos e Eletrónica médica estão em
desenvolvimento constante e foi para mim um desafio interessante conseguir
interagir com uma área de grande handicap, que é a programação.

1.4 Planeamento do projeto
O projeto foi delineado em ter as seguintes etapas com a respetiva carga
horária:
1. Análise do estado da arte. (20h)
2. Especificação do sistema e sensores. (30h)
3. Desenvolvimento das placas para acomodar os sensores. (30h)
4. Aquisição dos sensores e implementação de algoritmos. (80h)
5. Desenvolvimento de um simulador virtual 3D. (120h)
6. Transmissão dos dados de forma remota para o PC. (20h)
7. Validação do sistema de fisioterapia e animação de personagens. (30h)
8. Escrita do relatório. (70h)

José Fonseca

2
Introdução

Motion Tracking Glove

1.5 Estado da Arte
Neste capítulo aborda-se o que foi desenvolvido na área de “Motion Tracking”
da mão humana. “Motion Tracking” e outros tipos de deteção de movimento do corpo
humano têm vindo a ser um tema cada vez mais estudado e investigado.
Literatura recente aponta para estudos que incluem diversos métodos: através
de roupa colorida e ou fatos [2]-[3], através de sensorização [4], através do campo
electroestático [5], através de várias câmaras de vídeo [6]-[7], entre outros.
Após uma pesquisa na internet foram encontradas várias soluções de acordo
com os métodos acima referidos, no entanto os sistemas encontrados ou são caros ou
dependem de um sistema de captação de vídeo que efetue uma aproximação ao
movimento real, não permitindo ao utilizador um movimento livre como seria de
esperar para um sistema de reabilitação fisioterapêutica e/ou animação 3D.
Com o método de vídeo o acompanhamento/seguimento através de cores
facilita a estimativa da pose da mão numa base de dados que já possua as várias
posições, no entanto esta abordagem não é precisa.
Aborda-se apenas alguns dos materiais encontrados para que se possa ter a
perceção do que existe no mercado.
1.5.1 DG5-VHand Glove
Esta luva é comercializada pela empresa Virtual Realities LTD [2] e tem como
características principais:
 5 Flexómetros proprietários – Para uma elevada estabilidade;
 3 Graus de Tracking integrado;
 Aparência inovadora;
 Alta resolução - 10 bit, 1024 posições por dedo;
 Plataforma independente USB ou uma interface independente sem fios por
Bluetooth;
 C++ SDK com programas de exemplo;
 Pacote de Software;
 Alta taxa de atualização;

José Fonseca

3
Introdução

Motion Tracking Glove

 Processador incorporado (20 MHz);
 Firmware atualizável;
 Preço 585.00 dólares.

Figura 1 – DG5 – Vhand 2.0.
Fonte: http://www.dg-tech.it/vhand/dg5%20vhand%202.0%20datasheet.pdf

1.5.2 CyberGlove II
A CyberGlove II também é comercializada pela Virtual Realities e segundo o
fabricante já é totalmente instrumentalizada o que proporciona até 22 graus de
liberdade com uma alta precisão. Usa uma tecnologia proprietária com Flexómetros
resistivos que transforma com precisão os movimentos da mão e dedos em dados
digitais dos vários ângulos das juntas.
O modelo de 18 sensores tem como característica dois Flexómetros em cada
dedo, 5 sensores de presença, um para cada dedo e também para o pulso, sensores
de dedos entrelaçados, sensores de curvatura da palma bem como sensor para a
flexão do pulso.
O modelo de 22 Sensores é de certa forma igual ao anterior, a principal
diferença entre os dois são os três Flexómetros presentes em cada dedo, dando mais
precisão do seu movimento.
Cada sensor é extremamente fino e flexível ao ponto de ser quase indetetável
na luva elástica.
Este sistema da CyberGlove já é utilizado num vasto conjunto de aplicações
reais tais como avaliação digital de prototipagem, realidade virtual em biomecânica e

José Fonseca

4
Introdução

Motion Tracking Glove

animação. Este modelo é também equipado com um sistema sem fios para
comunicação dos respetivos movimentos, sendo assim bastante versátil para os mais
variados projetos que necessitem de movimentação livre de fios.

Características:


Número de sensores: 18 ou 22;



Resolução por sensor: 0.5 Graus (típico);



Repetibilidade por sensor: 1 grau (Desvio típico entre utilizações);



Linearidade do sensor: 0.6% máximo não linear sobre a gama da junta;



Taxa de atualização por sensor: 90 registros/seg. mínimo (100 registos/seg.
típico);



Luvas suportadas por cada recetor sem fios: 2;



Sistema operativo: Windows 2000, XP, 7;



Duração máxima da bateria: 3 horas;



Ciclo de vida da bateria: 1 ano;



Carregador de bateria: Externo;



Raio de ação: 10 metros de raio de porta USB;



Interface: Porta USB para o recetor sem fios;



Preço: acima dos 4000 dólares.

Figura 2 – CyberGlove II.
Fonte: http://www.vrealities.com/products/data-gloves/cyberglove-ii

Concluindo, é evidente que existem variadas aplicações de motion tracking. No
entanto, podemos verificar que as soluções mais baratas não têm a mobilidade e
posicionamento em relação ao mundo, introduzindo erros na orientação e posição

José Fonseca

5
Introdução

Motion Tracking Glove

real da mão. As mais dispendiosas já possuem sistemas de orientação através de
inertial measurement unit (IMU). No entanto devido aos elevados custos, a sua
comercialização e utilização ficam limitadas.

1.6 Tecnologias utilizadas
Nas várias etapas deste projeto foram utilizadas várias tecnologias e em
situações completamente distintas.
Numa primeira fase o Arduino [8] e o Matlab [9] foram utilizados para diversos
testes e estudos com sensores (HMC5843 da Sparkfun) com 3 Dof. O IDE do Arduino
é específico para a programação da placa e o Matlab para a respetiva validação dos
resultados.
Para a implementação do código no microcontrolador STM32F4 foram
utilizados inicialmente dois programas: o MDK-ARM da Keil [10] e o Atollic True Studio
[11], mas por força de restrição do tamanho de código (32Kb) utilizou-se o compilador
da Keil.
Para a programação do simulador 3D foi utilizado o Visual Studio 2010 [12] e
Qt/C++ com a livraria VTK [13].
Para a implementação da base de dados foi utilizado o Microsoft SQL Express
2012 [14].

1.7 Contributos deste trabalho
O contributo para este projeto foi de certa forma consolidar os conceitos sobre
determinadas áreas em navegação inercial, usar algoritmos conhecidos e ajustá-los de
maneira a efetuarem leituras dos 11 IMUs, para que estes sejam capazes de ler e
interpretar vários valores e aplicá-los no simulador 3D.
Como um dos objetivos era o de acomodar os sensores num espaço reduzido,
foi também implementada uma placa que incorpora os três sensores (Giroscópio,
Magnetómetro e Acelerómetro) necessários para obter a orientação do objeto.
Foi também desenvolvida uma placa para controlo da leitura dos vários
sensores, através de multiplexers de I2C. Esta abordagem deve-se ao facto de os

José Fonseca

6
Introdução

Motion Tracking Glove

endereços I2C dos sensores serem iguais e inalteráveis. Também foi incluído na placa,
um sistema para carregamento da bateria através da porta USB.

1.8 Objetivos
Como foi referido no capítulo de apresentação, de uma forma sucinta, os
objetivos deste trabalho são os seguintes:


Realização de uma luva de motion tracking.



Especificação do sistema e sensores inerciais nas pontas dos dedos.



Desenvolvimento das placas para acomodar os sensores.



Aquisição dos sensores e implementação de algoritmos para determinar a
orientação de cada dedo.



Transmissão dos dados, da orientação, de uma forma remota para um
computador através de uma ligação sem-fios.



Desenvolver um simulador virtual 3D para validação do sistema a nível de
tempo real.

1.9 Organização do relatório
Este relatório é constituído por quatro capítulos:
1. Introdução: Realização do enquadramento do projeto, bem como a
motivação, planeamento, estado da arte, tecnologias utilizadas,
contributos e objetivos.
2. Desenvolvimento: Apresentação do problema, a forma como este foi
abordado,

tipos

de

tecnologias

que

foram

utilizadas

para

o

desenvolvimento do código bem como as várias partes de hardware que
foram desenvolvidas.
3. Análise e melhoramentos: Análise do problema e a forma como foi
melhorado.
4. Conclusões: Neste capítulo, são apresentadas as conclusões finais e uma
análise crítica pessoal ao mesmo, com referência aos objetivos propostos,
se estes foram alcançados bem como as respetivas limitações e trabalhos
futuros.

José Fonseca

7
Desenvolvimento

Motion Tracking Glove

2 Desenvolvimento
Neste capitulo analisar-se-á o desenvolvimento do projeto de acordo com as
etapas definidas no subcapítulo 1.4 planeamento do projeto:

1º

Estado da Arte

2º

Especificação do sistema e sensores.

3º

Desenvolvimento das placas para acomodar os
sensores.

4º

Aquisição dos sensores e implementação de
algoritmos.

5º

Transmissão dos dados de forma remota para o PC.

6º

Desenvolvimento de um simulador virtual 3D.

2.1 Especificação do sistema e sensores
Neste capítulo é verificado o sistema como um todo e a forma como foram
selecionados os sensores e dispositivos contemplados no projeto.
O sistema necessita de um microcontrolador para comunicar com os sensores,
calcular as orientações e de seguida enviar os cálculos através da porta série para um
computador. O microcontrolador mais utilizado na licenciatura foi o Arduino desta
forma este iria ser o microcontrolador utilizado. No entanto e após alguns testes com
as leituras de apenas 5 sensores verificou-se que o mesmo não conseguia fazer mais
do que 5 amostragens por segundo do conjunto desses mesmos sensores.
Foi por isso decidido alterar o microcontrolador para outro com mais
capacidade de processamento, se possível com uma Hard-FPU (floating-point unit)
para tornar os cálculos mais rápidos. Após alguma pesquisa decidiu-se optar por o

José Fonseca

9
Desenvolvimento

Motion Tracking Glove

microcontrolador STM32F303VCT6 do tipo Cortex-M4 que se encontra incluído na
placa de desenvolvimento STM32F3Discovery da STM conforme a Figura 3.

Figura 3 – Placa STM32F3 Discovery.
Fonte: http://www.st.com/st-webui/static/active/en/fragment/product_related/rpn_information/board_photo/stm32f3discovery.jpg

STM32F303VCT6 microcontrolador

Figura 4 – STM32F303VCT6 package.
Fonte: Manual do microcontrolador

Este dispositivo tem as seguintes características:
 Core ARM™Cortex-M4 32-bit MCU;
 FPU tem 256 KB Flash;
 48 KB SRAM;
 Até 12 interfaces de comunicação incluindo: 5x USART (9 Mbit/s), 3x
SPIs/2xI2Ss (18 Mbit/s), 2x I2C (1 MHz em modo “fast mode plus”), CAN (1
Mbit/s), USB velocidade máxima;
José Fonseca

10
Desenvolvimento

Motion Tracking Glove

 4 ADCs, dois canais de DAC, sete comparadores, 13 relógios internos e
funciona de 2.0 a 3.6 V (Figura 4).
Este microcontrolador tem capacidades e características muito superiores às
do Arduino e tendo em conta que se encontrava disponível, optou-se por usá-lo em
detrimento de qualquer outro.
Estando a questão do microcontrolador decidida, iniciou-se a escolha e
especificidades dos sensores. O sistema inicialmente proposto era constituído por seis
sensores com 6 Dof cada, cinco colocados em cada dedo e um nas costas da mão para
referenciação dos movimentos. Tendo isto em mente os sensores escolhidos foram os
FX0S8700CQ Xtrinsic 6-Axis Sensor da Freescale.

Figura 5 – Diagrama de blocos do FX0S8700CQ Xtrinsic 6-Axis Sensor da freescale.
Fonte http://cache.freescale.com/files/sensors/doc/fact_sheet/FXOS8700CQFS.pdf?fpsp=1

Estes sensores, como se verifica na Figura 3, têm internamente módulos que
permitem efetuar a compensação dos sensores no que diz respeito a interferências
externas, através de um DSP (Digital Signal Processor) que faz a respetiva calibração e
correção de erros. Este seria o sensor ideal para realizar o projeto, no entanto na altura
não estavam disponíveis amostras por serem muito recentes no mercado.
Como a abordagem ao sensor anterior não foi concretizável optou-se por um
outro sensor de uma outra marca, esta alteração recaiu para a STMicroelectronics
devido à disponibilidade de amostras e também devido ao microcontrolador final ser
José Fonseca

11
Desenvolvimento

Motion Tracking Glove

da mesma marca. Com esta abordagem, passou-se a ter uma única marca o que
tornou mais fácil a solicitação de amostras e o respetivo sucesso na obtenção das
mesmas.
Foram solicitados no dia 02-04-2013 à ST 12 sensores LSM303DLH (3-axis
acelerómetro e 3-axis magnetómetro) e 12 sensores L3GD20 (3-axis digital output
giroscópio) tendo sido entregues a 25-04-2013. O resto do material já estava
disponível.
Sensor LSM303
O LSM303DLHC é um circuito integrado com um acelerómetro 3D digital e um
magnetómetro 3D digital. Tem escalas máximas de aceleração linear de ±2g / ±4g /
±8g / ±16g e uma escala de campo magnético de ±1.3 / ±1.9 / ±2.5 / ±4.0 / ±4.7 / ±5.6
/ ±8.1 gauss. Todas as escalas são selecionáveis por software pelo utilizador.
O LSM303DLHC inclui um barramento I2C que suporta modo standard (100
kHz) e rápido (400kHz). O sistema pode ser configurado para gerar sinais de
interrupção por eventos de queda livre e inercia, bem como pela posição do
dispositivo. Interrupções por limiares e temporizadores podem ser programados pelo
utilizador.
As componentes do magnetómetro e as do acelerómetro podem ser
habilitadas ou desabilitadas em separado.
O LSM303DLHC está disponível em pacotes LGA (land grid array) e é garantido
o seu funcionamento numa vasta gama de temperaturas que variam desde -40°C até
+85°C.

Figura 6 – Dispositivo LSM303 – pin out.

José Fonseca

12
Desenvolvimento

Motion Tracking Glove
Fonte: Manual do dispositivo

Sensor L3GD20
O L3GD20 é um sensor giroscópio 3D de baixa-potência. Este inclui um
elemento de sensorização e um circuito integrado que são capazes de ler velocidade
angular para o mundo exterior através de um interface digital (I2C/SPI).
O L3GD20 tem uma escala máxima de ±250/±500/ ±2000 dps (Degrees per
second) e é capaz de ler variações com a largura de banda selecionada pelo utilizador.
Está disponível em pacotes LGA (land grid array) e é garantido o seu
funcionamento numa vasta gama de temperaturas que variam desde -40 °C to +85 °C.

Figura 7 – Dispositivo LSM303 – pin out.
Fonte: Manual do dispositivo

Resumindo, foram escolhidos os sensores que melhor se adaptavam à nossa
realidade tendo em conta todos as condicionantes acima referidas e no qual a ideia
conceptual do sistema é a seguinte:
A Tracking Glove incorpora 11 IMUs de 9 Dof, serão colocados dois em cada
dedo e um nas costas da mão como referência. Os IMUs serão ligados com quatro fios
à placa de controlo. Dois para alimentação e os restantes para a comunicação por I2C
ao microcontrolador. Na Figura 8 é apresentado um diagrama de blocos conceptual.
A comunicação entre o microcontrolador e o computador é feita através de
Bluetooth. Este dispositivo é capaz de comunicar bidireccionalmente.

José Fonseca

13
Desenvolvimento

Motion Tracking Glove

Figura 8 – Diagrama de Blocos do sistema conceptual.

Conclui-se este subcapítulo mostrando na Figura 9 os equipamentos aqui
mencionados em separado (a) e após assemblagem no aspeto final (b).

a)

Equipamento não assemblado

b)

Tracking Glove assemblada

Figura 9 – Tracking Glove.

José Fonseca

14
Desenvolvimento

Motion Tracking Glove

2.2 Desenvolvimento das placas para acomodar os sensores.
Este subcapítulo documenta o desenvolvimento das placas PCB e de uma
forma sucinta as ferramentas e tecnologias usadas.
As placas PCB foram desenhadas utilizando o software EAGLE [16], versão
gratuita para estudante. Nesta versão a ferramenta disponibiliza todo o seu potencial
e limita apenas o tamanho do PCB a criar. Esta limitação não afetou o
desenvolvimento uma vez que as placas se enquadravam no tamanho máximo
permitido (10cm x 10cm).
Uma vez que alguns dos componentes selecionados não estavam na respetiva
biblioteca, foi necessário inserir os desenhos dos esquemáticos e packages.
Os componentes normalmente estão disponíveis numa gama de invólucros
(packages). A escolha do melhor package para um componente depende do tamanho
e da facilidade de assemblagem.
Quanto mais pequeno é o package do componente menor espaço no PCB, no
entanto, torna-se difícil a sua assemblagem.
Os componentes mais comuns, chamados componentes passivos, como por
exemplo resistências e condensadores, possuem diferentes valores, mas os símbolos
e o layout são sempre iguais. As resistências têm tamanho standard e não houve
necessidade de ser criado este tipo de componente para a livraria. Houve apenas a
preocupação da escolha dos tamanhos mais pequenos (0402 e 0603) e verificada a
sua disponibilidade nos fornecedores.
Neste caso a disponibilidade já tinha sido descartada pois todos os
componentes necessários para o circuito já tinham sido devidamente encomendados
bem como verificada a sua disponibilidade.
O hardware da Tracking Glove consiste em duas placas desenhadas à medida
para o efeito. A primeira é um IMU que acomoda os sensores para a captura dos
movimentos dos dedos e da mão. As placas dos IMUs foram desenhadas para serem
aproximadamente do tamanho das unhas dos dedos para que facilmente possam ser

José Fonseca

15
Desenvolvimento

Motion Tracking Glove

colocadas nas falanges distais e nas falanges
proximais. A segunda é uma placa de controlo, foi
pensada para ser colocada nas costas da mão,
conforme Figura 10. A placa de controlo necessita
de um interface de comunicação com os 11 IMUs e
dessa forma houve a necessidade de desenvolver
um circuito com as seguintes capacidades:


Interface e controlo do barramento I2C
com os 11 IMUs;



Interface USB (carregamento);



Reguladores de Tensão;



Sistema de carregamento de bateria.

Figura 10 – Colocação dos IMUs.

2.2.1 Conceção e desenho da PCB para o IMU
Os IMUs foram desenhados e fabricados à medida. Após a análise do datasheet
do fabricante de cada um dos sensores, foi efetuado o seguinte circuito (Figura 11)
que implementa o IMU:

Figura 11 – Esquema elétrico para o IMU.

No circuito foi tido em conta o seguinte:


Resistências de pull-up para o barramento de I2C (R1 e R2).



Os condensadores de desacoplamento para minimização de interferências
na alimentação (C4).

José Fonseca

16
Desenvolvimento



Motion Tracking Glove

O condensador para os picos quando existam os resets aos dispositivos
(C1).

O processo de ligação de todas as pistas foi moroso e com um grau de
dificuldade elevado, devido ao fato de se ter de colocar todo o circuito num espaço de
1,5cmx1cm e das pistas terem o espaçamento mínimo de acordo com as regras da
empresa de fabrico. As pistas de alimentação foram reforçadas para o dobro do
mínimo (0,254 mm) por questão de segurança para suportar as correntes de entrada.
As placas foram desenhadas em dupla face conforme se pode verificar na Figura 12.
Foi efetuado plano de massa em ambas as faces para uma melhor conexão
entre os pinos de ground (GND).

a) Placa IMU face superior

b) Placa IMU face inferior

c) Placa PCB IMU para produção

Figura 12 – Placa IMU vista de ambas as faces.

A placa tem quatro pontos de ligação, podendo aplicar um conector ou soldar
diretamente na placa, conforme apresentado na Figura 13. Os sensores foram
colocados com orientação para o lado oposto dos bornes de ligação ficando estes
virados para a placa de controlo. Para que os cabos de ligação não partissem com os
movimentos da luva foi colocada cola quente, assim foi solucionado um problema
encontrado após alguns movimentos com a mesma.

José Fonseca

17
Desenvolvimento

Motion Tracking Glove

a)

Placa IMU sem componentes

b) Placa IMU soldada

Figura 13 – Placa IMU.

2.2.2 Conceção e desenho da PCB para a placa de controlo
Do mesmo modo que o IMU, a placa do controlo foi desenhada e concebida à
medida, segundo as necessidades acima mencionadas.
Esta placa inclui os seguintes componentes:


2 PCA9548A da Texas Instruments (multiplexers de I2C).



1 LM2937IMP-3,3V da Texas Instruments (regulador de tensão 3,3v).



1 MCP73831T-2A da Microchip (Carregador de bateria de uma célula).



Um interface USB para fornecer os 5 volts para carregar a bateria.



Várias resistências e condensadores bem como um led para confirmar
carga de bateria completa.

Todos estes equipamentos foram obtidos dos respetivos fornecedores como
amostras. Após análise do datasheet do fabricante de cada um dos sensores foi
efetuado o seguinte circuito que implementa a placa de controlo, apresentado na
Figura 14:

José Fonseca

18
Desenvolvimento

Motion Tracking Glove

Figura 14 – Esquema elétrico para a placa de controlo.

As dimensões da placa de controlo são 4,1cmx3,1cm. A ligação das pistas foi
bastante morosa e com um grau de dificuldade elevado, devido à enorme quantidade
de pistas provenientes dos barramentos I2C, no entanto conforme se pode verificar na
Figura 15 ficou devidamente alinhado e com um bom layout.

a) Placa de Controlo face superior

José Fonseca

b) Placa de Controlo face inferior

19
Desenvolvimento

Motion Tracking Glove

c) Placa de Controlo PCB para produção
Figura 15 – Placa da Controlo vista de ambas as faces.

No circuito foram devidamente contemplados os endereços para cada um dos
multiplexers I2C da seguinte forma:
Segundo o datasheet existem três pinos de seleção por hardware que podem
alterar o endereço slave do dispositivo, esses pinos são o A0, A1 e A2 conforme Figura
16.

Figura 16 – Seleção do endereço do PCA9548A.
Fonte: Datasheet do PCA9548A

José Fonseca

20
Desenvolvimento

Motion Tracking Glove

Segundo a tabela na Figura 16, os dispositivos na placa de controlo ficaram
com os seguintes endereços:
O multiplexer identificado como U2 no circuito (Figura 14) ficou com A2, A1 e
A0 ligados ao GND (L) por isso o endereço é o 0x70 (hexadecimal) e por sua vez o U3
ficou com o A0 a Vdd (H) e os restantes A1 e A2 ao GNG (L), por isso o endereço é o
0x71 (hexadecimal). No mesmo dispositivo foram colocados à disposição os pinos de
reset para ambos os multiplexers, bem como os barramentos de I2C que estão
disponíveis em separado e comtempladas as resistências de pull-up.
A placa foi desenhada de forma que os conectores dos sensores estivessem
virados de frente para a luva e o interface USB e as ligações ao Microcontrolador
estivessem na parte do pulso (ver Figura 17-c), permitindo assim uma ligação mais
estética.

a)

Placa de controlo face superior

c)

b) Placa de controlo face superior

Placa de controlo devidamente soldada
Figura 17 – Placa de controlo.

José Fonseca

21
Desenvolvimento

Motion Tracking Glove

As placas PCB foram fabricadas na empresa Itead Studio da China. Para
aproveitamento do espaço permitido foram incluídas as seguintes placas: Uma placa
de controlo e três placas IMU. Cada PCB media 5cmx5cm e teve um custo de 12.00
Dólares. (conforme Figura 18)

a)

Placa face superior

b)

Placa face Inferior

Figura 18 – Placa proveniente do fornecedor de PCB.

2.2.3 Teste das Placas e equipamento para o efeito
As placas assembladas foram testadas utilizando equipamentos de bancada
disponíveis, nomeadamente:


Um Arduino que serviu para leitura e alimentação dos sensores.



Um multímetro Kaise-My64.



Um osciloscópio digital Gwinstek GDS-1102A.

O multímetro foi necessário para a verificação de qualquer tipo de curto circuitos
que pudessem existir, bem como para confirmação das tensões de alimentação. O
osciloscópio serviu para ler sinais de debug.

2.3 Aquisição dos sensores e implementação de algoritmos
Neste subcapítulo abordar-se-á a implementação da aquisição de dados, o tipo
de algoritmo utilizado e ajustes efetuados para melhoramento do sistema.
A abordagem inicial, como já referido anteriormente, consistiu no uso do
Arduino como microcontrolador. Foram com este efetuados alguns testes e
simulações com o sensor HMC5843 (Figura 19).

José Fonseca

22
Desenvolvimento

Motion Tracking Glove

Figura 19 – Sensor HMC5843 da Sparkfun.

Enquanto se aguardava a chegada dos sensores escolhidos para a Tracking
Glove, efetuaram-se testes utilizando o Arduino para ler os valores “raw” dos sensores
(HMC5843) disponíveis na altura.
Nestes testes foi interessante a aprendizagem em como ultrapassar o
obstáculo da leitura de vários sensores através do Arduino. O Arduino Uno tem um
único I/O (Input / Output) disponível para o efeito de I2C (Pino 4 e Pino 5) e como os
sensores têm o mesmo endereço e inalteráveis, foi utilizada uma livraria para
incorporar vários pinos a simular por software o interface I2C.
A livraria utilizada é a “softi2cmaster”. Esta livraria permite utilizar qualquer
um dos pinos de entrada/saída como interface de I2C usando bit-banging.
Num barramento I2C por hardware a frequência de relógio é de 400 KHz no
entanto usando a livraria por software passa-se a ter uma frequência de 65 KHz, esta
deve-se ao facto de haver restrições a nível de interrupções e do buffer [17]. O código
usado está no formato digital e anexo a este relatório.
Outro ponto importante verificado foi o aspeto dos problemas com distorções
causadas por Soft-iron e Hard-iron.
As distorções do campo magnético da terra são o resultado de influências
magnéticas externas geralmente designadas por hard ou soft-iron. Se não houver
nenhum efeito de distorção e se rodar um magnetómetro 360˚ e efetuar-se um plot
desses dados, ter-se-á um círculo perfeito centrado em (0, 0), conforme Figura 20.

José Fonseca

23
Desenvolvimento

Motion Tracking Glove

Figura 20 – Gráfico com dados ideais de um magnetómetro.

No entanto a presença de interferências de soft ou hard-iron podem produzir
perturbações como um simples offset do círculo em (0,0) no caso do efeito de hardiron ou deformar o círculo para uma elipse no caso de efeito de soft-iron.
Distorção por Hard-iron pode ser produzida por materiais que têm um campo
magnético constante e é adicionado ao campo magnético da terra. Se este campo de
distorção for constante o sensor é afetado por ele da mesma forma, por isso é
necessário verificar essa força e aplicar um determinado offset ao sistema para que
este volte ao ponto central do círculo (0,0).
Este efeito pode ser causado por altifalantes, discos de portáteis ou qualquer
outro dispositivo com um forte campo magnético, por isso é importante calibrar o
sistema e aplicar os respetivos ajustes.
Distorção por Soft-iron, ao contrário do hard-iron, é afetada por materiais que
alterem ou deformem o campo magnético, por isso não é um campo que seja
constante e aditivo ou até mesmo não criar um campo magnético. Este efeito pode
ser causado por ferro ou níquel. Esta interferência depende da orientação do material
em relação ao sensor, por isso esta calibração não é uma simples constante mas sim
um procedimento mais complicado, como tal foi utilizado código já implementado
[18].
Foram aplicados alguns ajustes de calibração aos sensores de teste e são
apresentados os seguintes gráficos:

José Fonseca

24
Desenvolvimento

Motion Tracking Glove

Figura 21 – Calibração de Soft e Hard-iron do sensor 1.

Figura 22 – Calibração de Soft e Hard-iron do sensor 2.

Nestes gráficos verifica-se que não há muita correção de soft-iron a fazer,
como se comprova pelas Figuras 21 e 22 que estão circulares, no entanto o eixo tem
uma ligeira correção a ser feita, devendo-se ao facto do local de calibração ter uma
constante magnética aditiva que deve ser calibrada (hard-iron).

José Fonseca

25
Desenvolvimento

Motion Tracking Glove

Após vários testes de sensibilização com alguns problemas dos sensores
inerciais, explicar-se-á como foi efetuada a leitura do sistema da Tracking Glove bem
como o tipo de algoritmo utilizado.
No que diz respeito a algoritmos, existem vários, mas há dois que são muito
usados para sistemas de IMUs, sendo esses Madwick e Mahony. O filtro usado para a
implementação vai ser o DCM (Direction Cosine Matrix).
A Figura 23 representa o algoritmo de Madwick no seu todo, no entanto e
devido à sua complexidade não será explicado. Irar-se-á apenas utilizá-lo, aplicar o
filtro DCM, fazer os respetivos ajustes na sua calibração bem como incluir os 11 IMUs
a serem lidos.

Figura 23 – Diagrama de blocos da representação do algoritmo de Madwick.
Inclui distorção magnética (Group 1) e compensação do “drift” do giroscópio (Group 2).

Em relação à programação do microcontrolador esta foi efetuada com o MDKARM da Keil. No que diz respeito à aquisição de dados foram utilizadas bibliotecas
existentes disponibilizadas pela ST para a configuração inicial bem como a respetiva
leitura dos dados em “raw”.
O fluxograma da Figura 24 mostra como está estruturado o código e será
explicado por blocos.
José Fonseca

26
Desenvolvimento

Motion Tracking Glove

Aproveitando o facto da placa do microcontrolador ter 10 leds utilizou-se a
livraria existente para se configurar os mesmos e usá-los como debug visual.
No início do programa efetua-se a inicialização de todos os leds e logo de
seguida força-se os mesmos a desligar com um “toggle”. A tabela 1 mostra a
associação dos pinos de saída com os leds existentes.

Tabela 1 – Pin-out dos LEDS da placa STM32F3.

LED

Saída

3

PE 9

4

PE 8

5

PE 10

6

PE 15

7

PE 11

8

PE 14

9

PE 12

10

PE 13

Configuram-se também os relógios (clocks) do porto A bem como o da porta
série, logo de seguida associam-se os pinos para a Usart e configura-se o modo de
funcionamento de cada um. Os pinos selecionados para a porta série foram os
seguintes: TX  PA9 e RX  PA10.

José Fonseca

27
Desenvolvimento

Motion Tracking Glove

FluxoGrama do Algoritmo implementado
Inicio da
função Main()

Colocas as saidas do multiplexer a
zero
Inicia o ciclo de leitura dos 11 IMUS
LED3 On para medição da
frequência de amostragem

Inicialização dos leds da Board
Inicialização dos relógios da Usart e I2C
Configurações dos pinos da Usart
(A9->TX e A10->RX)
Inicio das interrupções da Usart
Configuração da Usart
LED3 On para Debug

IMU++

Configuração dos relógios e
dos pinos da interface I2C
(SDA->PB9 e SCL->PB8)
LED7 On para Debug

Inicializa as variáveis de sistema:
Dt, Modo de calibração ou leitura
e atualiza os vários off-sets de
calibração de Soft e Hard-iron

Inicia o ciclo de setup dos 11
IMUs

IMU<=10
IMU++
Sim
Seleciona a saida do
multiplexer
Efetua o Setup inicial do
sensor

Não

IMU<=
10

Seleciona a saida do multiplexer
Efetua as leituras e guarda as
variavéis numa variavel
tridimensional para cada um dos
IMUs: Giroscópio, Acelerómetro e
Magnetómetro
Após as leituras passa pelo filtro DCM
IMU=0
Print_cnt =0

Não
Print_cnt++

LED3 Off

Print_cnt
>02
Sim
Inicia o processo de
Impressão por interrupção

Figura 24 – Fluxograma do código implementado no microcontrolador.

José Fonseca

28
Desenvolvimento

Motion Tracking Glove

Posteriormente são configuradas as interrupções e a porta série. Em termos
de modo de funcionamento da porta série, efetuaram-se as seguintes configurações:


Baud Rate – 9600. Foi criada uma variável para alterar a velocidade.



Número de Bits – Foi configurado como 8 bits.



Número de Stop bits – Foi configurado para 1 Stop bit.



Tipo de paridade – Foi configurado para do tipo nenhum “none”.



Tipo de flow control - Foi configurado para do tipo nenhum “none”.

Para confirmação da correta configuração da porta série utiliza-se o LED3 para
debug visual.
O processo seguinte configuram-se e selecionam-se os pinos para o interface
I2C. Configuraram-se os relógios (clocks) do porto B e do I2C1 (existem dois
barramentos), associam-se os pinos para o I2C e configura-se o modo de
funcionamento de cada um. Os pinos selecionados para a interface I 2C foram os
seguintes: SDA  PB9 e SCL PB8, após configurado o interface este é dado como
ativo.
O sistema necessita de variáveis iniciais e é no processo seguinte que são
calculadas, assim permanecem até haver um reset. Estas são:


Modos de funcionamento ao iniciar o sistema (pode ser de leitura ou de
calibração).



Inicialização das variáveis de erro.



Inicialização das variáveis de calibração, que foi feita de acordo com o
algoritmo. Estes valores são calculados num ciclo “for” para haver uma
homogeneidade entre as leituras dos vários IMUs. Estas calibrações já
contemplam a correção do soft e hard-iron.



Inicia-se uma variável G_Dt - tempo entre leituras.

Após a inicialização das variáveis de sistema foi configurado mais um debug
visual, isto é ativa-se o LED3, este permite medir a frequência de atualização de cada
ciclo de leitura. Esta foi sendo otimizada até se fixar nos 50 Hz para os 11 IMUs mais o
envio da trama.

José Fonseca

29
Desenvolvimento

Motion Tracking Glove

O ciclo de setup dos IMUs inicia-se com a variável IMU a 0 e a cada ciclo esta é
incrementada para transitar para o próximo IMU até que se complete o total dos 11
IMUs. A cada IMU selecionado existe uma porta de saída dos multiplexers que terá de
ser selecionada para que o microcontrolador possa comunicar com o IMU certo.
Neste caso foram criadas duas variáveis distintas, uma para cada um dos
multiplexers, MUX1_I2C_ADDRESS para o multiplexer 1 e MUX2_I2C_ADDRESS para o
multiplexer 2. Da mesma forma foram criadas variáveis para a seleção das saídas dos
mesmos e intuitivamente foram declaradas de MUX_SAIDA_1 a MUX_SAIDA_8 para
se poder selecionar qualquer uma das saídas.
A função de escrita foi alterada para contemplar as seguintes variáveis: Canal
de I2C, endereço do dispositivo e o valor. Ao alterá-la esta ficou mais genérica para
todo o restante processo. A função alterada foi a seguinte:
LSM303DLHC_Write_MUX(I2C_TypeDef*

I2Cx,

uint8_t

DeviceAddr,

uint8_t

channel);
Incluíram-se os argumentos do tipo I2C_TypeDef para selecionar o I2C
pretendido, o argumento uint8_t DeviceAddr para transmitir o endereço pretendido,
selecionar o multiplexer e por último o argumento uint8_t channel ao qual nos é
permitido selecionar a respetiva saída. De seguida mostra-se um exemplo de como
selecionar o multiplexer 1 e a saída 2 com a respetiva função:
LSM303DLHC_Write_MUX (TCA9548A_I2C, MUX1_I2C_ADDRESS, MUX_SAIDA_2);
A função seguinte efetua o setup dos sensores inclusos ao IMU, neste caso há
duas funções que efetuam essa tarefa, temos a função Gyroconfig() (configuração do
giroscópio – L3GD20) e CompassConfig() (configuração do magnetómetro e
acelerómetro – LSM303). Cada uma destas funções seleciona o modo de
funcionamento e de que forma o sensor se comportará quando solicitada a leitura.
Após vários testes entre escalas, modos de funcionamento e outros, os campos
mais significativos selecionados para o melhor funcionamento foram os seguintes:


Output Data Rate
o Magnetómetro: foi selecionado 75 Hz.

José Fonseca

30
Desenvolvimento

Motion Tracking Glove

o Acelerómetro: Foi selecionado 100 Hz.
o Giroscópio: Foi selecionado 95 Hz.


BandWidth
o De acordo com as frequências selecionadas no “output data rate”.



Full Scale
o Acelerómetro 2G.
o Magnetómetro 2G.



HighPass Filter
o Este filtro foi ativado e proporciona um melhor funcionamento.
Os valores de “output data rate” foram selecionados acima dos 50 Hz para que

as leituras possam ser atualizadas sem atrasos.
Após a inicialização de todos os sensores e de todas as variáveis de sistema
prontas, dá-se início às leituras e aplica-se o filtro DCM com as calibrações efetuadas
anteriormente. O ciclo seguinte é infinito e permite a entrada em modo de leitura ou
de calibração mediante o selecionado. No modo de calibração é efetuada apenas a
leitura em “raw” dos sensores e imprimirá mediante o tipo de calibração. Este modo
será abordado melhor mais à frente.
O ciclo de leitura dos sensores inicia-se com um debug visual (LED 3), este
também é utilizado para verificação no osciloscópio da frequência a que estão a ser
enviados os dados pela porta série. Pode-se identificar na tabela 1 que o pino PE9 é
de verificação. Após a ativação do LED passa-se ao ciclo de leitura dos IMUs sendo essa
tarefa realizada da mesma maneira que a já explicada acima aquando do setup dos
sensores. Passar-se-á a explicar de seguida a forma como é efetuada a leitura.
Esta leitura é realizada quando invocada a função update_sensor() e nesta
existem várias funções. No entanto há três, que se encarregaram de ler os valores
“raw” de cada um dos dispositivos, sendo estas: GyroReadAngRate(gyro[imu]),
CompassReadMag(magnetom[imu]) e CompassReadAcc(accel[imu]). Cada uma
destas tem um argumento que será preenchido com os valores que vão sendo lidos,
esses serão necessários para os cálculos posteriores.

José Fonseca

31
Desenvolvimento

Motion Tracking Glove

De seguida há uma correção de eixos, devido a uma má interpretação da
orientação dos sensores e colocação dos mesmos na placa PCB.

LSM303DL

L3GD20

Figura 25 – Orientação dos eixos dos sensores.

Conforme se verifica na Figura 25 os eixos do x e y dos sensores estão trocados,
por isso é necessária a respetiva correção. Como o LSM303 tem dois sensores
embebidos (magnetómetro e acelerómetro) decidiu-se manter essa orientação e
apenas efetuar a troca no giroscópio (L3GD20). Essa está efetuada logo a seguir à
leitura dos dados em “raw” onde as variáveis do giroscópio são alteradas com o
seguinte código:
gyro[imu][0] *= -SENSOR_SIGN[1];
Coloca o x=y e inverte devido aos eixos dos sensores.
gyro[imu][1] *= SENSOR_SIGN[0];
Coloca o y=x devido aos eixos dos sensores.
gyro[imu][2] *= SENSOR_SIGN[2];
Este mantém a posição do Z.
Neste momento os eixos já se encontram devidamente orientados, passando
à opção de aplicar às leituras o filtro DCM ou efetuar a calibração.
Explicar-se-á o algoritmo de calibração na secção de calibração.
Analisando o filtro DCM constatou-se a existência de seis funções retiradas do
filtro de Madwick [19], estas fazem o seguinte:
Compensação dos erros obtidos na calibração, estes ajudam a uma leitura mais
estável. A função que efetua esta compensação é:
compensate_sensor_errors()
José Fonseca

32
Desenvolvimento

Motion Tracking Glove

De seguida e já com os valores devidamente compensados efetua-se o cálculo
da orientação do IMU, é como se fosse um compasso, dá-nos a orientação do IMU em
relação ao campo magnético da terra. A função que efetua este cálculo é:
Compass_Heading()
A próxima função, esta mais complicada, calcula a matriz DCM de rotação para
o próximo ponto. Esta é:
Matrix_update()
Após o cálculo da matriz passa-se à sua normalização através de fórmulas do
nosso referido Madwick. A função que efetua a normalização é:
Normalize()
Após a normalização é feita mais uma compensação, através de estimativas e
de um controlador PI. A função que efetua esta correção é:
Drift_correction()
Por último e com todo o filtro aplicado calculam-se os ângulos de Euler (Yaw,
Pitch e Roll) estes são obtidos pela função:
Euler_angles()
Nesta fase passa pela impressão dos valores obtidos e enviá-los pela porta
série através de uma trama. Essa é constituída por um conjunto de 11 IMUs, embora
fisicamente só existam 11 sendo os restantes 5 “virtuais” serão calculados na
aplicação 3D da seguinte forma:
O método de cálculo dos IMUs da falange do meio consiste em igualar a mesma
orientação (Yaw) e rotação (Roll) do IMU da frente e somar os dois ângulos de
inclinação (Pitch) dos IMUs existentes, dividindo-os por dois, noutras palavras é
efetuada uma média das inclinações que se aplica ao IMU “virtual”. A trama a ser
transmitida tem o seguinte aspeto:
“-10.6,23.3,-69.2,42.6,14.7,-94.2,0.9,20.8,3.7,15.9,-3.7,-1.1,-8.2,1.7,-9.5,-8.2,1.4,9.5,-29.9,11.5,18.1,-35.4,4.4,2.4,-49.0,14.2,37.8,-39.8,-0.6,11.8,-3.9,-30.0,12.8,”

José Fonseca

33
Desenvolvimento

Motion Tracking Glove

Cada três valores representam a leitura de 1 IMU com os respectivos Yaw, Pitch
e Roll nesta ordem e depois os consequentes 11 valores. A trama é iniciada com o IMU
inferior, de seguida o IMU “virtual” e por fim o IMU da ponta do dedo Polgar seguindo
para os restantes dedos até terminar no IMU da base.
2.3.1 Calibração dos IMUs
A calibração, como já referido anteriormente, é importante e determinante
para uma leitura estável bem como mais realista com o ambiente envolvente.
Dependendo de quão bom ou maus os sensores sejam, a precisão e resposta
dos IMUs será consideravelmente melhorada pela calibração. Caso não exista
podemos ter os seguintes efeitos:


Desorientação do Yaw sempre que exista uma rotação em X (Roll).



Quando se efetuar um Pitch (para cima) pode não traduzir essa orientação
nos valores de leitura.

Será de bom senso ligar os sensores antes da calibração, dando tempo de
estabilização.
O algoritmo que foi implementado na luva possibilita a entrada em modo de
calibração. Este pode ser alterado mediante o valor de duas variáveis criadas para o
efeito, estas são:


OUTPUT__MODE_CALIBRATE_SENSORS :
Esta variável permite selecionar entre o modo de calibração ou de leitura.
Caso o valor seja 0 é selecionado o modo de leitura.
Caso o valor seja 1 é selecionado o modo de calibração.



curr_calibration_sensor:
Esta variável permite selecionar qual o sensor a calibrar.
Caso o valor seja 0 é selecionado a calibração do acelerómetro.
Caso o valor seja 1 é selecionado a calibração do magnetómetro.
Caso o valor seja 2 é selecionado a calibração do giroscópio.

Explicado o processo de seleção, aborda-se o processo dos vários tipos de
calibração, como se deve proceder e que tipo de print out teremos em cada um.

José Fonseca

34
Desenvolvimento

Motion Tracking Glove

2.3.1.1 Acelerómetro
Na calibração do acelerómetro são encontrados os valores máximos e mínimos
da força da gravidade da terra sobre cada um dos eixos (x, y e z de cada sensor) temos
de mover o IMU com a menor velocidade possível para que apenas exista a gravidade
terrestre sobre o mesmo.
O processo de calibração é simples, coloca-se o sensor na posição horizontal e
efetua-se o movimento descendente no eixo do x até que o valor máximo não se
altere, depois efetua-se o mesmo movimento mas em sentido inverso até que o valor
mínimo não se altere e assim se obtêm os máximos e mínimos do eixo do x. Para se
obter os restantes eixos efetua-se o mesmo procedimento em cada um.
Caso exista qualquer tipo de vibração, deturpa a calibração e será necessário efetuar
um reset e reiniciar a mesma.
A saída da porta série terá o seguinte aspeto:
accel x,y,z (min/max) = -5.00/-1.00 25.00/29.00 225.00/232.00
Na calibração efetuada à Tracking Glove foram obtidos os seguintes valores:
Tabela 2 – Calibração do acelerómetro.

Acelerómetro

X(min/max)

Y(min/max)

Z(min/max)

0

1222.00/1292.00

1308.00/1091.00

1214.00/1966.00

1

1055.00/1192.00

1074.00/1536.00

1772.00/1572.00

2

1192.00/1039.00

1038.00/1050.00

1174.00/1162.00

3

1006.00/1083.00

1166.00/1226.00

1226.00/1288.00

4

1072.00/1033.00

1042.00/1030.00

1180.00/1052.00

5

1068.00/1072.00

1032.00/1252.00

1104.00/1562.00

6

1060.00/1032.00

1073.00/1010.00

1177.00/1108.00

7

1063.00/1006.00

928.00/1078.00

1090.000/1310.00

8

1082.00/1036.00

1038.00/1018.00

948.00/1466.00

José Fonseca

35
Desenvolvimento

Motion Tracking Glove

9

1034.00/1026.00

1123.00/926.00

1044.00/1244.00

10

1136.00/1070.00

1078.00/1038.00

928.00/1206.00

2.3.1.2 Magnetómetro
Na calibração do magnetómetro são encontrados máximos e mínimos da força
magnética sobre cada eixo (x, y e z).
O processo é igualmente simples, aponta-se o IMU para norte e com
movimentações em x (para cima e para baixo) até que os máximos e mínimos não se
alterem. Efetuar o mesmo procedimento para os restantes eixos.
A saída da porta série terá o seguinte aspeto:
magn x,y,z (min/max) = -564.00/656.00 -585.00/635.00 -550.00/564.00
Na calibração efetuada à Tracking Glove foram obtidos os seguintes valores:
Tabela 3 – Calibração do magnetómetro.

Magnetómetro

X(min/max)

0

376.12/576.12

523.88/501.49

298.33/648.33

1

541.79/365.67

674.63/388.06

496.67/500.00

2

440.30/550.75

544.78/513.43

508.33/485.00

3

437.31/540.30

529.85/505.97

573.33/376.67

4

379.11/470.15

541.79/519.40

510.00/433.33

5

410.45/558.21

514.93/538.81

443.33/506.67

6

608.96/452.24

667.16/371.64

271.67/676.67

7

422.39/549.25

541.79/513.43

338.33/620.00

8

576.12/437.31

659.70/394.03

445.00/503.33

9

417.91/559.70

558.21/502.98

293.33/653.33

10

525.37/371.64

670.15/419.40

508.33/490.00

José Fonseca

Y(min/max)

Z(min/max)

36
Desenvolvimento

Motion Tracking Glove

2.3.1.3 Giroscópio
Na calibração do giroscópio é encontrado um offset para as interferências de
cada eixo e de cada sensor.
A calibração do giroscópio é um processo bem mais simples do que os
anteriores. Basta deixar o IMU estável e esperar aproximadamente 10 segundos
obtendo desta forma a interferência média.
A saída da porta série terá o seguinte aspeto:
gyro x,y,z (current/average) = -29.00/-27.98 102.00/100.51 -5.00/-5.85
Na calibração efetuada à Tracking Glove foram obtidos os seguintes valores:
Tabela 4 – Calibração do giroscópio.

Giroscópio

X(current/average) Y(current/average)

Z(current/average)

0

1.24/0.05

0.09/0.06

0.77/0.07

1

-0.16/-0.02

0.16/0.01

0.70/0.08

2

7.16/0.66

0.40/0.08

0.93/0.09

3

4.73/0.42

6.21/0.55

2.38/0.23

4

0.14/-0.02

0.07/0.02

0.11/-0.01

5

-4.31/-0.39

-0.89/-0.09

0.42/0.04

6

0.07/0.03

1.87/0.13

0.00/-0.01

7

-83.42/-7.56

-88.83/-8.07

91.84/8.33

8

-1.33/-0.22

4.88/0.42

1.91/0.14

9

-0.16/-0.03

-1.35/-0.06

0.58/0.07

10

-0.23/0.02

-0.12/-0.01

-0.21/-0.01

José Fonseca

37
Desenvolvimento

Motion Tracking Glove

2.3.2 Protocolo I2C

Figura 26 – Símbolo do I2C, retirado da wikipédia.

O protocolo I2C foi desenvolvido pela Philips© e está neste momento
disponível em vários componentes, este capítulo é uma ligeira introdução e aborda o
modo Single Master baseado em comunicação I2C de 7 bits [15].
O I2C é geralmente referido por interface de 2 fios, pois usa 2 linhas
bidirecionais, SDA (Serial Data Line) e SCL (Serial Clock Line) com resistências pull-up.
Neste caso não foram necessárias colocar as mesmas pois as placas de aquisição já
têm esse aspeto em conta.
As tensões típicas são 5V ou 3.3 V, normalmente I 2C refere-se a 7-bits ou 10bits de endereços, a velocidade standard é de 100Kb/s e 10Kbit/s para baixa
velocidade, ultimamente tem existido atualizações em que já corre a velocidades
superiores. Estas taxas de transferência ocorrem entre Master-Slave (ver Figura 27).

Figura 27 – Um esquemático simples com um Master, três nós de slave e resistências de pull-up.

O desenho de referência que se aborda é o barramento com linhas SCL e SDA
com 7 bits de endereçamento, em que o barramento tem 2 papéis para os nós, Master
ou Slave:



O nó Master – emite sinal relógio e faz o endereçamento dos Masters;
O nó Slave – recebe a linha do relógio e os endereços.

José Fonseca

38
Desenvolvimento

Motion Tracking Glove

O barramento é multi-Master o que significa que se pode ter qualquer número
de nós Master, adicionalmente o papel de Master-Slave (Figura 28) pode trocar após
o envio de STOP.
Sequência de Transmissão de dados:
1.
2.
3.
4.
5.
6.
7.

Envia o START bit (S);
Envia o Slave endereço (ADDR);
Envia o Read® -1/ Write (W) – 0 bit;
Espera para enviar o bit reconhecimento (A);
Envia/Recebe os dados (8 bits) (DATA);
Envia o bit de reconhecimento (A);
Envia o bit STOP (P).

ENVIO DE DADOS DO MASTER PARA O SLAVE

Figura 28 – Envio de dados Master – Slave.

A sequência 5-6 pode ser repetida para que um bloco de dados possa ser lido
ou escrito, no exemplo (ver Figura 29).
ENVIO DE DADOS DO SLAVE PARA O MASTER

Figura 29 – Envio de dados Slave – Master.

Neste exemplo a sequência é S ADRESS R (é enviado R em vez de W, porque o
Master lê os dados do SLAVE), após os dados transmitidos do Slave o Master envia o
ACK (A). Se o Master não precisar de mais dados pode enviar um NACK, avisando o

José Fonseca

39
Desenvolvimento

Motion Tracking Glove

Slave para libertar o barramento. Cada dispositivo numa comunicação I2C deve ter um
endereço único. START e STOP bits – Figura 30

Figura 30 – Start e Stop Bits.

Todos os blocos de dados são de 8bits. O bloco inicial tem 7 bits de endereços
seguido pelo bit direcional (R ou W), os blocos seguintes são de 8 bits de dados, bit de
reconhecimento (ACK) são metidos entre cada bloco de dados.
Neste caso o STM32 será o elemento master da comunicação I2C com os 11
sensores.
Concluindo, nesta fase temos os dados prontos e trama definida.

2.4 Transmissão dos dados de forma remota para o PC.
Neste capítulo analisar-se-á como transmitir a trama do microcontrolador para
o computador assim como a configuração do dispositivo Bluetooth que incorpora a
Tracking Glove.
2.4.1 Comunicação Bluetooth
Iniciando pelo dispositivo que incorpora no projeto, este é um Bluetooth
modelo HC-05 (Figura 31) que permite configuração através de comandos AT.

Figura 31 – Bluetooth HC-05.

José Fonseca

40
Desenvolvimento

Motion Tracking Glove

Configuração do módulo Bluetooth
Como referido anteriormente este módulo é configurável através de
comandos AT, existindo no mesmo o pino (34) para o efeito (entrada em modo AT).
O pino 34 (Key) foi ligado ao positivo da alimentação e os pinos 1 (TX) e 2 (RX)
foram ligados cruzados (RxTx e TxRx) a um adaptador RS232 conectado ao
computador. Após as ligações estarem concluídas o dispositivo é alimentado com
3,3V, usando um terminal para se poder comunicar com o módulo. Para constatar o
sucesso da comunicação com o mesmo basta enviar o seguinte comando “AT”. Caso a
resposta seja “Ok” a configuração em modo AT foi concluída com sucesso.
Após a confirmação da entrada em modo AT, conseguir-se-á alterar as
configurações da porta série do módulo para os seguintes parâmetros:


BaudRate = 9600;



Stop bit = 1;



Parity bit = none.

O comando (adquirido no manual conforme Figura 32) para efetuar as
alterações dos parâmetros acima definidos é:
Comando:

AT+UART=9600,0,0,rn

Resposta:

OK

Figura 32 – Tabela para alterar os parâmetros da interface série do módulo Bluetooth.

José Fonseca

41
Desenvolvimento

Motion Tracking Glove

Após a confirmação de parâmetros alterados basta desligar o módulo e voltar
a ligá-lo com o pino 34 desligado da alimentação. Desta forma poder-se-á dar início à
transmissão por Bluetooth para o computador. Refere-se ainda que o código de
conexão ao módulo é 1234.

2.5 Desenvolvimento de um simulador virtual 3D
Neste capítulo aborda-se a criação de um simulador 3D para receção dos dados
provenientes da Tracking Glove e os respetivos resultados da mesma.
O simulador 3D foi desenvolvido em Qt/C++ com a livraria VTK, foi pensado
para ter a simulação com os vários ossos constituintes da mão e o consequente
controlo sobre os mesmos, conforme a imagem da aplicação na Figura 33 nos mostra.

Figura 33 – Menu principal do simulador 3D.

A aplicação tem vários controlos que se serão explicados:
Existe um menu de configuração da porta série ao qual se acede ao premir o
botão “serial port” (Figura 34) e dá acesso ao menu de configurações (ver Figura 35).

Figura 34 – Botão “serial port”.

José Fonseca

42
Desenvolvimento

Motion Tracking Glove

Figura 35 – Menu acesso à porta série.

Este Menu possui vários botões de controlo que dão acesso às seguintes
funções:


O primeiro botão liga a porta série.



O segundo botão desliga a porta série.



O terceiro botão permite configurar os parâmetros da porta série.



O quarto botão limpa os dados da tela preta desta janela.



O quinto botão permite fechar a janela e as respetivas comunicações.

Figura 36 – Botões de controlo do menu da porta série.

A janela de configurações da porta série é acedida através do terceiro botão
(ver Figura 37).

Figura 37 – Menu de configurações da porta série.

Este menu dá acesso a todas as configurações da porta série. Após a escolha
dos parâmetros para a comunicação validar-se-ão os mesmos pressionando o botão
.
José Fonseca

43
Desenvolvimento

Motion Tracking Glove

Após os parâmetros escolhidos ou alterados pode-se voltar a ligar as
comunicações com a Tracking Glove. Caso a mesma receba dados estes vão-se refletir
nos vários ângulos e mostrar em tempo real os movimentos detetados pelos 11 IMUs.
No entanto temos a hipótese de verificar a aplicação 3D e alterar manualmente nos
comandos do menu principal, conforme a Figura 38.

Figura 38 – Controlo manual dos IMUs.

Na Figura 38 pode ser visto que o primeiro conjunto controla o IMU da base e
se forem efetuadas alterações no Roll, Pitch e Yaw toda a mão rodará, isto deve-se ao
facto de a base comandar todo o resto.
No que concerne aos dedos cada um é independente, no entanto, existe uma
hierarquia de baixo para cima. Sendo que o primeiro IMU moverá o resto do dedo e
em consequência o IMU do meio fará o mesmo ao IMU superior simulando assim o
movimento real de um dedo. Consegue-se assim efetuar todas as opções propostas.
José Fonseca

44
Desenvolvimento

Motion Tracking Glove

Conclui-se este subcapítulo explicando sucintamente o que foi feito em termos
de código. A janela principal é iniciada atualizando todos os seus botões bem como
colocando as variáveis de controlo a zero, de seguida é desenhada a mão. Esta para
ser desenhada necessita de 21 pontos, conforme a Figura 39, estes foram medidos
numa mão real e depois inseridos na função DrawHand().

Figura 39 – Pontos para desenho da mão 3D.

Os cálculos de todas as juntas foram efetuados após a leitura e separação da
trama, como referido anteriormente e aplicados à função sendRotation(listVec,
ResetVec). Esta atualiza as juntas de acordo com os dados enviados pelos dois vetores
reproduzindo desta forma os movimentos em tempo real.

José Fonseca

45
Análise e melhoramentos

Motion Tracking Glove

3 Análise e melhoramentos
Neste capítulo abordam-se as alterações, análises e testes efetuados para se
obter uma frequência de amostragem de 50 Hz dos 11 IMUs.
Após o envio da primeira trama pela porta série foram obtidos os seguintes
resultados: 280ms por cada ciclo de impressão, o que equivale a uma frequência de
amostragem de (1/280ms) 3.57Hz. Este tempo foi medido através do pino PE9 (Pela
tabela 1 o LED3 tem como saída o pino PE9) e com o auxílio do osciloscópio de
bancada. Com este valor de amostragem o movimento dos dedos não seria real sendo
por isso necessário o melhoramento do código e outras alternativas.
Houve necessidade de pesquisa, de como e onde procurar soluções para
reduzir o tempo. Após algumas pesquisas foram detetadas três possíveis causas para
este atraso na leitura dos IMUS, sendo essas as seguintes:
1. Velocidade do barramento I2C.
2. Velocidade de impressão e tipo de trama.
3. Código repetitivo no ciclo de leitura dos IMUs.
Dando início ao primeiro ponto que foi detetado (poderia haver um atraso
devido à velocidade máxima do barramento I2C), foi encontrado no manual um registo
que possibilita maiores velocidades nas transições de envio/receção de dados. O
“I2Cx_TIMINGR register” é responsável pelos tempos de execução, foi por isso
analisado o código e alterado na configuração da estrutura de I2C o parâmetro
responsável pelo registo acima mencionado. O valor de defeito desse campo era de
0x00902025 (Hexadecimal) sendo este diretamente relacionado com o valor de ciclos
de atraso. Foram efetuados testes por tentativa e erro constatou-se que aumentando
este valor a frequência de amostragem reduzia, por isso efetuaram-se vários testes no
sentido de reduzir este valor até zero e foi obtido o resultado de 14,7Hz (68ms) de
amostragem entre impressões.
Após este aumento na frequência de amostragem que já estaria mais perto
dos 25 Hz, houve necessidade de continuar a explorar os pontos seguintes.

José Fonseca

46
Análise e melhoramentos

Motion Tracking Glove

Na análise da velocidade de impressão da trama, verificou-se que com o
aumento do Baudrate o tempo de impressão diminuía, no entanto essa redução não
seria a mais apropriada e não traria melhorias significativas.
Tabela 5 – Tempos de impressão.

Tipo de trama

Baudrate

9600

512000

1024000

EulerDeg com float (.1f)

Tempos

57ms

50ms

48ms

EulerDeg com float (.5f)

Tempos

230ms

210ms

200ms

EulerDeg com int

Tempos

N/F

N/F

N/F

Os valores na tabela 5 comprovam que a impressão era cerca de 80% (no pior
dos casos) do total do tempo gasto, por isso foi necessário arranjar uma solução para
reduzir drasticamente o tempo de impressão.
Após estes resultados consultei o meu orientador a fim de obter alternativas.
Uma das alternativas consistia em alterar o tipo de variável a ser impressa pela porta
série, no entanto sem resultados de significativa redução.
Houve a necessidade de avaliar as interrupções da porta serie e usar
processamento paralelo. Após a implementação do código conseguiu-se aumentar a
frequência de amostragem para 42 Hz (23,81 ms), ou seja, um aumento de 285,71%.
Este valor já era satisfatório e suficiente para que os valores obtidos
representassem em tempo real a movimentação da mão, no entanto houve uma
análise ao terceiro ponto e o código foi verificado para possíveis atrasos.
Após alguns testes de debug verificou-se a existência de uma função de setup
inserida no ciclo de leitura dos respetivos IMUs aumentando assim o tempo de
execução, por isso esta foi transitada para o exterior do ciclo infinito. Com esta
alteração conseguiu-se sensivelmente mais 8 Hz de aumento, passando aos 50 Hz que
o sistema tem atualmente como frequência de amostragem.

José Fonseca

47
Conclusões

Motion Tracking Glove

4 Conclusões
A tracking Glove desenvolvida foi um trabalho complexo realizado com
sucesso. Este, resultou no desenvolvimento do seguinte hardware e software:


Um conjunto de 11 placas que acomodaram os sensores inerciais.



Placa de controlo com, multiplexagem I2C, carregador de bateria,
alimentação de todo o sistema e conexão ao microcontrolador através de
I2C.



Aplicação em C# para verificação dos dados e armazenamento em SQL.



Aplicação 3D em Qt/C++ com a livraria VTK para mostrar em tempo real os
valores lidos do microcontrolador.

Este projeto foi enriquecedor, dando-me a possibilidade de aplicar
conhecimentos previamente adquiridos em várias áreas curriculares. Embora o
percurso académico nos tenha dado bases importantes a vários níveis, deparei com a
realidade de que pouco ou nada sabia e por isso houve a necessidade de pesquisar,
perguntar e aprender com os vários investigadores com quem lidei diariamente na
ICVS e em especial com o meu orientador. Este dia a dia foi o consolidar de matérias
dadas e muitos conceitos começaram a fazer sentido no aspeto teórico e prático do
projeto.
Falando do aspeto prático recorro a um exemplo. No desenho das placas PCB
houve a necessidade de criarmos peças que não existiam na base de dados do
software (Eagle) sendo este ultrapassado com a pesquisa e ajuda de várias pessoas.
Surgiram ao longo do projeto vários obstáculos, mas foram superados com a
ajuda do meu orientador, de colegas de curso e por muitas pesquisas efetuadas.

4.1 Objetivos realizados
Recordando os objetivos propostos:


Realização de uma luva de motion tracking.



Especificação do sistema e sensores inerciais nas pontas dos dedos.



Desenvolvimento das placas para acomodar os sensores.

José Fonseca

48
Conclusões



Motion Tracking Glove

Aquisição dos sensores e implementação de algoritmos para determinar
a orientação de cada dedo.



Transmissão dos dados, da orientação, de uma forma remota para um
computador através de uma ligação sem-fios.



Desenvolver um simulador virtual 3D para validação do sistema a nível
de tempo real.

De acordo com os objetivos acima propostos concluo que os mesmos foram
atingidos e inclusivamente superados. Superados, devido ao aumento do grau de
exigência do meu orientador ao introduzir mais sensores e graus de liberdade do que
os inicialmente propostos, bem como a inclusão de um microcontrolador cortex M4.

4.2 Outros trabalhos realizados
Dada a necessidade de verificar os dados lidos da Tracking Glove, desenvolvi
uma aplicação em C# que ajudou na verificação das leituras de uma forma mais “user
friendly”, por isso, foi desenvolvido um interface (Figura 40) de leitura da porta série
e apresentação da leitura dos mesmos.
Esta aplicação foi também evoluindo sendo implementada uma ligação a uma
base de dados SQL que permite guardar os dados recebidos e assim usá-los mais tarde
para análise ou até mesmo reconstruir os movimentos efetuados durante a respetiva
sessão.

Figura 40 – Interface para leitura e armazenamento dos dados em SQL.

José Fonseca

49
Conclusões

Motion Tracking Glove

4.3 Limitações & trabalho futuro
Independentemente de os objetivos terem sido compridos, há sempre espaço
para melhorar qualquer produto e enveredar por outro tipo de soluções. Por isso
apresento aqui propostas para trabalho futuro sobre a Tracking Glove:


Implementação e utilização de melhores filtros e sensores, nomeadamente
o iNEMO engine da ST (Figura 41).

Figura 41 – Novos sensores da ST com 9 Dof.



Melhoramento da acomodação dos sensores à luva, obtendo assim um
interface mais inovador e atrativo, deixo a seguinte proposta (Figura 42).

Figura 42 – Proposta para uma luva.
Fonte: P5 Glove

José Fonseca

50
Conclusões



Motion Tracking Glove

Inclusão do microcontrolador e de um módulo Bluetooth na placa de
controlo que foi desenvolvida.



Melhoramento da aplicação 3D para que a mesma tenha funções para
sessões de fisioterapia e acesso à base de dados.

4.4 Apreciação final
Como opinião pessoal, considero que este projeto foi aliciante e muito
desafiador. Apesar de terem existido muitas dificuldades consegui conciliar todas as
tecnologias aqui usadas e aplicá-las de forma a atingir os objectivos propostos. A
procura de soluções para os problemas que iam surgindo proporcionaram-me a
descoberta de todo um novo mundo de informações até agora desconhecido.
Este trabalho tem a meu ver potencial para investimento. Quero com isto dizer
que depois dos conhecimentos adquiridos na área, consigo prever a aplicação deste
projeto em clinicas de reabilitação, cirurgia à distância, manuseamento de mãos
robóticas sem riscos de utilização para o operador (maquinaria pesada) e em trabalhos
de precisão em ambientes hostis.
No cômputo geral aprofundei conhecimentos em sistemas embebidos,
sistemas inerciais bem como na programação dos mesmos e conheci uma realidade
diferente da minha área de trabalho.

José Fonseca

51
Bibliografia

Motion Tracking Glove

5 Bibliografia
[1] E. Foxlin,“Motion tracking requirements and technologies,”inHandbook of Virtual
Environment Technologies, K. Stanney, Ed.. Hillsdale, NJ: Lawrence Erlbaum, 2002, ch.
8, pp. 163–210.
[2] Wang, R. Y., “Real-Time Hand-Tracking as a User Input Device”, ACM Symposium
on User Interface Software and Technology (UIST), 2008
[3] Wang, R. Y. & Popovic, J., “Real-Time HandTracking with a Color Glove”, ACM
Transactions on Graphics, 2009
[4] Milanovic, V. & Lo, W. K., “Fast and HighPrecision 3D Tracking and Position
Measurement with MEMs Micromirrors”, Optical MEMs and Nanophotonics.
IEEE/LEOS. 2009
[5] Lee, J. et al., “The 3D Sensor Table for Bare Hand Tracking and Posture
Recognition”, Lecture Notes in Computer Science, Springer, 2006
[6] Campos, T. E. & Murray, D. W., “Regression Based Hand Pose Estimation from
Multiple Cameras”, Conference on Computer Vision and Pattern Recognition (CVPR),
2006
[7] Schlattmann, M. et al., “Real-Time Bare-Hands Tracking for 3D Games”, IADIS
International Conference on Game and Entertainment Technology (GET), 2009
[8] Consultado em 10-04-2013: http://www.arduino.cc
[9] Consultado em 12-04-2013: http://www.mathworks.com
[10] Consultado em 06-05-2013: http://www.keil.com/arm/mdk.asp
[11] Consultado em 25-04-2013: http://www.atollic.com/index.php/truestudio
[12] Consultado em 02-05-2013: http://www.microsoft.com/visualstudio/eng
[13] Consultado em 10-08-2013: http://qt-project.org/
[14] Consultado em 10-08-2013: http://www.microsoft.com/enus/download/details.aspx?id=29062

José Fonseca

53
Bibliografia

Motion Tracking Glove

[15] Consultado em 10-04-2013: http://en.wikipedia.org/wiki/I2C
[16] Consultado em 01-04-2013: http://www.cadsoftusa.com/eagle-pcb-designsoftware/product-overview/?language=en
[17] Consultado em 01-04-2013:
http://forums.adafruit.com/viewtopic.php?f=25&t=13722
[18] Consultado em 01-04-2013:
http://www.freescale.com/files/sensors/doc/app_note/AN4246.pdf
[19] Consultado em 20-07-2013: http://www.xio.co.uk/res/doc/madgwick_internal_report.pdf

José Fonseca

54

Mais conteúdo relacionado

Semelhante a Motion Tracking Glove

Arca Sistema Gerencial
Arca Sistema GerencialArca Sistema Gerencial
Arca Sistema GerencialRicardo Júlio
 
Screen
ScreenScreen
ScreenTiago
 
Usabilidade e Arquitetura de Informação de Websites de Governos Municipais
Usabilidade e Arquitetura de Informação de Websites de Governos MunicipaisUsabilidade e Arquitetura de Informação de Websites de Governos Municipais
Usabilidade e Arquitetura de Informação de Websites de Governos MunicipaisMarcelo Ramos
 
Ferramentas da web ao serviço da formação
Ferramentas da web ao serviço da formaçãoFerramentas da web ao serviço da formação
Ferramentas da web ao serviço da formaçãoAnabela Protásio
 
Intro micro software
Intro micro softwareIntro micro software
Intro micro softwareTiago
 
E-OBRAS: Proposta de Desenvolvimento do Protótipo de Sistema para Secretarias...
E-OBRAS: Proposta de Desenvolvimento do Protótipo de Sistema para Secretarias...E-OBRAS: Proposta de Desenvolvimento do Protótipo de Sistema para Secretarias...
E-OBRAS: Proposta de Desenvolvimento do Protótipo de Sistema para Secretarias...Paulo Steinhauser
 
E-OBRAS: Proposta de Desenvolvimento do Protótipo de Sistema para Secretarias...
E-OBRAS: Proposta de Desenvolvimento do Protótipo de Sistema para Secretarias...E-OBRAS: Proposta de Desenvolvimento do Protótipo de Sistema para Secretarias...
E-OBRAS: Proposta de Desenvolvimento do Protótipo de Sistema para Secretarias...Paulo Steinhauser
 
Inkscape
InkscapeInkscape
InkscapeTiago
 
Java applet
Java appletJava applet
Java appletTiago
 
Graduação puc - aplicações de padrões de projeto no desenvolvimento de inte...
Graduação   puc - aplicações de padrões de projeto no desenvolvimento de inte...Graduação   puc - aplicações de padrões de projeto no desenvolvimento de inte...
Graduação puc - aplicações de padrões de projeto no desenvolvimento de inte...Wagner Tironi Pinto
 
SISTEMA RASTREADOR AUTOMOTIVO GPS/GPRS COM INTERFACE ANDROID
SISTEMA RASTREADOR AUTOMOTIVO GPS/GPRS COM INTERFACE ANDROIDSISTEMA RASTREADOR AUTOMOTIVO GPS/GPRS COM INTERFACE ANDROID
SISTEMA RASTREADOR AUTOMOTIVO GPS/GPRS COM INTERFACE ANDROIDThugsta
 
Manutenção e montagem de computadores
Manutenção e montagem de computadoresManutenção e montagem de computadores
Manutenção e montagem de computadoresJoka Luiz
 
Manutenção de computadores
Manutenção de computadoresManutenção de computadores
Manutenção de computadoresAmadeo Santos
 

Semelhante a Motion Tracking Glove (20)

3 ok
3 ok3 ok
3 ok
 
Arca Sistema Gerencial
Arca Sistema GerencialArca Sistema Gerencial
Arca Sistema Gerencial
 
Screen
ScreenScreen
Screen
 
Pré-Projecto AREA
Pré-Projecto AREAPré-Projecto AREA
Pré-Projecto AREA
 
Usabilidade e Arquitetura de Informação de Websites de Governos Municipais
Usabilidade e Arquitetura de Informação de Websites de Governos MunicipaisUsabilidade e Arquitetura de Informação de Websites de Governos Municipais
Usabilidade e Arquitetura de Informação de Websites de Governos Municipais
 
Ferramentas da web ao serviço da formação
Ferramentas da web ao serviço da formaçãoFerramentas da web ao serviço da formação
Ferramentas da web ao serviço da formação
 
Alzira fs
Alzira fsAlzira fs
Alzira fs
 
Intro micro software
Intro micro softwareIntro micro software
Intro micro software
 
Tcc 2.0
Tcc 2.0Tcc 2.0
Tcc 2.0
 
Tcc 2.0
Tcc 2.0Tcc 2.0
Tcc 2.0
 
E-OBRAS: Proposta de Desenvolvimento do Protótipo de Sistema para Secretarias...
E-OBRAS: Proposta de Desenvolvimento do Protótipo de Sistema para Secretarias...E-OBRAS: Proposta de Desenvolvimento do Protótipo de Sistema para Secretarias...
E-OBRAS: Proposta de Desenvolvimento do Protótipo de Sistema para Secretarias...
 
E-OBRAS: Proposta de Desenvolvimento do Protótipo de Sistema para Secretarias...
E-OBRAS: Proposta de Desenvolvimento do Protótipo de Sistema para Secretarias...E-OBRAS: Proposta de Desenvolvimento do Protótipo de Sistema para Secretarias...
E-OBRAS: Proposta de Desenvolvimento do Protótipo de Sistema para Secretarias...
 
Inkscape
InkscapeInkscape
Inkscape
 
Projeto BECI
Projeto BECIProjeto BECI
Projeto BECI
 
Java applet
Java appletJava applet
Java applet
 
Graduação puc - aplicações de padrões de projeto no desenvolvimento de inte...
Graduação   puc - aplicações de padrões de projeto no desenvolvimento de inte...Graduação   puc - aplicações de padrões de projeto no desenvolvimento de inte...
Graduação puc - aplicações de padrões de projeto no desenvolvimento de inte...
 
SISTEMA RASTREADOR AUTOMOTIVO GPS/GPRS COM INTERFACE ANDROID
SISTEMA RASTREADOR AUTOMOTIVO GPS/GPRS COM INTERFACE ANDROIDSISTEMA RASTREADOR AUTOMOTIVO GPS/GPRS COM INTERFACE ANDROID
SISTEMA RASTREADOR AUTOMOTIVO GPS/GPRS COM INTERFACE ANDROID
 
Manutenção e montagem de computadores
Manutenção e montagem de computadoresManutenção e montagem de computadores
Manutenção e montagem de computadores
 
Manutenção de computadores
Manutenção de computadoresManutenção de computadores
Manutenção de computadores
 
081112 manut mont
081112 manut mont081112 manut mont
081112 manut mont
 

Motion Tracking Glove

  • 1. Instituto Politécnico do Cávado e do Ave Escola Superior de Tecnologia Engenharia Eletrotécnica e de Computadores José João de Deus Parreira Marques da Fonseca N.º 7629 Motion Tracking Glove Setembro de 2013
  • 2. Instituto Politécnico do Cávado e do Ave Escola Superior de Tecnologia Engenharia Eletrotécnica e de Computadores Relatório de Projeto Trabalho efetuado sob a orientação de: Professor António Herculano de Jesus Moreira Professor Dr. João Luís Araújo Martins Vilaça Setembro de 2013 ii
  • 3. Agradecimentos Este foi o culminar de uma etapa, há muito desejada na minha vida, e é por isso imperioso referir e agradecer a todos os que acompanharam este projeto e me ajudaram a crescer intelectualmente, profissionalmente e como pessoa. Ao Professor António Moreira, orientador deste projeto, pelo interesse, pela orientação, pela dedicação, pela transmissão de conhecimento estimulante e muito esclarecedor que demonstrou em todas as fases e disponibilizou ao longo do mesmo, refiro ainda que sem esses inputs não teria sido possível a conclusão em tempo útil. Ao Dr. João Vilaça a oportunidade de poder frequentar o ICVS e pelo seu encorajamento e orientação. Ao Professor Pedro Rodrigues pela ajuda na aplicação 3D. À equipa do ICVS, por me terem acolhido de uma forma fantástica no seio deste grupo de investigação, a todos vós o meu muito obrigado pelo tempo e apoio disponibilizado. Agradeço à minha esposa Carla, aos meus filhos Flávio e Carolina, bem como aos meus Sogros José e Olívia pela compreensão, apoio e incentivo que me deram para que eu tivesse tempo disponível para me dedicar ao projeto. À STMicroelectronics pela disponibilização de 12 conjuntos de sensores e ao meu colega Mário Silva pela ajuda e disponibilidade em me ajudar a soldar todas as placas do meu projeto. Por último, agradeço a Deus pelo discernimento, sabedoria e a inclusão das pessoas acima mencionadas durante este projeto. Ele resume tudo e é o motivo de tudo. Um projeto final de uma Licenciatura envolve muito mais do que o estudo de uma determinada matéria, envolve objetivos, dedicação e pessoas. O trabalho que aqui apresento é muito mais do que o resultado de vários meses de esforço, é acima de tudo o esforço de todos os que me acompanharam nesta etapa. A todos o meu muito OBRIGADO! iii
  • 4.
  • 5. Resumo A realização deste trabalho foi o culminar de uma importante etapa académica. Esta proporcionou a aquisição e consolidação das várias matérias aprendidas no universo do Curso de Engenharia Eletrotécnica e de Computadores, do Instituto Politécnico de Cávado e do Ave, bem como outras que desenvolvi ao longo do mesmo. Realizado no âmbito de projeto final do 3º ano e consistiu no desenvolvimento de uma luva de “motion tracking” fundamental para a fisioterapia e para animação de personagens. Foi desenvolvida uma luva de motion tracking, que é constituída com 11 sensores MARG (Magnetic, Angular Rate, and Gravity), um microcontrolador CortexM4, dois multiplexers de I2C e um sistema Bluetooth. Os dados calculados, são enviados em tempo real para o computador, através da ligação Bluetooth. Foram utilizados algoritmos de filtragem de sensores inerciais já conhecidos para obtermos a posição real dos dedos (Yaw, Pitch e Roll). Foi também desenvolvida uma ferramenta de visualização da respetiva movimentação da mão em tempo real. Implementou-se uma aplicação em C#, que tem por objetivo o armazenamento dos dados provenientes da luva, em SQL. Estes poderão vir a ser utilizados pela aplicação 3D, com o intuito de rever movimentos previamente executados podendo desta forma compará-los com outros existentes. Esta ferramenta poderá ser utilizada para tratamentos de fisioterapia ou até mesmo para inclusão do respetivo movimento numa animação da mão de uma personagem. Este projeto levou ao desenvolvimento de um sistema complexo que será abordado ao longo deste relatório. Palavras-chave (Tema): Motion Glove, Acelerómetro, Magnetómetro, Giroscópio, I2C, Tracking Glove, 3D, IMU, DCM. Palavras-chave (Tecnologias): Matlab, 3D, I2C, Bluetooh, Xbee, C#, Qt/C++, VTK, mdk-arm (Keil), Atollic True Studio, ARM. v
  • 6.
  • 7. Índice Agradecimentos ........................................................................................................iii Resumo ......................................................................................................................v Índice ....................................................................................................................... vii Índice de Figuras ....................................................................................................... ix Índice de Tabelas ...................................................................................................... xi Notação e Glossário ................................................................................................ xiii 1 Introdução ......................................................................................................... 1 1.1 Enquadramento ................................................................................................... 1 1.2 Apresentação do projeto ..................................................................................... 2 1.3 Motivação ............................................................................................................ 2 1.4 Planeamento do projeto ...................................................................................... 2 1.5 Estado da Arte ..................................................................................................... 3 1.5.1 DG5-VHand Glove ........................................................................................................ 3 1.5.2 CyberGlove II ............................................................................................................... 4 1.6 1.7 Contributos deste trabalho .................................................................................. 6 1.8 Objetivos.............................................................................................................. 7 1.9 2 Tecnologias utilizadas .......................................................................................... 6 Organização do relatório ..................................................................................... 7 Desenvolvimento .............................................................................................. 9 2.1 Especificação do sistema e sensores .................................................................... 9 2.2 Desenvolvimento das placas para acomodar os sensores. ................................. 15 2.2.1 Conceção e desenho da PCB para o IMU .................................................................... 16 2.2.2 Conceção e desenho da PCB para a placa de controlo................................................. 18 2.2.3 Teste das Placas e equipamento para o efeito ............................................................ 22 2.3 Aquisição dos sensores e implementação de algoritmos ................................... 22 vii
  • 8. 2.3.1 Calibração dos IMUs .................................................................................................. 34 2.3.2 Protocolo I2C.............................................................................................................. 38 2.4 2.4.1 2.5 Transmissão dos dados de forma remota para o PC. ......................................... 40 Comunicação Bluetooth ............................................................................................. 40 Desenvolvimento de um simulador virtual 3D ................................................... 42 3 Análise e melhoramentos................................................................................ 46 4 Conclusões....................................................................................................... 48 4.1 4.2 Outros trabalhos realizados ............................................................................... 49 4.3 Limitações & trabalho futuro ............................................................................. 50 4.4 5 Objetivos realizados........................................................................................... 48 Apreciação final ................................................................................................. 51 Bibliografia ..................................................................................................... 53 viii
  • 9. Índice de Figuras Figura 1 – DG5 – Vhand 2.0................................................................................................................. 4 Figura 2 – CyberGlove II. ..................................................................................................................... 5 Figura 3 – Placa STM32F3 Discovery. ................................................................................................ 10 Figura 4 – STM32F303VCT6 package. ................................................................................................ 10 Figura 5 – Diagrama de blocos do FX0S8700CQ Xtrinsic 6-Axis Sensor da freescale. ........................... 11 Figura 6 – Dispositivo LSM303 – pin out. ........................................................................................... 12 Figura 7 – Dispositivo LSM303 – pin out. ........................................................................................... 13 Figura 8 – Diagrama de Blocos do sistema conceptual. ...................................................................... 14 Figura 9 – Tracking Glove. ................................................................................................................. 14 Figura 10 – Colocação dos IMUs........................................................................................................ 16 Figura 11 – Esquema elétrico para o IMU. ......................................................................................... 16 Figura 12 – Placa IMU vista de ambas as faces. ................................................................................. 17 Figura 13 – Placa IMU. ...................................................................................................................... 18 Figura 14 – Esquema elétrico para a placa de controlo. ..................................................................... 19 Figura 15 – Placa da Controlo vista de ambas as faces. ..................................................................... 20 Figura 16 – Seleção do endereço do PCA9548A.................................................................................. 20 Figura 17 – Placa de controlo. ........................................................................................................... 21 Figura 18 – Placa proveniente do fornecedor de PCB. ........................................................................ 22 Figura 19 – Sensor HMC5843 da Sparkfun. ........................................................................................ 23 Figura 20 – Gráfico com dados ideais de um magnetómetro. ............................................................. 24 Figura 21 – Calibração de Soft e Hard-iron do sensor 1. ..................................................................... 25 Figura 22 – Calibração de Soft e Hard-iron do sensor 2. ..................................................................... 25 Figura 23 – Diagrama de blocos da representação do algoritmo de Madwick. ................................... 26 Figura 24 – Fluxograma do código implementado no microcontrolador. ............................................ 28 Figura 25 – Orientação dos eixos dos sensores. ................................................................................. 32 Figura 26 – Símbolo do I2C, retirado da wikipédia. ............................................................................. 38 Figura 27 – Um esquemático simples com um Master, três nós de slave e resistências de pull-up. ...... 38 ix
  • 10. Figura 28 – Envio de dados Master – Slave. ....................................................................................... 39 Figura 29 – Envio de dados Slave – Master. ....................................................................................... 39 Figura 30 – Start e Stop Bits. ............................................................................................................. 40 Figura 31 – Bluetooth HC-05. ............................................................................................................ 40 Figura 32 – Tabela para alterar os parâmetros da interface série do módulo Bluetooth. .................... 41 Figura 33 – Menu principal do simulador 3D. .................................................................................... 42 Figura 34 – Botão “serial port”. ......................................................................................................... 42 Figura 35 – Menu acesso à porta série. ............................................................................................. 43 Figura 36 – Botões de controlo do menu da porta série. .................................................................... 43 Figura 37 – Menu de configurações da porta série............................................................................. 43 Figura 38 – Controlo manual dos IMUs.............................................................................................. 44 Figura 39 – Pontos para desenho da mão 3D. .................................................................................... 45 Figura 40 – Interface para leitura e armazenamento dos dados em SQL. ........................................... 49 Figura 41 – Novos sensores da ST com 9 Dof. .................................................................................... 50 Figura 42 – Proposta para uma luva. ................................................................................................. 50 x
  • 11. Índice de Tabelas Tabela 1 – Pin-out dos LEDS da placa STM32F3. ................................................................................ 27 Tabela 2 – Calibração do acelerómetro. ............................................................................................ 35 Tabela 3 – Calibração do magnetómetro. .......................................................................................... 36 Tabela 4 – Calibração do giroscópio. ................................................................................................. 37 Tabela 5 – Tempos de impressão....................................................................................................... 47 xi
  • 12.
  • 13. Notação e Glossário ADC Analog-to-digital converter AHB Advanced High-performance Bus CCMSRAM Core coupled memory Static read access memory DCM Direction cosine matrix DMA Direct memory access Eagle Software para desenho de PCB PCB Printed circuit board DAC Digital-to-analog converter Dof Degrees of freedom I2C Inter-Integrated Circuit SDA Serial data line SCL Serial clock line Wifi Wireless Fidelity MARG Magnetic, Angular Rate, and Gravity IMU Inertial Measurement Unit LQE Linear quadratic estimation IDE Integrated Development Environment MDK Microcontroler Development Kit MEMS Microelectromechanical systems USB Universal serial bus 3D Três dimensões (Three-dimensional) DSP Digital Signal Processor xiii
  • 14. ALU Arithmetic logic unit KB Kilobyte MCU Microcontroller FPU Floating Point Unit MIPS Millions of Instructions Per Second DPS Degrees Per Second LGA Land grid array SMD Surface-mount device PGA Pin Grid Array SRAM Static Random Access Memory xiv
  • 15. Introdução Motion Tracking Glove 1 Introdução 1.1 Enquadramento Com o avanço da nanotecnologia conseguiu-se reduzir o tamanho dos Microelectromechanical systems (MEMS), nomeadamente os acelerómetros, magnetómetros e giroscópios ao ponto de se conseguir fazer um IMU de 9 graus de liberdade do tamanho de uma unha. Nos dias de hoje é importante a determinação da posição e orientação em vários campos da nossa sociedade, nomeadamente em navegação de carros, aviões e outros equipamentos. Tem sido bastante analisado e estudado o movimento do corpo, em especial o das mãos para diversas aplicações de reabilitação, animação de personagens animadas em filmes e jogos 3D. Em todos estes sistemas a tecnologia usada requer uma referência externa, podendo ser do tipo ótico, magnético e/ou acústico, para a localização do respetivo objeto. Atualmente os sensores inerciais através da captação ou medição das quantidades físicas, nomeadamente a aceleração e velocidade angular, permitem determinar a orientação de um objeto a que está diretamente associado. Sendo estes sensores referenciados internamente e imunes a interferências, conseguem efetuar a localização de corpos sem restrições [1]. Nestes sistemas o maior desafio é determinar a orientação, pois esta é obtida através da integração temporal de sinais provenientes de giroscópios, magnetómetros e acelerómetros que podem ter desvios e ruídos. Para melhorar estas variáveis e ter mais precisão de posicionamento, tradicionalmente são utilizados filtros de Kalman (KFs) também conhecidos por “linear quadratic estimation” (LQE). Estes têm uma aplicação vasta dentro de equipamentos de navegação, como por exemplo os telemóveis que já utilizam esta técnica em jogos e orientação. José Fonseca 1
  • 16. Introdução Motion Tracking Glove 1.2 Apresentação do projeto O projeto tem como objetivo a criação de uma luva constituída por sensores inerciais de 6 Dof (Acelerómetro e magnetómetro), posicionados nas extremidades dos dedos para a simulação em tempo real do movimento da mão. A luva permitirá determinar a orientação relativa de cada dedo em tempo real e enviar os dados para um PC com um simulador 3D por Bluetooth. O sistema terá aplicabilidade em tratamentos de fisioterapia e animação de personagens 3D. 1.3 Motivação A motivação para a realização deste projeto surgiu pelo desafio das áreas envolventes que o abrangiam. Foi necessário da minha parte incluir a interdisciplinaridade e acesso a várias matérias desconhecidas. Atualmente as áreas de sistemas embebidos e Eletrónica médica estão em desenvolvimento constante e foi para mim um desafio interessante conseguir interagir com uma área de grande handicap, que é a programação. 1.4 Planeamento do projeto O projeto foi delineado em ter as seguintes etapas com a respetiva carga horária: 1. Análise do estado da arte. (20h) 2. Especificação do sistema e sensores. (30h) 3. Desenvolvimento das placas para acomodar os sensores. (30h) 4. Aquisição dos sensores e implementação de algoritmos. (80h) 5. Desenvolvimento de um simulador virtual 3D. (120h) 6. Transmissão dos dados de forma remota para o PC. (20h) 7. Validação do sistema de fisioterapia e animação de personagens. (30h) 8. Escrita do relatório. (70h) José Fonseca 2
  • 17. Introdução Motion Tracking Glove 1.5 Estado da Arte Neste capítulo aborda-se o que foi desenvolvido na área de “Motion Tracking” da mão humana. “Motion Tracking” e outros tipos de deteção de movimento do corpo humano têm vindo a ser um tema cada vez mais estudado e investigado. Literatura recente aponta para estudos que incluem diversos métodos: através de roupa colorida e ou fatos [2]-[3], através de sensorização [4], através do campo electroestático [5], através de várias câmaras de vídeo [6]-[7], entre outros. Após uma pesquisa na internet foram encontradas várias soluções de acordo com os métodos acima referidos, no entanto os sistemas encontrados ou são caros ou dependem de um sistema de captação de vídeo que efetue uma aproximação ao movimento real, não permitindo ao utilizador um movimento livre como seria de esperar para um sistema de reabilitação fisioterapêutica e/ou animação 3D. Com o método de vídeo o acompanhamento/seguimento através de cores facilita a estimativa da pose da mão numa base de dados que já possua as várias posições, no entanto esta abordagem não é precisa. Aborda-se apenas alguns dos materiais encontrados para que se possa ter a perceção do que existe no mercado. 1.5.1 DG5-VHand Glove Esta luva é comercializada pela empresa Virtual Realities LTD [2] e tem como características principais:  5 Flexómetros proprietários – Para uma elevada estabilidade;  3 Graus de Tracking integrado;  Aparência inovadora;  Alta resolução - 10 bit, 1024 posições por dedo;  Plataforma independente USB ou uma interface independente sem fios por Bluetooth;  C++ SDK com programas de exemplo;  Pacote de Software;  Alta taxa de atualização; José Fonseca 3
  • 18. Introdução Motion Tracking Glove  Processador incorporado (20 MHz);  Firmware atualizável;  Preço 585.00 dólares. Figura 1 – DG5 – Vhand 2.0. Fonte: http://www.dg-tech.it/vhand/dg5%20vhand%202.0%20datasheet.pdf 1.5.2 CyberGlove II A CyberGlove II também é comercializada pela Virtual Realities e segundo o fabricante já é totalmente instrumentalizada o que proporciona até 22 graus de liberdade com uma alta precisão. Usa uma tecnologia proprietária com Flexómetros resistivos que transforma com precisão os movimentos da mão e dedos em dados digitais dos vários ângulos das juntas. O modelo de 18 sensores tem como característica dois Flexómetros em cada dedo, 5 sensores de presença, um para cada dedo e também para o pulso, sensores de dedos entrelaçados, sensores de curvatura da palma bem como sensor para a flexão do pulso. O modelo de 22 Sensores é de certa forma igual ao anterior, a principal diferença entre os dois são os três Flexómetros presentes em cada dedo, dando mais precisão do seu movimento. Cada sensor é extremamente fino e flexível ao ponto de ser quase indetetável na luva elástica. Este sistema da CyberGlove já é utilizado num vasto conjunto de aplicações reais tais como avaliação digital de prototipagem, realidade virtual em biomecânica e José Fonseca 4
  • 19. Introdução Motion Tracking Glove animação. Este modelo é também equipado com um sistema sem fios para comunicação dos respetivos movimentos, sendo assim bastante versátil para os mais variados projetos que necessitem de movimentação livre de fios. Características:  Número de sensores: 18 ou 22;  Resolução por sensor: 0.5 Graus (típico);  Repetibilidade por sensor: 1 grau (Desvio típico entre utilizações);  Linearidade do sensor: 0.6% máximo não linear sobre a gama da junta;  Taxa de atualização por sensor: 90 registros/seg. mínimo (100 registos/seg. típico);  Luvas suportadas por cada recetor sem fios: 2;  Sistema operativo: Windows 2000, XP, 7;  Duração máxima da bateria: 3 horas;  Ciclo de vida da bateria: 1 ano;  Carregador de bateria: Externo;  Raio de ação: 10 metros de raio de porta USB;  Interface: Porta USB para o recetor sem fios;  Preço: acima dos 4000 dólares. Figura 2 – CyberGlove II. Fonte: http://www.vrealities.com/products/data-gloves/cyberglove-ii Concluindo, é evidente que existem variadas aplicações de motion tracking. No entanto, podemos verificar que as soluções mais baratas não têm a mobilidade e posicionamento em relação ao mundo, introduzindo erros na orientação e posição José Fonseca 5
  • 20. Introdução Motion Tracking Glove real da mão. As mais dispendiosas já possuem sistemas de orientação através de inertial measurement unit (IMU). No entanto devido aos elevados custos, a sua comercialização e utilização ficam limitadas. 1.6 Tecnologias utilizadas Nas várias etapas deste projeto foram utilizadas várias tecnologias e em situações completamente distintas. Numa primeira fase o Arduino [8] e o Matlab [9] foram utilizados para diversos testes e estudos com sensores (HMC5843 da Sparkfun) com 3 Dof. O IDE do Arduino é específico para a programação da placa e o Matlab para a respetiva validação dos resultados. Para a implementação do código no microcontrolador STM32F4 foram utilizados inicialmente dois programas: o MDK-ARM da Keil [10] e o Atollic True Studio [11], mas por força de restrição do tamanho de código (32Kb) utilizou-se o compilador da Keil. Para a programação do simulador 3D foi utilizado o Visual Studio 2010 [12] e Qt/C++ com a livraria VTK [13]. Para a implementação da base de dados foi utilizado o Microsoft SQL Express 2012 [14]. 1.7 Contributos deste trabalho O contributo para este projeto foi de certa forma consolidar os conceitos sobre determinadas áreas em navegação inercial, usar algoritmos conhecidos e ajustá-los de maneira a efetuarem leituras dos 11 IMUs, para que estes sejam capazes de ler e interpretar vários valores e aplicá-los no simulador 3D. Como um dos objetivos era o de acomodar os sensores num espaço reduzido, foi também implementada uma placa que incorpora os três sensores (Giroscópio, Magnetómetro e Acelerómetro) necessários para obter a orientação do objeto. Foi também desenvolvida uma placa para controlo da leitura dos vários sensores, através de multiplexers de I2C. Esta abordagem deve-se ao facto de os José Fonseca 6
  • 21. Introdução Motion Tracking Glove endereços I2C dos sensores serem iguais e inalteráveis. Também foi incluído na placa, um sistema para carregamento da bateria através da porta USB. 1.8 Objetivos Como foi referido no capítulo de apresentação, de uma forma sucinta, os objetivos deste trabalho são os seguintes:  Realização de uma luva de motion tracking.  Especificação do sistema e sensores inerciais nas pontas dos dedos.  Desenvolvimento das placas para acomodar os sensores.  Aquisição dos sensores e implementação de algoritmos para determinar a orientação de cada dedo.  Transmissão dos dados, da orientação, de uma forma remota para um computador através de uma ligação sem-fios.  Desenvolver um simulador virtual 3D para validação do sistema a nível de tempo real. 1.9 Organização do relatório Este relatório é constituído por quatro capítulos: 1. Introdução: Realização do enquadramento do projeto, bem como a motivação, planeamento, estado da arte, tecnologias utilizadas, contributos e objetivos. 2. Desenvolvimento: Apresentação do problema, a forma como este foi abordado, tipos de tecnologias que foram utilizadas para o desenvolvimento do código bem como as várias partes de hardware que foram desenvolvidas. 3. Análise e melhoramentos: Análise do problema e a forma como foi melhorado. 4. Conclusões: Neste capítulo, são apresentadas as conclusões finais e uma análise crítica pessoal ao mesmo, com referência aos objetivos propostos, se estes foram alcançados bem como as respetivas limitações e trabalhos futuros. José Fonseca 7
  • 22.
  • 23. Desenvolvimento Motion Tracking Glove 2 Desenvolvimento Neste capitulo analisar-se-á o desenvolvimento do projeto de acordo com as etapas definidas no subcapítulo 1.4 planeamento do projeto: 1º Estado da Arte 2º Especificação do sistema e sensores. 3º Desenvolvimento das placas para acomodar os sensores. 4º Aquisição dos sensores e implementação de algoritmos. 5º Transmissão dos dados de forma remota para o PC. 6º Desenvolvimento de um simulador virtual 3D. 2.1 Especificação do sistema e sensores Neste capítulo é verificado o sistema como um todo e a forma como foram selecionados os sensores e dispositivos contemplados no projeto. O sistema necessita de um microcontrolador para comunicar com os sensores, calcular as orientações e de seguida enviar os cálculos através da porta série para um computador. O microcontrolador mais utilizado na licenciatura foi o Arduino desta forma este iria ser o microcontrolador utilizado. No entanto e após alguns testes com as leituras de apenas 5 sensores verificou-se que o mesmo não conseguia fazer mais do que 5 amostragens por segundo do conjunto desses mesmos sensores. Foi por isso decidido alterar o microcontrolador para outro com mais capacidade de processamento, se possível com uma Hard-FPU (floating-point unit) para tornar os cálculos mais rápidos. Após alguma pesquisa decidiu-se optar por o José Fonseca 9
  • 24. Desenvolvimento Motion Tracking Glove microcontrolador STM32F303VCT6 do tipo Cortex-M4 que se encontra incluído na placa de desenvolvimento STM32F3Discovery da STM conforme a Figura 3. Figura 3 – Placa STM32F3 Discovery. Fonte: http://www.st.com/st-webui/static/active/en/fragment/product_related/rpn_information/board_photo/stm32f3discovery.jpg STM32F303VCT6 microcontrolador Figura 4 – STM32F303VCT6 package. Fonte: Manual do microcontrolador Este dispositivo tem as seguintes características:  Core ARM™Cortex-M4 32-bit MCU;  FPU tem 256 KB Flash;  48 KB SRAM;  Até 12 interfaces de comunicação incluindo: 5x USART (9 Mbit/s), 3x SPIs/2xI2Ss (18 Mbit/s), 2x I2C (1 MHz em modo “fast mode plus”), CAN (1 Mbit/s), USB velocidade máxima; José Fonseca 10
  • 25. Desenvolvimento Motion Tracking Glove  4 ADCs, dois canais de DAC, sete comparadores, 13 relógios internos e funciona de 2.0 a 3.6 V (Figura 4). Este microcontrolador tem capacidades e características muito superiores às do Arduino e tendo em conta que se encontrava disponível, optou-se por usá-lo em detrimento de qualquer outro. Estando a questão do microcontrolador decidida, iniciou-se a escolha e especificidades dos sensores. O sistema inicialmente proposto era constituído por seis sensores com 6 Dof cada, cinco colocados em cada dedo e um nas costas da mão para referenciação dos movimentos. Tendo isto em mente os sensores escolhidos foram os FX0S8700CQ Xtrinsic 6-Axis Sensor da Freescale. Figura 5 – Diagrama de blocos do FX0S8700CQ Xtrinsic 6-Axis Sensor da freescale. Fonte http://cache.freescale.com/files/sensors/doc/fact_sheet/FXOS8700CQFS.pdf?fpsp=1 Estes sensores, como se verifica na Figura 3, têm internamente módulos que permitem efetuar a compensação dos sensores no que diz respeito a interferências externas, através de um DSP (Digital Signal Processor) que faz a respetiva calibração e correção de erros. Este seria o sensor ideal para realizar o projeto, no entanto na altura não estavam disponíveis amostras por serem muito recentes no mercado. Como a abordagem ao sensor anterior não foi concretizável optou-se por um outro sensor de uma outra marca, esta alteração recaiu para a STMicroelectronics devido à disponibilidade de amostras e também devido ao microcontrolador final ser José Fonseca 11
  • 26. Desenvolvimento Motion Tracking Glove da mesma marca. Com esta abordagem, passou-se a ter uma única marca o que tornou mais fácil a solicitação de amostras e o respetivo sucesso na obtenção das mesmas. Foram solicitados no dia 02-04-2013 à ST 12 sensores LSM303DLH (3-axis acelerómetro e 3-axis magnetómetro) e 12 sensores L3GD20 (3-axis digital output giroscópio) tendo sido entregues a 25-04-2013. O resto do material já estava disponível. Sensor LSM303 O LSM303DLHC é um circuito integrado com um acelerómetro 3D digital e um magnetómetro 3D digital. Tem escalas máximas de aceleração linear de ±2g / ±4g / ±8g / ±16g e uma escala de campo magnético de ±1.3 / ±1.9 / ±2.5 / ±4.0 / ±4.7 / ±5.6 / ±8.1 gauss. Todas as escalas são selecionáveis por software pelo utilizador. O LSM303DLHC inclui um barramento I2C que suporta modo standard (100 kHz) e rápido (400kHz). O sistema pode ser configurado para gerar sinais de interrupção por eventos de queda livre e inercia, bem como pela posição do dispositivo. Interrupções por limiares e temporizadores podem ser programados pelo utilizador. As componentes do magnetómetro e as do acelerómetro podem ser habilitadas ou desabilitadas em separado. O LSM303DLHC está disponível em pacotes LGA (land grid array) e é garantido o seu funcionamento numa vasta gama de temperaturas que variam desde -40°C até +85°C. Figura 6 – Dispositivo LSM303 – pin out. José Fonseca 12
  • 27. Desenvolvimento Motion Tracking Glove Fonte: Manual do dispositivo Sensor L3GD20 O L3GD20 é um sensor giroscópio 3D de baixa-potência. Este inclui um elemento de sensorização e um circuito integrado que são capazes de ler velocidade angular para o mundo exterior através de um interface digital (I2C/SPI). O L3GD20 tem uma escala máxima de ±250/±500/ ±2000 dps (Degrees per second) e é capaz de ler variações com a largura de banda selecionada pelo utilizador. Está disponível em pacotes LGA (land grid array) e é garantido o seu funcionamento numa vasta gama de temperaturas que variam desde -40 °C to +85 °C. Figura 7 – Dispositivo LSM303 – pin out. Fonte: Manual do dispositivo Resumindo, foram escolhidos os sensores que melhor se adaptavam à nossa realidade tendo em conta todos as condicionantes acima referidas e no qual a ideia conceptual do sistema é a seguinte: A Tracking Glove incorpora 11 IMUs de 9 Dof, serão colocados dois em cada dedo e um nas costas da mão como referência. Os IMUs serão ligados com quatro fios à placa de controlo. Dois para alimentação e os restantes para a comunicação por I2C ao microcontrolador. Na Figura 8 é apresentado um diagrama de blocos conceptual. A comunicação entre o microcontrolador e o computador é feita através de Bluetooth. Este dispositivo é capaz de comunicar bidireccionalmente. José Fonseca 13
  • 28. Desenvolvimento Motion Tracking Glove Figura 8 – Diagrama de Blocos do sistema conceptual. Conclui-se este subcapítulo mostrando na Figura 9 os equipamentos aqui mencionados em separado (a) e após assemblagem no aspeto final (b). a) Equipamento não assemblado b) Tracking Glove assemblada Figura 9 – Tracking Glove. José Fonseca 14
  • 29. Desenvolvimento Motion Tracking Glove 2.2 Desenvolvimento das placas para acomodar os sensores. Este subcapítulo documenta o desenvolvimento das placas PCB e de uma forma sucinta as ferramentas e tecnologias usadas. As placas PCB foram desenhadas utilizando o software EAGLE [16], versão gratuita para estudante. Nesta versão a ferramenta disponibiliza todo o seu potencial e limita apenas o tamanho do PCB a criar. Esta limitação não afetou o desenvolvimento uma vez que as placas se enquadravam no tamanho máximo permitido (10cm x 10cm). Uma vez que alguns dos componentes selecionados não estavam na respetiva biblioteca, foi necessário inserir os desenhos dos esquemáticos e packages. Os componentes normalmente estão disponíveis numa gama de invólucros (packages). A escolha do melhor package para um componente depende do tamanho e da facilidade de assemblagem. Quanto mais pequeno é o package do componente menor espaço no PCB, no entanto, torna-se difícil a sua assemblagem. Os componentes mais comuns, chamados componentes passivos, como por exemplo resistências e condensadores, possuem diferentes valores, mas os símbolos e o layout são sempre iguais. As resistências têm tamanho standard e não houve necessidade de ser criado este tipo de componente para a livraria. Houve apenas a preocupação da escolha dos tamanhos mais pequenos (0402 e 0603) e verificada a sua disponibilidade nos fornecedores. Neste caso a disponibilidade já tinha sido descartada pois todos os componentes necessários para o circuito já tinham sido devidamente encomendados bem como verificada a sua disponibilidade. O hardware da Tracking Glove consiste em duas placas desenhadas à medida para o efeito. A primeira é um IMU que acomoda os sensores para a captura dos movimentos dos dedos e da mão. As placas dos IMUs foram desenhadas para serem aproximadamente do tamanho das unhas dos dedos para que facilmente possam ser José Fonseca 15
  • 30. Desenvolvimento Motion Tracking Glove colocadas nas falanges distais e nas falanges proximais. A segunda é uma placa de controlo, foi pensada para ser colocada nas costas da mão, conforme Figura 10. A placa de controlo necessita de um interface de comunicação com os 11 IMUs e dessa forma houve a necessidade de desenvolver um circuito com as seguintes capacidades:  Interface e controlo do barramento I2C com os 11 IMUs;  Interface USB (carregamento);  Reguladores de Tensão;  Sistema de carregamento de bateria. Figura 10 – Colocação dos IMUs. 2.2.1 Conceção e desenho da PCB para o IMU Os IMUs foram desenhados e fabricados à medida. Após a análise do datasheet do fabricante de cada um dos sensores, foi efetuado o seguinte circuito (Figura 11) que implementa o IMU: Figura 11 – Esquema elétrico para o IMU. No circuito foi tido em conta o seguinte:  Resistências de pull-up para o barramento de I2C (R1 e R2).  Os condensadores de desacoplamento para minimização de interferências na alimentação (C4). José Fonseca 16
  • 31. Desenvolvimento  Motion Tracking Glove O condensador para os picos quando existam os resets aos dispositivos (C1). O processo de ligação de todas as pistas foi moroso e com um grau de dificuldade elevado, devido ao fato de se ter de colocar todo o circuito num espaço de 1,5cmx1cm e das pistas terem o espaçamento mínimo de acordo com as regras da empresa de fabrico. As pistas de alimentação foram reforçadas para o dobro do mínimo (0,254 mm) por questão de segurança para suportar as correntes de entrada. As placas foram desenhadas em dupla face conforme se pode verificar na Figura 12. Foi efetuado plano de massa em ambas as faces para uma melhor conexão entre os pinos de ground (GND). a) Placa IMU face superior b) Placa IMU face inferior c) Placa PCB IMU para produção Figura 12 – Placa IMU vista de ambas as faces. A placa tem quatro pontos de ligação, podendo aplicar um conector ou soldar diretamente na placa, conforme apresentado na Figura 13. Os sensores foram colocados com orientação para o lado oposto dos bornes de ligação ficando estes virados para a placa de controlo. Para que os cabos de ligação não partissem com os movimentos da luva foi colocada cola quente, assim foi solucionado um problema encontrado após alguns movimentos com a mesma. José Fonseca 17
  • 32. Desenvolvimento Motion Tracking Glove a) Placa IMU sem componentes b) Placa IMU soldada Figura 13 – Placa IMU. 2.2.2 Conceção e desenho da PCB para a placa de controlo Do mesmo modo que o IMU, a placa do controlo foi desenhada e concebida à medida, segundo as necessidades acima mencionadas. Esta placa inclui os seguintes componentes:  2 PCA9548A da Texas Instruments (multiplexers de I2C).  1 LM2937IMP-3,3V da Texas Instruments (regulador de tensão 3,3v).  1 MCP73831T-2A da Microchip (Carregador de bateria de uma célula).  Um interface USB para fornecer os 5 volts para carregar a bateria.  Várias resistências e condensadores bem como um led para confirmar carga de bateria completa. Todos estes equipamentos foram obtidos dos respetivos fornecedores como amostras. Após análise do datasheet do fabricante de cada um dos sensores foi efetuado o seguinte circuito que implementa a placa de controlo, apresentado na Figura 14: José Fonseca 18
  • 33. Desenvolvimento Motion Tracking Glove Figura 14 – Esquema elétrico para a placa de controlo. As dimensões da placa de controlo são 4,1cmx3,1cm. A ligação das pistas foi bastante morosa e com um grau de dificuldade elevado, devido à enorme quantidade de pistas provenientes dos barramentos I2C, no entanto conforme se pode verificar na Figura 15 ficou devidamente alinhado e com um bom layout. a) Placa de Controlo face superior José Fonseca b) Placa de Controlo face inferior 19
  • 34. Desenvolvimento Motion Tracking Glove c) Placa de Controlo PCB para produção Figura 15 – Placa da Controlo vista de ambas as faces. No circuito foram devidamente contemplados os endereços para cada um dos multiplexers I2C da seguinte forma: Segundo o datasheet existem três pinos de seleção por hardware que podem alterar o endereço slave do dispositivo, esses pinos são o A0, A1 e A2 conforme Figura 16. Figura 16 – Seleção do endereço do PCA9548A. Fonte: Datasheet do PCA9548A José Fonseca 20
  • 35. Desenvolvimento Motion Tracking Glove Segundo a tabela na Figura 16, os dispositivos na placa de controlo ficaram com os seguintes endereços: O multiplexer identificado como U2 no circuito (Figura 14) ficou com A2, A1 e A0 ligados ao GND (L) por isso o endereço é o 0x70 (hexadecimal) e por sua vez o U3 ficou com o A0 a Vdd (H) e os restantes A1 e A2 ao GNG (L), por isso o endereço é o 0x71 (hexadecimal). No mesmo dispositivo foram colocados à disposição os pinos de reset para ambos os multiplexers, bem como os barramentos de I2C que estão disponíveis em separado e comtempladas as resistências de pull-up. A placa foi desenhada de forma que os conectores dos sensores estivessem virados de frente para a luva e o interface USB e as ligações ao Microcontrolador estivessem na parte do pulso (ver Figura 17-c), permitindo assim uma ligação mais estética. a) Placa de controlo face superior c) b) Placa de controlo face superior Placa de controlo devidamente soldada Figura 17 – Placa de controlo. José Fonseca 21
  • 36. Desenvolvimento Motion Tracking Glove As placas PCB foram fabricadas na empresa Itead Studio da China. Para aproveitamento do espaço permitido foram incluídas as seguintes placas: Uma placa de controlo e três placas IMU. Cada PCB media 5cmx5cm e teve um custo de 12.00 Dólares. (conforme Figura 18) a) Placa face superior b) Placa face Inferior Figura 18 – Placa proveniente do fornecedor de PCB. 2.2.3 Teste das Placas e equipamento para o efeito As placas assembladas foram testadas utilizando equipamentos de bancada disponíveis, nomeadamente:  Um Arduino que serviu para leitura e alimentação dos sensores.  Um multímetro Kaise-My64.  Um osciloscópio digital Gwinstek GDS-1102A. O multímetro foi necessário para a verificação de qualquer tipo de curto circuitos que pudessem existir, bem como para confirmação das tensões de alimentação. O osciloscópio serviu para ler sinais de debug. 2.3 Aquisição dos sensores e implementação de algoritmos Neste subcapítulo abordar-se-á a implementação da aquisição de dados, o tipo de algoritmo utilizado e ajustes efetuados para melhoramento do sistema. A abordagem inicial, como já referido anteriormente, consistiu no uso do Arduino como microcontrolador. Foram com este efetuados alguns testes e simulações com o sensor HMC5843 (Figura 19). José Fonseca 22
  • 37. Desenvolvimento Motion Tracking Glove Figura 19 – Sensor HMC5843 da Sparkfun. Enquanto se aguardava a chegada dos sensores escolhidos para a Tracking Glove, efetuaram-se testes utilizando o Arduino para ler os valores “raw” dos sensores (HMC5843) disponíveis na altura. Nestes testes foi interessante a aprendizagem em como ultrapassar o obstáculo da leitura de vários sensores através do Arduino. O Arduino Uno tem um único I/O (Input / Output) disponível para o efeito de I2C (Pino 4 e Pino 5) e como os sensores têm o mesmo endereço e inalteráveis, foi utilizada uma livraria para incorporar vários pinos a simular por software o interface I2C. A livraria utilizada é a “softi2cmaster”. Esta livraria permite utilizar qualquer um dos pinos de entrada/saída como interface de I2C usando bit-banging. Num barramento I2C por hardware a frequência de relógio é de 400 KHz no entanto usando a livraria por software passa-se a ter uma frequência de 65 KHz, esta deve-se ao facto de haver restrições a nível de interrupções e do buffer [17]. O código usado está no formato digital e anexo a este relatório. Outro ponto importante verificado foi o aspeto dos problemas com distorções causadas por Soft-iron e Hard-iron. As distorções do campo magnético da terra são o resultado de influências magnéticas externas geralmente designadas por hard ou soft-iron. Se não houver nenhum efeito de distorção e se rodar um magnetómetro 360˚ e efetuar-se um plot desses dados, ter-se-á um círculo perfeito centrado em (0, 0), conforme Figura 20. José Fonseca 23
  • 38. Desenvolvimento Motion Tracking Glove Figura 20 – Gráfico com dados ideais de um magnetómetro. No entanto a presença de interferências de soft ou hard-iron podem produzir perturbações como um simples offset do círculo em (0,0) no caso do efeito de hardiron ou deformar o círculo para uma elipse no caso de efeito de soft-iron. Distorção por Hard-iron pode ser produzida por materiais que têm um campo magnético constante e é adicionado ao campo magnético da terra. Se este campo de distorção for constante o sensor é afetado por ele da mesma forma, por isso é necessário verificar essa força e aplicar um determinado offset ao sistema para que este volte ao ponto central do círculo (0,0). Este efeito pode ser causado por altifalantes, discos de portáteis ou qualquer outro dispositivo com um forte campo magnético, por isso é importante calibrar o sistema e aplicar os respetivos ajustes. Distorção por Soft-iron, ao contrário do hard-iron, é afetada por materiais que alterem ou deformem o campo magnético, por isso não é um campo que seja constante e aditivo ou até mesmo não criar um campo magnético. Este efeito pode ser causado por ferro ou níquel. Esta interferência depende da orientação do material em relação ao sensor, por isso esta calibração não é uma simples constante mas sim um procedimento mais complicado, como tal foi utilizado código já implementado [18]. Foram aplicados alguns ajustes de calibração aos sensores de teste e são apresentados os seguintes gráficos: José Fonseca 24
  • 39. Desenvolvimento Motion Tracking Glove Figura 21 – Calibração de Soft e Hard-iron do sensor 1. Figura 22 – Calibração de Soft e Hard-iron do sensor 2. Nestes gráficos verifica-se que não há muita correção de soft-iron a fazer, como se comprova pelas Figuras 21 e 22 que estão circulares, no entanto o eixo tem uma ligeira correção a ser feita, devendo-se ao facto do local de calibração ter uma constante magnética aditiva que deve ser calibrada (hard-iron). José Fonseca 25
  • 40. Desenvolvimento Motion Tracking Glove Após vários testes de sensibilização com alguns problemas dos sensores inerciais, explicar-se-á como foi efetuada a leitura do sistema da Tracking Glove bem como o tipo de algoritmo utilizado. No que diz respeito a algoritmos, existem vários, mas há dois que são muito usados para sistemas de IMUs, sendo esses Madwick e Mahony. O filtro usado para a implementação vai ser o DCM (Direction Cosine Matrix). A Figura 23 representa o algoritmo de Madwick no seu todo, no entanto e devido à sua complexidade não será explicado. Irar-se-á apenas utilizá-lo, aplicar o filtro DCM, fazer os respetivos ajustes na sua calibração bem como incluir os 11 IMUs a serem lidos. Figura 23 – Diagrama de blocos da representação do algoritmo de Madwick. Inclui distorção magnética (Group 1) e compensação do “drift” do giroscópio (Group 2). Em relação à programação do microcontrolador esta foi efetuada com o MDKARM da Keil. No que diz respeito à aquisição de dados foram utilizadas bibliotecas existentes disponibilizadas pela ST para a configuração inicial bem como a respetiva leitura dos dados em “raw”. O fluxograma da Figura 24 mostra como está estruturado o código e será explicado por blocos. José Fonseca 26
  • 41. Desenvolvimento Motion Tracking Glove Aproveitando o facto da placa do microcontrolador ter 10 leds utilizou-se a livraria existente para se configurar os mesmos e usá-los como debug visual. No início do programa efetua-se a inicialização de todos os leds e logo de seguida força-se os mesmos a desligar com um “toggle”. A tabela 1 mostra a associação dos pinos de saída com os leds existentes. Tabela 1 – Pin-out dos LEDS da placa STM32F3. LED Saída 3 PE 9 4 PE 8 5 PE 10 6 PE 15 7 PE 11 8 PE 14 9 PE 12 10 PE 13 Configuram-se também os relógios (clocks) do porto A bem como o da porta série, logo de seguida associam-se os pinos para a Usart e configura-se o modo de funcionamento de cada um. Os pinos selecionados para a porta série foram os seguintes: TX  PA9 e RX  PA10. José Fonseca 27
  • 42. Desenvolvimento Motion Tracking Glove FluxoGrama do Algoritmo implementado Inicio da função Main() Colocas as saidas do multiplexer a zero Inicia o ciclo de leitura dos 11 IMUS LED3 On para medição da frequência de amostragem Inicialização dos leds da Board Inicialização dos relógios da Usart e I2C Configurações dos pinos da Usart (A9->TX e A10->RX) Inicio das interrupções da Usart Configuração da Usart LED3 On para Debug IMU++ Configuração dos relógios e dos pinos da interface I2C (SDA->PB9 e SCL->PB8) LED7 On para Debug Inicializa as variáveis de sistema: Dt, Modo de calibração ou leitura e atualiza os vários off-sets de calibração de Soft e Hard-iron Inicia o ciclo de setup dos 11 IMUs IMU<=10 IMU++ Sim Seleciona a saida do multiplexer Efetua o Setup inicial do sensor Não IMU<= 10 Seleciona a saida do multiplexer Efetua as leituras e guarda as variavéis numa variavel tridimensional para cada um dos IMUs: Giroscópio, Acelerómetro e Magnetómetro Após as leituras passa pelo filtro DCM IMU=0 Print_cnt =0 Não Print_cnt++ LED3 Off Print_cnt >02 Sim Inicia o processo de Impressão por interrupção Figura 24 – Fluxograma do código implementado no microcontrolador. José Fonseca 28
  • 43. Desenvolvimento Motion Tracking Glove Posteriormente são configuradas as interrupções e a porta série. Em termos de modo de funcionamento da porta série, efetuaram-se as seguintes configurações:  Baud Rate – 9600. Foi criada uma variável para alterar a velocidade.  Número de Bits – Foi configurado como 8 bits.  Número de Stop bits – Foi configurado para 1 Stop bit.  Tipo de paridade – Foi configurado para do tipo nenhum “none”.  Tipo de flow control - Foi configurado para do tipo nenhum “none”. Para confirmação da correta configuração da porta série utiliza-se o LED3 para debug visual. O processo seguinte configuram-se e selecionam-se os pinos para o interface I2C. Configuraram-se os relógios (clocks) do porto B e do I2C1 (existem dois barramentos), associam-se os pinos para o I2C e configura-se o modo de funcionamento de cada um. Os pinos selecionados para a interface I 2C foram os seguintes: SDA  PB9 e SCL PB8, após configurado o interface este é dado como ativo. O sistema necessita de variáveis iniciais e é no processo seguinte que são calculadas, assim permanecem até haver um reset. Estas são:  Modos de funcionamento ao iniciar o sistema (pode ser de leitura ou de calibração).  Inicialização das variáveis de erro.  Inicialização das variáveis de calibração, que foi feita de acordo com o algoritmo. Estes valores são calculados num ciclo “for” para haver uma homogeneidade entre as leituras dos vários IMUs. Estas calibrações já contemplam a correção do soft e hard-iron.  Inicia-se uma variável G_Dt - tempo entre leituras. Após a inicialização das variáveis de sistema foi configurado mais um debug visual, isto é ativa-se o LED3, este permite medir a frequência de atualização de cada ciclo de leitura. Esta foi sendo otimizada até se fixar nos 50 Hz para os 11 IMUs mais o envio da trama. José Fonseca 29
  • 44. Desenvolvimento Motion Tracking Glove O ciclo de setup dos IMUs inicia-se com a variável IMU a 0 e a cada ciclo esta é incrementada para transitar para o próximo IMU até que se complete o total dos 11 IMUs. A cada IMU selecionado existe uma porta de saída dos multiplexers que terá de ser selecionada para que o microcontrolador possa comunicar com o IMU certo. Neste caso foram criadas duas variáveis distintas, uma para cada um dos multiplexers, MUX1_I2C_ADDRESS para o multiplexer 1 e MUX2_I2C_ADDRESS para o multiplexer 2. Da mesma forma foram criadas variáveis para a seleção das saídas dos mesmos e intuitivamente foram declaradas de MUX_SAIDA_1 a MUX_SAIDA_8 para se poder selecionar qualquer uma das saídas. A função de escrita foi alterada para contemplar as seguintes variáveis: Canal de I2C, endereço do dispositivo e o valor. Ao alterá-la esta ficou mais genérica para todo o restante processo. A função alterada foi a seguinte: LSM303DLHC_Write_MUX(I2C_TypeDef* I2Cx, uint8_t DeviceAddr, uint8_t channel); Incluíram-se os argumentos do tipo I2C_TypeDef para selecionar o I2C pretendido, o argumento uint8_t DeviceAddr para transmitir o endereço pretendido, selecionar o multiplexer e por último o argumento uint8_t channel ao qual nos é permitido selecionar a respetiva saída. De seguida mostra-se um exemplo de como selecionar o multiplexer 1 e a saída 2 com a respetiva função: LSM303DLHC_Write_MUX (TCA9548A_I2C, MUX1_I2C_ADDRESS, MUX_SAIDA_2); A função seguinte efetua o setup dos sensores inclusos ao IMU, neste caso há duas funções que efetuam essa tarefa, temos a função Gyroconfig() (configuração do giroscópio – L3GD20) e CompassConfig() (configuração do magnetómetro e acelerómetro – LSM303). Cada uma destas funções seleciona o modo de funcionamento e de que forma o sensor se comportará quando solicitada a leitura. Após vários testes entre escalas, modos de funcionamento e outros, os campos mais significativos selecionados para o melhor funcionamento foram os seguintes:  Output Data Rate o Magnetómetro: foi selecionado 75 Hz. José Fonseca 30
  • 45. Desenvolvimento Motion Tracking Glove o Acelerómetro: Foi selecionado 100 Hz. o Giroscópio: Foi selecionado 95 Hz.  BandWidth o De acordo com as frequências selecionadas no “output data rate”.  Full Scale o Acelerómetro 2G. o Magnetómetro 2G.  HighPass Filter o Este filtro foi ativado e proporciona um melhor funcionamento. Os valores de “output data rate” foram selecionados acima dos 50 Hz para que as leituras possam ser atualizadas sem atrasos. Após a inicialização de todos os sensores e de todas as variáveis de sistema prontas, dá-se início às leituras e aplica-se o filtro DCM com as calibrações efetuadas anteriormente. O ciclo seguinte é infinito e permite a entrada em modo de leitura ou de calibração mediante o selecionado. No modo de calibração é efetuada apenas a leitura em “raw” dos sensores e imprimirá mediante o tipo de calibração. Este modo será abordado melhor mais à frente. O ciclo de leitura dos sensores inicia-se com um debug visual (LED 3), este também é utilizado para verificação no osciloscópio da frequência a que estão a ser enviados os dados pela porta série. Pode-se identificar na tabela 1 que o pino PE9 é de verificação. Após a ativação do LED passa-se ao ciclo de leitura dos IMUs sendo essa tarefa realizada da mesma maneira que a já explicada acima aquando do setup dos sensores. Passar-se-á a explicar de seguida a forma como é efetuada a leitura. Esta leitura é realizada quando invocada a função update_sensor() e nesta existem várias funções. No entanto há três, que se encarregaram de ler os valores “raw” de cada um dos dispositivos, sendo estas: GyroReadAngRate(gyro[imu]), CompassReadMag(magnetom[imu]) e CompassReadAcc(accel[imu]). Cada uma destas tem um argumento que será preenchido com os valores que vão sendo lidos, esses serão necessários para os cálculos posteriores. José Fonseca 31
  • 46. Desenvolvimento Motion Tracking Glove De seguida há uma correção de eixos, devido a uma má interpretação da orientação dos sensores e colocação dos mesmos na placa PCB. LSM303DL L3GD20 Figura 25 – Orientação dos eixos dos sensores. Conforme se verifica na Figura 25 os eixos do x e y dos sensores estão trocados, por isso é necessária a respetiva correção. Como o LSM303 tem dois sensores embebidos (magnetómetro e acelerómetro) decidiu-se manter essa orientação e apenas efetuar a troca no giroscópio (L3GD20). Essa está efetuada logo a seguir à leitura dos dados em “raw” onde as variáveis do giroscópio são alteradas com o seguinte código: gyro[imu][0] *= -SENSOR_SIGN[1]; Coloca o x=y e inverte devido aos eixos dos sensores. gyro[imu][1] *= SENSOR_SIGN[0]; Coloca o y=x devido aos eixos dos sensores. gyro[imu][2] *= SENSOR_SIGN[2]; Este mantém a posição do Z. Neste momento os eixos já se encontram devidamente orientados, passando à opção de aplicar às leituras o filtro DCM ou efetuar a calibração. Explicar-se-á o algoritmo de calibração na secção de calibração. Analisando o filtro DCM constatou-se a existência de seis funções retiradas do filtro de Madwick [19], estas fazem o seguinte: Compensação dos erros obtidos na calibração, estes ajudam a uma leitura mais estável. A função que efetua esta compensação é: compensate_sensor_errors() José Fonseca 32
  • 47. Desenvolvimento Motion Tracking Glove De seguida e já com os valores devidamente compensados efetua-se o cálculo da orientação do IMU, é como se fosse um compasso, dá-nos a orientação do IMU em relação ao campo magnético da terra. A função que efetua este cálculo é: Compass_Heading() A próxima função, esta mais complicada, calcula a matriz DCM de rotação para o próximo ponto. Esta é: Matrix_update() Após o cálculo da matriz passa-se à sua normalização através de fórmulas do nosso referido Madwick. A função que efetua a normalização é: Normalize() Após a normalização é feita mais uma compensação, através de estimativas e de um controlador PI. A função que efetua esta correção é: Drift_correction() Por último e com todo o filtro aplicado calculam-se os ângulos de Euler (Yaw, Pitch e Roll) estes são obtidos pela função: Euler_angles() Nesta fase passa pela impressão dos valores obtidos e enviá-los pela porta série através de uma trama. Essa é constituída por um conjunto de 11 IMUs, embora fisicamente só existam 11 sendo os restantes 5 “virtuais” serão calculados na aplicação 3D da seguinte forma: O método de cálculo dos IMUs da falange do meio consiste em igualar a mesma orientação (Yaw) e rotação (Roll) do IMU da frente e somar os dois ângulos de inclinação (Pitch) dos IMUs existentes, dividindo-os por dois, noutras palavras é efetuada uma média das inclinações que se aplica ao IMU “virtual”. A trama a ser transmitida tem o seguinte aspeto: “-10.6,23.3,-69.2,42.6,14.7,-94.2,0.9,20.8,3.7,15.9,-3.7,-1.1,-8.2,1.7,-9.5,-8.2,1.4,9.5,-29.9,11.5,18.1,-35.4,4.4,2.4,-49.0,14.2,37.8,-39.8,-0.6,11.8,-3.9,-30.0,12.8,” José Fonseca 33
  • 48. Desenvolvimento Motion Tracking Glove Cada três valores representam a leitura de 1 IMU com os respectivos Yaw, Pitch e Roll nesta ordem e depois os consequentes 11 valores. A trama é iniciada com o IMU inferior, de seguida o IMU “virtual” e por fim o IMU da ponta do dedo Polgar seguindo para os restantes dedos até terminar no IMU da base. 2.3.1 Calibração dos IMUs A calibração, como já referido anteriormente, é importante e determinante para uma leitura estável bem como mais realista com o ambiente envolvente. Dependendo de quão bom ou maus os sensores sejam, a precisão e resposta dos IMUs será consideravelmente melhorada pela calibração. Caso não exista podemos ter os seguintes efeitos:  Desorientação do Yaw sempre que exista uma rotação em X (Roll).  Quando se efetuar um Pitch (para cima) pode não traduzir essa orientação nos valores de leitura. Será de bom senso ligar os sensores antes da calibração, dando tempo de estabilização. O algoritmo que foi implementado na luva possibilita a entrada em modo de calibração. Este pode ser alterado mediante o valor de duas variáveis criadas para o efeito, estas são:  OUTPUT__MODE_CALIBRATE_SENSORS : Esta variável permite selecionar entre o modo de calibração ou de leitura. Caso o valor seja 0 é selecionado o modo de leitura. Caso o valor seja 1 é selecionado o modo de calibração.  curr_calibration_sensor: Esta variável permite selecionar qual o sensor a calibrar. Caso o valor seja 0 é selecionado a calibração do acelerómetro. Caso o valor seja 1 é selecionado a calibração do magnetómetro. Caso o valor seja 2 é selecionado a calibração do giroscópio. Explicado o processo de seleção, aborda-se o processo dos vários tipos de calibração, como se deve proceder e que tipo de print out teremos em cada um. José Fonseca 34
  • 49. Desenvolvimento Motion Tracking Glove 2.3.1.1 Acelerómetro Na calibração do acelerómetro são encontrados os valores máximos e mínimos da força da gravidade da terra sobre cada um dos eixos (x, y e z de cada sensor) temos de mover o IMU com a menor velocidade possível para que apenas exista a gravidade terrestre sobre o mesmo. O processo de calibração é simples, coloca-se o sensor na posição horizontal e efetua-se o movimento descendente no eixo do x até que o valor máximo não se altere, depois efetua-se o mesmo movimento mas em sentido inverso até que o valor mínimo não se altere e assim se obtêm os máximos e mínimos do eixo do x. Para se obter os restantes eixos efetua-se o mesmo procedimento em cada um. Caso exista qualquer tipo de vibração, deturpa a calibração e será necessário efetuar um reset e reiniciar a mesma. A saída da porta série terá o seguinte aspeto: accel x,y,z (min/max) = -5.00/-1.00 25.00/29.00 225.00/232.00 Na calibração efetuada à Tracking Glove foram obtidos os seguintes valores: Tabela 2 – Calibração do acelerómetro. Acelerómetro X(min/max) Y(min/max) Z(min/max) 0 1222.00/1292.00 1308.00/1091.00 1214.00/1966.00 1 1055.00/1192.00 1074.00/1536.00 1772.00/1572.00 2 1192.00/1039.00 1038.00/1050.00 1174.00/1162.00 3 1006.00/1083.00 1166.00/1226.00 1226.00/1288.00 4 1072.00/1033.00 1042.00/1030.00 1180.00/1052.00 5 1068.00/1072.00 1032.00/1252.00 1104.00/1562.00 6 1060.00/1032.00 1073.00/1010.00 1177.00/1108.00 7 1063.00/1006.00 928.00/1078.00 1090.000/1310.00 8 1082.00/1036.00 1038.00/1018.00 948.00/1466.00 José Fonseca 35
  • 50. Desenvolvimento Motion Tracking Glove 9 1034.00/1026.00 1123.00/926.00 1044.00/1244.00 10 1136.00/1070.00 1078.00/1038.00 928.00/1206.00 2.3.1.2 Magnetómetro Na calibração do magnetómetro são encontrados máximos e mínimos da força magnética sobre cada eixo (x, y e z). O processo é igualmente simples, aponta-se o IMU para norte e com movimentações em x (para cima e para baixo) até que os máximos e mínimos não se alterem. Efetuar o mesmo procedimento para os restantes eixos. A saída da porta série terá o seguinte aspeto: magn x,y,z (min/max) = -564.00/656.00 -585.00/635.00 -550.00/564.00 Na calibração efetuada à Tracking Glove foram obtidos os seguintes valores: Tabela 3 – Calibração do magnetómetro. Magnetómetro X(min/max) 0 376.12/576.12 523.88/501.49 298.33/648.33 1 541.79/365.67 674.63/388.06 496.67/500.00 2 440.30/550.75 544.78/513.43 508.33/485.00 3 437.31/540.30 529.85/505.97 573.33/376.67 4 379.11/470.15 541.79/519.40 510.00/433.33 5 410.45/558.21 514.93/538.81 443.33/506.67 6 608.96/452.24 667.16/371.64 271.67/676.67 7 422.39/549.25 541.79/513.43 338.33/620.00 8 576.12/437.31 659.70/394.03 445.00/503.33 9 417.91/559.70 558.21/502.98 293.33/653.33 10 525.37/371.64 670.15/419.40 508.33/490.00 José Fonseca Y(min/max) Z(min/max) 36
  • 51. Desenvolvimento Motion Tracking Glove 2.3.1.3 Giroscópio Na calibração do giroscópio é encontrado um offset para as interferências de cada eixo e de cada sensor. A calibração do giroscópio é um processo bem mais simples do que os anteriores. Basta deixar o IMU estável e esperar aproximadamente 10 segundos obtendo desta forma a interferência média. A saída da porta série terá o seguinte aspeto: gyro x,y,z (current/average) = -29.00/-27.98 102.00/100.51 -5.00/-5.85 Na calibração efetuada à Tracking Glove foram obtidos os seguintes valores: Tabela 4 – Calibração do giroscópio. Giroscópio X(current/average) Y(current/average) Z(current/average) 0 1.24/0.05 0.09/0.06 0.77/0.07 1 -0.16/-0.02 0.16/0.01 0.70/0.08 2 7.16/0.66 0.40/0.08 0.93/0.09 3 4.73/0.42 6.21/0.55 2.38/0.23 4 0.14/-0.02 0.07/0.02 0.11/-0.01 5 -4.31/-0.39 -0.89/-0.09 0.42/0.04 6 0.07/0.03 1.87/0.13 0.00/-0.01 7 -83.42/-7.56 -88.83/-8.07 91.84/8.33 8 -1.33/-0.22 4.88/0.42 1.91/0.14 9 -0.16/-0.03 -1.35/-0.06 0.58/0.07 10 -0.23/0.02 -0.12/-0.01 -0.21/-0.01 José Fonseca 37
  • 52. Desenvolvimento Motion Tracking Glove 2.3.2 Protocolo I2C Figura 26 – Símbolo do I2C, retirado da wikipédia. O protocolo I2C foi desenvolvido pela Philips© e está neste momento disponível em vários componentes, este capítulo é uma ligeira introdução e aborda o modo Single Master baseado em comunicação I2C de 7 bits [15]. O I2C é geralmente referido por interface de 2 fios, pois usa 2 linhas bidirecionais, SDA (Serial Data Line) e SCL (Serial Clock Line) com resistências pull-up. Neste caso não foram necessárias colocar as mesmas pois as placas de aquisição já têm esse aspeto em conta. As tensões típicas são 5V ou 3.3 V, normalmente I 2C refere-se a 7-bits ou 10bits de endereços, a velocidade standard é de 100Kb/s e 10Kbit/s para baixa velocidade, ultimamente tem existido atualizações em que já corre a velocidades superiores. Estas taxas de transferência ocorrem entre Master-Slave (ver Figura 27). Figura 27 – Um esquemático simples com um Master, três nós de slave e resistências de pull-up. O desenho de referência que se aborda é o barramento com linhas SCL e SDA com 7 bits de endereçamento, em que o barramento tem 2 papéis para os nós, Master ou Slave:   O nó Master – emite sinal relógio e faz o endereçamento dos Masters; O nó Slave – recebe a linha do relógio e os endereços. José Fonseca 38
  • 53. Desenvolvimento Motion Tracking Glove O barramento é multi-Master o que significa que se pode ter qualquer número de nós Master, adicionalmente o papel de Master-Slave (Figura 28) pode trocar após o envio de STOP. Sequência de Transmissão de dados: 1. 2. 3. 4. 5. 6. 7. Envia o START bit (S); Envia o Slave endereço (ADDR); Envia o Read® -1/ Write (W) – 0 bit; Espera para enviar o bit reconhecimento (A); Envia/Recebe os dados (8 bits) (DATA); Envia o bit de reconhecimento (A); Envia o bit STOP (P). ENVIO DE DADOS DO MASTER PARA O SLAVE Figura 28 – Envio de dados Master – Slave. A sequência 5-6 pode ser repetida para que um bloco de dados possa ser lido ou escrito, no exemplo (ver Figura 29). ENVIO DE DADOS DO SLAVE PARA O MASTER Figura 29 – Envio de dados Slave – Master. Neste exemplo a sequência é S ADRESS R (é enviado R em vez de W, porque o Master lê os dados do SLAVE), após os dados transmitidos do Slave o Master envia o ACK (A). Se o Master não precisar de mais dados pode enviar um NACK, avisando o José Fonseca 39
  • 54. Desenvolvimento Motion Tracking Glove Slave para libertar o barramento. Cada dispositivo numa comunicação I2C deve ter um endereço único. START e STOP bits – Figura 30 Figura 30 – Start e Stop Bits. Todos os blocos de dados são de 8bits. O bloco inicial tem 7 bits de endereços seguido pelo bit direcional (R ou W), os blocos seguintes são de 8 bits de dados, bit de reconhecimento (ACK) são metidos entre cada bloco de dados. Neste caso o STM32 será o elemento master da comunicação I2C com os 11 sensores. Concluindo, nesta fase temos os dados prontos e trama definida. 2.4 Transmissão dos dados de forma remota para o PC. Neste capítulo analisar-se-á como transmitir a trama do microcontrolador para o computador assim como a configuração do dispositivo Bluetooth que incorpora a Tracking Glove. 2.4.1 Comunicação Bluetooth Iniciando pelo dispositivo que incorpora no projeto, este é um Bluetooth modelo HC-05 (Figura 31) que permite configuração através de comandos AT. Figura 31 – Bluetooth HC-05. José Fonseca 40
  • 55. Desenvolvimento Motion Tracking Glove Configuração do módulo Bluetooth Como referido anteriormente este módulo é configurável através de comandos AT, existindo no mesmo o pino (34) para o efeito (entrada em modo AT). O pino 34 (Key) foi ligado ao positivo da alimentação e os pinos 1 (TX) e 2 (RX) foram ligados cruzados (RxTx e TxRx) a um adaptador RS232 conectado ao computador. Após as ligações estarem concluídas o dispositivo é alimentado com 3,3V, usando um terminal para se poder comunicar com o módulo. Para constatar o sucesso da comunicação com o mesmo basta enviar o seguinte comando “AT”. Caso a resposta seja “Ok” a configuração em modo AT foi concluída com sucesso. Após a confirmação da entrada em modo AT, conseguir-se-á alterar as configurações da porta série do módulo para os seguintes parâmetros:  BaudRate = 9600;  Stop bit = 1;  Parity bit = none. O comando (adquirido no manual conforme Figura 32) para efetuar as alterações dos parâmetros acima definidos é: Comando: AT+UART=9600,0,0,rn Resposta: OK Figura 32 – Tabela para alterar os parâmetros da interface série do módulo Bluetooth. José Fonseca 41
  • 56. Desenvolvimento Motion Tracking Glove Após a confirmação de parâmetros alterados basta desligar o módulo e voltar a ligá-lo com o pino 34 desligado da alimentação. Desta forma poder-se-á dar início à transmissão por Bluetooth para o computador. Refere-se ainda que o código de conexão ao módulo é 1234. 2.5 Desenvolvimento de um simulador virtual 3D Neste capítulo aborda-se a criação de um simulador 3D para receção dos dados provenientes da Tracking Glove e os respetivos resultados da mesma. O simulador 3D foi desenvolvido em Qt/C++ com a livraria VTK, foi pensado para ter a simulação com os vários ossos constituintes da mão e o consequente controlo sobre os mesmos, conforme a imagem da aplicação na Figura 33 nos mostra. Figura 33 – Menu principal do simulador 3D. A aplicação tem vários controlos que se serão explicados: Existe um menu de configuração da porta série ao qual se acede ao premir o botão “serial port” (Figura 34) e dá acesso ao menu de configurações (ver Figura 35). Figura 34 – Botão “serial port”. José Fonseca 42
  • 57. Desenvolvimento Motion Tracking Glove Figura 35 – Menu acesso à porta série. Este Menu possui vários botões de controlo que dão acesso às seguintes funções:  O primeiro botão liga a porta série.  O segundo botão desliga a porta série.  O terceiro botão permite configurar os parâmetros da porta série.  O quarto botão limpa os dados da tela preta desta janela.  O quinto botão permite fechar a janela e as respetivas comunicações. Figura 36 – Botões de controlo do menu da porta série. A janela de configurações da porta série é acedida através do terceiro botão (ver Figura 37). Figura 37 – Menu de configurações da porta série. Este menu dá acesso a todas as configurações da porta série. Após a escolha dos parâmetros para a comunicação validar-se-ão os mesmos pressionando o botão . José Fonseca 43
  • 58. Desenvolvimento Motion Tracking Glove Após os parâmetros escolhidos ou alterados pode-se voltar a ligar as comunicações com a Tracking Glove. Caso a mesma receba dados estes vão-se refletir nos vários ângulos e mostrar em tempo real os movimentos detetados pelos 11 IMUs. No entanto temos a hipótese de verificar a aplicação 3D e alterar manualmente nos comandos do menu principal, conforme a Figura 38. Figura 38 – Controlo manual dos IMUs. Na Figura 38 pode ser visto que o primeiro conjunto controla o IMU da base e se forem efetuadas alterações no Roll, Pitch e Yaw toda a mão rodará, isto deve-se ao facto de a base comandar todo o resto. No que concerne aos dedos cada um é independente, no entanto, existe uma hierarquia de baixo para cima. Sendo que o primeiro IMU moverá o resto do dedo e em consequência o IMU do meio fará o mesmo ao IMU superior simulando assim o movimento real de um dedo. Consegue-se assim efetuar todas as opções propostas. José Fonseca 44
  • 59. Desenvolvimento Motion Tracking Glove Conclui-se este subcapítulo explicando sucintamente o que foi feito em termos de código. A janela principal é iniciada atualizando todos os seus botões bem como colocando as variáveis de controlo a zero, de seguida é desenhada a mão. Esta para ser desenhada necessita de 21 pontos, conforme a Figura 39, estes foram medidos numa mão real e depois inseridos na função DrawHand(). Figura 39 – Pontos para desenho da mão 3D. Os cálculos de todas as juntas foram efetuados após a leitura e separação da trama, como referido anteriormente e aplicados à função sendRotation(listVec, ResetVec). Esta atualiza as juntas de acordo com os dados enviados pelos dois vetores reproduzindo desta forma os movimentos em tempo real. José Fonseca 45
  • 60. Análise e melhoramentos Motion Tracking Glove 3 Análise e melhoramentos Neste capítulo abordam-se as alterações, análises e testes efetuados para se obter uma frequência de amostragem de 50 Hz dos 11 IMUs. Após o envio da primeira trama pela porta série foram obtidos os seguintes resultados: 280ms por cada ciclo de impressão, o que equivale a uma frequência de amostragem de (1/280ms) 3.57Hz. Este tempo foi medido através do pino PE9 (Pela tabela 1 o LED3 tem como saída o pino PE9) e com o auxílio do osciloscópio de bancada. Com este valor de amostragem o movimento dos dedos não seria real sendo por isso necessário o melhoramento do código e outras alternativas. Houve necessidade de pesquisa, de como e onde procurar soluções para reduzir o tempo. Após algumas pesquisas foram detetadas três possíveis causas para este atraso na leitura dos IMUS, sendo essas as seguintes: 1. Velocidade do barramento I2C. 2. Velocidade de impressão e tipo de trama. 3. Código repetitivo no ciclo de leitura dos IMUs. Dando início ao primeiro ponto que foi detetado (poderia haver um atraso devido à velocidade máxima do barramento I2C), foi encontrado no manual um registo que possibilita maiores velocidades nas transições de envio/receção de dados. O “I2Cx_TIMINGR register” é responsável pelos tempos de execução, foi por isso analisado o código e alterado na configuração da estrutura de I2C o parâmetro responsável pelo registo acima mencionado. O valor de defeito desse campo era de 0x00902025 (Hexadecimal) sendo este diretamente relacionado com o valor de ciclos de atraso. Foram efetuados testes por tentativa e erro constatou-se que aumentando este valor a frequência de amostragem reduzia, por isso efetuaram-se vários testes no sentido de reduzir este valor até zero e foi obtido o resultado de 14,7Hz (68ms) de amostragem entre impressões. Após este aumento na frequência de amostragem que já estaria mais perto dos 25 Hz, houve necessidade de continuar a explorar os pontos seguintes. José Fonseca 46
  • 61. Análise e melhoramentos Motion Tracking Glove Na análise da velocidade de impressão da trama, verificou-se que com o aumento do Baudrate o tempo de impressão diminuía, no entanto essa redução não seria a mais apropriada e não traria melhorias significativas. Tabela 5 – Tempos de impressão. Tipo de trama Baudrate 9600 512000 1024000 EulerDeg com float (.1f) Tempos 57ms 50ms 48ms EulerDeg com float (.5f) Tempos 230ms 210ms 200ms EulerDeg com int Tempos N/F N/F N/F Os valores na tabela 5 comprovam que a impressão era cerca de 80% (no pior dos casos) do total do tempo gasto, por isso foi necessário arranjar uma solução para reduzir drasticamente o tempo de impressão. Após estes resultados consultei o meu orientador a fim de obter alternativas. Uma das alternativas consistia em alterar o tipo de variável a ser impressa pela porta série, no entanto sem resultados de significativa redução. Houve a necessidade de avaliar as interrupções da porta serie e usar processamento paralelo. Após a implementação do código conseguiu-se aumentar a frequência de amostragem para 42 Hz (23,81 ms), ou seja, um aumento de 285,71%. Este valor já era satisfatório e suficiente para que os valores obtidos representassem em tempo real a movimentação da mão, no entanto houve uma análise ao terceiro ponto e o código foi verificado para possíveis atrasos. Após alguns testes de debug verificou-se a existência de uma função de setup inserida no ciclo de leitura dos respetivos IMUs aumentando assim o tempo de execução, por isso esta foi transitada para o exterior do ciclo infinito. Com esta alteração conseguiu-se sensivelmente mais 8 Hz de aumento, passando aos 50 Hz que o sistema tem atualmente como frequência de amostragem. José Fonseca 47
  • 62. Conclusões Motion Tracking Glove 4 Conclusões A tracking Glove desenvolvida foi um trabalho complexo realizado com sucesso. Este, resultou no desenvolvimento do seguinte hardware e software:  Um conjunto de 11 placas que acomodaram os sensores inerciais.  Placa de controlo com, multiplexagem I2C, carregador de bateria, alimentação de todo o sistema e conexão ao microcontrolador através de I2C.  Aplicação em C# para verificação dos dados e armazenamento em SQL.  Aplicação 3D em Qt/C++ com a livraria VTK para mostrar em tempo real os valores lidos do microcontrolador. Este projeto foi enriquecedor, dando-me a possibilidade de aplicar conhecimentos previamente adquiridos em várias áreas curriculares. Embora o percurso académico nos tenha dado bases importantes a vários níveis, deparei com a realidade de que pouco ou nada sabia e por isso houve a necessidade de pesquisar, perguntar e aprender com os vários investigadores com quem lidei diariamente na ICVS e em especial com o meu orientador. Este dia a dia foi o consolidar de matérias dadas e muitos conceitos começaram a fazer sentido no aspeto teórico e prático do projeto. Falando do aspeto prático recorro a um exemplo. No desenho das placas PCB houve a necessidade de criarmos peças que não existiam na base de dados do software (Eagle) sendo este ultrapassado com a pesquisa e ajuda de várias pessoas. Surgiram ao longo do projeto vários obstáculos, mas foram superados com a ajuda do meu orientador, de colegas de curso e por muitas pesquisas efetuadas. 4.1 Objetivos realizados Recordando os objetivos propostos:  Realização de uma luva de motion tracking.  Especificação do sistema e sensores inerciais nas pontas dos dedos.  Desenvolvimento das placas para acomodar os sensores. José Fonseca 48
  • 63. Conclusões  Motion Tracking Glove Aquisição dos sensores e implementação de algoritmos para determinar a orientação de cada dedo.  Transmissão dos dados, da orientação, de uma forma remota para um computador através de uma ligação sem-fios.  Desenvolver um simulador virtual 3D para validação do sistema a nível de tempo real. De acordo com os objetivos acima propostos concluo que os mesmos foram atingidos e inclusivamente superados. Superados, devido ao aumento do grau de exigência do meu orientador ao introduzir mais sensores e graus de liberdade do que os inicialmente propostos, bem como a inclusão de um microcontrolador cortex M4. 4.2 Outros trabalhos realizados Dada a necessidade de verificar os dados lidos da Tracking Glove, desenvolvi uma aplicação em C# que ajudou na verificação das leituras de uma forma mais “user friendly”, por isso, foi desenvolvido um interface (Figura 40) de leitura da porta série e apresentação da leitura dos mesmos. Esta aplicação foi também evoluindo sendo implementada uma ligação a uma base de dados SQL que permite guardar os dados recebidos e assim usá-los mais tarde para análise ou até mesmo reconstruir os movimentos efetuados durante a respetiva sessão. Figura 40 – Interface para leitura e armazenamento dos dados em SQL. José Fonseca 49
  • 64. Conclusões Motion Tracking Glove 4.3 Limitações & trabalho futuro Independentemente de os objetivos terem sido compridos, há sempre espaço para melhorar qualquer produto e enveredar por outro tipo de soluções. Por isso apresento aqui propostas para trabalho futuro sobre a Tracking Glove:  Implementação e utilização de melhores filtros e sensores, nomeadamente o iNEMO engine da ST (Figura 41). Figura 41 – Novos sensores da ST com 9 Dof.  Melhoramento da acomodação dos sensores à luva, obtendo assim um interface mais inovador e atrativo, deixo a seguinte proposta (Figura 42). Figura 42 – Proposta para uma luva. Fonte: P5 Glove José Fonseca 50
  • 65. Conclusões  Motion Tracking Glove Inclusão do microcontrolador e de um módulo Bluetooth na placa de controlo que foi desenvolvida.  Melhoramento da aplicação 3D para que a mesma tenha funções para sessões de fisioterapia e acesso à base de dados. 4.4 Apreciação final Como opinião pessoal, considero que este projeto foi aliciante e muito desafiador. Apesar de terem existido muitas dificuldades consegui conciliar todas as tecnologias aqui usadas e aplicá-las de forma a atingir os objectivos propostos. A procura de soluções para os problemas que iam surgindo proporcionaram-me a descoberta de todo um novo mundo de informações até agora desconhecido. Este trabalho tem a meu ver potencial para investimento. Quero com isto dizer que depois dos conhecimentos adquiridos na área, consigo prever a aplicação deste projeto em clinicas de reabilitação, cirurgia à distância, manuseamento de mãos robóticas sem riscos de utilização para o operador (maquinaria pesada) e em trabalhos de precisão em ambientes hostis. No cômputo geral aprofundei conhecimentos em sistemas embebidos, sistemas inerciais bem como na programação dos mesmos e conheci uma realidade diferente da minha área de trabalho. José Fonseca 51
  • 66.
  • 67. Bibliografia Motion Tracking Glove 5 Bibliografia [1] E. Foxlin,“Motion tracking requirements and technologies,”inHandbook of Virtual Environment Technologies, K. Stanney, Ed.. Hillsdale, NJ: Lawrence Erlbaum, 2002, ch. 8, pp. 163–210. [2] Wang, R. Y., “Real-Time Hand-Tracking as a User Input Device”, ACM Symposium on User Interface Software and Technology (UIST), 2008 [3] Wang, R. Y. & Popovic, J., “Real-Time HandTracking with a Color Glove”, ACM Transactions on Graphics, 2009 [4] Milanovic, V. & Lo, W. K., “Fast and HighPrecision 3D Tracking and Position Measurement with MEMs Micromirrors”, Optical MEMs and Nanophotonics. IEEE/LEOS. 2009 [5] Lee, J. et al., “The 3D Sensor Table for Bare Hand Tracking and Posture Recognition”, Lecture Notes in Computer Science, Springer, 2006 [6] Campos, T. E. & Murray, D. W., “Regression Based Hand Pose Estimation from Multiple Cameras”, Conference on Computer Vision and Pattern Recognition (CVPR), 2006 [7] Schlattmann, M. et al., “Real-Time Bare-Hands Tracking for 3D Games”, IADIS International Conference on Game and Entertainment Technology (GET), 2009 [8] Consultado em 10-04-2013: http://www.arduino.cc [9] Consultado em 12-04-2013: http://www.mathworks.com [10] Consultado em 06-05-2013: http://www.keil.com/arm/mdk.asp [11] Consultado em 25-04-2013: http://www.atollic.com/index.php/truestudio [12] Consultado em 02-05-2013: http://www.microsoft.com/visualstudio/eng [13] Consultado em 10-08-2013: http://qt-project.org/ [14] Consultado em 10-08-2013: http://www.microsoft.com/enus/download/details.aspx?id=29062 José Fonseca 53
  • 68. Bibliografia Motion Tracking Glove [15] Consultado em 10-04-2013: http://en.wikipedia.org/wiki/I2C [16] Consultado em 01-04-2013: http://www.cadsoftusa.com/eagle-pcb-designsoftware/product-overview/?language=en [17] Consultado em 01-04-2013: http://forums.adafruit.com/viewtopic.php?f=25&t=13722 [18] Consultado em 01-04-2013: http://www.freescale.com/files/sensors/doc/app_note/AN4246.pdf [19] Consultado em 20-07-2013: http://www.xio.co.uk/res/doc/madgwick_internal_report.pdf José Fonseca 54