relatorio projecto tracking_glove
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
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
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
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!
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.
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
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
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
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
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
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
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
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.
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)
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;
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
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
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
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.
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
6º
5º
4º
3º
2º
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.
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;
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
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.
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.
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.
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
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.
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.
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:
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
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
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.
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).
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.
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:
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).
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.
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.
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.
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.
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.
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.
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()
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,”
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.
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
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
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
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.
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
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.
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.
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”.
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
.
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.
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.
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.
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.
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.
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.
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
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.
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
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