\chapter{Introdução}\label{ch:introducao}                         
\thispagestyle{myheadings}

\section{Enquadramento}\label{sec:enquadramento}

\parl O \acs{PHUA} - \acl{PHUA} representa um esforço conjunto dos departamentos de Engenharia Mecânica e Eletrónica, Telecomunicações e Informática, para o desenvolvimento de uma plataforma humanóide autónoma.

\parl Entre 2004 e 2008 foram vários os intervenientes que deram o seu contributo para a primeira plataforma humanóide desenvolvida, cujo resultado pode ser visualizado na Figura \ref{fig:humanoid_v1}. Em 2004, foi desenvolvida uma unidade de controlo de servomotores e leitura sensoriais no projeto \citep{gameiro_modulrob_2004} e desenvolvida e construída a parte inferior (pernas, pés e anca) desta primeira plataforma no projeto \citep{rego_estudos_2004}. Em 2005, foi desenvolvida a parte superior da primeira plataforma (tronco, braços e cabeça) através do projeto \citep{beca_desenvolvimento_2005} e com o projeto \citep{gomes_concepcao_2005} foram revistos os módulos de controlo e perceção já existentes e concebidos novos módulos. No ano de 2006, foram desenvolvidos algoritmos de controlo, recorrendo à informação sensorial de sensores de força colocados na base dos pés, através do projeto \citep{silva_desenvolvimento_2006}, onde esta plataforma adquiriu a capacidade de se equilibrar estaticamente. Em 2007, foram realizados os projetos \citep{baptista_desenvolvimento_2007} e \citep{ferreira_desenvolvimento_2007}, onde se desenvolveu a unidade central de controlo da plataforma humanóide e alguns algoritmos de locomoção simulados apenas em software, respetivamente. Finalmente em 2008, foram realizados ainda os projetos \citep{rodrigues_unidade_2008} e \citep{silva_sistemas_2008}, nos quais se desenvolveram algoritmos de visão aplicados no humanóide com o objetivo de este interagir com o meio envolvente e ainda o desenvolvimento de sistemas de comunicação e controlo em \textit{CAN}.

\begin{figure}[H]
\centering
\begin{subfigure}{0.45\textwidth}
\includegraphics[width=5.5cm,height=9cm]{Imagens/humanoid_v1.png} 
\caption[Fase final da primeira plataforma humanóide do PHUA.]{Fase final da primeira plataforma humanóide do PHUA \citep{rodrigues_unidade_2008}.}
\label{fig:humanoid_v1}
\end{subfigure}
~
\begin{subfigure}{0.45\textwidth}
\includegraphics[width=5.5cm,height=9cm]{Imagens/humanoid_v2.png} 
\caption[Corpo completo da segunda plataforma desenvolvida no \textit{PHUA}.]{Corpo completo da segunda plataforma desenvolvida no \textit{PHUA} \citep{cruz_haptic_2012}.}
\label{fig:humanóide_v2}
\end{subfigure}
\caption{Plataformas do \acs{PHUA}.}
\label{fig:todas_as_plataformas}
\end{figure}

Iniciada em 2009, a segunda plataforma conta já com o contributo de alguns projetos. Em \citep{sabino_estrutura_2009} foi desenvolvida e concebida a parte inferior do novo robô humanóide (anca, pernas e pés) segundo o conceito de atuação híbrida, composta por atuação ativa por meio de servomotores, Figura \ref{fig:atuacao_motorizada_humanóide}, e passiva por meio de elementos elásticos colocados nas juntas, como é possível observar na Figura \ref{fig:atuacao_passiva_humanóide}. Em \citep{ribeiro_desenvolvimento_2010}, foi desenvolvido um módulo inicial de controlo dos servomotores e leitura das células de carga (destinadas à  base inferior dos pés). Nos projetos \citep{godinho_desenvolvimento_2011} e \citep{lage_algoritmos_2011}, foi desenvolvida e concebida a parte superior da plataforma humanóide (tronco e braços) e desenvolvidos algoritmos de controlo com baseados na cinemática do robô humanóide e também alguns algoritmos que recorrem à leitura das células de carga dos pés do humanóide. No projeto \citep{cruz_haptic_2012} foi explorada a interação háptica e desenvolvida uma interface de teleoperação do robô humanóide. O projeto \citep{emilio_estrelinha_tele-operation_2013} contribuiu com o desenvolvimento de um módulo composto por células de carga, colocadas nos pés do robô, através dos quais se calcula o centro de pressão. A posição do centro de pressão do robô é então aqui utilizada para gerar a realimentação de força transmitida através da interface de teleoperação desenvolvida no trabalho anterior.

\parl Como resultado, a segunda plataforma humanóide do \acs{PHUA} possui 27 graus de liberdade, um peso total de 6 kg e 65 cm de altura, um módulo de controlo com servomotores \textit{HITEC}\textsuperscript{\textregistered} e um módulo sensorial em desenvolvimento que conta com 8 células de carga na base dos pés. Para além disso, o robô humanóide dispõe ainda de duas câmaras com comunicação \textit{FireWire}, colocadas na cabeça, destinadas a fornecer imagens para o desenvolvimento de algoritmos de visão artificial.

\begin{figure}[H]
\centering
\begin{subfigure}{0.45\textwidth}
\includegraphics[width=6.5cm,height=5cm]{Imagens/atuador_passivo_humanoide.jpg}
\caption{Atuação passiva por meio de elásticos.}
\label{fig:atuacao_passiva_humanóide}
\end{subfigure}
~
\begin{subfigure}{0.45\textwidth}
\includegraphics[width=6.5cm,height=5cm]{Imagens/atuador_ativo_humanoide.jpg}
\caption{Servomotores de atuação das juntas.}
\label{fig:atuacao_motorizada_humanóide}
\end{subfigure}
\caption{Tipos de atuação existentes no robô humanóide.}
\label{fig:tipos_atuadores_humanóide}
\end{figure}

\section{Motivação} \label{sec:motivacao}

\parl O controlo de robôs humanóides em operações como marcha ou até manter o equilíbrio bípede exige todo o conjunto de modelos dinâmicos que consigam representar rigorosamente o próprio robô, e a obtenção desses modelos é um processo de extrema complexidade.

\parl O elevado número de \textit{Graus de Liberdade} - \acs{GDL} que o robô humanóide do \acs{PHUA} apresenta e as folgas existentes nas transmissões e acoplamentos, incrementam o nível de complexidade da obtenção do modelo dinâmico necessário para representar de forma rigorosa o robô humanóide.

\parl O ser humano dispõe de sistemas funcionais a operar em conjunto que desenrolam um papel importante na forma como este mantém o equilíbrio. Como principais exemplos desses sistemas temos os sistemas vestibular, visual e proprioceptivo.

\parl De forma a criar aproximação aos sistemas biológicos, a incorporação de um módulo de elementos sensoriais no robô humanóide contribui para a possibilidade do controlo do mesmo através de um modelo dinâmico menos complexo, auxiliado pela informação fornecida pelos elementos sensoriais.

\section{Objetivos}\label{sec:objetivos}

\parl O principal objetivo deste projeto visa o desenvolvimento e conceção de uma rede de sensores inerciais que irão incorporar o sistema de controlo de equilíbrio do robô humanóide do \acs{PHUA}.

\parl A rede de sensores inerciais a desenvolver é composta por um conjunto de unidades inerciais (\aclp{IMU} - \acsp{IMU}), sendo cada unidade composta por acelerómetros, giroscópios e magnetómetros, todos eles de três \acs{GDL}.

\parl Antes do desenvolvimento da rede de sensores inerciais serão realizadas experiências com os tipos de \acs{IMU} disponibilizados, que ajudarão a caraterizá-los para posteriores decisões nos elementos a incorporar na rede.

\parl Depois de concebida a rede sensores inerciais, pretende-se proceder à sua instalação no robô humanóide e realizar atividades experimentais, através das quais é feita a avaliação do comportamento das unidades inerciais.

\parl É também objetivo deste projeto que todo o \textit{software} desenvolvido seja integrado na plataforma \acs{ROS}, de forma a acompanhar a recente migração do \acs{PHUA} para este ambiente de desenvolvimento que será explicado ao longo do projeto.

\section{\acl{ROS}}\label{sec:ambiente_de_programacao_ros} 

\parl \acl{ROS}, ou apenas \acs{ROS}, é uma ferramenta destinada ao desenvolvimento de \textit{software}. Utilizado principalmente no desenvolvimento de robôs, é cada vez mais uma forte aposta devido à sua estrutura modular que permite separar um grande e complexo projeto em vários módulos ou \textit{packages}, tornando-os menos complexos e mais fáceis de compreender. Outra vantagem que torna o \acs{ROS} mais apelativo reside no facto de este ser uma ferramenta gratuita e \textit{open source}, onde muitas das suas utilidades, são desenvolvidas por entidades que adotam esta ferramenta, e no decorrer dos seus projetos disponibilizam-nas para toda a comunidade que utilize esta plataforma.

\parl Atualmente, a ferramenta \acs{ROS} suporta linguagens de programação como \textit{C++} e \textit{Python}. Para facilitar a sua utilização, o \acs{ROS} dispõe ainda de utilidades para processamento e compilação de código.

\parl Como já foi referido, cada projeto pode ser composto por um variado número de módulos, e cada módulo pode conter vários executáveis gerados através da compilação do código, denominados de nodos. Cada nodo, através da utilização e configuração de \textit{callbacks}, adquire a capacidade de ler ou escrever dados em mensagens que poderão ser interpretadas por outros nodos, permitindo assim a troca de informação entre eles.

\parl Através da ferramenta \textit{rosbag} é possível intersetar as mensagens enviadas pelos nodos, e gravar os dados dessas mensagens em ficheiros, permitindo a re-utilização desses dados para interação com outros nodos, ou a sua utilização direta na análise dos dados gravados.

\parl A plataforma \acs{ROS} também disponibiliza uma ferramenta de visualização gráfica denominada \textit{rviz}, que possibilita a visualização e manipulação (a manipulação é realizada através de transformações geométricas nos \textit{scripts}) de objetos no espaço. No desenvolvimento de um robô, por exemplo, é possível representar no \textit{rviz} as formas geométricas deste e visualizá-lo a movimentar-se, sendo esta opção muito utilizada em testes de algoritmos para simulações.

\section{Estado de Arte}\label{sec:estado_de_arte}

\parl Esta secção pretende introduzir o surgimento dos sistemas \acs{IMU}, e onde estes começaram por ser utilizados.

\parl De seguida serão dados a conhecer os princípios de funcionamento dos principais tipos de acelerómetros, giroscópios e magnetómetros, também com referência à tecnologia \acs{MEMS}. Para além, disso serão também referidos alguns métodos de cálculo da orientação, recorrendo a \acsp{IMU}, e também uma pequena introdução ao \acs{INS}.

\parl Para finalizar, serão referenciados alguns trabalhos virados para a robótica humanóide nos quais se encontra a implementação de sensores inerciais.

\subsection{\acl{INS} - \acs{INS}}

\parl Para atender à necessidade de controlar e monitorizar a trajetória ou orientação de um dado objeto, foi desenvolvido um conceito denominado de sistema de navegação inercial, do inglês \acl{INS} ou apenas \acs{INS}. Este sistema é composto por um conjunto de dispositivos sensoriais que, na presença de um movimento, permitem quantificá-lo \citep{lawrence_modern_1998}.

\parl Com as primeiras utilizações na área militar, o \acs{INS} estendeu-se mais tarde para a área naval (navios e submarinos), espacial e mais tarde na área aeroespacial. Com a evolução da tecnologia o custo do fabrico dos dispositivos que podem integrar o \acs{INS} baixou consideravelmente. Desde então, a implementação de sistemas \acs{INS} alastrou-se também para áreas comerciais\citep{lawrence_modern_1998}.

\parl Num sistema \acs{INS} existem grandezas que podem ser obtidas diretamente de sensores, sendo elas:
\begin{description}
\item \textbf{Aceleração linear} - obtida através acelerómetros;
\item \textbf{Velocidade angular} - obtida através de giroscópios;
\item \textbf{Campo magnético} - obtido através de magnetómetros.
\end{description}

\parl A partir das grandezas anteriores, é possível obter grandezas como:
\begin{description}
\item \textbf{Velocidade linear} - integrando a aceleração linear;
\item \textbf{Deslocamento linear} - integrando a velocidade linear;
\item \textbf{Deslocamento angular} - integrando a velocidade angular.
\end{description}

\parl O campo magnético não é considerado uma grandeza inercial, no entanto, os magnetómetros costumam ser integrados em sistemas \acs{INS}, sendo as suas medições utilizadas para o cálculo de um dos valores de orientação.

\parl Para a obtenção da velocidade linear e do deslocamento linear é possível recorrer às equações (\ref{eq:int_speed}) e (\ref{eq:int_displacement}), respetivamente, onde \textit{v} representa a velocidade linear, \textit{s} representa o deslocamento linear, \textit{a} representa o valor da aceleração e \textit{t} o tempo decorrido.   

\begin{center}
\begin{equation}
v(t) = \int a\,\ \mathrm{d}t
\label{eq:int_speed}
\end{equation}
\end{center}

\begin{center}
\begin{equation}
s(t) = \iint a\,\ \mathrm{d}t
\label{eq:int_displacement}
\end{equation}
\end{center}

\parl Estas duas equações são utilizadas em regime contínuo, no entanto, os sensores apenas fornecem os seus dados em instantes de tempo (regime discreto), não descrevendo por isso grandezas contínuas no tempo. Sendo assim, para o regime discreto é possível recorrer às equações (\ref{eq:speed_equation}) e (\ref{eq:displacement_equation}) para determinar a velocidade linear e deslocamento linear onde \textit{k} representa o número de cada iteração.

\begin{center}
\begin{equation}
v_{k} = v_{k-1} + a_{k}  (t_{k}-t_{k-1})
\label{eq:speed_equation}
\end{equation}
\end{center}

\begin{center}
\begin{equation}
s_{k} = s_{k-1} + v_{k-1} (t_{k}-t_{k-1}) + \cfrac{a_k (t_{k}-t_{k-1})^{2}}{2}
\label{eq:displacement_equation}
\end{equation}
\end{center}

\parl Para calcular o deslocamento angular é possível recorrer à equação (\ref{eq:int_angular_displacement}), aplicável apenas no regime contínuo. No entanto, assim como nos casos anteriores, os sensores que fornecem dados da velocidade angular (giroscópios) apresentam resultados discretos. Para o regime discreto é possível calcular o deslocamento angular através da equação (\ref{eq:angular_displacement_equation}). Nestas equações, $\theta$ representa o deslocamento angular, $\omega$ a velocidade angular e \textit{t} a variável tempo.

\begin{center}
\begin{equation}
\theta(t) = \int \omega\,\ \mathrm{d}t
\label{eq:int_angular_displacement}
\end{equation}
\end{center}

\begin{center}
\begin{equation}
\theta_{k} = \theta_{k-1} + \omega_{k} (t_{k}-t_{k-1})
\label{eq:angular_displacement_equation}
\end{equation}
\end{center}

Num sistema \acs{INS} existem fontes de erro que devem ser analisadas. Uma das fontes de erro está associada às medições dos sensores. Outra fonte de erro no processo iterativo, surge ao considerar que entre iterações, os valores medidos são constantes, originando aproximações que ao longo das tempo vão representar uma acumulação de erro.

\subsection{Acelerómetros} \label{sub_sec:acelerometros}

\parl Os acelerómetros são dispositivos que permitem a quantificação da aceleração linear apresentado por um corpo durante o seu movimento. A quantificação que este tipo de sensores fornece, consiste essencialmente na conversão de valores interpretados num sistema mecânico para valores de tensão elétrica.

\parl O sistema mecânico presente em todos os acelerómetros é sempre desenvolvido sob o princípio da Segunda Lei de Newton (\ref{eq:2newton}). Sob o efeito da aceleração \textit{a}, é gerada uma força \textit{F} num corpo, sendo a força proporcional à massa \textit{m} deste.

\begin{equation}
F = m \times a
\label{eq:2newton}
\end{equation}

\parl Apesar de todos os acelerómetros funcionarem segundo o princípio atrás descrito, existem vários processos através dos quais se converte a força \textit{F} em valores de tensão elétrica. É nesta particularidade que se distinguem os vários tipos de acelerómetros, dentro dos quais de destacam os seguintes:

\begin{description}
\item \textbf{Acelerómetro Piezoelétrico} - a massa \textit{m} é colocada sobre material piezoelétrico. Sempre que uma força \textit{F} for exercida sobre uma massa \textit{m}, esta força vai ser transmitida ao material piezoelétrico, o qual gera uma diferença de potencial proporcional à força exercida \citep{wilson_sensor_2005}. A Figura \ref{fig:piezo_accel} ilustra uma montagem do acelerómetro descrito.

\begin{figure}[H]
\begin{center}
\includegraphics[scale=0.6]{Imagens/piezo_accel.png}
\caption[Exemplo de um acelerómetro piezoelétrico.]{Exemplo de um acelerómetro piezoelétrico \citep{wilson_sensor_2005}.}
\label{fig:piezo_accel}
\end{center}
\end{figure}

\item \textbf{Acelerómetro Piezoresistivo} - a massa \textit{m} deste acelerómetro é uma barra que sofre flexão na presença da força \textit{F}. Ao fletir, a barra provoca a deformação de material piezoresistivo, o qual gera uma diferença de potencial que é quantificado \citep{wilson_sensor_2005}. Na Figura \ref{fig:piezo_resist_accel} está representado o funcionamento deste tipo de acelerómetro.

\begin{figure}[H]
\begin{center}
\includegraphics[scale=0.6]{Imagens/piezo_resist_accel.png}
\caption[Exemplo de um acelerómetro piezoresistivo.]{Exemplo de um acelerómetro piezoresistivo \citep{wilson_sensor_2005}.}
\label{fig:piezo_resist_accel}
\end{center}
\end{figure}

\item \textbf{Acelerómetro Capacitivo} - aqui a massa \textit{m} é mais uma vez uma barra que é colocada entre dois elétrodos que funcionam como um condensador. Na presença de uma força \textit{F}, a massa \textit{m} sofre flexão, causando uma variação na constante do condensador. Através desta variação é quantificado o valor da aceleração \citep{wilson_sensor_2005}. Na Figura \ref{fig:capacit_accel} está representada a montagem deste tipo de acelerómetro.

\begin{figure}[H]
\begin{center}
\includegraphics[scale=0.8]{Imagens/capacit_accel.png}
\caption[Exemplo de um acelerómetro capacitivo.]{Exemplo de um acelerómetro capacitivo \citep{wilson_sensor_2005}.}
\label{fig:capacit_accel}
\end{center}
\end{figure}

\end{description}

\parl Existem outros exemplos de acelerómetros, no entanto, estes são os tipos mais utilizados.

\subsection{Giroscópios} \label{sub_sec:giroscopios}

\parl Os giroscópios são dispositivos que permitem a leitura das velocidades angulares geradas na presença de um movimento rotacional \citep{fraden_handbook_2010}.
% através do princípio fundamental da conservação do momento angular. 

\parl Para este tipo de sensor, é também possível encontrar várias soluções construtivas, sendo as mais encontradas as seguintes:
 
\begin{description}
\item \textbf{Giroscópio de Massa Giratória} - este tipo de giroscópio é constituído por uma massa giratória acoplada num suporte com três eixos móveis. À massa (com formato de um disco) é imposta uma velocidade de rotação constante em torno do seu eixo. Quando o suporte é inclinado, o efeito giroscópico causa precessão, ou seja, gera-se uma força que faz o suporte rodar em torno de um eixo ortogonal ao eixo de rotação do disco e ao da inclinação sofrida \citep{fraden_handbook_2010}. Na Figura \ref{fig:rotor_gyro} é possível observar a montagem de giroscópio deste tipo, com um grau de liberdade.

\begin{figure}[H]
\begin{center}
\includegraphics[scale=0.8]{Imagens/rotor_gyro.png}
\caption[Exemplo de um giroscópio de rotor com um grau de liberdade.]{Exemplo de um giroscópio de rotor com um grau de liberdade \citep{fraden_handbook_2010}.}
\label{fig:rotor_gyro}
\end{center}
\end{figure}

\item \textbf{Giroscópio de Vibração} - os componentes deste tipo de giroscópio são construídos através da micro-maquinagem. Uma pequena massa é colocada num suporte de três graus de liberdade. À massa é induzida uma vibração e na presença de um movimento rotacional exterior, através do fenómeno de \textit{Coriolis} é gerada uma vibração no suporte com a mesma frequência da vibração induzida, amplitude proporcional à velocidade de rotação. A amplitude desta vibração gerada é então convertida para valores da velocidade de rotação \citep{fraden_handbook_2010}. Na Figura \ref{fig:vibrating_gyro} é possível observar um esquema do suporte e massa constituinte de um giroscópio deste tipo.

\begin{figure}[H]
\begin{center}
\includegraphics[scale=0.3]{Imagens/vibrating_gyro.png}
\caption[Exemplo de um giroscópio de vibração para um grau de liberdade.]{Exemplo de um giroscópio de vibração para um grau de liberdade. \citep{fraden_handbook_2010}}
\label{fig:vibrating_gyro}
\end{center}
\end{figure}

\item \textbf{Giroscópio Ótico} - é um tipo de giroscópio que se baseia no efeito de \textit{Sagnac}. A sua construção apresenta dois enrolamentos em fibra ótica do mesmo comprimento, um emissor de feixes de luz e um recetor de luz. Numa das pontas de cada enrolamento encontra-se um emissor de feixe luminoso e na outra extremidade um recetor. Em cada enrolamento é emitido um feixe de luz, viajando cada feixe em sentido contrário ao outro em torno dos enrolamentos. Segundo o efeito de \textit{Sagnac}, na presença de um movimento de rotação, a velocidade que os feixes de luz demorarão a percorrer os enrolamentos serão diferentes, criando-se um desfasamento nos tempos de chegada entre os dois feixes, proporcional à velocidade da rotação. Esta velocidade de rotação, é então quantificada através do desfasamento medido \citep{fraden_handbook_2010}.
\end{description}

\subsection{Magnetómetros} \label{sub_sec:magnetometros}

\parl Os magnetómetros são dispositivos que permitem quantificar o campo magnético envolvente. Como os sensores anteriores, existem soluções diferentes na construção deste tipo de sensores. No entanto, os mais comuns são os seguintes:

\begin{description}

\item \textbf{\textit{Search-Coil} Magnetómetro} - composto por um núcleo de material de alta permeabilidade envolto por uma espira condutora, quando este sensor experimenta uma variação de fluxo magnético, gera-se uma diferença de potencial na espira proporcional à variação de fluxo (Lei de Indução de Faraday) \citep{lenz_magnetic_2006}. Na Figura \ref{fig:search_coil_magn} encontra-se um esquema de montagem de um sensor deste tipo.

\begin{figure}[H]
\begin{center}
\includegraphics[scale=0.8]{Imagens/serach_coil_magnet.png}
\caption[Esquema de uma montagem de um magnetómetro \textit{Search-Coil} de apenas uma espira.]{Esquema de uma montagem de um magnetómetro \textit{Search-Coil} de apenas uma espira. \citep{lenz_magnetic_2006}}
\label{fig:search_coil_magn}
\end{center}
\end{figure}

\item \textbf{Magnetómetros \textit{Fluxgate}} - este tipo de sensor é composto por um núcleo ferromagnético enrolado por duas espiras. Numa das espiras faz-se passar uma corrente elétrica sinusoidal a oscilar entre zero e valores capazes de saturar o núcleo. Assim, é criada uma variação do fluxo magnético que atravessa o núcleo que, por sua vez, irá induzir uma diferença de potencial na segunda espira. Na presença de um campo magnético exterior, a variação do fluxo sentido no núcleo será alterada e, como consequência, a diferença de potencial média gerada na segunda espira será diferente e proporcional ao campo magnético exterior \citep{lenz_magnetic_2006}.

\item \textbf{Magnetómetros Magnetoresistivos} - neste sensor é utilizado um circuito elétrico que contém um componente cujo seu material possui uma resistência variável e proporcional ao campo magnético que o atravessa.
\end{description}

\subsection{\acl{MEMS} - \acs{MEMS}} \label{sub_sec:MEMS}

\parl \acl{MEMS} - \acs{MEMS}, é uma tecnologia que incorpora elementos mecânicos e eletrónicos em dispositivos de dimensões reduzidas (à escala micrométrica). Com esta tecnologia surgiu uma nova geração de dispositivos de dimensões reduzidas, baixo consumo e custos reduzidos, apresentando ainda elevado desempenho.

%\parl Na nova geração de dispositivos desenvolvidos através da tecnologia \acs{MEMS}, sensores como os acelerómetros e giroscópios, passaram a ser incorporados em novos desenvolvimentos, graças às suas dimensões de escala micrométrica.

\parl Os acelerómetros desenvolvidos segundo a tecnologia \acs{MEMS} apresentam os mesmos princípios de funcionamento dos seus antecessores, sendo a diminuição das suas dimensões a principal diferença. Na Figura \ref{fig:mems_accel_capacitivo} encontra-se um exemplo do interior de um acelerómetro capacitivo, desenvolvido segundo a tecnologia \acs{MEMS}. Nesta tecnologia é também possível encontrar acelerómetros do tipo piezoresistivos e piezoelétricos, entre outros \citep{maenaka_mems_2008}.

\begin{figure}[H]
\begin{center}
\includegraphics[scale=0.6]{Imagens/mems_accel_capacitivo.jpg}
\caption[Acelerómetro capacitivo, produzido segundo tecnologia \acs{MEMS}.]{Acelerómetro capacitivo, produzido segundo tecnologia \acs{MEMS} \citep{maenaka_mems_2008}.}
\label{fig:mems_accel_capacitivo}
\end{center}
\end{figure}

\parl Para os giroscópios \acs{MEMS} os princípios de disco rotativo e fibra ótica apresentam inconvenientes de construção. Por esse motivo, os giroscópios \acs{MEMS} são maioritariamente do tipo giroscópios de vibração \citep{xie_integrated_2003}. Na Figura \ref{fig:mems_gyro_vib} é possível observar um exemplo de construção de um giroscópio de vibração \acs{MEMS}.

\begin{figure}[H]
\begin{center}
\includegraphics[scale=0.5]{Imagens/mems_gyro_vib.jpg}
\caption[Giroscópio de vibração, produzido segundo tecnologia \acs{MEMS}.]{Giroscópio de vibração, produzido segundo tecnologia \acs{MEMS} \citep{xie_integrated_2003}.}
\label{fig:mems_gyro_vib}
\end{center}
\end{figure}

\parl Nos magnetómetros a tecnologia \acs{MEMS} permitiu a construção destes sensores segundo princípios de funcionamento como \textit{fluxgate} e magnetoresistivos. No entanto, o tipo de magnetómetro \acs{MEMS} mais utilizado é denominado de magnetómetro de ressonância. Neste sensor, uma placa vibra com uma frequência igual à sua frequência de ressonância. Na presença de um campo magnético exterior a frequência com que a placa vibra será alterada, sendo que pela diferença da frequência de oscilação é possível quantificar o campo magnético exterior \citep{ren_design_2009}.


%\subsection{Grandezas \acs{INS}} \label{sub_sec:grandezas_ins}
%
%\parl Como já foi referido no início desta secção, o \acs{INS} representa um conceito, a partir do qual se obtém dados relativos à navegação de um sistema de coordenadas, em relação a outro, por exemplo, num avião, o \acs{INS} é utilizado com fim a calcular a posição, orientação da própria aeronave em relação ao referencial global, o planeta Terra, ou até em relação a um ponto de referência como uma torre de controlo. Tudo isto, é executado com o auxílio de vários sensores.
%
%\parl No projeto \acs{PHUA}, o \acs{INS} é utilizado, com recurso a \acp{IMU}, para a obtenção das seguintes grandezas:
%
%\begin{description}
%	\item[Aceleração Linear ]- obtida diretamente dos acelerómetros;
%	\item[Velocidade Linear ]- obtida integrando os dados dos acelerómetros;
%	\item[Deslocamento ]- obtido integrando duplamente os dados dos acelerómetros;
%	\item[Velocidade Angular ]- obtida diretamente dos giroscópios;
%	\item[Posição Angular ]- possível de ser obtida através de alguns algoritmos.
%\end{description}
%
%\parl Na obtenção de qualquer uma destas grandezas descritas, através dos sensores presentes em \acp{IMU}, o \textit{output} destes pode ter a necessidade de filtragem, uma vez que estes sensores apresentam oscilações por vezes acentuadas, podendo estes filtros ser mais ou menos complexos, dependendo esse fator da necessidade de cada aplicação.

%\subsubsection{Grandezas Indiretas} %TENHO que rever este título
%
%\parl Dentro do conjunto de dados que é possível obter do \acs{IMU}, os dados extraídos diretamente podem ser de utilidade dentro do âmbito do \acs{INS}, no entanto, normalmente são necessários mais dados do que os que os sensores de um \acs{IMU} pode fornecer. No âmbito do \acs{INS}, os dados não passíveis de obter diretamente do \acs{IMU}, é possível obtê-los através da manipulação dos dados extraídos diretamente.
%
%\parl Através dos dados fornecidos pelos acelerómetros, como contributo para o \acs{INS}, para algumas aplicações, pode ser interessante extrair dados como a velocidade e deslocamento lineares. Esta tarefa é possível através ,respetivamente, da integração simples (\ref{eq:int_speed} na qual $v$ representa a velocidade, $a$ a aceleração e $t$ o tempo a decorrido)  e integração dupla (\ref{eq:int_displacement} na qual $s$ representa o espaço percorrido, $a$ a aceleração e $t$ o tempo decorrido) dos valores dos acelerómetros. As equações \ref{eq:int_speed} e \ref{eq:int_displacement} devem ser utilizadas no domínio contínuo, no entanto, como os sensores constituem sistemas discretos, para tirar partido computacionalmente e de forma fácil desta metodologia, é comum utilizar-se uma soma cumulativa dos valores dos acelerómetros e a cada iteração multiplicar essa soma cumulativa pelo intervalo de tempo decorrido, utilizando estes dois passos para cada integração, isto é, na integração simples basta realizar esta operação, mas já na integração dupla, é necessário realizar a soma cumulativa dos valores dos acelerómetros duas vezes e multiplicar o resultado pelo quadrado do intervalo de tempo.
%
%\begin{center}
%\begin{equation}
%v(t) = \int a\,\ \mathrm{d}t
%\label{eq:int_speed}
%\end{equation}
%\end{center}
%
%\begin{center}
%\begin{equation}
%s(t) = \iint a\,\ \mathrm{d}t
%\label{eq:int_displacement}
%\end{equation}
%\end{center}
%
%\parl Para a mesma obtenção dos dados da velocidade linear e do deslocamento tirando apenas partido dos dados de acelerómetros,  existe ainda a possibilidade de proceder à afirmação do princípio de que, entre iterações, os valores das acelerações permanecem constantes. Assim, é possível recorrer às equações de movimento uniforme, as equações \ref{eq:speed_equation} \ref{eq:displacement_equation}, onde $v$ representa a velocidade linear, $s$ o deslocamento, $a$ a aceleração e $t$ o intervalo de tempo entre cada iteração. Na primeira iteração, $v_{k-1}$ e $s_{k-1}$ têm os dois o valor 0.
%
%\begin{center}
%\begin{equation}
%v_{k} = v_{k-1} + a_{k}  t_{k}
%\label{eq:speed_equation}
%\end{equation}
%\end{center}
%
%\begin{center}
%\begin{equation}
%s_{k} = s_{k-1} + v_{k-1} t + \cfrac{a t^{2}}{2}
%\label{eq:displacement_equation}
%\end{equation}
%\end{center}
%
%\parl Para além destas duas grandezas possíveis de obter através dos dados dos acelerómetros, é possível também recorrer aos dados dos giroscópios, de forma a obter mais uma grandeza, o deslocamento angular. De forma análoga às grandezas anteriormente descritas, as metodologias que permitem a obtenção do deslocamento angular, de forma simplista, pode ser realizada a partir da integração da velocidade angular $\omega$, apresentada na equação \ref{eq:int_angular_speed}, ou através da equação de movimento angular, apresentada na equação \ref{eq:angular_displacement_equation}. Nestas equações, $\omega$ representa a velocidade angular, e $theta$ a posição, ou deslocamento angular.
%
%\begin{center}
%\begin{equation}
%\theta(t) = \int \omega\,\ \mathrm{d}t
%\label{eq:int_angular_speed}
%\end{equation}
%\end{center}
%
%\begin{center}
%\begin{equation}
%\theta_{k} = \theta_{k-1} + \omega_{k} t
%\label{eq:angular_displacement_equation}
%\end{equation}
%\end{center}
%
%\parl O recurso às metodologias de integração e equações de movimento são simples de implementar, no entanto, estas implementações podem conter erros com a consequência de descredibilizar a sua implementação. Estes erros podem ter origem ainda na medição em bruto dos dados dos sensores (acelerómetros e giroscópios), devido a ruídos e oscilações inerentes dos próprios materiais. Estes erros são impossíveis de contornar, podendo apenas ser minimizados através de compensações ou com aplicação de filtros de suavização. Outra fonte de erro diz respeito à conversão de uma variável contínua numa variável discreta. O tempo, como variável contínua é utilizada como discreta pois os processos são sempre baseados em iterações, com uma determinada frequência de funcionamento. Sendo assim, só se sabe o valor de uma grandeza direta em alguns instantes de tempo, admitindo que entre instantes conhecidos as grandezas tenham comportamento linear ou constante, originando aproximações associadas sempre a um erro. Este processo iterativo com aproximações entre instantes iterativos faz com que o erro tenha magnitude crescente. A este erro crescente ao longo de iterações, devido a aproximações e às próprias oscilações internas dos sensores dá-se o nome de \textit{drift} e é um dos problemas das grandezas indiretas utilizadas no \acs{INS}, que devem ser contabilizadas e avaliadas na decisão da sua viabilidade.

%\subsection{\acl{DCM}}
%
%\parl \acs{DCM} - \acl{DCM} é um algoritmo que tira partido da matriz de rotação de um referencial em relação a outro referencial. Essa matriz é também conhecida por matriz dos cossenos diretores, pois cada elemento dessa matriz pode ser definida pelo cosseno de um angulo.
%
%\parl A matriz \acs{DCM} pode ser representada através da combinação de outro tipo de ângulos, os ângulos de Euler, os quais podem ser representados pelo \textit{roll} - rotação do referencial em torno do eixo $x$, \textit{pitch} - rotação do referencial em torno do eixo $y$ e \textit{yaw} - rotação do referencial em torno do eixo $z$. As rotações em torno de cada eixo combinadas, definem a orientação de um referencial no espaço \citep{dos_santos_implementation_2013}.
%
%\begin{center}
%\begin{equation}
%R = \begin{bmatrix}
%I.i & I.j & I.k \\ J.i & J.j & J.k \\ K.i & K.j & K.k
%\end{bmatrix} = 
%\begin{bmatrix}
%\cos(I.i) & \cos(I.j) & \cos(I.k) \\ \cos(J.i) & \cos(J.j) & \cos(J.k) \\ \cos(K.i) & \cos(K.j) & \cos(K.k)
%\end{bmatrix}
%\label{eq:DCM_matrix}
%\end{equation}
%
%\end{center}
%
%\begin{center}
%\begin{equation}
%R = \begin{bmatrix} \cos \theta \cos \psi & \sin \phi \sin \theta \cos \psi - \cos \phi \sin \psi & \cos \phi \sin \theta \cos \psi + \sin \phi \sin \psi  \\ \cos \theta \sin \psi & \sin \phi \sin \theta \sin \psi + \cos \phi \cos \psi & \cos \phi \sin \theta \sin \psi - \sin \phi \cos \psi \\  -\sin \theta  & \sin \phi \cos \theta  & \cos \phi \cos \theta 
%\end{bmatrix} 
%\label{eq:Euler_matrix}
%\end{equation}
%
%\end{center}
%
%\parl Em \ref{eq:DCM_matrix} e \ref{eq:Euler_matrix}, a matriz de rotação $R$ que define a orientação de um dado referencial em relação a outro referencial e nestes dois exemplos, pode-se observar essa matriz construída a partir dos cossenos diretores e pela combinação dos ângulos de Euler respetivamente. A metodologia do algorítmo \acs{DCM} baseia-se no recurso à construção desta mesma matriz de transformação através de \acp{IMU}, quer seja com seis \acs{GDL} (três acelerómetros e três giroscópios), quer com nove (solução igual à de seis mas acrescida de três magnetómetros), e através da relação entre os ângulos de Euler e a matriz de rotação, através de \ref{eq:phi} , \ref{eq:theta} e \ref{eq:psi}, obtém-se assim a posição angular do referencial pretendido \citep{dos_santos_implementation_2013}.
%
%\begin{center}
%\begin{equation}
%R = \begin{bmatrix} r_{xx} & r_{xy} & r_{xz} \\ r_{yx} & r_{yy} & r_{yz} \\ r_{zx} & r_{zy} & r_{zz} 
%\end{bmatrix} 
%\label{eq:rotation_matrix}
%\end{equation}
%
%\end{center}
%
%
%\begin{center}
%\begin{equation}
%roll = \phi = \tan^{-1}(\frac{r_{zy}}{r_{zz}})
%\label{eq:phi}
%\end{equation}
%
%\end{center}
%
%\begin{center}
%\begin{equation}
%pitch = \theta = - \sin^{-1}(r_{zx})
%\label{eq:theta}
%\end{equation}
%\end{center}
%
%\begin{center}
%\begin{equation}
%yaw = \psi = \tan^{-1}(\frac{r_{yx}}{r_{xx}})
%\label{eq:psi}
%\end{equation}
%
%\end{center}
%
%\parl Na verdade, a obtenção dos ângulos $roll$ , $pitch$ e $yaw$ a partir da matriz de rotação $R$ é apenas a etapa final deste algoritmo \acs{DCM}. A etapa mais importante consiste na própria obtenção dos valores dessa matriz de rotação.
%
%\parl A primeira etapa para a obtenção da matriz de rotação consiste na utilização dos dados provenientes dos giroscópios. Estes dados são utilizados para calcular o incremento angular entre iterações, calculado através de \ref{eq:theta_increment}, e de seguida criar uma matriz $3x3$, a matriz de rotação da iteração atual, recorrendo aos incrementos angulares calculados. O resultado pode ser observado em \ref{eq:DCM_increment}. De seguida, é necessário acumular este incremento angular na matriz que contém todos os incrementos anteriores, realizando uma operação de multiplicação de matrizes, $DCM_{k-1}.DCM_{k}$. A matriz $DCM_{0}$ para a inicialização deste algoritmo pode ser apresentada como \ref{eq:DCM_initial} \citep{dos_santos_implementation_2013}.
%
%\begin{center}
%\begin{equation}
%\begin{matrix}
%\mathrm{d}\theta_{x} \\
%\mathrm{d}\theta_{y} \\
%\mathrm{d}\theta_{z}
%\end{matrix} = 
%\begin{matrix}
%\omega_{x} \mathrm{d}t \\
%\omega_{y} \mathrm{d}t \\
%\omega_{z} \mathrm{d}t
%\end{matrix}
%\label{eq:theta_increment} 
%\end{equation}
%\end{center}
%
%\begin{center}
%\begin{equation}
%DCM_{k} = \begin{bmatrix}
%1 & -\mathrm{d}\theta_{z} & \mathrm{d}\theta_{y} \\
%\mathrm{d}\theta_{z} & 1 & -\mathrm{d}\theta_{x} \\
%-\mathrm{d}\theta_{y} & \mathrm{d}\theta_{x} & 1
%\end{bmatrix}
%\label{eq:DCM_increment} 
%\end{equation}
%\end{center}
%
%\begin{center}
%\begin{equation}
%DCM_{0} = \begin{bmatrix}
%1 & 0 & 0 \\
%0 & 1 & 0 \\
%0 & 0 & 1
%\end{bmatrix}
%\label{eq:DCM_initial} 
%\end{equation}
%\end{center}
%
%\parl Com o avançar das iterações, erros numéricos vão-se acumulando e a ortogonalidade do sistema de eixos começa a ficar comprometida. Por essa razão é necessário recorrer à renormalização da matriz de rotação. Esta operação pode ser realizada a cada iteração, assegurando assim a longevidade de resultados com uma contaminação por erros mais reduzida.
%
%\parl Sendo para uma dada iteração a matriz DCM definida por \ref{eq:gen_DCM}, os vetores X e Y podem ser designados respetivamente por \ref{eq:gen_X} e \ref{eq:gen_Y}.
%
%\begin{equation}
%DCM = \begin{bmatrix}
%r_{xx} & r_{xy} & r_{xz} \\ 
%r_{yx} & r_{yy} & r_{yz} \\ 
%r_{zx} & r_{zy} & r_{zz}
%\end{bmatrix}
%\label{eq:gen_DCM}
%\end{equation}
%
%\begin{equation}
%X =
%\begin{bmatrix}
%r_{xx} & r_{xy} & r_{xz}
%\end{bmatrix}
%\label{eq:gen_X}
%\end{equation}
%
%\begin{equation}
%X =
%\begin{bmatrix}
%r_{yx} & r_{yy} & r_{yz}
%\end{bmatrix}
%\label{eq:gen_Y}
%\end{equation}
%
%\parl Neste caso, se X e Y forem ortogonais, o seu produto interno terá o valor 0 como resultado. Pelo contrário, caso a ortogonalidade entre estes dois vetores esteja comprometida, o produto interno será diferente de 0, considerando esse valor como o erro \ref{eq:error_X_Y} \citep{dos_santos_implementation_2013}.
%
%\begin{equation}
%erro = X \cdot Y
%\label{eq:error_X_Y}
%\end{equation}
%
%\parl Calculado o erro entre os vetores X e Y, cabe agora a correção deste. Para isso, compensa-se o vetor com as equações \ref{eq:ortog_X} e \ref{eq:ortog_Y} \citep{dos_santos_implementation_2013}.
%
%\begin{equation}
%X_{ortogonal} = X - \frac{erro}{2} Y
%\label{eq:ortog_X}
%\end{equation}
%
%\begin{equation}
%Y_{ortogonal} = Y - \frac{erro}{2} X
%\label{eq:ortog_Y}
%\end{equation}
%
%\parl Com os vetores X e Y corrigidos, basta proceder ao produto externo destes vetores, e assim obtém-se a partir destes, o terceiro vetor corrigido, correspondente ao vetor Z \ref{eq:ortog_Z}.
%
%\begin{equation}
%Z_{ortogonal} = X_{ortogonal} \times Y_{ortogonal}
%\label{eq:ortog_Z}
%\end{equation}
%
%\parl Para finalizar a renormalização, é necessário que cada vetor X,Y e Z ou seja, cada linha da matriz de rotação possua magnitude de valor 1. Para tal, poder-se-ia apenas calcular o valor da magnitude de cada linha e dividir cada elemento da linha correspondente pelo valor da magnitude calculada, no entanto, existe uma forma mais eficiente de realizar esta tarefa. Considerando que os valores da norma de cada linha da matriz de rotação nunca se afastará muito de 1, é possível recorrer à expansão de Taylor para renormalizar cada uma das linhas. A aplicação da expansão de Taylor resulta em \ref{eq:renorm_taylor} \citep{dos_santos_implementation_2013}.
%
%
%
%
%\begin{equation}
%\begin{matrix}
%X_{normalizado} = \frac{1}{2}(3 - X_{ortogonal} \cdot X_{ortogonal}) X_{ortogonal} \\ \\
%
%Y_{normalizado} = \frac{1}{2}(3 - Y_{ortogonal} \cdot Y_{ortogonal}) Y_{ortogonal} \\ \\
%
%Z_{normalizado} = \frac{1}{2}(3 - Z_{ortogonal} \cdot Z_{ortogonal}) Z_{ortogonal}
%\end{matrix}
%\label{eq:renorm_taylor}
%\end{equation}
%
%\parl Com os procedimentos que até agora foram referidos, seria possível implementar um sistema de obtenção da posição angular. No entanto, esse sistema seria muito instável, pois como já foi falado, os próprios giroscópios apresentam erros de medição e através da integração dos seus valores por forma a obter os valores incrementais da posição angular, esse erro é acumulado a cada iteração, fazendo com que ao fim de algumas iterações, os resultados se situem fora do erro limite admissível.
%
%\parl O próximo passo deste algoritmo visa a corrigir o \textit{drift} que os giroscópios apresentam, com base em valores absolutos, recorrendo para tal a acelerómetros e por vezes a magnetómetros. Os acelerómetros fornecem dados com os quais é possível obter orientação segundo os ângulos $roll$ e $pitch$, no entanto, apenas é possível em situações praticamente estáticas, pois em movimentos acelerados, os acelerómetros medem também as componentes da mesma aceleração acrescidas do valor da aceleração gravítica. Os magnetómetros fornecem uma referência absoluta da orientação do Norte magnético, no entanto, em ambientes cujo campo magnético se encontra distorcido, é necessário proceder a calibrações complexas. No caso extremo em que o campo magnético seja distorcido e ainda variável, o recurso destes sensores torna-se inviável.
%
%\parl Para a correção da amplitude angular dos ângulos $roll$ e $pitch$, com recurso ao acelerómetro, em primeira instância, é necessário analisar se a magnitude do vetor composto pelos valores do acelerómetro corresponde ao valor esperado em situação estática do referencial. Em situação afirmativa, o vetor com os dados do acelerómetro deve ser normalizado, e com ele efetuar a correção diretamente no vetor correspondente ao eixo Z (o eixo que no referencial global se encontra alinhado com o vetor da aceleração gravítica), através do produto externo entre estes dois vetores \ref{eq:roll_pitch_correct} \citep{dos_santos_implementation_2013}.
%
%\begin{equation}
%\begin{bmatrix}
%r_{zx} \\ r_{zy} \\ r_{zz}
%\end{bmatrix} = 
%\begin{bmatrix}
%r_{zx} \\ r_{zy} \\ r_{zz}
%\end{bmatrix}
%\times 
%\begin{bmatrix}
%Acc_{x} \\ Acc_{y} \\ Acc_{z}
%\end{bmatrix}
%\label{eq:roll_pitch_correct}
%\end{equation}
%
%\parl Para terminar esta metodologia, é ainda possível recorrer à implementação de fatores de controlo do tipo PI. Estes fatores podem ser utilizados tanto no resultado proveniente dos giroscópios, assim como no resultado proveniente dos acelerómetros e magnetómetros, e destinam-se a melhorar a resposta ou a precisão dos sensores. Através da escolha acertada dos parâmetros deste simples controlador PI, que neste caso não é mais que a multiplicação de uma constante pelos valores pretendidos, pode-se vir a ter melhorias no comportamento do algoritmo. O valor destes parâmetros não é o mesmo para todas as aplicações. Dependendo dos sensores, das aplicações e inclusive das condições externas, estes valores podem variar, devendo de ser ajustados para cada situação específica.
%
%\subsection{\textit{Extended Kalman Filter}}
%
%\parl \textit{Extended Kalman FIlter} é baseado num conjunto de equações matemáticas, utilizado em ambientes discretos/iterativos, tendo como objetivo realizar um estimativa do valor de uma variável, tirando partido dos valores anteriormente obtidos. Por esta razão, diz-se que este Filtro de Kalman é um filtro preditivo.
%
%\parl Para que seja possível utilizar este tipo de metodologia, as variáveis, das quais se quer realizar a estimativa, devem apresentar um comportamento gaussiano.
%
%\parl Este filtro, o \textit{Extended Kalman Filter}, apresenta-se como uma evolução do \textit{Kalman Filter}, criado por R.E.Kalman, publicado em 1960, apresentando-se como uma solução recursiva para filtragem linear de dados considerados discretos. O que torna diferente o \textit{Extended Kalman Filter} em comparação do original, é a sua adaptação que permite a sua utilização em variáveis de comportamento não linear \citep{patkar_localization_2007}.
%
%\parl Para a implementação do \textit{Extended Kalman FIlter}, é necessário estabelecer um conjunto de parâmetros. Em primeiro lugar, é necessário criar o vetor $x$, o qual contém as variáveis de estado de todo o sistema, e com isso, estabelecer um conjunto de equações que descrevam o comportamento do mesmo sistema (equação \ref{eq:xk}). A variável $w$ representa o ruído de processo e a variável $u$ o \textit{input} de controlo do sistema \citep{patkar_localization_2007}.
%
%\begin{center}
%\begin{equation}
%x_{k} = f(x_{k-1},u_{k-1},w_{k-1})
%\label{eq:xk}
%\end{equation}
%\end{center}
%
%\parl De seguida, é necessário definir o vetor das variáveis de leitura $z$, assim como um conjunto de funções que relacionam o vetor das variáveis de estado com o vetor das variáveis de leitura (equação  \ref{eq:zk}). As funções $h$ estão definidas segundo o vetor de estado $x$ e o ruído de medição \citep{patkar_localization_2007}.
%
%\begin{center}
%\begin{equation}
%z_{k} = h(x_{k},v_{k})
%\label{eq:zk}
%\end{equation}
%\end{center}
%
%
%\parl De seguida, é necessário estabelecer algumas matrizes, para que assim seja necessário prosseguir com o processo de estimativa a cada iteração. Para tal, deve-se obter a matriz A, ou seja, a matriz jacobiana definida pelas derivadas das funções $f$ em ordem às variáveis do vetor de estado \ref{eq:A_matrix},
%
%\begin{center}
%\begin{equation}
%A_{[i,j]} = \dfrac{\partial f_{i}}{\partial x_{j}}(\hat{x}_{k-1},u_{k-1},0)
%\label{eq:A_matrix}
%\end{equation}
%\end{center}
%
%a matriz W, ou a matriz jacobiana definida pelas derivadas parciais das funções de $f$ em ordem às variáveis do ruído de processo \ref{eq:W_matrix},
%
%\begin{center}
%\begin{equation}
%W_{[i,j]} = \dfrac{\partial f_{i}}{\partial w_{j}}(\hat{x}_{k-1},u_{k-1},0)
%\label{eq:W_matrix}
%\end{equation}
%\end{center}
%
%a matriz H, ou a matriz jacobiana definida pelas derivadas parciais das funções representadas em $h$, em ordem às variáveis inseridas no vetor de estado \ref{eq:H_matrix},
%
%\begin{center}
%\begin{equation}
%H_{[i,j]} = \dfrac{\partial h_{i}}{\partial x_{j}}(\hat{x}_{k},0)
%\label{eq:H_matrix}
%\end{equation}
%\end{center}
%
%e a matriz V, ou a matriz jacobiana definida pelas derivadas parciais das funções representadas em $h$, em ordem às variáveis do ruído de medição \ref{eq:V_matrix} \citep{patkar_localization_2007}.
%
%\begin{center}
%\begin{equation}
%V_{[i,j]} = \dfrac{\partial h_{i}}{\partial v_{j}}(\hat{x}_{k},0)
%\label{eq:V_matrix}
%\end{equation}
%\end{center}
%
%
%\parl Com todos os elementos que foram descritos, é possível iniciar o processo de previsão iterativo. Para tal, basta inserir ao algoritmo uma estimativa inicial dos valores e seguir a ordem apresentada na figura \ref{fig:ekf_algorithm}, calculando no final de cada iteração o vetor $z_{k}$, possível de obter com o novo $x_{k}$ que o algoritmo devolve \citep{patkar_localization_2007}.
%
%\begin{figure}[H]
%\begin{center}
%\includegraphics[scale=0.8]{Imagens/ekf_algorithm.png}
%\caption{Esquema da implementação do algoritmo \textit{Extended Kalman Filter}\citep{patkar_localization_2007}.}
%\label{fig:ekf_algorithm}
%\end{center}
%\end{figure}
%
%\parl Esta é uma metodologia muito poderosa, no entanto, para que funcione, deve-se conhecer minimamente o comportamento do sistema, estabelecer bem as funções $f$ e $h$, e conhecer também as oscilações que o sistema pode ter. Sem isso, é impossível obter resultados satisfatórios a partir deste algoritmo.

\subsection{Algoritmos para Cálculo de Orientação}

\parl A utilização de acelerómetros e giroscópios como ferramenta de navegação, tem sido essencialmente realizada com auxílio de determinados algoritmos de processamento que recorrem aos dados dos sensores para obter os dados da orientação.

\parl De seguida, apresentam-se alguns dos algoritmos de processamento mais utilizados para o cálculo de orientação de um dado referencial, recorrendo aos dados de acelerómetros e giroscópios.

\subsubsection{Algoritmo baseado em \acl{DCM} - \acs{DCM}}

\parl \acl{DCM} é uma matriz que define a rotação de um dado objeto em relação a um referencial. O seu nome deve-se ao facto de todos os elementos desta matriz poderem ser representados através do cosseno dos ângulos entre o referencial global e um dado referencial qualquer.

\parl Numa aplicação do \acs{INS}, através da obtenção dos elementos desta matriz é possível calcular a orientação (\textit{roll}, \textit{pitch} e \textit{yaw}) de um dado referencial, em relação a um referencial global, através de um processo iterativo, no qual se vão acumulando os sucessivos incrementos angulares. \citep{william_premerlani_direction_2009}

\parl Na implementação de um algoritmo iterativo, para a obtenção dos campos da matriz de rotação indispensáveis ao cálculo das orientações, recorre-se a dados obtidos por giroscópios. Os dados deste tipo de sensor permitem, a cada iteração, obter a matriz \acs{DCM} do incremento de rotação sofrido pelo referencial do sensor. \citep{william_premerlani_direction_2009}

\parl Para este algoritmo apenas são indispensáveis os dados dos giroscópios, no entanto, estes sensores apenas fornecem incrementos de rotação, não fornecendo a orientação inicial em que o referencial se encontra. Além disso, os giroscópios apresentam erros de medição que se acumulam a cada iteração (\textit{drift}). Como solução deste problema, são incorporados os dados de acelerómetros que fornecem informação absoluta para as inclinações \textit{pitch} e \textit{roll} iniciais e como correção do \textit{drift} dos giroscópios, sendo apenas possível para a sua utilização para situações praticamente estáticas. \citep{william_premerlani_direction_2009}

\parl Nos casos em que é necessário o ângulo \textit{yaw}, pode-se recorrer a magnetómetros que através das medições do campo magnético terrestre, fornecem a informação absoluta necessária à compensação deste ângulo. No entanto, a utilização deste sensor, fica limitada a aplicações nas quais o campo magnético envolvente seja constante.

\subsubsection{\acl{EKF} - \acs{EKF}}

\parl \acl{EKF} é um algoritmo de filtragem que se apresenta como um estimador recursivo, isto é, que tira partido dos dados anteriormente obtidos, para calcular o valor estimado.
\parl Este, é uma adaptação do \textit{Kalman Filter}, criado pod \textit{R. E. Kalman} publicado em 1960. O que diferencia o \acl{EKF} do \textit{Kalman Filter} é a sua adaptação que permite a utilização para sistemas não lineares \citep{patkar_localization_2007}.

\parl Para a implementação do \acs{EKF} é necessário estabelecer um conjunto de parâmetros tais como o vetor das variáveis de estado do sistema, utilizadas na criação de equações que descrevem o comportamento do sistema, e definir também os valores para os ruídos de processo e medição. A utilização deste algoritmo implica que as variáveis de estado envolvidas apresentem ruído gaussiano \citep{patkar_localization_2007}.

%\parl \textit{Extended Kalman FIlter} é baseado num conjunto de equações matemáticas e utilizado em ambientes discretos/iterativos. O seu principal objetivo foca-se no cálculo da previsão do valor de uma variável, tirando partido dos valores anteriormente obtidos. Por esta razão, diz-se que o \textit{Filtro de Kalman} é um filtro preditivo.
%
%\parl Para que seja possível utilizar este tipo de metodologia, as variáveis, das quais se quer realizar a estimativa, devem apresentar ruido gaussiano.
%
%\parl Este filtro, apresenta-se como uma evolução do \textit{Kalman Filter}, criado por R. E. Kalman, publicado em 1960, apresentando-se como uma solução recursiva para filtragem linear de dados considerados discretos.
%
%\parl O que torna diferente o \textit{Extended Kalman Filter} em comparação do original, é a sua adaptação que permite a sua utilização em variáveis de comportamento não linear \citep{patkar_localization_2007}.

%\parl Para a implementação do \acs{EKF} é necessário estabelecer um conjunto de parâmetros. Em primeiro lugar, é necessário criar um vetor, com as variáveis de estado do sistema, e com isso estabelecer um conjunto composto por equações, que descrevam o comportamento do mesmo sistema. Para além disso, é necessário também definir os ruídos de processo e de medição, e também, definir o \textit{input}, que é dado ao sistema \citep{patkar_localization_2007}.

\begin{figure}[H]
\begin{center}
\begin{tikzpicture}[scale=0.6]
\matrix[nodes={draw, thick, fill=blue!20, align=center}, row sep=1cm,column sep=1cm]{
\node[rectangle, draw, thick, fill = white!100, row sep=0cm,column sep=0cm] at (-2.5,1.3) (init) {Estimativa \\ Inicial}; \\
\node[rectangle, draw, ultra thick, fill = white!100] (predicao) {
\begin{tabular}{ c }
Estimativa \\
\hline
1. Estimativa de estado.\\
\\
2. Estimativa do erro de covariância.\\
\end{tabular}}; &
\node[rectangle, draw, ultra thick, fill = white!100] (correcao) { \begin{tabular}{ c }
Correção \\
\hline
1. Cálculo do ganho de Kalman. \\
\\
2. Atualização da estimativa.\\
\\
3. Atualização da covariância. \\
\end{tabular}};\\
} ;
(1,-1.1) -- (1,-2.7);
\path [->, draw=black!100, ultra thick] (init.south) -- (-10.05,-0.55);
%\path [->, draw=black!100, ultra thick] (init.west) -- (predicao.west);
\draw[->, ultra thick] (predicao.north) to[bend left=65] (correcao.north);
\draw[->, ultra thick] (correcao.south) to[bend left=65] (predicao.south);
\end{tikzpicture}
\end{center}

\caption{Esquema de Funcionamento \acs{EKF}.}  \label{fig:ekf}
\end{figure}

\parl Na Figura \ref{fig:ekf} encontra-se um esquema resumido de como o \acs{EKF} funciona. Através de uma estimativa inicial o processo inicia-se com a estimativa das covariâncias do sistema. De seguida, segue-se a fase da correção, na qual são calculados os ganhos do algoritmo, sendo estes utilizados no cálculo do novo \textit{output}.

\parl O \acs{EKF} é uma metodologia que traz benefícios no campo da previsão. No entanto, se as equações que descrevem o comportamento do sistema e os parâmetros do ruído não estiverem bem definidos, este algoritmo perde a sua capacidade de realizar a previsão correta dos valores do \textit{output}.

\subsubsection{Filtro Complementar - \textit{Complementary Filter}}

\parl O \textit{Complementary Filter} é um algoritmo computacionalmente ágil que pretende combinar os aspetos positivos de dois sensores, de forma a obter resultados de maior precisão quando comparados com os resultados de cada sensor isolado.

\parl Para o cálculo da posição angular de um dado referencial, é comum recorrer à integração dos dados provenientes de giroscópios, no entanto, estes dados sofrem da acumulação de erros obtidos em cada medição, conhecido por \textit{drift}. Também para o cálculo da posição angular é comum utilizar os dados de acelerómetros (apenas para \textit{pitch} e \textit{roll}), tendo a vantagem destes cálculos representarem valores absolutos, sendo apenas possível de realizar para situações consideradas estáticas. Assim, é comum combinar os resultados destes dois sensores, através da soma dos seus resultados de forma ponderada, atribuindo maior ênfase aos resultados de um sensor para as situações em que este apresenta melhores resultados.

\parl Para a combinação destes dois sensores é comum seguir a metodologia apresentada na Figura \ref{fig:complementary_filter_example}. Após a recepção dos dados de cada sensor, segue-se o cálculo da posição angular de forma individual. De seguida segue-se a aplicação de uma filtragem, na qual a posição angular obtida pelos giroscópios é filtrada com um filtro passa-alto, e a posição angular obtida pelos acelerómetros é filtrada com um filtro passa-baixo. Esta filtragem dos sensores destina-se à ponderação dos valores obtidos pelos dois sensores distintos, os quais são somados, originando o \textit{output} final. De salientar que a ponderação da combinação dos dados dos sensores pode ser alterada até se encontrar os fatores de ponderação que permitem os melhores resultados para a aplicação em questão. No entanto, deve-se respeitar sempre o facto de que a soma das constantes de ponderação seja sempre igual a 1. \citep{kim_progress_2009}

%\parl Em \acp{IMU} que disponibilizem pelo menos acelerómetros e giroscópios, uma forma de calcular a orientação angular, de uma forma mais imune ao \textit{drift} (acumulação dos erros associados às medições ao longo do tempo) proveniente dos giroscópios, passa pela implementação de um filtro complementar. Este tipo de filtro consiste na combinação de dados de sensores de diferente tipo, cujo \textit{output} seja da mesma grandeza. Durante a combinação dos dados dos dois sensores, é costume a aplicação um filtro em cada sensor, sendo vulgarmente utilizados os filtros passa-alto para o giroscópio e passa-baixo para o acelerómetro \citep{kim_progress_2009}.

%\parl Este tipo de combinação sensorial através da associação de giroscópios e acelerómetros é utilizado no cálculo da posição angular de sistemas de coordenadas em relação a outro sistema. Nesta combinação, os dados de um giroscópio são utilizados para o cálculo do deslocamento angular, através da sua integração, conseguindo a posição angular pela soma dos sucessivos deslocamentos angulares calculados no decorrer do tempo

%\parl Um exemplo de aplicação da combinação  reside no cálculo da posição angular de um corpo através da utilização da combinação de giroscópios e acelerómetros.

%\parl Um dos exemplos de utilização desta metodologia passa precisamente por obter a posição angular de um corpo através da utilização da combinação de giroscópios e de acelerómetros. Como já foi referido anteriormente, o \textit{output} dos giroscópios é a velocidade angular cuja integração, por exemplo, possibilita uma estimativa da posição angular. Para combinar com os dados dos giroscópios, é possível recorrer aos dados dos acelerómetros. Este tipo de sensor tem como \textit{output} as acelerações sentidas num dado corpo, no entanto, esse resultado é um resultado vetorial. Dado este fato, para situações em que o corpo não apresente dinâmica acentuada, através da inclinação deste sensor face ao vetor da aceleração da gravidade, é possível obter a posição angular de dois dos três eixos no espaço.
%
%\parl Para a combinação destes dois sensores, é então necessário seguir a metodologia apresentada na figura \ref{fig:complementary_filter_example}. Aquando a receção dos dados de cada sensor, o passo seguinte passa pelo cálculo da posição angular de forma individual. De seguida, segue-se a aplicação de uma filtragem, na qual a posição angular obtida pelos giroscópios é filtrada com um filtro passa-alto, e a posição angular obtida pelos acelerómetros é filtrada com um filtro passa-baixo. Esta filtragem dos dos sensores, destina-se então a realizar a ponderação dos valores obtidos pelos dois sensores distintos, os quais de seguida se somam, originando o \textit{output} final. De salientar que a ponderação da combinação dos dados dos sensores pode ser alterada até se chegar a valores de ponderação que permitem os melhores resultados para a aplicação em questão, no entanto, deve-se respeitar sempre o fato de que a soma das constantes de ponderação seja sempre igual a 1.\citep{kim_progress_2009}


\begin{figure}[H]
\begin{center}
\includegraphics[scale=0.7]{Imagens/complementary_filter_example.png}
\caption[Exemplo implementação filtro complementar com giroscópios e acelerómetros.]{Exemplo implementação filtro complementar com giroscópios e acelerómetros.\citep{lozano_unmanned_2013}}
\label{fig:complementary_filter_example}
\end{center}
\end{figure}

\subsection{\acs{IMU} na Robótica humanóide}

\parl Com o aparecimento da tecnologia \acs{MEMS}, a utilização de sensores do tipo \acs{IMU} por parte da área da robótica humanóide tem apresentado um grande crescimento.

\parl Uma das formas de tirar partido da tecnologia \acs{IMU} passa pela sua implementação em aplicações destinadas à teleoperação de robôs. Em \citep{kim_walking_2009} procedeu-se à implementação de vários \acp{IMU} num fato, como o que se encontra presente na Figura \ref{fig:imu_suit}. Esta implementação teve como objetivo a deteção dos movimentos do utilizador, com o fato vestido, fazendo com que um robô humanóide realizasse um movimento equiparado, através de imitação. Como principal tarefa a imitar, os movimentos testados consistiram em movimentos de marcha. Nos resultados obtidos com esta implementação, a implementação de \acp{IMU} mostrou-se bem sucedida.


\begin{figure}[H]
\begin{center}
\includegraphics[width = 12cm, height = 10cm ]{Imagens/humanoid_imu_suit.png}
\caption[Demonstração do fato com implementação de sensores \acs{IMU}.]{Demonstração do fato com implementação de sensores \acs{IMU}.\citep{kim_walking_2009}}
\label{fig:imu_suit}
\end{center}
\end{figure}

\parl Outro exemplo de teleoperação foi realizado em \citep{nuno_ricardo_lemos_silva_sistema_2011}, no qual foram desenvolvidos \acsp{IMU}, constituidos por giroscópios e acelerómetros, os quais foram utilizados no braço de um operador, de forma a teleoperar através de imitação, um braço robótico antropomórfico com os dados provenientes dos sensores.


\parl Um outro tipo de implementação de \acp{IMU} pode ser encontrada no trabalho desenvolvido em \citep{hornung_humanoid_2010}, no qual se encontra incorporada uma unidade \acs{IMU} composta por um giroscópio de 2 \acs{GDL} e um acelerómetro de 3 \acs{GDL} no tronco do robô humanóide \textit{Nao} apresentado na Figura \ref{fig:nao_stairs}. Esta implementação destina-se ao cálculo das orientações \textit{pitch} e \textit{roll} do humanóide em relação ao referencial global, combinando-as com dados de um sensor laser e \textit{encoders} dos atuadores do robô, com o objetivo de calcular a sua posição e orientação durante a execução de tarefas como marcha e subida de escadas. A unidade inercial foi incorporada neste projeto pois revelou-se dotada de maior precisão, comparativamente aos resultados obtidos pela cinemática do robô, no cálculo da orientação do mesmo.

\begin{figure}[H]
\begin{center}
\includegraphics[scale=1.3]{Imagens/NAO_stairs.png}
\caption[Robô humanóide \textit{Nao}, o qual apresenta a implementação de um \acs{IMU}.]{Robô humanóide \textit{Nao}, o qual apresenta a implementação de um \acs{IMU}. \citep{hornung_humanoid_2010}}
\label{fig:nao_stairs}
\end{center}
\end{figure}

\parl Em \citep{baltes_use_2005} foram incorporados dois giroscópios no robô humanóide apresentado na Figura \ref{fig:tao_pie_pie}. Os dois giroscópios, posicionados sob a orientação dos planos sagital e lateral, foram utilizados na deteção de situações de queda durante testes de marcha. Com esta implementação, em todos os testes realizados, foram registados apenas 5\% de falsos positivos. Para além disso, os mesmos dois giroscópios forneceram dados de orientação da plataforma humanóide, trazendo melhorias na sua trajetória durante a marcha.

\begin{figure}[H]
\begin{center}
\includegraphics[scale=0.6]{Imagens/tao_pie_pie.png}
\caption[Robô humanóide \textit{Tao-Pie-Pie}, no qual foram implementados dois giroscópios.]{Robô humanóide \textit{Tao-Pie-Pie}, no qual foram implementados dois giroscópios \citep{baltes_use_2005}.}
\label{fig:tao_pie_pie}
\end{center}
\end{figure}

\parl O projeto desenvolvido em \citep{renner_instability_2006} representa mais um exemplo da utilização de giroscópios e acelerómetros dentro da robótica humanóide. No robô humanóide apresentado na Figura \ref{fig:jupp} foram incorporados um giroscópio e um acelerómetro. Estes dois sensores foram utilizados para calcular a velocidade do robô humanóide durante a tarefa de marcha, e para além disso, foram ainda utilizados para obter um indicador de instabilidade, sendo esse indicador utilizado num algoritmo de reação caso seja identificada um situação de instabilidade durante uma operação de marcha. Para além disso, paralelamente a esta metodologia foi desenvolvida uma nova forma de obter o mesmo indicador de instabilidade, mas neste caso através do \textit{zero moment point - ZMP} (apresentado em \citep{vukobratovic_dynamic_2008} por \textit{M. Vukobratovic}). Comparando os resultados,  o algoritmo que recorre aos dados dos sensores obteve melhores resultados.

\begin{figure}[H]
\begin{center}
\includegraphics[scale=0.7]{Imagens/jupp.png}
\caption[Robô humanóide \textit{Jupp}, no qual foram implementados um giroscópio e um acelerómetro.]{Robô humanóide \textit{Jupp}, no qual foram implementados um giroscópio e um acelerómetro.\citep{renner_instability_2006}}
\label{fig:jupp}
\end{center}
\end{figure} 

\parl Em \citep{wong_static_2008} foi instalado um acelerómetro no robô humanóide, apresentado na Figura \ref{fig:twnhr_iv}, com o objetivo de fornecer dados sobre a aceleração e a variação da aceleração. Estes dados são incorporados num controlador de lógica difusa utilizado no equilíbrio estático do robô humanóide perante alterações das condições externas (nomeadamente a alteração da orientação de uma plataforma, sobre a qual está colocado o robô humanóide). Neste projeto os intervenientes concluem que a utilização do acelerómetro para a tarefa de balanceamento do robô humanóide foi bem sucedida.

\begin{figure}[H]
\begin{center}
\includegraphics[scale=0.7]{Imagens/TWNHR.png}
\caption[Robô humanóide \textit{TWNHR-IV}, no qual foi implementado um acelerómetro.]{Robô humanóide \textit{TWNHR-IV}, no qual foi implementado um acelerómetro. \citep{wong_static_2008}}
\label{fig:twnhr_iv}
\end{center}
\end{figure} 

\parl Na Figura \ref{fig:astronauta} apresenta-se um robô humanóide utilizado no projeto \citep{carmona_online_2007}, no qual a utilização de um acelerómetro destina-se à deteção de distúrbios externos, de forma a reagir na presença destes com o objetivo deste robô permanecer em equilíbrio.

\begin{figure}[H]
\begin{center}
\includegraphics[scale=1.2]{Imagens/astronauta.png}
\caption[Robô humanóide, no qual foi implementado um acelerómetro.]{Robô humanóide, no qual foi implementado um acelerómetro \citep{carmona_online_2007}.}
\label{fig:astronauta}
\end{center}
\end{figure} 


\section{Estrutura da dissertação}\label{sec:estrutura_da_dissertacao}

\parl Nos capítulos seguintes apresentam-se todas as etapas que constituem este projeto. Desta forma, as etapas encontram-se organizadas da seguinte forma:

\begin{description}[noitemsep]
\item - Capítulo \ref{ch:caraterizacao_sensores} - \nameref{ch:caraterizacao_sensores} \\
neste capítulo é realizada uma descrição e avaliação dos sensores disponíveis através da realização de testes experimentais;
\item - Capítulo \ref{ch:rede_sensores_inerciais} - \nameref{ch:rede_sensores_inerciais} \\
neste capítulo é exposto o desenvolvimento e conceção da rede de sensores inerciais e referida a sua primeira incorporação no robô humanóide;
\item - Capítulo \ref{ch:experiencias_resultados} - \nameref{ch:experiencias_resultados} \\
neste capítulo são descritos os testes experimentais realizados com a rede de sensores inerciais incorporados no robô humanóide, bem como a exposição e discussão de resultados obtidos;
\item - Capítulo \ref{ch:conclusoes} - \nameref{ch:conclusoes} \\
neste capítulo é realizada a análise dos objetivos cumpridos e conclusões obtidas. Para além disso serão discriminados possíveis trabalhos futuros.
\end{description}