Um filtro Kalman é adequado para filtrar as posições dos pontos projetados, dados os ângulos de Euler do dispositivo de captura?

17

Meu sistema é o seguinte. Eu uso a câmera de um dispositivo móvel para rastrear um objeto. Nesse rastreamento, recebo quatro pontos 3D que projeto na tela, para obter quatro pontos 2D. Esses 8 valores são meio barulhentos, devido à detecção, então eu quero filtrá-los para tornar o movimento mais suave e realista. Como segunda medida, uso a saída do giroscópio do dispositivo, que fornece três ângulos de Euler (ou seja, a atitude do dispositivo). São mais precisos e com maior frequência (até 100 Hz) do que as posições 2D (cerca de 20 Hz).

Minha primeira tentativa foi com um filtro passa-baixo simples, mas o atraso era importante, então agora tento usar um filtro Kalman, esperando que seja capaz de suavizar as posições com pouco atraso. Como visto em uma pergunta anterior , um ponto-chave em um filtro Kalman é a relação entre as medições e as variáveis ​​de estado internas. Aqui, as medições são minhas 8 coordenadas de ponto 2D e os 3 ângulos de Euler, mas não tenho certeza sobre o que devo usar como variáveis ​​de estado interno e como devo conectar os ângulos de Euler aos pontos 2D. Portanto, a questão principal é que um filtro Kalman é adequado para esse problema? E se sim, como?

Stéphane Péchard
fonte
Se o objetivo principal é suavizar os valores com atraso mínimo, você pode tentar usar um filtro de fase mínima, se ainda não o tentou. Eu ficaria surpreso se a filtragem kalman puder lhe dar melhor do que 'atraso mínimo de fase'. Para filtros lineares, eu esperaria que um filtro de fase mínima ofereça o menor atraso possível.
niaren 26/09/11
@ niaren: Obrigado pelo comentário, vou estudar isso também.
Stéphane Péchard
1
Não está claro quais são suas medidas. Na estrutura do filtro Kalman, "medições" se referem às quantidades que você realmente observa. Se você estiver medindo quatro pontos 3D (por exemplo, mesclando várias imagens da câmera), essas são as suas medidas. Você também precisa decidir quais variáveis ​​de estado você está tentando estimar. Você está tentando rastrear os locais dos objetos 3D ao longo do tempo? Nesse caso, essas são suas variáveis ​​de estado. Pode ser apropriado que a representação 2D possa ser usada apenas para exibição e não incluída como parte do seu modelo. Detalhes adicionais ajudarão a sugerir uma abordagem.
Jason R
Como Jsaon diz, suas medidas não são claras. Você diz: From this tracking, I get four 3D points that I project on a mobile device screen, to get four 2D points. These 8 values are kinda noisye depois você diz What's available to me is the device's gyroscope output, which provides three Euler angles (i.e. the device attitude).. Qual é? Os quatro pontos 2D ou os três ângulos de Euler? Ou o trem de processamento segue ângulos de Euler -> pontos 3D -> pontos 2D?
Peter K.
Na verdade, tenho dois conjuntos de medidas: as posições dos pontos detectados da câmera e os ângulos de Euler, mas eles não são triviais para se relacionar. Além disso, estou interessado apenas nas posições filtradas como saída. Vou editar a pergunta para esclarecer.
Stéphane Péchard

Respostas:

4

Filtragem passa-baixo

Seria bom saber o que você quer dizer com "filtro passa-baixo simples".

Por exemplo, se suas medidas no tempo foremk

pk=[xkyk]

e suas estimativas filtradas com passe baixo são:

pkLPF=αpk1LPF+(1α)pk

você terá um atraso de grupo bastante grande no filtro de aproximadamente 1/(1α) (para alfa próximo de 1).

Modelando o Sinal: Abordagem Simplista

Para usar o filtro Kalman (ou qualquer outra abordagem semelhante), você precisa ter um modelo de como suas medidas são adquiridas e atualizadas.

Geralmente isso se parece com:

onde ε k é o processo (condução) de ruído, uma é a matriz de transição de estado, e B é a sua matriz de entrada.

pk+1TRUE=ApkTRUE+Bϵk
ϵkAB

E, em seguida, a sua medida são: p k = C p T R L E k + D ν k onde ν k é a saída (de medida) de ruído, C é a matriz de saída, e D é a sua matriz de ruído de medição.pk

pk=CpkTRUE+Dνk
νkCD

Aqui, o "estado" do modelo é escolhido como as posições verdadeiras, e as coisas que você mede são a saída.

Você pode então aplicar as equações do filtro de Kalman para isso para obter estimativas de estado da posição verdadeira.pkTRUE^

No entanto, essa abordagem é simplista porque não usa nenhum conhecimento de como os pontos podem se mover (nem usa seus quatro pontos e qualquer conhecimento que você possa ter sobre como eles se movem juntos).

Modelando o sinal: iniciando uma abordagem melhor

Esta página mostra como configurar o problema envolvendo as posições e ângulos de euler. Está fazendo algo diferente do que você precisa, mas o estado é:

pkTRUE=[xk yk zk x˙k y˙k z˙k x¨k y¨k z¨k ϕ ψ θ ϕ˙ ψ˙ θ˙ ϕ¨ ψ¨ θ¨ ]T

e as medições (saída) são

pk=[xk yk zk ϕ ψ θ ]T

Todo o modelo dessa página está realmente dizendo: (mas para cada um dosx,y,ez).

xkTRUE=n=0kx˙nTRUEnΔt+12n=0kx¨nTRUE(nΔt)2
x,y,z

Esta é apenas a clássica "equações de movimento". Veja a equação (3) aqui.

Peter K.
fonte
pk=αpk-1+(α-1)pk
Stéphane Péchard
@ StéphanePéchard: Opa! Sim, eu senti falta de que você normalmente queira um ganho unitário em corrente contínua. Mesmo assim, o atraso do grupo ainda será muito grande paraαperto de um, que provavelmente é o que não foi satisfatório com essa abordagem.
Peter K.
Eu tento aplicar o artigo ao qual você me vinculou. Quando uma matriz At contém valores de tempo derivativos como
Δt;12(Δ2)
, preciso calculá-los eu mesmo sempre que atualizar as medições de Kalman?
Stéphane Péchard
@ StéphanePéchard: Estes não são "valores de tempo derivativos". oΔt é apenas 1/fs, o tempo entre instantes da amostra.
Peter K.
1
Você precisa saber qual é a sua taxa de amostragem (fs) é e, em seguida, o Δt will just be the inverse of that. Unless your sampling rate changes you only need to "compute" Δt nd 12Δt2 once as they are constant (provided the sampling rate is constant).
Peter K.
0

Your low pass filter may be like;

pk=αpk1+(1α)zk

where zk is kth observed data. pk is kth estimated value.

The LPF can be deformed to next:

pk=pk1+K(zkpk1)
where K=(1α).

This is quite similar to Kalman filter. In Kalman filter, K is Kalman gain and generally variable.

fumio ueda
fonte