Relatorio projecto tracking_glove

788 visualizações

Publicada em

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.

Publicada em: Tecnologia
0 comentários
1 gostou
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
788
No SlideShare
0
A partir de incorporações
0
Número de incorporações
2
Ações
Compartilhamentos
0
Downloads
32
Comentários
0
Gostaram
1
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Relatorio projecto tracking_glove

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

×