Page 1
Universidade de Brasília - UnB
Faculdade UnB Gama - FGA
Engenharia de Software
Sistema de Auxílio Fisioterapêutico: Umaproposta de produto para reabilitação Motora
Autor: Ricardo Gonçalves Teixeira
Orientadora: Profa. Dra. Carla Silva Rocha Aguiar
Brasília, DF
2017
Page 3
Ricardo Gonçalves Teixeira
Sistema de Auxílio Fisioterapêutico: Uma proposta de
produto para reabilitação Motora
Monografia submetida ao curso de graduaçãoem (Engenharia de Software) da Universi-dade de Brasília, como requisito parcial paraobtenção do Título de Bacharel em (Enge-nharia de Software).
Universidade de Brasília - UnB
Faculdade UnB Gama - FGA
Orientador: Profa. Dra. Carla Silva Rocha Aguiar
Brasília, DF
2017
Page 4
Ricardo Gonçalves Teixeira
Sistema de Auxílio Fisioterapêutico: Uma proposta deproduto para reabilitação Motora
Monografia submetida ao curso de graduaçãoem (Engenharia de Software) da Universi-dade de Brasília, como requisito parcial paraobtenção do Título de Bacharel em (Enge-nharia de Software).
Trabalho aprovado. Brasília, DF, 01 de julho de 2017:
Profa. Dra. Carla Silva Rocha Aguiar
Orientadora
Prof. Dr. Fábio Macedo Mendes
Convidado
Prof. Roberto de Souza Baptista
Convidado
Brasília, DF2017
Page 5
Agradecimentos
Agradeço primeiramente a minha família por todo apoio e compreensão durante
toda a jornada até aqui. E todos os meus amigos por sempre me apoiarem nas minhas
decisões e torcerem por mim.
Agradeço a minha orientadora, Carla Silva Rocha Aguiar, por me ajudar e me
guiar com toda a paciência e ajuda, durante não só o desenvolvimento deste trabalho,
quanto no curso como um todo. Ao Roberto de Souza Baptista pela inspiração ao tema.
E aos demais professores do curso de Engenharia de Software.
Page 7
Resumo
Dificuldades e limitações são encontradas por indivíduos que apresentam deficiências mo-
toras, físicas e também a doenças sistêmicas, articulares, neurológicas e musculares, se-
quelas a traumas e acidentes. Desse modo, repercutem na estrutura e função do corpo
do indivíduo, de forma global, além de influenciar na atividade e participação do mesmo
frente a sociedade. Para diminuir ou até sanar tais problemas é necessário uma reabili-
tação motora. Para uma reabilitação eficiente necessita-se de uma avaliação eficaz para
identificar os déficits encontrado nas disfunções do indivíduo e assim proporcionar um tra-
tamento apropriado. Por conseguinte, a medida da amplitude de movimento é um critério
determinante utilizado na avaliação e no acompanhamento fisioterapêutico. O objetivo
deste trabalho é a proposta de um produto de software que auxilie fisioterapeutas a pre-
escrever programas de reabilitação motora, e permita os pacientes executar tais programas
sem supervisão física.
Palavras-chaves: reabilitação motora, reabilitação remota, jogo sério.
Page 9
Abstract
Difficulties and limitations are encountered by individuals with motor, physical disabilities
and also to systemic diseases, articular, neurological and muscular, sequelae to trauma
and accidents. Thus have repercussions on the structure and also on the individual’s body
function, globally, as well as to influence the activity and participation of the same in the
society. To decrease or to solve such problems a motor rehabilitation is necessary. For
an effective rehabilitation an effective assessment is needed to identify the deficits found
in the individual’s dysfunction and thus provide appropriate treatment. Therefore, the
measure range of motion is a decisive criterion in the physical therapy monitoring. The
objective of this work is the proposal of a software product that helps physiotherapists
to prescribe motor rehabilitation programs, and allows patients to execute such programs
Without physical supervision.
Key-words: motor rehabilitation, remote rehabilitation, serious game.
Page 11
Lista de ilustrações
Figura 1 – Sentar-para-levantar-para-sentar. Fonte: (BAPTISTA, 2016). . . . . . . 25
Figura 2 – Reprodução do movimento. Fonte: (BAPTISTA, 2016). . . . . . . . . . 28
Figura 3 – Movimento Correto. Fonte: (BAPTISTA, 2016). . . . . . . . . . . . . . 28
Figura 4 – Movimento Incorreto. Fonte: (BAPTISTA, 2016). . . . . . . . . . . . . 29
Figura 5 – Dados das articulações . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
Figura 6 – Fluxo de Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
Figura 7 – Esqueleto Kinect. Fonte: (MICROSOFT, 2016). . . . . . . . . . . . . . 40
Figura 8 – Diagrama de classe referente ao sistema . . . . . . . . . . . . . . . . . 48
Figura 9 – Diagrama de sequência referente ao uso do fisioterapeuta . . . . . . . . 48
Figura 10 – Diagrama de sequência referente ao uso do paciente . . . . . . . . . . . 49
Figura 11 – Gerenciador de Dispositivo . . . . . . . . . . . . . . . . . . . . . . . . . 52
Figura 12 – Menu do sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Figura 13 – Gravar movimento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Figura 14 – Gravar movimento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Figura 15 – Ler Arquivo de Movimento . . . . . . . . . . . . . . . . . . . . . . . . 56
Figura 16 – Praticar Movimento . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Figura 17 – Praticar Movimento com esqueleto para auxílio ao desenvolvimento . . 57
Figura 18 – Movimento com presença de falhas . . . . . . . . . . . . . . . . . . . . 61
Figura 19 – Movimento correto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Figura 20 – Instabilidade com o usário sentando de lado em uma cadeira . . . . . . 63
Figura 21 – Instabilidade com o usuário sentando de frente em uma cadeira . . . . 64
Figura 22 – Pouca fidelidade com o real movimento . . . . . . . . . . . . . . . . . . 65
Figura 23 – Movimento sendo exercitado de forma incorreta propositalmente para haver correção do
Figura 24 – Movimento sendo exercitado de forma correta para não haver correção do sistema. 67
Figura 25 – Movimento sendo exercitado de forma incorreta propositalmente para haver correção do
Figura 26 – Movimento sendo exercitado de forma correta para não haver correção do sistema. 68
Figura 27 – Movimento sendo exercitado de forma incorreta propositalmente para haver correção do
Figura 28 – Movimento sendo exercitado de forma incorreta propositalmente para haver correção do
Figura 29 – Movimento sendo exercitado de forma correta para não haver correção do sistema. 70
Figura 30 – Movimento sendo exercitado de forma correta para não haver correção do sistema. 71
Figura 31 – Movimento sendo exercitado de forma incorreta propositalmente para haver correção do
Figura 32 – Movimento sendo exercitado de forma incorreta propositalmente para haver correção do
Figura 33 – Movimento sendo exercitado de forma correta para não haver correção do sistema. 73
Figura 34 – Movimento sendo exercitado de forma correta para não haver correção do sistema. 74
Figura 35 – Diagrama de sequência responsável pela troca das mensagens do sistema ao gravar um mo
Figura 36 – Diagrama de sequência responsável pela troca das mensagens do sistema ao exercitar um
Page 12
Figura 37 – Desenho da arquietura completa. . . . . . . . . . . . . . . . . . . . . . 77
Page 13
Lista de tabelas
Tabela 1 – Articulações no corpo. Fonte: (MARQUES, 2003). . . . . . . . . . . . . 31
Tabela 2 – Cronograma de atividades TCC_1. . . . . . . . . . . . . . . . . . . . . 44
Tabela 3 – Cronograma de atividades TCC_2. . . . . . . . . . . . . . . . . . . . . 44
Tabela 4 – Histórias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
Tabela 5 – Estruturação dos Dados . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Tabela 6 – Rotulação da complexidade do Movimento . . . . . . . . . . . . . . . . 60
Tabela 7 – Rotulação da complexidade do Movimento . . . . . . . . . . . . . . . . 60
Tabela 8 – Teste 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
Tabela 9 – Teste 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Tabela 10 – Teste 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Tabela 11 – Teste 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
Tabela 12 – Teste 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
Tabela 13 – Teste de junta referente a cabeça . . . . . . . . . . . . . . . . . . . . . 66
Tabela 14 – Teste de junta referente a coluna . . . . . . . . . . . . . . . . . . . . . 67
Tabela 15 – Teste de junta referente a cabeça . . . . . . . . . . . . . . . . . . . . . 69
Tabela 16 – Teste de junta referente ao braço . . . . . . . . . . . . . . . . . . . . . 72
Page 15
Lista de abreviaturas e siglas
ADM Amplitude de movimento
GUI Graphical User Interface
JIT just in time
XP Extreme Programming
HPC High Performance Computing
DPC Distributed/Parallel Computing
MPP Massively Parallel processing
SDK Software development kit
Page 17
Sumário
1 INTRODUÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.1 Contextualização . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.2 Definição do Problema . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.3 Soluções Existentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.4 Solução Proposta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1.5 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.5.1 Objetivos Gerais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.5.2 Objetivos específicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.6 Organização do Trabalho . . . . . . . . . . . . . . . . . . . . . . . . . 22
2 REVISÃO TEÓRICA . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.1 Importância da análise do movimento humano . . . . . . . . . . . . . 23
2.1.1 Análise de dados cinéticos e cinemáticos . . . . . . . . . . . . . . . . . . . 24
2.1.2 Automatizando a análise do movimento . . . . . . . . . . . . . . . . . . . 25
2.2 Engenharia de Software . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.2.1 Manifesto Ágil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.2.2 Kanban . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.2.3 Extreme programing - XP . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.3 Aquisição de dados com Sensores . . . . . . . . . . . . . . . . . . . . 30
2.4 Processamento de sinais . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.5 Articulações no corpo humano . . . . . . . . . . . . . . . . . . . . . . 31
2.5.1 Articulações no Unity 3D . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
2.6 Restrição - Streaming . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
2.6.1 Sistema distribuído . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
2.6.2 Sistema multiprocessado . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
2.6.3 Processamento massivamente paralelo . . . . . . . . . . . . . . . . . . . . 33
2.7 Trabalho relacionado . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
2.7.1 Protótipo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
2.8 Requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
2.9 Arquitetura de software . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3 SUPORTE TECNOLÓGICO . . . . . . . . . . . . . . . . . . . . . . 39
3.1 Unity 3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.2 Kinect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.2.1 kinect for windows SDK V1.8 . . . . . . . . . . . . . . . . . . . . . . . . 40
3.3 Ferramentas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
Page 18
3.3.1 GIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.3.2 Github . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.3.3 Gitlab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.3.4 Linux Debian . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.3.5 Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.3.6 Visual Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.3.7 Atom . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
3.3.8 Astah community . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
3.3.9 Trello . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
4 METODOLOGIA . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.1 Caracterização da Pesquisa . . . . . . . . . . . . . . . . . . . . . . . . 43
4.2 Metodologia Adotada no Desenvolvimento do sistema . . . . . . . . 43
4.2.1 Planejamento das atividades . . . . . . . . . . . . . . . . . . . . . . . . . 43
5 O SISTEMA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
5.1 Contextualização . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
5.1.1 Arquitetura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
5.1.2 KinectManager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
5.1.3 HandletCsv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
5.1.4 AvatarController . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
5.1.5 StoredMovimentAvatarController . . . . . . . . . . . . . . . . . . . . . . . 50
5.1.6 GetJointPosition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
5.1.7 KinectGesture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
5.1.8 KinectWrapper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
5.1.9 GlobalVariables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
5.1.10 Requisitos do sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
5.2 Configuração e Integração das Tecnologias . . . . . . . . . . . . . . . 52
5.2.1 Instalação do SDK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
5.2.2 Instalação do Unity 3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
5.2.3 Utilizando o Unity 3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
5.2.4 Histórias de usuário do sistema . . . . . . . . . . . . . . . . . . . . . . . . 53
5.3 Funcionalidades do sistema - features . . . . . . . . . . . . . . . . . . 54
6 ANÁLISE DOS RESULTADOS . . . . . . . . . . . . . . . . . . . . . 59
6.1 Casos de testes funcionais . . . . . . . . . . . . . . . . . . . . . . . . . 59
6.1.1 Levantar braço direito . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
6.1.1.1 Relatório de teste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
6.1.2 Levantar dois braços . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
6.1.2.1 Relatório de teste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Page 19
6.1.3 Sentar e levantar em uma cadeira de lado para o sensor . . . . . . . . . . . 62
6.1.3.1 Relatório de teste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
6.1.4 Sentar e levantar em uma cadeira de frente para o sensor . . . . . . . . . . 63
6.1.4.1 Relatório de teste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
6.1.5 Agachamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
6.1.5.1 Relatório de teste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
6.2 Casos de testes funcionais por junta . . . . . . . . . . . . . . . . . . . 65
6.2.1 Cabeça . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
6.2.1.1 Relatório de teste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
6.2.2 Coluna . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
6.2.2.1 Relatório de teste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
6.2.3 Pernas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
6.2.3.1 Relatório de teste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
6.2.4 Braços . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
6.2.4.1 Relatório de teste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
6.3 Fontes de Erro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
6.4 Outros resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
6.4.1 Arquitetura completa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
6.5 Análise dos resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
7 CONCLUSÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
REFERÊNCIAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
Page 21
19
1 Introdução
1.1 Contextualização
Segundo a WCPT - World Confederation for Physical Therapy (THERAPY,
2016), a Fisioterapia é a área da saúde responsável por desenvolver, manter e reabili-
tar as capacidades de mobilidade e funcionalidade das pessoas ao longo de toda a sua
vida.
Seu objetivo é identificar e maximizar a qualidade de vida e de potencial de movi-
mento de cada pessoa, dentro das áreas da promoção, prevenção, tratamento/intervenção,
habilitação e reabilitação da saúde.
Tratando-se de reabilitação motora, lida-se com dificuldades e limitações encontra-
das por indivíduos que apresentam deficiências motoras e ou físicas, bem como, a doenças
sistêmicas, articulares, neurológicas e musculares, sequelas a traumas e acidentes.
Problemas mais graves, repercutem na estrutura e função do corpo do indivíduo, de
forma global, além de influenciar na atividade e participação do mesmo frente a sociedade.
Afeta também, o ambiente em que se encontra e a forma como ele lida com sua rotina.
Dessa maneira, torna-se ainda mais importante a eficácia do tratamento fisioterapêutico.
1.2 Definição do Problema
Para uma reabilitação eficiente, necessita-se de uma avaliação eficaz, para identi-
ficar os deficits encontrados nas disfunções do indivíduo e proporcionar um tratamento
apropriado, e também a cadência na realização dos exercícios propostos pelo profissional.
Contudo, este último é um desafio, principalmente pela ausência dos pacientes nas
sessões de fisioterapia. Tal ausência se dá por diversos fatores, desde fatores socioeconô-
micos, já que sessões de fisioterapia não costumam ser acessíveis para todos níveis sociais,
a questões de disponibilidade de tempo.
Desse modo, vê-se a necessidade de uma soulção que auxilie no tratamento fisiote-
rapêutico e facilite na cadência da realização dos movimentos do tratamento apropriado,
não necessitando de supervisão profissional e que possa ser executado a qualquer momento.
1.3 Soluções Existentes
Entre algumas soluções para o auxílio da reabilitação motora estão:
Page 22
20 Capítulo 1. Introdução
• Kinect Training: É um jogo eletrônico para o console de videogame xbox 360, com o
auxílio do kinect para captação do movimento, que tem como objetivo auxiliar em
determinados exercícios físicos, substituindo o personal trainer.
– Dificuldade: A limitação desse programa que queremos superar é a análise da
qualidade da execução do movimento. Assim podemos dar um feedback para
o usuário seja na prática de exercícios de condicionamento físico ou em sessões
de fisioterapia.
• Goniometria: O termo é formado por duas palavras gregas, gonia, que significa
ângulo, e metron, que significa medida. Referindo-se à medida de ângulos articulares
presentes nas articulações dos seres humanos. O instrumento mais utilizado para
medir a amplitude de movimento é o goniômetro universal. Este pode ser de plástico
ou metal e de diferentes tamanhos, mas com o mesmo padrão básico(MARQUES,
2003).
– Dificuldade: Os dados medidos variam entre os examinadores devido ao modo
como é feito a avaliação, dando pouca confiabilidade para este sistema.
• Qualisys Track Manager (QTM): É um software para coleta de dados de um sistema
que captura o movimento. O software integra com placas de força, EMG e uma série
de outros dispositivos e permite medir o movimento, no ar ou debaixo d’água, passivo
ou ativo(QUALISYS, ).
– Dificuldade: Sistema pouco acessível para pequenas e médias clínicas, sendo
necessário também um espaço grande e muitos sensores de custo elevado.
• Inclinômetro Digital: O inclinômetro digital é um instrumento da engenharia para
medir inclinação (em graus) de superfícies, após ser captada por sensores sensíveis
a gravidade(FELICIOIV, 2012)
– Dificuldade: Assim como o goniômetro os dados medidos variam entre os exa-
minadores, porém com uma disparidade de valores um pouco menor.
1.4 Solução Proposta
A partir do contexto apresentado, observando a dificuldade da regularidade dos
exercícios, e o alto custo de soluções mais precisas, o objetivo deste trabalho é tomar
como inspiração a tese de doutorado do Roberto de Souza Baptista, em um produto mais
acessível tanto em termos de custo, quanto a mobilidade e praticidade.
O trabalho apresentado pelo Baptista (BAPTISTA, 2016), investiga técnicas para
análise automática do movimento humano. Assim, apresenta uma nova contribuição de
Page 23
1.5. Objetivos 21
um novo procedimento para avaliação automática do movimento humano, que executa
segmentação e extração de parâmetros de desempenho motor, em séries temporais de
medidas de uma sequência de movimentos.
O sistema proposto, apresenta três etapas, sendo elas:
1. Etapa de aquisição dos dados: movimento do usuário ser capturado pelo sistema
(leitura dos ângulos das articulações):
a) Realizar o movimento de referência;
b) Salvar arquivo referente ao movimento realizado.
2. Etapa de importação do arquivo de movimento:
a) Importar o movimento.
3. Etapa de visualizar e praticar os movimentos:
a) Visualizar lista com os movimentos cadastrados;
b) Visualizar e praticar o movimento, de acordo com a animação do avatar;
c) Usuário realiza o movimento selecionado;
d) Sistema lê os movimentos das articulações do usuário em tempo real;
e) Comparar as articulações de referência com os realizados pelo usuário;
f) Mostra no avatar 3D as discrepâncias entre o movimento desejado e o movi-
mento realizado.
1.5 Objetivos
1.5.1 Objetivos Gerais
Desenvolver uma proposta de um produto de software, que auxilie fisioterapeutas
a preescreverem programas de reabilitação motora, e permita o paciente executar tais
programas sem supervisão física.
1.5.2 Objetivos específicos
• Levantar os requisitos da solução;
• Propor uma solução de software;
• Apresentar a viabilidade da proposta.
Page 24
22 Capítulo 1. Introdução
1.6 Organização do Trabalho
Este trabalho de conclusão de cusro está organizado em capítulos, cada capítulo
contendo seções, sendo eles:
• Introdução: Capítulo referente à contextualização, justificativa e definição dos obje-
tivos do trabalho;
• Revisão teórica: O objetivo deste capítulo é fornecer ao leitor o conhecimento ne-
cessário para compreender o trabalho realizado.
• Suporte tecnológico: Apresenta as ferramentas e tecnologias utilizadas para auxiliar
o desenvolvimento deste trabalho, desde a pesquisa bibliográfica e documentação,
até o desenvolvimento do sistema e apresentação;
• Metodologia: Este capítulo busca apresentar as técnicas utilizadas para a realização
do trabalho, definindo as atividades a serem desempenhadas para conclusão do
trabalho;
• O sistema: Neste capítulo é apresentado o produto desenvolvido, assim como as
características e configuração do mesmo.
• Análise dos Resultados: Neste capítulo são apresentados os testes para análise da
viabilidade da utilização.
• Conclusão: Capítulo responsável pelas conclusões do desenvolvimento do trabalho;
• Considerações finais: Capítulo com o objetivo de apresentar as considerações finais
do trabalho.
Page 25
23
2 Revisão Teórica
Esse capítulo irá apresentar alguns conceitos que irão sustentar o objetivo deste
trabalho. Desse modo este capítulo está dividido nas seções: Importância da análise do
movimento humano (2.1), Engenharia de Software (2.2), Aquisição de dados com Sensores
(2.3), Processamento de sinais (2.4), Articulações no corpo humano (2.5), Restrição -
Tempo real (2.6), Trabalho relacionado (2.7), Requisitos (2.8) e Arquitetura de software
(2.9).
2.1 Importância da análise do movimento humano
A mensuração do movimento humano é uma forma de observação, através da
utilização de dispositivos, para descrever os fenômenos em termos de variáveis a serem
analisadas. Os dados adquiridos a partir da mensuração podem elucidar deficiências mo-
toras após trauma ou esclarecer os efeitos de intervenção externa controlada. Eles são
usados para descrever, caracterizar, medir o impacto dos fatores externos e analisar o
movimento humano. Dados cinemáticos e cinéticos podem ser combinados e analisados
para explicar as características do movimento.
Além da qualidade das medições, tem-se que considerar a complexidade da me-
dição feita por determinado dispositivo, tais como a necessidade do paciente se despir,
necessidade de uma grande área para a medição, entre outros.
Em estudos do movimento humano, existem essencialmente três tipos de variáveis
de medição: tempo, cinemática e cinética. O tempo pode ser utilizado isoladamente para
medir a duração de um determinado movimento , mas fornece mais informações quando
associado a uma variável cinemática ou cinética. As variáveis cinemáticas descrevem o
movimento do corpo, que são lineares (deslocamento, velocidade e aceleração) ou angular
(deslocamento, velocidade e aceleração). As variáveis cinéticas são ou o momento de força
ou força que gera o movimento (BAPTISTA, 2016).
A análise do movimento humano é imprescindível não somente para a avaliação
e a reabilitação do indivíduo, mas também para prevenção de lesões. Vale ressaltar que
lesões recorrentes em esportistas é extremamente prejudicial não somente a sua saúde mas
também ao seu desempenho no esporte influenciando diretamente ao seu retorno a prática
do mesmo. A Biomecânica permite analisar as causas e efeitos produzidos em relação a
otimização do rendimento do atleta, o comportamento da sobrecarga articular e os efeitos
dos mecanismos motores no processo de aprendizagem são fatores, que se relacionam com o
diagnóstico da técnica esportiva, e o trabalho preventivo principalmente em atletas de alto
Page 26
24 Capítulo 2. Revisão Teórica
rendimento. Para a investigação deste movimento, torna-se necessário, pela complexidade
estrutural do mesmo, a aplicação simultânea de métodos de mensuração nas diversas
áreas do conhecimento da ciência. O estudo do movimento permite-nos verificar, avaliar,
reabilitar e prevenir por exemplo:
1. Esporte de alto nível de rendimento: sistematização e otimização do rendimento
esportivo, diagnostico da técnica de movimento e condição física, redução de sobre-
cargas excessivas ao aparelho locomotor, regime de treinamento preventivo e que
maximize o desempenho do atleta e relação estímulo-resposta;
2. Esporte escolar, de baixo rendimento e atividades de recreação/musculação: estudo
da eficiência de processos de aprendizagem, adequação de sistemas e equipamen-
tos com “feedback” pedagógico; otimização de desempenho em pratica esportiva;
prevenção de lesões em atletas que reproduzem movimentos repetitivos; indivíduos
saudáveis com o objetivo de hipertrofia;
3. Prevenção e reabilitação orientados à saúde: desenvolvimento de métodos, procedi-
mentos e técnicas aplicados à terapia, descrição de padrões “patológicos” e depen-
dências clinicas, adequação e desenvolvimento de equipamentos;
4. Atividades do cotidiano e do trabalho: estudo da postura e da locomoção humana,
classificação e sistematização de grupos de movimentos em dependência de esta-
ções de trabalho, interface homem, máquina e meio ambiente, eficiência, saúde e
segurança nas tarefas da vida diária e do trabalho (CERCA, 2007).
2.1.1 Análise de dados cinéticos e cinemáticos
Quando os dados de cinemática ou cinética é indexado com o tempo, o resultado é
uma série temporal cinemático ou cinético. A ferramenta mais comum para analisar essas
séries temporais são os gráficos resultantes, pois é mais fácil visualizar o padrão de mo-
vimento. A inclinação e curvatura do gráfico de séries temporais indicam características-
chave de uma execução do movimento e fornece uma poderosa ferramenta para análise
de movimento. A Figura 1 tirada do trabalho do Baptista (BAPTISTA, 2016),mostra
o deslocamento angular do joelho e do tronco durante um ciclo de marcha sentar-para-
levantar-para-sentar. Analisando as encostas e pontos de inflexão, é possível determinar
o início e o fim de cada flexão ou extensão para esta determinada articulação.
Partindo da premissa de que o mesmo movimento executado por diferentes indiví-
duos irão ter um padrão semelhante, as medições de séries temporais de dados cinemáticos
e cinéticos podem ser anotados para a extração de informações de desempenho quantita-
tivo. Exemplo de tais análises pode ser encontrado em diagramas de ciclo de marcha, que
são os mais comuns.
Page 27
2.1. Importância da análise do movimento humano 25
A análise da marcha é um campo bem estabelecido de estudo, principalmente
devido ao uso do diagrama de ciclo de marcha, como uma ferramenta para descrever,
relatar e comparar o desempenho da marcha em diferentes resultados da investigação.
Devido ao sucesso do diagrama de ciclo de marcha, os investigadores propuseram igual-
mente descrições padronizadas para outros tipos de movimento, tais como o movimento
senta-levanta-senta e também atividades esportivas.
A Figura 1 mostra os diagramas de ciclo de movimento para a marcha e sentar-
para-levantar-para-sentar .
Figura 1 – Sentar-para-levantar-para-sentar. Fonte: (BAPTISTA, 2016).
2.1.2 Automatizando a análise do movimento
É muito comum sistemas de análise automático de movimento. Um exemplo disso é
o kinect da microsoft que se encaixa como sendo de baixo custo, que extrai as coordenadas
Page 28
26 Capítulo 2. Revisão Teórica
das articulações nos usuários e são usados como sinal de entrada de jogos e aplicativos.
Além do Kinect, outros sensores são disponíveis no mercado para obtenção de precisão de
dados da cinemática humana, fazendo com que essa informação seja hoje acessível e dis-
seminado. Porém, as técnicas de pós-processamento para extração de recurso automático
de dados cinemáticos ainda estão surgindo.
Uma vez extraído dados das articulações no decorrer do tempo, esses dados devem
ser identificados para segmentar/classificar movimentos pré-definidos. No contexto da
segmentação do movimento humano e classificação para a reabilitação, uma importante
distinção deve ser feita sobre o significado da tarefa de segmentação e classificação. Um
problema é segmentar uma sequência de movimentos desconhecidos e individuais, seguidos
pela classificação do tipo de movimento (rotulando cada única execução de acordo com
um conjunto de possíveis candidatos). Este problema foi recentemente investigada com
resultados importantes, tais como feito por (LIN; KULIC, 2014) e (CHUNG; MENG,
2014). Outro problema é: dada uma única execução (ou uma sequência repetitiva) de
um tipo conhecido do movimento (uma sequência de passos, ou uma sequência de senta-
levanta-senta), identificar os principais eventos, a fim de extrair informações úteis, ou seja,
características espaço-temporais (BAPTISTA, 2016).
O trabalho apresentando em (BAPTISTA, 2016) investiga técnicas para análise
automática do movimento humano. Sua principal contribuição é um novo procedimento
para avaliação automática do movimento humano que executa segmentação e extração
de parâmetros de desempenho motor em séries temporais de medidas de uma sequência
de movimentos. Nele, utiliza os elementos de um modelo de Sistema Linear Dinâmico
Chaveado como componentes de base para traduzir definições formais e procedimentos
utilizados na análise de movimento tradicional. Sua abordagem estabelece um método
que permite usuários sem experiência em processamentos de sinais criarem modelos para
movimentos a partir de dados rotulados e usá-los posteriormente para avaliação auto-
mática. No trabalho é validado o procedimento com conjunto de dados coletados de seis
indivíduos sadios que executaram movimentos comuns em testes funcionais e sessões de
exercícios de reabilitação, tais como o sentar-e-levantar e elevação lateral dos braços.
Existe três estágios para utilização do sistema. Primeiro uma pessoa qualificada
executa um exercício ou uma sessão de exercício que é armazenado. Neste estágio, o Ki-
nect é controlado através de uma função matlab, que foi escolhido por ser otimizado para
resolução de problemas científicos e de engenharia e onde a linguagem MATLAB é a ma-
neira mais natural do mundo para expressar matemática computacional (MATHWORKS,
1994 - 2017), e é especificamente desenvolvida para GUI (Graphic User interface - Inter-
face gráfica do usuário). Esta função baseia-se em tarefas periódicas para captar e armaze-
nar os pontos 3D, bem como as imagens capturadas pelo Kinect. Os pontos 3D compõem
a representação de um esqueleto do usuário, que estão em referência a posição do Kinect.
Page 29
2.1. Importância da análise do movimento humano 27
Estes pontos são obtidos utilizando a função NITE (PRIMESENSE, 2010) chamado pelo
Matlab via C++ wrapper. Até o fim da captura, os dados dos pontos são armazenados
em um arquivo .mat e disponível para uma visualização posterior.
No segundo estágio, o usuário pode ver a reprodução do movimento previamente
armazenado antes de começar a sessão. Isso é feito em Matlab com funções especiais nova-
mente baseado em tarefas periódicas e usando GUI. Uma vez que a reprodução começa, o
usuário pode parar em qualquer momento, para evitar situações tediosas em caso de exer-
cício repetitivo. A reprodução do esqueleto se destina a dar uma primeira impressão visual
e permitir que o usuário compreenda os movimentos na sessão de exercício. Para manter
a coerência entre os dados armazenados e os dados do usuários nos outros estágios, uma
mudança de quadros de referência foi executado. O novo quadro de referência é centrado
no ponto 3D que representa o quadril do esqueleto. Esta escolha conveniente permite a
correspondência dos dados registados e os dados do usuário quando o ele está posicionado
de forma diferente em relação ao Kinect de quando os dados gravados foram adquiridos.
Além disso não há necessidade de referências externas como por exemplo o nível do solo.
Foram considerados outros pontos do esqueleto para ser utilizado como a origem do sis-
tema de referência, mas o quadril pareceu mais estável durante o acompanhamento de
esqueleto.
Finalmente o sistema é usado em tempo real para um feedback visual em uma
sessão de treino. Através do GUI, o usuário começa o processo. Inicialmente a função
do OpenNI Skeleton deve detectar o usuário e calibrar o rastreio do esqueleto. Uma vez
que é feita a calibração uma função períodica para o feedback é chamada. Durante essa
fase, a captura do esqueleto do usuário é periodicamente atualizado e plotados junto os
dados de exercício gravados por especialiasta no primeiro estágio. Combinando as origens
de ambos os quadros de referência permite a correspondência dos pontos 3D dos dados
gravados com o quadro capturado em tempo real. Um gráfico é exibido na GUI. Dados
capturados em tempo real do usuário é plotado em primeiro lugar em verdes e os de
reprodução em preto.
Durante a execução de uma comparação do padrão de um membro específico do
corpo é comparado com o padrão da mesma parte do corpo do usuário. Se este padrão está
dentro de mais ou menos 10% dos dados registados a exibição gráfica da parte do corpo
de interesse permanece verde, caso contrário, a parte torna-se vermelho. A comparação é
feita em cada quadro em função periódica. Como resultado, este simples cálculo é capaz
de capturar erros de execução em matéria de amplitude e tempo do movimento pretendido
(BAPTISTA, 2016).
Na imagem 2 podemos ver a reprodução do movimento, já na imagem 3 podemos
ver a correta execução do movimento e no conjunto de imagens 4 vemos os principais
erros de movimentação.
Page 30
28 Capítulo 2. Revisão Teórica
Figura 2 – Reprodução do movimento. Fonte: (BAPTISTA, 2016).
Figura 3 – Movimento Correto. Fonte: (BAPTISTA, 2016).
Page 31
2.2. Engenharia de Software 29
Figura 4 – Movimento Incorreto. Fonte: (BAPTISTA, 2016).
2.2 Engenharia de Software
Para o desenvolvimento de qualquer produto, necessita-se de um processo, plane-
jamento e projeto do produto. Para isso algumas técnicas e metodologias de engenharia
de software aprendidas e utilizadas durante o curso, serão empregadas em auxílio do
desenvolvimento deste trabalho.
2.2.1 Manifesto Ágil
Afim de utilizar melhores maneiras para o desenvovlimento deste trabalho, foram
utilizados alguns valores ágeis, onde podem ser encontrados no manifesto ágil. O manifesto
ágil foi criado em 2001 e descreve um conjunto de abordagens para desenvolvimento de
software. Seus principais valores são:
• Indivíduos e interações a processos e ferramentas;
• Software funcionando a documentação compreensiva;
• Colaboração do cliente a negociação por contrato;
• Responder a mudanças a seguir um plano (THOMAS, 2001).
Page 32
30 Capítulo 2. Revisão Teórica
2.2.2 Kanban
O Kanban é uma metodologia popular usada por equipes que praticam o desenvol-
vimento ágil de software. Ele é extremamente proeminente entre as equipes de software
ágil de hoje, mas sua metodologia de trabalho remonta a mais de 50 anos.
No fim dos anos 1940, a Toyota começou a otimizar seus processos de engenharia
com base no mesmo modelo que os supermercados usavam para abastecer suas prateleiras.
Os supermercados abastecem apenas a quantidade de produtos suficiente para atender à
demanda dos consumidores, uma prática que otimiza o fluxo entre o supermercado e o
consumidor.
Com o kanban, as equipes de desenvolvimento ágil de software são capazes de
aproveitar os princípios do JIT - just in time, combinando a quantia do trabalho em
andamento com a capacidade da equipe (RADIGAN, 2017).
O Kanban eletrônico (e-Kanban) é utilizado em substituição ao método físico,
evitando alguns problemas como a perda de cartões e proporcionando mais rapidez na
atualização do quadro de tarefas (SIGNIFICADOS, 2017).
2.2.3 Extreme programing - XP
Extreme Programming (XP) é uma metodologia ágil de desenvolvimento de soft-
ware, nascida nos Estados Unidos ao final da década de 90. Tais objetivos são alcançados
através de um pequeno conjunto de valores, princípios e práticas, que também são base-
ados no manifesto ágil. Dentre seus princípios e práticas, serão utilizados neste trabalho:
• Reuniões frequentes com os stakeholders (orientador).
• Design Incremental: O objetivo é criar a solução mais simples possível que seja
suficiente para implementar as funcionalidades de cada iteração (TELES, 2006).
• Versionamento de código (TELES, 2006).
2.3 Aquisição de dados com Sensores
Sensor pode ser entendido como dispositivo eletrônico que é sensível a determinada
condição do ambiente, desde luminosidade, temperatura até a aceleração própria. No
sistema desenvolvido junto a este trabalho é usado o kinect (3.2).
Page 33
2.4. Processamento de sinais 31
2.4 Processamento de sinais
Processamento de sinais consiste na análise e/ou modificação de sinais (sequências
discretas de números) de forma a extrair informações dos mesmos e/ou torná-los mais
apropriados para alguma aplicação específica (ARAUJO, 2017).
2.5 Articulações no corpo humano
A posição anatômica é uma posição de referência, que dá significado aos termos di-
recionais utilizados na descrição das partes e regiões do corpo. As discussões sobre o corpo,
o modo como se movimenta, sua postura ou a relação entre uma e outra área assumem
que o corpo como um todo está numa posição específica chamada posição anatômica.
A tabela 1 mostra a articulação, seus movimentos e sua capacidade máxima em
graus de movimentações.
Tabela 1 – Articulações no corpo. Fonte: (MARQUES, 2003).
Articulação Movimento Grau de MovimentoFlexão 0-180
Extensão 0-45Adução 0-40
Abdução 0-180Rotação medial 0-90
Ombro
Rotação lateral 0-90Flexão 0-145
CotoveloExtensão 145-0Pronação 0-90
RadiulnarSupinação 0-90
Flexão 0-90Extensão 0-70Adução 0-45
Punho
Abdução 0-20Flexão 0-125
Extensão 0-10Adução 0-15
Quadril
Abdução 0-45Joelho Flexão 0-140
Flexão dorsal 0-20Flexão plantar 0-40
Adução 0-40Tornozelo
Abdução 0-20
Page 34
32 Capítulo 2. Revisão Teórica
2.5.1 Articulações no Unity 3D
Também chamadas de character joint elas são usadas para o chamado efeito boneco
de pano (ragdoll effects). A posição inicial de Referência é a a posição em T (T pose). O
unity não limita a angulação da articulação, deixando isso na mão do desenvolvedor, porém
eles orientam ângulos máximos para estabilizar melhor seu avatar 3D (TECHNOLOGIES,
).
2.6 Restrição - Streaming
Todo o processo, desde a aquisição do movimento ao processamento do sinal e
a resposta para o usuário, deve ser em streaming, para que o usuário possa corrijir a
movimentação e se aproximar da correta execução do movimento. Para isso, temos que
levar em conta a frequência de aquisição do sensor usado, o tempo do processamento de
sinal e a frequência de atualização do monitor.
O sensor kinect (MICROSOFT, 2016), tem uma frequência de aquisição de qua-
dros de 30Hz, junto a um monitor com taxa de atualização de imagem para o usuário a
30Hz, assim a aproximadamente 33 milisegundos o sistema recebe um input do sensor e
tem que em seguida apresentar um output. Isso restringe o processamento do sinal a 33
milissegundos de um input a outro, e também no tempo de atualização da imagem exibida
para que não haja perda na fluidez e nem atraso na correção. As possíveis soluções para
processamento de sinal nesse contexto serão apresentados nas seções seguintes.
2.6.1 Sistema distribuído
Um sistema distribuído, sistema de processamento distribuído ou paralelo, é um
sistema que interliga vários nós de processamento (computadores individuais) de maneira
que um processo de grande consumo seja executado no nó mais disponível, ou mesmo sub-
dividido por vários nós. Assim um sistema de processamento distribuído é uma "coleção de
computadores independentes entre si que se apresenta ao usuário como um sistema único
e coerente"(TANENBAUM, 2001). A nomenclatura geralmente utilizada neste contexto é
HPC (High Performance Computing) e/ou DPC (Distributed/Parallel Computing).
2.6.2 Sistema multiprocessado
Um multiprocessador ou sistema multiprocessado é um sistema integrado de com-
putação com as seguintes características:
• Envolve dois ou mais processadores físicos (sejam processadores separados ou múl-
tiplos núcleos encapsulados no mesmo chip) ou lógicos (processador(es) com a tec-
nologia HyperThreading da Intel) com o mesmo poder computacional e cada um
Page 35
2.7. Trabalho relacionado 33
capaz de executar processos autonomamente. Isto implica que não há nenhuma uni-
dade central de controle, cada processador contém sua própria unidade de controle.
Assim, efetivamente, a lógica de controle é distribuída pelo sistema.
• Os processadores compartilham um único espaço de endereçamento de memória.
• O sistema de hardware é como um todo gerenciado por um único sistema operacio-
nal.
O sistema operacional com suporte a multiprocessamento deve ser capaz de:
• Suportar multitarefa;
• Manter múltiplas filas de processos, uma para cada processador (GAGNE, 2004).
2.6.3 Processamento massivamente paralelo
MPP (Massively Parallel processing - Processamento Massivamente Paralelo), é o
processamento coordenado de um programa por vários processadores que funcionam em
diferentes partes do programa, com cada processador usando seu próprio sistema ope-
racional e memória. Normalmente, os processadores MPP se comunicam usando alguma
interface de mensagens.
Em algumas implementações, até 200 ou mais processadores podem funcionar
no mesmo aplicativo. Um arranjo de "interconexões"de caminhos de dados permitem que
mensagens sejam enviadas entre os processadores. Normalmente, a configuração para MPP
é mais complicada, exigindo pensar sobre como particionar um banco de dados comum
entre processadores e como atribuir trabalho entre eles. Um sistema MPP também é co-
nhecido como um sistema "vagamente acoplado"ou "nada compartilhado"(ROUSE, 2011).
2.7 Trabalho relacionado
O desenvolvimento deste trabalho foi inspirado no algoritmo do Roberto de Souza
Baptista (BAPTISTA, 2016). e podemos afirmar que ele pertence a área da engenharia
biomédica. "Classicamente, a Engenharia Biomédica é vista como a aplicação dos métodos
de distintas áreas das Ciências Exatas e de Engenharia no campo das Ciências Médicas
e Biológicas"(COPPE/UFR, 2016). Ele desenvolve uma abordagem inovadora aplicado
a terapia de doenças/acidentes motores, aplicado a fiosioterapia. Onde desenvolve uma
nova abordagem para análise de movimentos.
Page 36
34 Capítulo 2. Revisão Teórica
2.7.1 Protótipo
Junto com o algoritmo citado anteriormente (BAPTISTA, 2016), foi desenvolvido
um protótipo no software matlab (MATHWORKS, 1994 - 2017). Esse sistema inicial im-
plementou algumas das teorias do exame. Ele possui três etapas: rotular os dados, para-
metrização e utilizar para segmentação automática.
• Rotulação: Na etapa de rotular os dados,começando pelo arquivo ’
SCRIPT_labelAndIndexMultivariateFile_WBM21.m ’. Neste script estão duas fun-
ções, labelAndIndexUnivariateFile que por sua vez chama a função labelAndIndexU-
nivariateStructDataset que chama a função labelAndIndexUnivariateDataset e tran-
sitionIndexMultivariateFile.Os dados de entrada são puxados dos arquivos da pasta
’PreProcessedData’,’/’,DecRateN_Filter,’/’,Movement,’/’,Subject,’/’,Trial,’.mat’.
Esses dados foram coletados previamente por sensores. Os dados são uma struct
.mat com os ângulos de algumas articulações e o tempo. Esses ângulos são dados
em radianos e são divididos em articulações e em uma única coluna como podemos
observar em 5.
Figura 5 – Dados das articulações
Quando o script é executado primeiro um gráfico é traçado com várias curvas para
selecionar o início e fim de cada conjunto de dados, depois cada curva é apresentada
separadamente. Essa é a etapa para rotular os dados de cada curva. No prompt
ele pergunta qual o “Switch Variable”, em seguida ele pede para marcar o início
e o fim do intervalo com esse rótulo. A seguir pergunta se é o fim do conjunto de
dados. Caso não seja o fim ele volta a perguntar qual a “Switch Variable”. Esse
procedimento se repete para todas as curvas. Logo após, vem a parte que rotula os
dados multivariáveis dependendo do conjunto de rótulos de cada variável separada.
O resultado é a struct “thisLabeledIndexStructDataSet” salvo na pasta LabeledDa-
taMultivariate’/‘,DecRateN_Filter,’/’,Movement,’/’,Subject,’/’,Trial,’.mat’.
• Parametrização: Na etapa de parametrização do modelo a função:
S̈LDS_Univariate_ParameterDataSetBuilder2.mp̈ega os dados rotulados da
Page 37
2.7. Trabalho relacionado 35
etapa anterior, ou seja os dados segmentados automaticamente e com as funções
“parametersCteVelSpaceStateModel2” e “hmmTransitionMatrix2” calcula os
parâmetros do Modelo Oculto de Markov. Esta função é a base para o script
"SLDS_Univariate_IntraSubject_ParameterDataset_Script.m” que pega diversos
conjuntos de dados rotulados, de diferentes sujeitos ou diferentes execuções do
mesmo sujeito e chama a função “SLDS_Univariate_ParameterDataSetBuilder2.m”
para cada um deles e no fim temos os parâmetros do modelo oculto de Markov
ajustado para vários conjuntos de treinamento.
• Segmentação: Esse é o programa que faz a estimação dos rótulos associado com
cada medida. A principal função é a “SLDS_Filter_Univariate” ela recebe as structs
ValidationTrialThisVariable e FittedModelThisVariable e a variável InitialSwitch-
VariableState. A ValidationTrialThisVariable contém os dados a serem classificados
e pode conter também os rótulos. São as medidas do movimento, os mesmos dados
usados na parte de rotulação. O FittedModelThisVariable são todos os parâme-
tros do modelo (análogo aos parâmetros do ModeloOculto de Markov). A variável
InitialSwitchVariableState indica o símbolo da primeira medida.
Na imagem 6 podemos ver todo o fluxo de dados do protótipo.
Figura 6 – Fluxo de Dados
Page 38
36 Capítulo 2. Revisão Teórica
2.8 Requisitos
Um requisito é definido como "uma condição ou uma capacidade com a qual o
sistema deve estar de acordo". Existem vários tipos de requisitos. Um modo de categorizá-
los é descrito como o modelo FURPS+ (GRADY, 1992).
FURPS+ é um sistema para a classificação de requisitos, o acrônimo representa ca-
tegorias que podem ser usadas na definição de requisitos, assim como representa atributos
de Qualidade de Software, sendo ele parte do Rational Unified Process (RUP):
• Functionality (Funcionalidade) – Representa todo aspecto funcional do software,
seus requisitos. É uma categoria com diversas subcategorias que variam de acordo
com a aplicação. Sua medição considera, principalmente, o cumprimento dos reque-
sitos especificados.
• Usability (Usabilidade) – É o atributo que avalia a interface com o usuário. Pos-
sui diversas subcategorias, entre elas: prevenção de erros; estética e design; ajudas
(Help) e documentação; consistência e padrões.
• Reliability (Confiabilidade) – Refere-se a integridade, conformidade e interoperabi-
lidade do software. Os requisitos a serem considerados são: freqüência e gravidade
de falha; possibilidade de recuperação; possibilidade de previsão; exatidão; tempo
médio entre falhas (MTBF).
• Performance (Desempenho) – Avalia os requisitos de desempenho do software. Po-
dendo usar como medida diversos aspectos, entre eles: tempo de resposta, consumo
de memória, utilização da CPU, capacidade de carga e disponibilidade da aplicação.
• Supportability (Suportabilidade) – os requisitos de suportabilidade agrupam várias
características, como: testabilidade, adaptabilidade, manutenibilidade, compatibili-
dade, configurabilidade, instalabilidade, escalabilidade, localizabilidade entre outros.
O “+” do acrônimo engloba outros requisitos não-funcionais que devem ser lembrados:
• Requisitos de design (desenho) – Um requisito de design, freqüentemente chamado
de uma restrição de design, especifica ou restringe o design de um sistema. Exemplos
podem incluir: linguagens de programação, processo de software, uso de ferramentas
de desenvolvimento, biblioteca de classes, etc.
• Requisitos de implementação – Um requisito de implementação especifica ou res-
tringe o código ou a construção de um sistema. Como exemplos, podemos citar:
– padrões obrigatórios;
– linguagens de implementação;
Page 39
2.9. Arquitetura de software 37
– políticas de integridade de banco de dados;
– limites de recursos;
– ambientes operacionais.
• Requisitos de interface – especifica ou restringe as funcionalidades inerentes a inter-
face do sistema com usuário.
• Requisitos físicos – especifica uma limitação física pelo hardware utilizado, por exem-
plo: material, forma, tamanho ou peso. Podendo representar requisitos de hardware,
como as configurações físicas de rede obrigatórias (EELES, 2014).
2.9 Arquitetura de software
De acordo com a ISO/IEEE 1471-2000 - Arquitetura é a organização fundamental
de um sistema incorporada em seus componentes, seus relacionamentos com o ambiente,
e os princípios que conduzem seu design e evolução.
A arquitetura de software, consiste na definição dos componentes de software,
suas propriedades externas, e seus relacionamentos. A documentação da arquitetura do
software facilita: a comunicação entre os stakeholders, e permite o reúso do projeto.
Page 41
39
3 Suporte Tecnológico
Esse capítulo irá apresentar as principais tecnologias e ferramentas envolvidas no
desenvolvimento deste trabalho. Desse modo, este capítulo está dividido nas seções: Unity
3D (3.1), Kinect (3.2) e Ferramentas (3.3).
3.1 Unity 3D
O Unity 3D é uma ferramenta, criado para jogos em três e duas dimensões, além de
ser multiplataforma. Com ênfase na portabilidade ele tem como alvo o maior número de
APIs gráficas possíveis, desde o sistema operacional da microsoft, o windows, ao android.
Tem suporte para programação em C# e JavaScript. O unity 3D também possui uma
licença pessoal, livre de custo (TECHNOLOGIES, 2017).
Para a criação de um produto acessível, o matlab não seria viável pois sua licença é
paga e ele é geralmente usado para prototipação. Com isso foi usado o Unity 3D, um motor
gráfico muito usado na indústria de software para desenvolvimento de jogos comerciais e
livres.
3.2 Kinect
O kinect é um sensor de movimentos, desenvolvido inicialmente para as platafor-
mas de jogos eletrônicos da microsoft. Ele possui uma camara RGB (Red, Green, Blue),
um sensor de profundidade, um microfone embutido, e a versão mais recente, chamado
de kinect 2.0, consegue detectar 25 articulações esqueletais por pessoa (MICROSOFT,
2016).
Page 42
40 Capítulo 3. Suporte Tecnológico
Figura 7 – Esqueleto Kinect. Fonte: (MICROSOFT, 2016).
3.2.1 kinect for windows SDK V1.8
O kinect for windows SDK V1.8, fornece ferramentas e APIs necessários para
desenvolver aplicações Kinect nas linguagens C++, C#, Visual Basic, ou outra linguagem
.NET. Hoje em sua versão 2.0, entre seus recursos estão o acesso completo ao Kinect:
vídeo, profundidade, áudio, motor e funções de alto nível e também criar aplicativos para
o sistema operacional da microsoft e seu console para jogos.
O SDK é necessário, pois o sistema operacional reconhece o sensor, permitindo
aos desenvolvedores criar aplicativos que suportem o uso do kinect, e disponibiliza a
comunicação com o Unity3D.
Além disso, o SDK envolve uma variedade de classes e métodos com algoritmos já
produzidos e disponibilizados para utilização durante o desenvolvimento. Com a utilização
da SDK, o desenvolvedor não se preocupa com a implementação de algoritmos comuns,
como a obtenção de dados dos sensores.
A tecnologia Unity3D é multiplataforma, possibilitando sua utilização em vários
Sistemas operacionais porém o SDK é somente suportado no windows.
3.3 Ferramentas
Para o desenvolvimento do sistema foram usadas diversas ferramentas, a seguir
serão apresentadas junto dos artefatos gerados.
Page 43
3.3. Ferramentas 41
3.3.1 GIT
A ferramenta GIT1 foi desenvolvida por Linus Torvalds, mesmo criador do Linux,
sendo uma ferramenta open-source. Disponibiliza uma eficiente forma de versionamento
de códigos e gerenciamento de projetos.
3.3.2 Github
O Github2 é uma ferramenta utilizada para hospedagem remota de projetos GIT.
Neste trabalho o Github foi utilizado para hospedar a versão escrita do documento e pode
ser acessado aqui3.
3.3.3 Gitlab
O Gitlab4 é outra ferramenta utilizada para hospedagem remota de projetos GIT.
Esta ferramenta foi utilizada para hospedar o código e pode ser acessado aqui5.
3.3.4 Linux Debian
O sistema operacional utilizado durante este trabalho é o Linux Debian6 sistema
livre e utilizado, neste projeto, para documentação do trabalho.
3.3.5 Windows
Sistema operacional da Microsoft 107 , utilizado para implementação do código
por possibilitar configuração simplificada da comunicação entre o Kinect e o computador.
3.3.6 Visual Studio
Para a edição e criação do código foi usado o Micorosoft Visual Studio8 uma
IDE(Integrated development enviroment) disponibilizada pela microsoft e possui apoio
para várias linguagens de programação, principalmente C#.
1 https://git-scm.com/2 https://github.com3 https://github.com/ricardogtx/Tcc4 https://gitlab.com5 https://gitlab.com/ricardogtx/Tcc6 https://www.debian.org/7 https://www.microsoft.com/pt-br/8 https://www.visualstudio.com/pt-br/
Page 44
42 Capítulo 3. Suporte Tecnológico
3.3.7 Atom
O Atom9 é um editor de texto, possui apoio para diversas linguagens de progra-
mação, incluindo textos em LaTeX, além de ter um núcleo hackeável e muito configurável.
3.3.8 Astah community
É um software para modelagem uml - Linguagem de Modelagem Unificada, neste
trabalho esta ferramenta foi usado para criação do diagrama de sequências, que consiste
em um diagrama que tem o objetivo de mostrar como as mensagens entre os objetos são
trocadas no decorrer do tempo para a realização de uma operação(GIL, 2002).
Como pode ser visto em 9 e 10, existe dois momentos de trocas de mensagens, uma
com o usuário como fisioterapeuta e outra como paciente. A ferramenta Astah community
pode ser encontrada aqui10.
3.3.9 Trello
Ao longo do desenvolvimento foi utilizado o trello11 que é uma espécie de kanban
eletrônico (2.2.2).
9 https://atom.io/10 http://astah.net/download11 https://trello.com/
Page 45
43
4 Metodologia
Este capítulo irá descrever a metodologia utilizada no desenvolvimento deste tra-
balho. Desse modo este capítulo está dividido nas seções Caracterização da pesquisa (4.1),
Metodologia Adotada no Desenvolvimento do sistema (4.2) e Planejamento das atividades
(4.2.1).
4.1 Caracterização da Pesquisa
Toda e qualquer classificação se faz mediante algum critério. Com relação às
pesquisas, é usual a classificação com base em seus objetivos gerais. Assim, é possível
classificar as pesquisas em três grandes grupos: exploratórias, descritivas e explicativas
(FOWLER, 1997).
A classificação deste trabalho em relação aos objetivos da pesquisa é definida como
exploratória. A pesquisa exploratória tem como objetivo principal o aprimoramento de
ideias ou a descoberta de intuições, já a descritiva a descrição das características de de-
terminada população ou fenômeno e as explicativas identificar os fatores que determinam
ou que contribuem para a ocorrência dos fenômenos (FOWLER, 1997).
O uso da pesquisa exploratória, neste trabalho, se dá pela necessidade do conheci-
mento sobre a avaliação de movimento, com o objetivo de analisar a viabilidade do sistema
no auxílio da reabilitação motora.
4.2 Metodologia Adotada no Desenvolvimento do sistema
Para o desenvolvimento do sistema, adotamos algumas práticas ágeis e o kanban
(RADIGAN, 2017) para gerenciamento. O kanban e o Product Backlog, fonte das histórias
de usuário, pode ser encontrado no trello (3.3.9).
As Sprints tiveram duração de duas semanas e foram discutidas com os responsá-
veis por desempenhar os papéis de Product Owner.
4.2.1 Planejamento das atividades
Esta seção, descreve um cronograma de todas atividades. Cronograma é uma re-
presentação de um plano de execução das atividades do trabalho, incluindo outras infor-
mações de planejamento.
Page 46
44 Capítulo 4. Metodologia
O TCC, segundo as regras da UnB, é realizado em duas fases: uma chamada de
TCC_01 e outra chamada de TCC_02. Durante o TCC_01, o foco desse trabalho foi
estabelecer os pilares teóricos para embasamento do projeto como um todo. Já durante o
TCC_02, o trabalho estará focado desenvolver um sistema para análise motora, atingindo
uma prova de conceito, visando a viabilidade da proposta, com base nas fundamentações
teóricas - conquistados ao longo do TCC_01.
O TCC_01 pôde ser sub-dividido em sete atividades: selecionar tema, realizar
pesquisa bibliográfica, definir proposta, escrever referencial teórico, estabelecer suporte tec-
nológico, evoluir metodologia e apresentar TCC 1. As mesmas estão distribuídas de acordo
com o cronograma disposto na Tabela 2.
Tabela 2 – Cronograma de atividades TCC_1.
Cronograma Março Abril Maio Junho
Selecionar Tema X
Realizar pesquisa bibliográfica X X X X
Definir proposta X
Escrever referencial teórico X X
Estabelecer suporte tecnológico X X X
Evoluir metodologia X X
Apresentar TCC 1 X
Já a segunda etapa do trabalho, durante a realização do TCC_2, o cronograma
de atividades segue o apresentado na Tabela 3.
Tabela 3 – Cronograma de atividades TCC_2.
Cronograma Março Abril Maio Junho Julho
ConfigurarKinect/PC e ambiente
X X
Desenvolver solução 4 X X XTestar solução X X X
Analisar resultados X XApresentar TCC_2 X
• Propor tema:
A atividade de propor tema engloba desde a escolha do contexto em que se deseja
trabalhar, até a definição dos orientadores do trabalho. Após a escolha do contexto e
dos orientadores, buscou-se definir um escopo que será abordado durante o trabalho,
ou seja, o tema. Os orientadores devem validar o tema escolhido para concluir a
atividade.
Page 47
4.2. Metodologia Adotada no Desenvolvimento do sistema 45
• Levantar bibliografia base:
Esta atividade refere-se à definição de pilares para o estudo proposto, ou seja, es-
tabelecer o marco teórico do trabalho. Este levantamento garante o entendimento
do contexto trabalhado e as possibilidades de atuação, especificando mais adequa-
damente o escopo.
• Definir proposta:
Documentar a proposta de pesquisa para este trabalho. A proposta inclui, não ape-
nas, mas, principalmente, uma introdução com a contextualização do tema, o obje-
tivo geral e específicos, a justificativa e uma metodologia de pesquisa.
• Realizar pesquisa e análise bibliográfica:
A pesquisa bibliográfica foi feita a partir do algoritmo do Baptista (BAPTISTA,
2016)
• Realizar referencial teórico:
O mesmo descreve o referencial teórico do trabalho em andamento.
• Estabelecer suporte tecnológico:
Nesta atividade, são definidas as principais ferramentas e tecnologias utilizadas para
a execução deste trabalho.
• Apresentar TCC_1:
Apresentar os resultados obtidos até o momento para a banca examinadora.
• Desenvolver solução:
Desenvolvimento das histórias de usuário4 levantandas ao longo do TCC_1.
• Testar solução:
Esta atividade ocorre em sicronia com a atividade de desenvolvimento, é essencial
para analisar acordo com as histórias de usuário.
• Analisar resultados:
Registrar e analisar informações relevantes que foram obtidas ao longo do desenvol-
vimento.
• Apresentar TCC_2:
Apresentar os resultados obtidos para a banca examinadora.
Page 49
47
5 O sistema
Neste capítulo, são apresentados todos os componentes presentes no sistema, a
configuração do ambiente de programação buscando padronizar as características para
que possa ser aplicada e analisada por outro pesquisador.
5.1 Contextualização
O principal incentivo em relação a esta proposta é fazer um produto que seja
de ajuda para a reabilitação motora de indivíduos que apresentam deficiências motoras
e ou físicas, que seja acessível e que possa ser executada na hora que o paciente tiver
disponibilidade.
Com isso o sistema busca analisar o movimento de um índividuo com um movi-
mento previamente armazenado, dando feedbacks em tempo real, para a correta execução.
Além disso, o sistema tem como objetivo a implementação de análise do movimento atra-
vés da primeira versão do kinect por ser mais facilmente encontrado e por não gerar
grandes custos, porém sua precisão não é perfeita, sofrendo também de limitação por
movimentos mais complexos.
Assim sendo, durante a primeira etapa deste trabalho, foram estudadas algumas
tecnologias para a implementação do sistema, ficou definido que seria usado o unity 3D
para o desenvolvimento do sistema.
5.1.1 Arquitetura
Podemos dividir o trabalho no unity em duas partes, a primeira é a parte de
visualização, onde ele disponibiliza um espaço 3D para a inserção dos gameObjects e
criação das cenas. Um projeto pode ter mais de uma cena e uma cena pode conter vários
gameObjects. A segunda é com os chamados scripts, que são os códigos que podem ser
adicionados em um gameObject dando-lhe a lógica de como se deve comportar durante
uma cena de um projeto. Esses códigos podem ser escritos nas linguagens javascript e em
C#. Podemos ver uma representação da arquitetura em 8.
Page 50
48 Capítulo 5. O sistema
Figura 8 – Diagrama de classe referente ao sistema
Abaixo vemos uma representação da sequência de mensagens do sistema.
Figura 9 – Diagrama de sequência referente ao uso do fisioterapeuta
Page 51
5.1. Contextualização 49
Figura 10 – Diagrama de sequência referente ao uso do paciente
A arquitetura dos scripts ficou focada na classe KinectManager, pois ela é a res-
ponsável pela comunicação com o kinect. Nas próximas seções, falaremos um pouco sobre
o papel de cada classe.
5.1.2 KinectManager
Classe implementada em C# e tem como principal responsabilidade gerir a comu-
nicação com o kinect. Com a ajuda da classe KinectWrapper(5.1.8), ela abstrai as funções,
estruturas e recursos do Kinect. Esta classe possui várias funções, abaixo descrevemos as
principais:
• ProcessSkeleton(): Processa os dados do "esqueleto", dados sobre as posições e
rotações das juntas do usuário;
• HandlejointPosition(): Pega os dados sobre as posições das juntas para anima-
ção do avatar 3D;
5.1.3 HandletCsv
Classe implementada em C# e tem como principal responsabilidade fazer o parser
do arquivo csv do movimento desejado. Abaixo descrevemos sua principal função:
• getSkeletonPositionFromCSV(): Processa os dados do "esqueleto"no arquivo,
estruturando essas informações em uma matriz de float.
Page 52
50 Capítulo 5. O sistema
5.1.4 AvatarController
Classe implementada em C# e tem como principal responsabilidade animar o
avatar 3D de acordo com a movimentação do usuário em tempo real. Com a ajuda da
classe KinectManager(5.1.2), ela converte a posição das juntas para animação do avatar.
Esta classe possui várias funções, abaixo descrevemos as principais:
• UpdateAvatar(): Processa os dados das juntas do usuário, convertendo essas in-
formações por frame para animação 3D;
• TransformBone(): Aplica as rotações monitoradas pelo kinect para as juntas do
avatar.;
5.1.5 StoredMovimentAvatarController
Classe implementada em C# e tem como principal responsabilidade movimentar o
avatar, porém de acordo com o movimento parseado. Além de possuir as mesmas funções
da AvatarController(5.1.4), essa classe também é a responsável de fazer a comparação do
movimento do usuário com o movimento salvo. A principal função responsável por fazer
esta comparação é a CalculeAngle(), que espera como argumento a posição de três juntas
interligadas ( três vetores -Vector3 ) e retorna o ângulo entre elas.
5.1.6 GetJointPosition
Classe implementada em C# e tem como principal responsabilidade escrever as po-
sições de todas as juntas e exportar para csv. Com a ajuda da classe KinectManager(5.1.2),
ela captura os dados sobre as juntas do usuário. Abaixo descrevemos sua principal função:
• Update(): Processa os dados do "esqueleto"e escreve no arquivo csv a cada frame.
5.1.7 KinectGesture
Classe implementada em C# e tem como principal responsabilidade a identificação
de gestos já mapeados.
5.1.8 KinectWrapper
Classe implementada em C# e tem como principal responsabilidade deter as várias
estruturas e importações dll. É esta classe que abstrai a comunicação com o SDK (3.2.1).
Page 53
5.1. Contextualização 51
5.1.9 GlobalVariables
Classe implementada em C# e tem como principal responsabilidade guardar as
informações dos movimentos parseados.
5.1.10 Requisitos do sistema
Esta seção apresentará os requisitos do sistema:
• Funcionalidade(Functionality):
– Captura do movimento do usuário pelo sistema (leitura dos ângulos das arti-
culações);
– Importação de movimento;
– Apresentação de uma lista de movimentos gravados para seleção e execução;
– Animação do avatar com o movimento correto;
– Comparação das articulações de referência com os realizados pelo usuário;
– Exibição no avatar 3D as discrepâncias entre o movimento desejado e o movi-
mento realizado.
• Usabilidade(Usability)
– O usuário do sistema será capaz de visualizar todo tipo de informação tex-
tual, imagem ou modelo 3D na aplicação , com clareza, em qualquer monitor
independente de resolução.
• Confiabilidade(Reability)
– O sistema será capaz de verificar algum erro ou inconstância entre os dados
recebidos dos sensores, podendo assim se recuperar ou informar alguma falha
na comunicação com os mesmos.
• Desempenho(Performance)
– O sistema analisará o movimento feito pelo usuário em streaming.
• Suportabilidade(Supportability)
– Em sua versão inicial será exclusivo do sistema operacional da microsoft, o
windows, podendo ser executado nas versões 7,8 e 10.
Page 54
52 Capítulo 5. O sistema
5.2 Configuração e Integração das Tecnologias
Nesta seção, são apresentados o passo a passo para a configuração e integração
das tecnologias utilizadas durante o desenvolvimento do sistema, incluindo a etapa de
configuração do ambiente de programação e do ambiente para a utilização do kinect,
assim podendo ser aplicada e analisada por outros interessados.
5.2.1 Instalação do SDK
Primeiramente, para possibilitar a comunicação entre o PC e o kinect, deve-se
instalar o SDK 1.8, o qual pode ser encontrado aqui1. Lembrando que o kinect é feito
para console, não é comum computadores darem suporte para o formato do cabo, sendo
assim para comunicar o PC e Kinect será preciso de uma fonte para Kinect Xbox 360.
Depois do sdk instalado, conecte o Kinect na fonte e a fonte no PC. Para verificar se seu
sitema operacional está comunicando com o sensor alguns passos devem ser seguidos:
1. Clicar em iniciar
2. Ir em Meu computador
3. Clicar com o botão direito
4. Clicar em propriedades
5. Na janela que foi aberta, ir em Gerenciador de dispositivos
6. Verificar se na lista de dispositivos se encontra "Kinect for Windows"exibido como
na imagem abaixo.
Figura 11 – Gerenciador de Dispositivo
5.2.2 Instalação do Unity 3D
Como já dito no capítulo Suporte Tecnológico(3), o Unity 3D é um motor gráfico,
criado para jogos em três dimensões e duas dimensões, sendo a principal tecnologia usado
para o desenvolvimento do sistema, para cálculos das juntas e para o feedback ao usuário.
O Unity 3D pode ser encontrado aqui2.1 https://www.microsoft.com/en-us/download/details.aspx?id=402782 https://unity3D.com/pt/get-unity/download
Page 55
5.2. Configuração e Integração das Tecnologias 53
Ao instalar o unity 3D, o instalador dará a opção de instalar o visual studio mais
recente, é aconselhável aceitar pois este é um editor de texto com várias funções para a
edição de arquivos C#.
5.2.3 Utilizando o Unity 3D
Após a instalação de ambas as tecnologias, na primeira vez em que se abre o unity
3D é necessário fazer um cadastro para sua utilização. Feito o cadastro:
1. Na primeira janela do unity 3D é perguntado se deseja criar um novo projeto ou
importar, clique em importar
2. Procure o local onde se encontra a pasta do projeto e importe.
Pronto, agora será possível mexer no projeto pelo unity 3D. Para abrir o projeto
no visual studio é somente clicar com o botão direito em cima da cena desejada e clicar
em "Open C# Project".
5.2.4 Histórias de usuário do sistema
Como prática ágil as User stories (Histórias de usuário), são artefatos de desen-
volvimento, utilizadas para organizar requisitos. Tem-se foco nos objetivos do usuário e
como o sistema alcança esses objetivos.
Para melhor organizar e fracionar os requisitos deste trabalho, foi adotado essa
prática ágil, podemos ver o levantamento das histórias de usuário na tabela Histórias(4).
Page 56
54 Capítulo 5. O sistema
Tabela 4 – Histórias
História 1Eu como FisioterapeutaDesejo Que o sistema mapeie meu movimento sendo executado corretatmentePara poder comparar com o movimento do paciente
História 2Eu como UsuárioDesejo Poder carregar movimento previamente mapeadoPara Constar no menu do sistema
História 3Eu como FisioterapeutaDesejo Que o sistema salve um novo movimentoPara Poder constar no menu do sistema e poder ser executado
História 4Eu como UsuárioDesejo Desejo escolher movimento de referênciaPara Melhor seguir receita médica
História 5Eu como UsuárioDesejo Feedback do movimento sendo executado em tempo realPara Poder melhor executar os movimentos das articulações
Tais histórias compões as funcionalidades do sistema(5.3) e foram implementadas
no Unity 3D.
5.3 Funcionalidades do sistema - features
As features no desenvolvimento ágil é um pedaço de funcionalidade que oferece
valor comercial (ONE, 2017). Geralmente as features tem uma granularidade maior que
as User Stories(Histórias de usuário 5.2.4). Podemos dizer que algumas features são com-
postas de User Stories.
O sistema possui três features, gravação de movimento, leitura de arquivo do mo-
vimento desejado e análise da repetição do movimento:
1. Gravar movimento: Essa funcionalidade permite a gravação do movimento, deve
ser feito pelo profissional fisioterapeuta para uma correta execução. Será esse mo-
vimento que o sistema usará como gabarito. O sistema retorna um arquivo csv.
Podemos observar essa funcionalidade na tela do sistema em 13.
Page 57
5.3. Funcionalidades do sistema - features 55
2. Ler arquivo de movimento: Essa funcionalidade espera um arquivo csv e ar-
mazena o movimento no sistema.Podemos observar essa funcionalidade na tela do
sistema em 15.
3. Praticar movimento: Essa funcionalidade mostra a correta execução do movi-
mento e analisa com o movimento do paciente.Podemos observar essa funcionalidade
na tela do sistema em 16.
Como observado na imagem 12, podemos visualizar todas as funcionalidades a
partir do menu do sistema.
Figura 12 – Menu do sistema
Abaixo será listado as telas do sistema relacionado as três funcionalidades
Figura 13 – Gravar movimento
Page 58
56 Capítulo 5. O sistema
Figura 14 – Gravar movimento
Figura 15 – Ler Arquivo de Movimento
Figura 16 – Praticar Movimento
Page 59
5.3. Funcionalidades do sistema - features 57
Figura 17 – Praticar Movimento com esqueleto para auxílio ao desenvolvimento
Podemos ver o detalhamento das features em Histórias de usuário do sistema(4).
Page 61
59
6 Análise dos Resultados
Este capítulo tem como objetivo discutir os resultados obtidos durante a realização
dos testes. Dentre estes resultados, estão presentes as fontes de erros levantadas com a
experiência do desenvolvimento, suas respectivas correções, dentro do possível, e a análise
dos resultados da utilização do sistema no contexto da reabilitação motora. Desse modo,
este capítulo está dividido nas seções: Casos de testes funcionais (6.2), Fontes de erro
(6.3), Outros resultados (6.4), Análise dos resultados (6.5) e Problemas enfrentados (??).
6.1 Casos de testes funcionais
O principal objetivo dos casos de testes funcionais, é a observação e a análise do
sistema. Após a realização de todos os casos de testes propostos, foi possível chegar a uma
análise dos resultados da utilização do sistema no contexto da reabilitação motora, a qual
será apresentada na seção 6.5.
Os casos de testes funcionais consistem em cinco situações, nas quais a solução foi
analisada, variando entre elas o movimento e ambiente. Buscando analisar os resultados
obtidos em cada contexto.
Os dados obtidos em cada caso de teste estão estruturados de acordo com a tabela
5.
Tabela 5 – Estruturação dos Dados
Movimento Complexidade Luz ambiente exatidão
• Movimento: O nome e descrição do movimento análisado, exemplo: Levantar e
abaixar braço direito.
• Complexidade: Essa variável é referente a complexidade da execução do movi-
mento, para o mapeamento do kinect e acompanhamento do usuário. A rotulação
dessa variável segue a tabela 7.
Page 62
60 Capítulo 6. Análise dos Resultados
Tabela 6 – Rotulação da complexidade do Movimento
Complexidade Descrição
AltaExecução do movimento é de difícil mapeamento para
o kinect e para acompanhamento do usuário.
MediaExecução do movimento é de dificuldade moderada para
o mapeamento para o kinect e para acompanhamento do usuário.
BaixaExecução do movimento é de dificuldade baixa para
o mapeamento para o kinect e para acompanhamento do usuário.
• Luz ambiente: Com a premissa básica de um ambiente com pelo menos um metro e
meio do sensor, essa variável diz respeito a intensidade da luminosidade do ambiente,
podendo ser boa, regular e ruim.
• Exatidão: Essa variável é referente a exatidão que o kinect acompanha e corrige o
movimento do usuário. A rotulação dessa variável segue a tabela 7.
Tabela 7 – Rotulação da complexidade do Movimento
Exatidão Descrição
BoaBom acompanhamento e correção no movimento
executado pelo usuário
RegularRegular acompanhamento e correção no movimento
executado pelo usuário.
RuimRuim ou péssimo acompanhamento e correção no movimento
executado pelo usuário.
As próximas seções apresentam os casos de testes funcionais com diferentes variá-
veis, possibilitando a ánalise do comportamento do sistema em tais casos. Todos os testes
foram feitos em um ambiente com quatro metros quadrados e o sensor kinect em uma
altura de aproximadamente um metro e meio.
6.1.1 Levantar braço direito
Os resultados obtidos com o caso de teste estão dispostos na tabela 8. Esse caso
de teste consiste no levantamento do braço direito, em uma velocidade baixa.
6.1.1.1 Relatório de teste
Como pode ser observado na tabela 8 que a luz ambiente tem grande influência
no mapeamento do kinect. Podemos observar na imagem 18, o esqueleto à esquerda é
o movimento que está sendo executado pelo usuário, assim o movimento tem que ser
Page 63
6.1. Casos de testes funcionais 61
executado com certa fidelidade, caso contrário os erros serão apresentados na forma de
esferas sobre as juntas que se devem ser corrigidas. E na imagem 19 a correta execução
do movimento.
Tabela 8 – Teste 1
Movimento Complexidade Luz Ambiente Exatidão
1 Levantar Braço Dir. Baixa Boa Boa
2 Levantar Braço Dir. Baixa Regular Regular
3 Levantar Braço Dir. Baixa Ruim Ruim
Figura 18 – Movimento com presença de falhas
Page 64
62 Capítulo 6. Análise dos Resultados
Figura 19 – Movimento correto
6.1.2 Levantar dois braços
Os resultados obtidos com o teste estão dispostos na tabela 9. Esse teste consiste
no levantamento dos dois braços , em uma velocidade baixa.
6.1.2.1 Relatório de teste
Como pode ser observado na tabela 9 a luz ambiente tem grande influência no
mapeamento do kinect, porém com uma luz ambiente boa a exatidão do sensor é boa.
Tabela 9 – Teste 2
Movimento Complexidade Luz Ambiente Exatidão
1 Levantar os Braços Baixa Boa Boa
2 Levantar os Braços Baixa Regular Regular
3 Levantar os Braços Baixa Ruim Ruim
6.1.3 Sentar e levantar em uma cadeira de lado para o sensor
Os resultados obtidos com o teste estão dispostos na tabela 10. Esse teste consiste
em sentar e levantar em uma cadeira de lado ao kinect, em uma velocidade baixa.
6.1.3.1 Relatório de teste
Como pode ser observado na tabela 10 o kinect não consegue rastrear uma pessoa
de lado, o sensor se perde nas referências mostrando isntabilidade como pode ser visto na
Page 65
6.1. Casos de testes funcionais 63
imagem 20.
Tabela 10 – Teste 3
Movimento Complexidade Luz Ambiente Exatidão
1 Sentar de lado em Cadeira Alta Boa Ruim
2 Sentar de lado em Cadeira Alta Regular Ruim
3 Sentar de lado em Cadeira Alta Ruim Ruim
Figura 20 – Instabilidade com o usário sentando de lado em uma cadeira
6.1.4 Sentar e levantar em uma cadeira de frente para o sensor
Os resultados obtidos com o teste estão dispostos na tabela 11. Esse teste consiste
em sentar e levantar em uma cadeira de frente ao kinect , em uma velocidade baixa.
6.1.4.1 Relatório de teste
Como pode ser observado na tabela 11 o kinect não conseguiu rastrear o movi-
mento da pessoa sentando em uma cadeira. O sensor se perde nas referências das juntas
sobrepostas, mostrando instabilidade como pode ser visto na imagem 21.
Page 66
64 Capítulo 6. Análise dos Resultados
Tabela 11 – Teste 4
Movimento Complexidade Luz Ambiente Exatidão
1 Sentar de frente em Cadeira Alta Boa Ruim
2 Sentar de frente em Cadeira Alta Regular Ruim
3 Sentar de frente em Cadeira Alta Ruim Ruim
Figura 21 – Instabilidade com o usuário sentando de frente em uma cadeira
6.1.5 Agachamento
Os resultados obtidos com o teste estão dispostos na tabela 12. Esse teste consiste
no usuário agachar-se em uma velocidade baixa.
6.1.5.1 Relatório de teste
Como pode ser observado na tabela 11 o kinect não conseguiu rastrear muito
bem o movimento. O sensor se perde nas referências das juntas sobrepostas, mostrando
instabilidade como pode ser visto na imagem 22.
Page 67
6.2. Casos de testes funcionais por junta 65
Tabela 12 – Teste 5
Movimento Complexidade Luz Ambiente Exatidão
1 Agachar Alta Boa Regular
2 Agachar Alta Regular Ruim
3 Agachar Alta Ruim Ruim
Figura 22 – Pouca fidelidade com o real movimento
6.2 Casos de testes funcionais por junta
O principal objetivo dos casos de testes funcionais por junta, é a observação e a
análise de cada junta que o kinect é capaz de rastrear, podendo validar o comportamento
do sistema para cada junta. Previamente devemos estar cientes que não é possível isolar o
comportamento de cada junta, dado que não é possível separá-las do corpo, sendo assim,
alguns casos de testes serão responsáveis pela análise de mais de uma junta.
6.2.1 Cabeça
Os resultados obtidos com o teste estão dispostos na tabela 13. Esse teste consiste
no usuário movimentar a cabeça para os lados. Esse movimento foi gravado previamente
Page 68
66 Capítulo 6. Análise dos Resultados
e serão apresentados as imagens referentes a comparação.
6.2.1.1 Relatório de teste
Como pode ser observado na tabela 13 o movimento foi corrigido com exatidão,
dada as limitações de luz ambiente. O sistema corrige o usuário quando este não está
fazendo o movimento correto da cabeça como pode ser visto em 23 e não apresenta
nenhum erro quando o movimento está sendo executado corretamente como pode ser
visto em 24
Tabela 13 – Teste de junta referente a cabeça
Movimento Complexidade Luz Ambiente Exatidão
1 Cabeça Baixa Boa Boa
2 Cabeça Baixa Regular Regular
3 Cabeça Baixa Ruim Ruim
Figura 23 – Movimento sendo exercitado de forma incorreta propositalmente para havercorreção do sistema.
Page 69
6.2. Casos de testes funcionais por junta 67
Figura 24 – Movimento sendo exercitado de forma correta para não haver correção dosistema.
6.2.2 Coluna
Os resultados obtidos com o teste estão dispostos na tabela 14. Esse teste consiste
no usuário movimentar-se com o tronco para frente, diferente do movimento do avatar.
Esse movimento foi gravado previamente e serão apresentados as imagens referentes a
comparação.
6.2.2.1 Relatório de teste
Como pode ser observado na tabela 14 o movimento foi corrigido com exatidão,
dada as limitações de luz ambiente. O sistema corrige o usuário quando este não está
fazendo o movimento correto da coluna como pode ser visto em 25 e não apresenta nenhum
erro quando o movimento está sendo executado corretamente como pode ser visto em 26
Tabela 14 – Teste de junta referente a coluna
Movimento Complexidade Luz Ambiente Exatidão
1 Coluna Baixa Boa Boa
2 Coluna Baixa Regular Regular
3 Coluna Baixa Ruim Ruim
Page 70
68 Capítulo 6. Análise dos Resultados
Figura 25 – Movimento sendo exercitado de forma incorreta propositalmente para havercorreção do sistema.
Figura 26 – Movimento sendo exercitado de forma correta para não haver correção dosistema.
6.2.3 Pernas
Os resultados obtidos com o teste estão dispostos na tabela 15. Esse teste consiste
na análise de várias juntas, sendo elas:
• Quadril direito;
Page 71
6.2. Casos de testes funcionais por junta 69
• Joelho direito;
• Pé direito;
• Quadril esquerdo;
• Joelho esquerdo;
• Pé esquerdo;
O teste consiste em levantar a perna direita e esquerda, sendo que hora o usuário
levantava, hora não.
6.2.3.1 Relatório de teste
Como pode ser observado na tabela 15 o movimento foi corrigido com exatidão,
não tendo diferença entre os lados direito e esquerdo do corpo, dada as limitações de luz
ambiente. O sistema corrige o usuário quando este não está fazendo o movimento correto
da perna como pode ser visto nas imagens 28 e 27 e não apresenta nenhum erro quando
o movimento está sendo executado corretamente como pode ser visto em 30 e 29.
Tabela 15 – Teste de junta referente a cabeça
Movimento Complexidade Luz Ambiente Exatidão
1 Quadris Baixa Boa Boa
2 Quadris Baixa Regular Regular
3 Quadris Baixa Ruim Ruim
4 Joelhos Baixa Boa Boa
5 Joelhos Baixa Regular Regular
6 Joelhos Baixa Ruim Ruim
7 Pés Baixa Boa Boa
8 Pés Baixa Regular Regular
9 Pés Baixa Ruim Ruim
Page 72
70 Capítulo 6. Análise dos Resultados
Figura 27 – Movimento sendo exercitado de forma incorreta propositalmente para havercorreção do sistema.
Figura 28 – Movimento sendo exercitado de forma incorreta propositalmente para havercorreção do sistema.
Figura 29 – Movimento sendo exercitado de forma correta para não haver correção dosistema.
Page 73
6.2. Casos de testes funcionais por junta 71
Figura 30 – Movimento sendo exercitado de forma correta para não haver correção dosistema.
6.2.4 Braços
Os resultados obtidos com o teste estão dispostos na tabela 16. Esse teste consiste
na análise de várias juntas, sendo elas:
• Ombro direito;
• Cotovelo direito;
• Mão direito;
• Ombro esquerdo;
• Cotovelo esquerdo;
• Mão esquerdo;
O teste consiste em levantar a braço direito e esquerdo, sendo que hora o usuário
levantava, hora não.
6.2.4.1 Relatório de teste
Como pode ser observado na tabela 16 o movimento foi corrigido com exatidão,
não tendo diferença entre os lados direito e esquerdo do corpo, dada as limitações de luz
ambiente. O sistema corrige o usuário quando este não está fazendo o movimento correto
da braço como pode ser visto nas imagens 32 e 31 e não apresenta nenhum erro quando
o movimento está sendo executado corretamente como pode ser visto em 34 e 33.
Page 74
72 Capítulo 6. Análise dos Resultados
Tabela 16 – Teste de junta referente ao braço
Movimento Complexidade Luz Ambiente Exatidão
1 Ombros Baixa Boa Boa
2 Ombros Baixa Regular Regular
3 Ombros Baixa Ruim Ruim
4 Cotovelos Baixa Boa Boa
5 Cotovelos Baixa Regular Regular
6 Cotovelos Baixa Ruim Ruim
7 Mãos Baixa Boa Boa
8 Mãos Baixa Regular Regular
9 Mãos Baixa Ruim Ruim
Figura 31 – Movimento sendo exercitado de forma incorreta propositalmente para havercorreção do sistema.
Page 75
6.2. Casos de testes funcionais por junta 73
Figura 32 – Movimento sendo exercitado de forma incorreta propositalmente para havercorreção do sistema.
Figura 33 – Movimento sendo exercitado de forma correta para não haver correção dosistema.
Page 76
74 Capítulo 6. Análise dos Resultados
Figura 34 – Movimento sendo exercitado de forma correta para não haver correção dosistema.
6.3 Fontes de Erro
Como já mencionando anteriormente, a principal fonte do erro do sistema é devido
as limitações do kinect, seja pela precisão ou pela luz do ambiente. Por este motivo, é
aconselhavel que durante a execução dos movimentos, o ambiente esteja livre de possíveis
interferências no mapeio do sensor, além de estar bem iluminado. Quanto a precisão,
durante a realização do desenvolvimento buscou-se minimizar a margem de erro do sensor
aumentando a tolerância angular sobre o movimento das juntas.
6.4 Outros resultados
Nesta seção é apresentada outros resultados obtidos ao decorrer do desenvolvi-
mento deste trabalho.
6.4.1 Arquitetura completa
Em proposta apresentada na entrega do primeiro documento, foi apresentada a
arquitetura completa, uma arquitetura modular, onde cada módulo é responsável pelo
comportamento de uma parte do sistema, sendo cada módulo processado individualmente,
um sistema multiprocessado (2.6.2).
Essa arquitetura foi escolhida por não haver necessidade de várias máquinas ou
processadores, diferente de um sistema distribuído (2.6.1) ou um sistema massivamente
paralelo (2.6.3), e também pelo fato dos processos poderem ser executados ao mesmo
Page 77
6.4. Outros resultados 75
tempo sem queda no desempenho, em razão do sistema operacional delegar as instruções
a cada núcleo do processador.
O desempenho para o sistema é necessário, pois a solução do algoritmo do Baptista
(BAPTISTA, 2016), necessita de um grande processamento de informações. A não escolha
de um sistema multiprocessado, impactaria na solução, desencadeando o não cumprimento
de alguns requisitos, tais como na usabilidade, dado que a fluídez da movimentação do
avatar 3D e captação do movimento do usuário seriam afetados, na confiabilidade, já que
o sistema não teria desempenho suficiente para se recuperar de falhas, e principalmente
na performance do sistema (5.1.10).
Com isso foi desenvolvido uma solução, contendo 4 (quatro) módulos funcionais,
sendo multiprocessados, comunicando-se assincronicamente por memória compartilhada.
Esta arquitetura se encontra em estado inicial podendo ser encontrada aqui1, sua im-
plementação foi feita em python 3 (FOUNDATION, 2001-2017). Nela temos 4 (quatro)
módulos, sendo eles chamados de:
• Sensor: Módulo responsável pelo comportamento do sensor;
• Visualização: Módulo responsável pelo comportamento e comunicação com a parte
de visualização do avatar 3D;
• Processamento: Módulo responsável pelo comportamento de todo o processa-
mento das informações das juntas;
• Armazenamento: Módulo responsável pelo compartamento de armazenar todas
as informações do sistema.
Abaixo é apresentado um diagrama de sequências do sistema que contempla a
arquitetura modular.
1 https://gitlab.com/ricardogtx/tcc2
Page 78
76 Capítulo 6. Análise dos Resultados
Figura 35 – Diagrama de sequência responsável pela troca das mensagens do sistema aogravar um movimento.
Figura 36 – Diagrama de sequência responsável pela troca das mensagens do sistema aoexercitar um movimento.
Page 79
6.5. Análise dos resultados 77
A seguir é apresentado um desenho esquemático da solução já com o Unity 3D
integrado.
Figura 37 – Desenho da arquietura completa.
O objetivo dessa implementação foi verificar a viabilidade da arquietetura pro-
posta. Porém pela limitação de tempo, os requisitos foram priorizados, e a solução com-
pleta, usando multiprocessamento ficará como issue de melhoria da plataforma proposta.
6.5 Análise dos resultados
Apesar da análise entre as juntas está sendo realizada de maneira simplificada,
comparação angular das juntas desejadas, ela conseguiu um resultado inicial satisfatório
ao analisar os movimentos do usuário, contudo, apesar dos indicativos de bons resultados,
a solução não foi extensamente testada, e os erros nos movimentos das juntas não foram
avaliados. Logo tal proposta ainda não está madura para entrar em produção.
Page 80
78 Capítulo 6. Análise dos Resultados
Como foi observado ao longo dos testes, o sistema consegue fazer a leitura das
juntas que o kinect mapeia, podendo fazer a análise entre o movimento salvo com o
movimento feito pelo usuário. O sistema junto ao kinect se comportam melhor com um
ambiente favorável, livre de interferências para o mapeio do sensor e onde haja uma boa
luz ambiente. Mesmo assim não é possível fazer a análise de todos os graus de movimento
das articulações no corpo conforme apresentado em 2.5.
Trabalhando de maneira empírica com o sistema gerado com este trabalho, é pos-
sível encontrar indícios positivos quanto a proposta de um produto acessível para a reabi-
litação motora, porém não pode-se afirmar que tal solução pode ser usado em produção.
Sendo melhor aplicado a reabilitação onde envolvam idosos, já que o sistema apresenta
um funcionamento melhor com movimentos lentos, além de tornar o processo menos te-
dioso e mais lúdico. Contudo, pode-se concluir que o sistema gera resultados positivos no
processo de reabilitação motora.
Page 81
79
7 Conclusão
Como foi observado ao longo deste trabalho, podemos lidar com problemas de
saúde e sociais com o auxílio da tecnologia, e para tal não é necessário despendiar quantias
massivas de dinheiro. A filosofia open-source ajuda nesse quesito, incetivam a cooperação
das pessoas sem a necessidade de pagamentos, com isso podemos atacar tais problemas.
Infelizmente por questões técnicas não foi possível desenvolver este trabalho apenas com
tecnologias que compartilham essa filosofia.
Ao final, foi visto que o sistema gerado com este trabalho tem indícios de futura-
mente poder virar um produto acessível para a reabilitação motora, porém em casos onde
não é necessário fazer movimentos muito complexos e nem que exijam auxílio de objetos.
É recomendável no uso da reabilitação de idosos onde o procedimento fica menos tedioso
e mais lúdico.
Esta pesquisa obteve importantes resultados, em relação a implementação da so-
lução, identificando formas de auxílio a um problema de saúde e a problemas sociais,
além de identificar uma nova maneira de utilizar o produto da microsoft, o kinect, e a
viabilidade da aplicação no contexto fisioterapêutico.
Para que a pesquisa se complete, deve-se implementar o algoritmo do Roberto de
Souza Baptista (BAPTISTA, 2016) como forma de análise de movimento, onde não foi
possível durante o desenvolvimento. Desse modo, deve-se destacar as lacunas deixadas
pela pesquisa, apresentando os trabalhos futuros para que novos interessados possam
seguir e completar o estudo e o desenvolvimento do sistema.
• Implementar a arquitetura completa 6.4.1, junto ao algoritmo do Baptista (BAPTISTA,
2016) como módulo de processamento;
• Aplicar contextos de design no sistema, para mais engajamento ao uso;
• Possível aplicação de gameficação;
• Disponibilizar em alguma plataforma de distribuição de software.
Page 83
81
Referências
ARAUJO, J. M. F. R. de. Processamento digital de sinais: Conceitos e aplicações. 2017.Disponível em: <http://www.dsc.ufcg.edu.br/~pet/ciclo_seminarios/tecnicos/2012/CicloDeSeminarios2012.1_Joseana.pdf>. Citado na página 31.
BAPTISTA, R. D. S. Automatic human movement assessment with switching lineardynamic system: Motion segmentation and motor performance. Universidade de Brasília,2016. Citado 14 vezes nas páginas 9, 20, 23, 24, 25, 26, 27, 28, 29, 33, 34, 45, 75 e 79.
CERCA, A. A. C. S. J. Contextualização da biomecânica para a investigação domovimento: fundamentos, métodos e aplicações para análise da técnica esportiva. In:Revista Brasileira de Educação Física e Esporte. [S.l.: s.n.], 2007. v. 21, p. 61–85. Citadona página 24.
CHUNG, P. de D. P.; MENG, Q. Landmark-based methods for temporal align- mentof human motions. In: IEEE Conputational Intelligence Magazine. [S.l.: s.n.], 2014. p.29–37. Citado na página 26.
COPPE/UFR, P. de Engenharia Biomédica da. Definindo engenharia biomédica. 2016.Disponível em: <http://http://www.peb.ufrj.br/eb.htm>. Citado na página 33.
EELES, P. Rational library: What, no supplementary specification? 2014. Disponívelem: <https://www.ibm.com/developerworks/rational/library/3975.html>. Citado napágina 37.
FELICIOIV, C. M. dos SantosI; Gilver FerreiraI; Priscilla Lorenzatto Malac-coI; George Schayer SabinoII; Geraldo Fabiano de S. M. D. C. Confiabilidadeintra e interexaminadores e erro da medição no uso do goniômetro e inclinôme-tro digital. 2012. Disponível em: <http://www.scielo.br/scielo.php?script=sci_arttext&pid=S1517-86922012000100008>. Citado na página 20.
FOUNDATION, P. S. Python documentation. 2001–2017. Disponível em: <https://docs.python.org/3/>. Citado na página 75.
FOWLER, M. Uml distilled: A brief guide to the standard object modeling language.1997. Citado na página 43.
GAGNE, A. S. P. B. G. G. Operating system concepts. In: Operating System Concepts.[S.l.: s.n.], 2004. Citado na página 33.
GIL, A. C. Como elaborar projetos de pesquisa. p. 41–42, 2002. Citado na página 42.
GRADY, R. Practical software metrics for project management and process improvement.Prentice-Hall, 1992. Citado na página 36.
LIN, J. F. s.; KULIC, D. Online segmentation of human motion for automated reha-bilitation exercise analysis. In: IEEE Transactions on Neural Systems and RehabilitationEngineering. [S.l.: s.n.], 2014. v. 22, p. 168–180. Citado na página 26.
Page 84
82 Referências
MARQUES, A. P. Manual de goniometria. In: Manual de Goniometria 2a EDIÇÃOREVISADA E AMPLIADA. [S.l.: s.n.], 2003. v. 2, p. 1–5. Citado 3 vezes nas páginas11, 20 e 31.
MATHWORKS. Matlab. 1994 – 2017. Disponível em: <https://www.mathworks.com/products/matlab.html>. Citado 2 vezes nas páginas 26 e 34.
MICROSOFT. kinect for windows. 2016. Disponível em: <https://developer.microsoft.com/en-us/windows/kinect>. Citado 4 vezes nas páginas 9, 32, 39 e 40.
ONE, V. Agile software feature estimation. 2017. Disponível em: <https://www.versionone.com/agile-101/agile-management-practices/agile-feature-estimation/>.Citado na página 54.
PRIMESENSE. Openni. 2010. Disponível em: <http://openni.ru/openni-sdk/openni-sdk-history-2/index.html>. Citado na página 27.
QUALISYS. Qualisys track manager. Disponível em: <http://www.qualisys.com/software/qualisys-track-manager/>. Citado na página 20.
RADIGAN, D. A metodologia kanban. 2017. Disponível em: <https://br.atlassian.com/agile/kanban>. Citado 2 vezes nas páginas 30 e 43.
ROUSE, M. Mpp (massively parallel processing). 2011. Disponível em: <http://whatis.techtarget.com/definition/MPP-massively-parallel-processing>. Citado na página 33.
SIGNIFICADOS. Siginficado de kanban. 2017. Disponível em: <https://www.significados.com.br/kanban/>. Citado na página 30.
TANENBAUM, A. S. Sistemas distribuídos - princípios e paradigmas. In: SistemasDistribuídos - Princípios e Paradigmas. [S.l.: s.n.], 2001. Citado na página 32.
TECHNOLOGIES, U. Unity 3d. Disponível em: <http://www.unity3D.com/Manual>.Citado na página 32.
TECHNOLOGIES, U. Unity 3d. 2017. Disponível em: <http://www.unity3D.com>.Citado na página 39.
TELES, V. M. Práticas do xp. 2006. Disponível em: <http://www.desenvolvimentoagil.com.br/xp/praticas/>. Citado na página 30.
THERAPY, W. C. for P. What is wcpt? 2016. Disponível em: <http://www.wcpt.org/what-is>. Citado na página 19.
THOMAS, K. B. M. B. A. van B. A. C. W. C. M. F. J. G. J. H. A. H. R. J. J. K. B.M. R. C. M. S. M. K. S. J. S. D. Manifesto Ágil. 2001. Disponível em: <http://www.agilemanifesto.org/>. Citado na página 29.