Introdução à Fusão de Sensores - Parte 1

Fusão de Sensores
Este post faz parte da série Fusão de sensores. Leia também os outros posts da série:
  • Introdução à Fusão de Sensores - Parte 1

Olá caro leitor! Seguindo a linha de desmistificação de algumas áreas do conhecimento relacionadas a sistemas embarcados, hoje vamos falar sobre o conceito de fusão de sensores. Este artigo será dividido em duas partes. Por agora falaremos do conceito por trás de se realizar a fusão de sensores, por que deve-se considerar seu uso. E no artigo seguinte, vamos apresentar uma aplicação com o uso da fusão de sensores, comparando o antes e o depois para que você leitor possa utilizar como referência em seus projetos. Assim, antes de tudo, vamos ao problema.

 

 

Exemplo de problema onde a fusão de sensores pode ajudar

 

Mostrar o problema e correlacionar com um conceito novo sempre ajuda a entender o porque adicionar um novo conhecimento à "mala de ferramentas" do desenvolvedor. Com a fusão de sensores não seria diferente, vamos então entrar no seguinte cenário, imagine caro leitor que você possui em bancada: 

  • Um hardware com conjunto de sensores inerciais (acelerômetro, giroscópio e magnetômetro);
  • Esse hardware realiza a aquisição através desses sensores, pré-processa e envia a um host responsável por realizar uma ação baseada nesses resultados;
  • O host precisa que tais dados venham com unidades conhecidas e já corretamente escaladas (por exemplo, velocidade em m/s);
  • O hardware contém um processador conectado a esses sensores para realizar esse pré-processamento.

 

Agora que já temos o nosso dispositivo ali fazendo aquisições e enviando periodicamente para uma aplicação host, tudo parece funcionar, não é? Ele lê o acelerômetro e a partir dele determina a velocidade integrando de forma discreta as amostras de aceleração e obtendo a posição corrente integrando a velocidade previamente obtida. Num mundo ideal, se fossemos realizar um processo de mudança de posição, os dados vindos do acelerômetro seriam suficientes para determinar tal cálculo.

 

Porém no mundo real ao consultar a posição calculada ela não bate com o valor estimado com o do acelerômetro, e pior, se retornarmos nosso dispositivo à posição inicial, veremos que não somente a medida não correspondera à realidade, como o erro em relação ao valor correto vai aumentar e aumentar à medida que movemos o dispositivo. Por que isso acontece? Para começar vamos observar a figura extraída de [3] e imaginar que nosso hardware consista no uso do conhecido sensor inercial Bosch BMI160.

 

Parâmetros do sensor inercial BMI160
Figura 1: Parâmetros do sensor inercial BMI160

  

O parâmetro sensivity relaciona a escala do sinal em bits por g, onde g está relacionado à aceleração da gravidade. Então se eu deixar o dispositivo parado em repouso ele vai reportar um valor em bits que corresponde à aceleração e não vai mudar até que ele sofra alguma forca exterior, correto?

 

Errado! Vejam que depois do parâmetro de sensibilidade existem vários outros que apontam em variações do valor reportado na saída do sensor que mesmo que ele esteja em repouso vão provocar mudanças no valor final lido. O Problema e que esse valor lido entrará como dado válido nos cálculos, e entre fatores de escala e multiplicações irão causar diversos erros de medida. A esses erros podemos nos referir como incerteza de medida.

 

Ou seja, por melhor que o sensor possa ter sido construído, ele sempre vai ter uma ou várias fontes de erro de medida. A esses erros combinados chamamos de erro de processo. O quanto esse erro pode influir na medida real, damos a ele o qualificador de grau de incerteza da medida. A partir desses parâmetros vamos adicionar alguma matemática (nada pesado, apenas para fins formais), podemos relacionar o grau de certeza da medida para com o valor esperado e  o valor reportado por um sensor (ou infraestrutura de aquisição) como sendo:

 

eq(1): grau de incerteza

 

A pequena função p é chamada de função de densidade de probabilidade ou comicamente abreviada por FDP. Essa em especifico nos diz que se trata da probabilidade de um dado valor xt (medida esperada) recair sobre um intervalo de valores zt (valor reportado pelo sensor), ou seja, quanto maior a probabilidade, menor será o grau de incerteza da medida reportada pela infraestrutura de sensoriamento.

 

No caso da leitura de um sensor, essa probabilidade tende a ser grande, mas não a ponto de garantir que a medida por si apenas seja confiável. O que leva o nosso dispositivo hipotético apresentar alguns problemas durante seu funcionamento: 

  • Informações obtidas do sensor não são confiáveis e possuem erro mesmo em estado estacionário;
  • Informações estimadas a partir dos dados dos sensores não são confiáveis, possuem erro de natureza cumulativa;
  • Informações do sensor e estimadas variam em estado estacionário ocasionando problemas de drift (offset progressivo) em demais informações derivadas.

 

Graficamente, o que acontece em um sensor mesmo que parado pode ser observado no gráfico abaixo extraído da simulação em MATLAB descrito em [1]. Vejam o quanto o valor medido se desloca à medida que o tempo avança:

 

Simulação do cálculo de posição em modo estacionário
Figura 2: Simulação do cálculo de posição em modo estacionário

 

Vejam que o exemplo nesse artigo toma o caso de uso como sendo sensores inerciais, mas na prática todo e qualquer sensor possui o mesmo problema, porém com a grandeza relativa à sua medida. Para minimizar ou eliminar esses erros e aumentar a confiança na medida obtida, eis que surge o conceito de fusão de sensores, que veremos a seguir.

 

 

Fusão de sensores? Literalmente?

 

Soa estranho não é mesmo? Mas o conceito de fusão de sensores parte do princípio que cada sensor possui suas vantagens e desvantagens, e que podem através de diferentes fatores de escala apresentar a mesma medida com suas fontes particulares de erros. A fusão de sensores então literalmente obtém os dados de mais de um tipo de sensores, aplica um modelo (um conjunto de fatores de escala e estimação dos próximos estados e métodos de correção em tempo de execução) e extrai em sua saída: 

  • Informações medidas diretamente dos sensores corrida e limpas;
  • Informações calculadas a partir dos sensores corridas e melhor estimadas.

 

E realmente o processo de obter o melhor dos mundos de cada sensor de combiná-los em um único conjunto de medidas fazendo com que a FDP anteriormente exibida na equação 1 reporte um grau de confiabilidade mais elevado.

 

Análogo ao critério de fusão de sensores, podemos ilustrar esse processo baseado no seguinte caso, considere que queremos que o grau de confiabilidade de uma pessoa P morar no estado de São Paulo E seja tão elevado quanto possível, assim:

 

eq(1.1) : grau de certeza aplicado em um cenário

 

Podemos ter como fonte inicial de dados, que a pessoa pode morar em São Paulo. Baseado em sua nacionalidade, se brasileira, existe uma probabilidade disso ser verdade, porém brasileiros moram no mundo todo, então somente a nacionalidade e naturalidade não garante o grau de confiabilidade elevado. Agora, se obtivermos seu número de celular corrente, saberemos que pelo DDD ela deve morar no Brasil, com isso a probabilidade de ser de São Paulo aumenta, assim como o grau de confiabilidade, porém sabemos que um celular com DDD 11 funciona em todos os estados brasileiros com diferentes DDD, então não podemos garantir que essa pessoa reside em São Paulo.

 

Vamos então obter o endereço de um documento, conta de água, certamente essa pessoa mora ou deve morar em São Paulo, certo? Porém a casa pode estar alugada, nosso grau de confiabilidade chega perto mas ainda não dá certeza absoluta. Então vamos adicionar mais documentos, cartão de crédito, conta de luz, e multas de veículo, percebam que são três canais de medidas similares (como nosso acelerômetro + giroscópio) fornecem a mesma informação, mas se uma pessoa paga água, recebe fatura de cartão de crédito e multa de veículos (que precisa ser transferida pra cidade de residência).

 

Nesse cenário a possibilidade da pessoa P residir no estado de São Paulo é próxima da certeza absoluta e somente em algum caso muito especifico (corner cases) a informação será falsa, e se for, a distância da informação esperada será pequena. No exemplo, P pode morar em São Paulo mas estar viajando ou fora do Estado a trabalho.

 

O conceito da fusão de sensores é obter tantas informações quanto possível do ambiente que o objeto reside e combinar essas informações para que a certeza da medida a ser tomada tenda a ser absolutamente verdadeira. Para isso vários canais de sensores e comumente de diferentes natureza são combinados nos mais diversos modelos matemáticos, e suas saídas correspondem a medidas corrigidas e com um grau de assertividade alto e seguro para uso de uma aplicação de aquisição e processamento de dados.

 

 

Demais! Como funciona a fusão de sensores?

 

Em ambiente de sistemas embarcados a fusão de sensores funciona com um módulo implementado de acordo com a aplicação, mas que possui um núcleo comum que se  baseia em corrigir e estimar uma medida com base no conhecimento de seu modelo matemático de comportamento em específico. Por exemplo, corrige-se fontes de erros especificas do acelerômetro, e fontes específicas de erro do giroscópio. Em seguida uma operação de fusão (específica) combina os resultados com o que literalmente pode ser chamado de "o melhor de cada mundo".

 

Se em ambos os casos o grau de confiança desejado deve ser o ângulo de inclinação estimado em relação ao medido por uma fonte extra (sensor), podemos então calcular ambos a partir dos sensores, aplica-se então as correções especificas de cada fonte, em seguida, funde-se as medidas. No caso exemplificado, uma soma simples e devidamente escalada funde os resultados corrigidos. O processo aqui descrito retrata uma das fusões de sensores mais simples conhecida por filtragem complementar. Vejam a figura abaixo, que ilustra o processo descrito: 

 

Fusão de sensores por filtragem complementar
Figura 3: Fusão de sensores por filtragem complementar

 

O simpático exemplo da figura acima resolve um problema comum que trata-se da obtenção dos ângulos dos sistemas de coordenadas locais praticamente livre de erros. Com isso o ângulo atual juntamente com a velocidade angular podem alimentar uma matriz de rotação para um sistema de coordenadas global (referenciado à Terra) e criar um sistema estável de orientação espacial. Sem o mecanismo acima os erros gerados pela integração dos dados do giroscópio e cálculo de inclinação por tangente inversa, entrariam nos cálculos subsequentes causando erros perigosos para o sistema de navegação utilizador dessa fonte de dados.

 

O sistema de fusão simples ilustra bem o que queremos explicar, porém em estruturas de navegação mais complexas (e com maior capacidade de processamento) a arquitetura complementar acaba sendo limitada quando conhece-se pouco o modelo matemático do sensor a ser adquirido. Para isso, mais do que apenas corrigir as medidas (ou estados) dos sistemas, o modelo precisa se adaptar constantemente até que todas as fontes de erros existentes no canal específico sejam eliminadas. Então nada melhor que um...

 

 

...filtro Kalman, um filtro adaptativo para fusão de sensores

 

Explicar toda a matemática e derivação desse simpático filtro está fora (pelo menos por enquanto) do escopo desse artigo, porém esse tipo de filtro precisa ser mencionado, pois faz-se presente na grande maioria das arquiteturas da fusão de sensores. O uso de um filtro Kalman muda um pouco o framework de fusão de sensores que apresentamos, vejam só:

 

Fusão de sensores com filtro Kalman
Figura 4: Fusão de sensores com filtro Kalman

 

Você deve estar se perguntando, onde foi parar o bloco de soma mostrado no primeiro exemplo de fusão de sensores. Na verdade ele está implícito no próprio filtro de Kalman. Em poucas palavras, o filtro de Kalman vai: 

  • Obter uma estimativa do próximo estado do sistema (entenda estado como uma das variáveis de interesse);
  • Obter o mesmo estado através do sensor;
  • Utilizado o estado previsto e o medido, ele vai aplicar o chamado ganho de Kalman (uma matriz constantemente atualizada baseado no conhecimento do modelo que o filtro obtém) a essas variáveis;
  • O estado corrigido estará presente na saída do sistema;
  • O estado corrigido e o novo estado ideal entrarão no Preditor, a a estimação do próximo estado será atualizada bem como o filtro de Kalman;
  • Uma nova amostra será obtida do sensor e o ciclo recomeça.

 

Sim, em materiais acadêmicos tem tanta matemática envolvida que esquecemos de entender como essa ferramenta realmente funciona. Percebam que a fusão ocorre quando aplicamos o chamado passo de correção com o estado estimado e o estado medido. Com isso obtemos o estado corrigido em que sua FDP em relação ao estado real do sistema resultará em um grau de incerteza extremante baixo e pouco variável. Essa arquitetura de fusão á largamente empregada em sistemas de navegação, pois o filtro de Kalman por si só á preparado para lidar com múltiplos estados. 

 

Vamos dar uma olhada no que o filtro Kalman faz graficamente:

 

Fluxo de dados no filtro Kalman
Figura 5: Fluxo de dados no filtro Kalman

 

Entendam os vetores xk e pk como sendo o modelo a ser estimado, o sufixo denota que o sistema encontra-se discretizado (amostras separadas por intervalos de tempo iguais e conhecidos), ou seja, possuímos xk-1 pk-1 que denotam o último estado corrigido do sistema. Essas variáveis são devolvidas a uma das entradas do filtro, e passam pelo seu primeiro passo de execução, a predição que vai estimar através de estados passados (Regra de Bayes) qual pode ser uma possibilidade de estado futuro.

 

Esses valores intermediários então alimentam o segundo bloco, que contém dentre o estado atual estimado a variável zk que carrega o estado estimado pela medida do sensor. Juntamente com as demais variáveis temos na saída o novo estado corrigido juntamente com o modelo atual corrigido Pk, ou seja, o filtro Kalman procura conhecimentos no estado futuro, e memoriza uma porção do estado anterior para ajudar no cálculo do estado atual, fantástico não? A sua complexidade de implementação varia de acordo com o modelo e o número de variáveis a serem exploradas, porém existem diversas implementações abertas e para fusões simples pode-se recorrer à filtragem complementar apresentada anteriormente.

 

 

Existem outras arquiteturas?

 

Sim, existem, a fusão de sensores que detalhamos aqui, pertence à classe da fusão chamada complementar (já implícita no nosso primeiro exemplo), ou seja, sua função é obter uma visão completa de um determinado estado combinando às medidas de sensores que não estão diretamente relacionados, mas que podem prover o mesmo tipo de dado (giroscópio e acelerômetro). Mas além disso podemos citar rapidamente outras duas formas de fundir dados de sensores baseado no requerimento do projeto: 

  • Competitivo, esse tipo de fusão é aplicada quando o requerimento passa a ser robustez e precisão, típico de sistemas de suporte à vida. Nesse caso o que existe são os mesmos sensores (mesmo tipo de dado) porém em quantidades respetivas seguido de um bloco avaliador de grau de incerteza. A fusão aqui ocorre ponderando a soma das correções aonde o maior peso vai sempre pro sensor com o menor grau de incerteza naquele instante de tempo;
  • Cooperativo, o mais legal desse tipo de fusão está no fato que de o estado desejado do sistema a ser obtido não tem relação direta com o que está sendo medido, ou seja, ele precisa de uma rede de sensores, e somente com o resultado da leitura de vários sensores será possível obter o dado relevante. A fusão cooperativa trata individualmente as medidas e a remoção de erros dos sensores para somente então avaliar qual "pedaço" do dado de interesse aquela dada medida corresponde.

 

Assim os tópicos aqui apresentados são graficamente visualizados na figura abaixo:

 

Métodos de fusão de sensores
Figura 6: Métodos de fusão de sensores

 

 

Conclusão

 

O objetivo desse artigo era popular a mente do leitor com uma visão simplista da fusão de sensores e o porquê de sua importância, acredito que com esse material o leitor poderá criar coragem e explorar textos mais acadêmicos contendo a abordagem analítica de uma determinada forma de fundir dados.

 

Mas o objetivo aqui é trazer a pratica, a parte que ninguém mostra. No próximo artigo vamos fazer nossa primeira aplicação de fusão de sensores utilizando uma IMU (Inertial Measurement Unit) explorando a técnica de filtragem complementar que servirá de preparo para o terceiro artigo para fundir sensores utilizando a abordagem do filtro Kalman, por isso fique ligado leitor! Deixe seu comentário abaixo do que gostaria de ver relacionado à fusão de sensores, vamos discutir, ate à próxima. 

 

 

Referências

 

[1] - NXP Sensor Fusion user guide

[2] - Sensor Data Fusion using Kalman Filters - Antiono Moran

[3] - Bosch BMI160 Inertial Measurement Unit datasheet

[4] - Sensor Fusion for Automotive Applications - Chrstian Lundquist

Este post faz da série Fusão de sensores. Leia também os outros posts da série:
  • Introdução à Fusão de Sensores - Parte 1
NEWSLETTER

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Obrigado! Sua inscrição foi um sucesso.

Ops, algo deu errado. Por favor tente novamente.

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Felipe Neves
Desenvolvedor de sistemas embarcados apaixonado pelo que faz, divide seu tempo entre trabalhar no Venturus desenvolvendo firmware de tudo quanto é coisa, na Aeolus Robotics se envolvendo com o que há de mais legal em robótica e na Overlay Tech desenvolvendo algumas coisas bem legais para o campo de motion control. Possui mestrado em engenharia elétrica pela Poli-USP e possui interesse em tópicos como: Software embarcado, sistemas de tempo real, controle, robótica móvel e manipuladores, Linux embedded e quase qualquer coisa por onde passe um elétron.

3
Deixe um comentário

avatar
 
3 Comment threads
0 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
3 Comment authors
Iago LimaCaio Vinícius MaiaMarcelo Campos Silva Recent comment authors
  Notificações  
recentes antigos mais votados
Notificar
Iago Lima
Visitante
Iago Lima

Cuida Felipe que já tá na hora de lançar esses outros artigos

Caio Vinícius Maia
Visitante
Caio Vinícius Maia

Gostei muito do artigo, estou trabalhando em um projeto onde desejo utilizar fusão de sensores e este artigo me deu alguns subsídios para entender melhor a técnica e a teoria por traz desta. Parabéns e obrigado.

Marcelo Campos Silva
Visitante
Marcelo Campos Silva

Excelente introdução!

Você poderia falar mais do uso de outras ferramentas opensouces, fáceis de usar como o Python.

Inclusive, nesta busca por mais informações, achei um excelente trabalho feito por um colega dos EUA, onde ele publica um livro online e open source renderizado em Python. Saliento que o livro é free e pode ser baixado em PDF. Em tempo, ele propõe exemplos a serem simulados (tal qual seria em Matlab), porém dentro do livro mesmo em sua página do livro.

Segue o link:

https://github.com/rlabbe/Kalman-and-Bayesian-Filters-in-Python