Relatorio projecto tracking_glove

68
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

description

A realização deste trabalho, foi o culminar de uma importante etapa académica. Esta, proporcionou a aquisição de conhecimentos 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. Este, foi realizado no âmbito de projeto final do 3º ano e consiste face ao enunciado do trabalho, no desenvolvimento de uma luva de “motion tracking” fundamental para a fisioterapia e em 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 Cortex-M4, 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 já conhecidos de sensores inerciais 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. Foi igualmente implementada uma aplicação em C#, que tem por objetivo o armazenamento dos dados, provenientes da luva, em SQL. Estes dados poderão vir a ser utilizados pela aplicação 3D, com o intuito de rever movimentos previamente executados e desta forma poder compará-los com outros existentes. Ferramenta esta que pode ser utilizada para tratamentos de fisioterapia ou mesmo até para inclusão do respetivo movimento numa animação da mão de uma personagem. Este projeto levou ao desenvolvimento de um sistema complexo e será abordado ao longo deste relatório.

Transcript of Relatorio projecto tracking_glove

Page 1: Relatorio projecto tracking_glove

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

Page 2: Relatorio projecto tracking_glove

ii

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

Page 3: Relatorio projecto tracking_glove

iii

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!

Page 4: Relatorio projecto tracking_glove
Page 5: Relatorio projecto tracking_glove

v

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 Cortex-

M4, 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.

Page 6: Relatorio projecto tracking_glove
Page 7: Relatorio projecto tracking_glove

vii

Í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 Tecnologias utilizadas .......................................................................................... 6

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

1.8 Objetivos.............................................................................................................. 7

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

2 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

Page 8: Relatorio projecto tracking_glove

viii

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

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

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

2.4.1 Comunicação Bluetooth ............................................................................................. 40

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

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

4 Conclusões....................................................................................................... 48

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

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

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

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

5 Bibliografia ..................................................................................................... 53

Page 9: Relatorio projecto tracking_glove

ix

Í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

Page 10: Relatorio projecto tracking_glove

x

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

Page 11: Relatorio projecto tracking_glove

xi

Í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

Page 12: Relatorio projecto tracking_glove
Page 13: Relatorio projecto tracking_glove

xiii

Notação e Glossário

ADC

AHB

CCMSRAM

DCM

DMA

Eagle

PCB

Analog-to-digital converter

Advanced High-performance Bus

Core coupled memory Static read access memory

Direction cosine matrix

Direct memory access

Software para desenho de PCB

Printed circuit board

DAC

Dof

I2C

Digital-to-analog converter

Degrees of freedom

Inter-Integrated Circuit

SDA Serial data line

SCL

Wifi

Serial clock line

Wireless Fidelity

MARG Magnetic, Angular Rate, and Gravity

IMU Inertial Measurement Unit

LQE Linear quadratic estimation

IDE

MDK

MEMS

Integrated Development Environment

Microcontroler Development Kit

Microelectromechanical systems

USB

3D

Universal serial bus

Três dimensões (Three-dimensional)

DSP Digital Signal Processor

Page 14: Relatorio projecto tracking_glove

xiv

ALU

KB

MCU

FPU

MIPS

DPS

LGA

SMD

PGA

SRAM

Arithmetic logic unit

Kilobyte

Microcontroller

Floating Point Unit

Millions of Instructions Per Second

Degrees Per Second

Land grid array

Surface-mount device

Pin Grid Array

Static Random Access Memory

Page 15: Relatorio projecto tracking_glove

Introdução Motion Tracking Glove

José Fonseca 1

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.

Page 16: Relatorio projecto tracking_glove

Introdução Motion Tracking Glove

José Fonseca 2

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)

Page 17: Relatorio projecto tracking_glove

Introdução Motion Tracking Glove

José Fonseca 3

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;

Page 18: Relatorio projecto tracking_glove

Introdução Motion Tracking Glove

José Fonseca 4

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

Page 19: Relatorio projecto tracking_glove

Introdução Motion Tracking Glove

José Fonseca 5

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

Page 20: Relatorio projecto tracking_glove

Introdução Motion Tracking Glove

José Fonseca 6

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

Page 21: Relatorio projecto tracking_glove

Introdução Motion Tracking Glove

José Fonseca 7

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.

Page 22: Relatorio projecto tracking_glove
Page 23: Relatorio projecto tracking_glove

Desenvolvimento Motion Tracking Glove

José Fonseca 9

2 Desenvolvimento

Neste capitulo analisar-se-á o desenvolvimento do projeto de acordo com as

etapas definidas no subcapítulo 1.4 planeamento do projeto:

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

1º Estado da Arte

Especificação do sistema e sensores.

Desenvolvimento das placas para acomodar os sensores.

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

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

Desenvolvimento de um simulador virtual 3D.

Page 24: Relatorio projecto tracking_glove

Desenvolvimento Motion Tracking Glove

José Fonseca 10

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-web-

ui/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;

Page 25: Relatorio projecto tracking_glove

Desenvolvimento Motion Tracking Glove

José Fonseca 11

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

Page 26: Relatorio projecto tracking_glove

Desenvolvimento Motion Tracking Glove

José Fonseca 12

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.

Page 27: Relatorio projecto tracking_glove

Desenvolvimento Motion Tracking Glove

José Fonseca 13

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.

Page 28: Relatorio projecto tracking_glove

Desenvolvimento Motion Tracking Glove

José Fonseca 14

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.

Page 29: Relatorio projecto tracking_glove

Desenvolvimento Motion Tracking Glove

José Fonseca 15

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

Page 30: Relatorio projecto tracking_glove

Desenvolvimento Motion Tracking Glove

José Fonseca 16

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.

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).

Figura 10 – Colocação dos IMUs.

Page 31: Relatorio projecto tracking_glove

Desenvolvimento Motion Tracking Glove

José Fonseca 17

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.

Page 32: Relatorio projecto tracking_glove

Desenvolvimento Motion Tracking Glove

José Fonseca 18

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:

Page 33: Relatorio projecto tracking_glove

Desenvolvimento Motion Tracking Glove

José Fonseca 19

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

b) Placa de Controlo face inferior

Page 34: Relatorio projecto tracking_glove

Desenvolvimento Motion Tracking Glove

José Fonseca 20

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

Page 35: Relatorio projecto tracking_glove

Desenvolvimento Motion Tracking Glove

José Fonseca 21

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

b) Placa de controlo face superior

c) Placa de controlo devidamente soldada

Figura 17 – Placa de controlo.

Page 36: Relatorio projecto tracking_glove

Desenvolvimento Motion Tracking Glove

José Fonseca 22

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).

Page 37: Relatorio projecto tracking_glove

Desenvolvimento Motion Tracking Glove

José Fonseca 23

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.

Page 38: Relatorio projecto tracking_glove

Desenvolvimento Motion Tracking Glove

José Fonseca 24

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 hard-

iron 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:

Page 39: Relatorio projecto tracking_glove

Desenvolvimento Motion Tracking Glove

José Fonseca 25

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).

Page 40: Relatorio projecto tracking_glove

Desenvolvimento Motion Tracking Glove

José Fonseca 26

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 MDK-

ARM 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.

Page 41: Relatorio projecto tracking_glove

Desenvolvimento Motion Tracking Glove

José Fonseca 27

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.

Page 42: Relatorio projecto tracking_glove

Desenvolvimento Motion Tracking Glove

José Fonseca 28

FluxoGrama do Algoritmo implementado

Inicio da função Main()

Inicialização dos leds da BoardInicialização dos relógios da Usart e I2C

Configurações dos pinos da Usart (A9->TX e A10->RX)

Inicio das interrupções da UsartConfiguração da UsartLED3 On para Debug

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

Seleciona a saida do multiplexer

Efetua o Setup inicial do sensor

Sim

IMU++

Colocas as saidas do multiplexer a zero

Inicia o ciclo de leitura dos 11 IMUSLED3 On para medição da

frequência de amostragem

Não

IMU<=10

Seleciona a saida do multiplexerEfetua 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++

Print_cnt >02

Inicia o processo de Impressão por interrupção

Sim

NãoPrint_cnt++

IMU=0Print_cnt =0

LED3 Off

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

Page 43: Relatorio projecto tracking_glove

Desenvolvimento Motion Tracking Glove

José Fonseca 29

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 I2C 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.

Page 44: Relatorio projecto tracking_glove

Desenvolvimento Motion Tracking Glove

José Fonseca 30

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.

Page 45: Relatorio projecto tracking_glove

Desenvolvimento Motion Tracking Glove

José Fonseca 31

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.

Page 46: Relatorio projecto tracking_glove

Desenvolvimento Motion Tracking Glove

José Fonseca 32

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()

Page 47: Relatorio projecto tracking_glove

Desenvolvimento Motion Tracking Glove

José Fonseca 33

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,”

Page 48: Relatorio projecto tracking_glove

Desenvolvimento Motion Tracking Glove

José Fonseca 34

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.

Page 49: Relatorio projecto tracking_glove

Desenvolvimento Motion Tracking Glove

José Fonseca 35

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

Page 50: Relatorio projecto tracking_glove

Desenvolvimento Motion Tracking Glove

José Fonseca 36

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) Y(min/max) Z(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

Page 51: Relatorio projecto tracking_glove

Desenvolvimento Motion Tracking Glove

José Fonseca 37

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

Page 52: Relatorio projecto tracking_glove

Desenvolvimento Motion Tracking Glove

José Fonseca 38

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 I2C refere-se a 7-bits ou 10-

bits 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.

Page 53: Relatorio projecto tracking_glove

Desenvolvimento Motion Tracking Glove

José Fonseca 39

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. Envia o START bit (S);

2. Envia o Slave endereço (ADDR);

3. Envia o Read® -1/ Write (W) – 0 bit;

4. Espera para enviar o bit reconhecimento (A);

5. Envia/Recebe os dados (8 bits) (DATA);

6. Envia o bit de reconhecimento (A);

7. 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

Page 54: Relatorio projecto tracking_glove

Desenvolvimento Motion Tracking Glove

José Fonseca 40

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.

Page 55: Relatorio projecto tracking_glove

Desenvolvimento Motion Tracking Glove

José Fonseca 41

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 (RxTx e TxRx) 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,\r\n Resposta: OK

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

Page 56: Relatorio projecto tracking_glove

Desenvolvimento Motion Tracking Glove

José Fonseca 42

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”.

Page 57: Relatorio projecto tracking_glove

Desenvolvimento Motion Tracking Glove

José Fonseca 43

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

.

Page 58: Relatorio projecto tracking_glove

Desenvolvimento Motion Tracking Glove

José Fonseca 44

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.

Page 59: Relatorio projecto tracking_glove

Desenvolvimento Motion Tracking Glove

José Fonseca 45

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.

Page 60: Relatorio projecto tracking_glove

Análise e melhoramentos Motion Tracking Glove

José Fonseca 46

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.

Page 61: Relatorio projecto tracking_glove

Análise e melhoramentos Motion Tracking Glove

José Fonseca 47

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.

Page 62: Relatorio projecto tracking_glove

Conclusões Motion Tracking Glove

José Fonseca 48

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.

Page 63: Relatorio projecto tracking_glove

Conclusões Motion Tracking Glove

José Fonseca 49

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.

Page 64: Relatorio projecto tracking_glove

Conclusões Motion Tracking Glove

José Fonseca 50

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

Page 65: Relatorio projecto tracking_glove

Conclusões Motion Tracking Glove

José Fonseca 51

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.

Page 66: Relatorio projecto tracking_glove
Page 67: Relatorio projecto tracking_glove

Bibliografia Motion Tracking Glove

José Fonseca 53

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/en-

us/download/details.aspx?id=29062

Page 68: Relatorio projecto tracking_glove

Bibliografia Motion Tracking Glove

José Fonseca 54

[15] Consultado em 10-04-2013: http://en.wikipedia.org/wiki/I2C

[16] Consultado em 01-04-2013: http://www.cadsoftusa.com/eagle-pcb-design-

software/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.x-

io.co.uk/res/doc/madgwick_internal_report.pdf