collapse

* Posts Recentes

Amplificador - Rockboard HA 1 In-Ear por almamater
[27 de Março de 2024, 19:13]


O que é isto ? por KammutierSpule
[26 de Março de 2024, 19:35]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Emulador NES em ESP32 por dropes
[13 de Março de 2024, 21:19]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]


Meu novo robô por josecarlos
[06 de Janeiro de 2024, 16:46]


Laser Engraver - Alguém tem? por almamater
[16 de Dezembro de 2023, 14:23]

Autor Tópico: opencv - Optical flow e estimação de velocidade linear 2D  (Lida 9290 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline nvoltex

  • Mini Robot
  • *
  • Mensagens: 211
Alguém tem experiência com opencv?

Estou a tentar criar um programa que me estime a velocidade linear de uma câmera em relação ao solo.
A câmera vai estar a apontar para o chão e vai ter um imu com altímetro, pelo que consigo saber a pose da câmera e a distância ao solo.

Como nunca usei opencv não estou familiarizado com os métodos disponíveis. Contudo já vi que posso usar "GoodFeaturesToTrack" para detectar pontes de interesse nas imagens, embora não saiba se para a minha aplicação será a melhor abordagem.
Para a computação do optical flow também existe a função "CalcOpticalFlowPyrLK" que implementa o método Lucas-Kanade.

Agora estava a procura de alguns exemplos/sugestões de optical flow com estimação de velocidade em 2D ou qualquer ajuda que me ponha no caminho certo.

StarRider

  • Visitante
Re: opencv - Optical flow e estimação de velocidade linear 2D
« Responder #1 em: 02 de Junho de 2015, 21:09 »
Alguém tem experiência com opencv?

Estou a tentar criar um programa que me estime a velocidade linear de uma câmera em relação ao solo.
A câmera vai estar a apontar para o chão e vai ter um imu com altímetro, pelo que consigo saber a pose da câmera e a distância ao solo.

Como nunca usei opencv não estou familiarizado com os métodos disponíveis. Contudo já vi que posso usar "GoodFeaturesToTrack" para detectar pontes de interesse nas imagens, embora não saiba se para a minha aplicação será a melhor abordagem.
Para a computação do optical flow também existe a função "CalcOpticalFlowPyrLK" que implementa o método Lucas-Kanade.

Agora estava a procura de alguns exemplos/sugestões de optical flow com estimação de velocidade em 2D ou qualquer ajuda que me ponha no caminho certo.

Boas,

Tenho usado mais o método Horn & Schunck ou mesmo a força bruta de outros
métodos point-wise para cálculos de  time-to-contact e ventral optic flow, o
Lucas-Kanade é somente útil para câmaras de baixa qualidade e com muito ruído
térmico ou com ópticas que possam introduzir alguma distorção esférica. Outra
vantagem é que em termos computacionais requer menos recursos.

Hoje em dia é usada a CVision (computer vision) na maioria das sondas junto com
sensores biomorficos para calcular a Vision based Landing (não sei a tradução para
PT).

Não te posso dar o código pois está protegido por um NDA. mas dá uma vista de olhos
neste paper:
http://www.esa.int/gsp/ACT/doc/ARI/ARI%20Study%20Report/ACT-RPT-BIO-ARI-08-6303-Neuromorphic-Computation-Optic-Flow-Zurich.pdf

Em relação à lib OpenCV, penso que o que procuras é mesmo calcOpticalFlowPyrLK().
Já fizeste alguns testes  ?

Abraços,
PA

 

« Última modificação: 02 de Junho de 2015, 21:10 por StarRider »

Offline elfo106

  • Mini Robot
  • *
  • Mensagens: 120
Re: opencv - Optical flow e estimação de velocidade linear 2D
« Responder #2 em: 02 de Junho de 2015, 22:25 »
Boas,

Já não uso há algum tempo por isso se me perguntares nomes de funções dificilmente vou saber sem consultar a biblioteca.

Quando dizes:
"Estou a tentar criar um programa que me estime a velocidade linear de uma câmera em relação ao solo.
A câmera vai estar a apontar para o chão e vai ter um imu com altímetro, pelo que consigo saber a pose da câmera e a distância ao solo."

Tens uma camera que se vai mover. Na camera vais colocar uma IMU + altimetro.  E queres estimar a velocidade da camera em relaçao ao solo usando OpenCV. Percebi bem? É apenas uma camera ou tens mais? Porque não usas apenas o IMU + altimetro para estimar a velocidade, é apenas por uma questão de exatidão?


Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: opencv - Optical flow e estimação de velocidade linear 2D
« Responder #3 em: 02 de Junho de 2015, 22:48 »
Para ter velocidade a partir do acelerómetro tens de integrar a aceleração(muito simples), só que o erro é cumulativo e sem um referencial externo o erro vai sempre aumentar.
Avr fanboy

Offline elfo106

  • Mini Robot
  • *
  • Mensagens: 120
Re: opencv - Optical flow e estimação de velocidade linear 2D
« Responder #4 em: 03 de Junho de 2015, 00:04 »
Correctíssimo. Eu usava features visuais conhecidos e encoders para ir reduzindo o erro acumulado.

Não tenho qualquer experiência a usar o motion flow por isso não sei qual a exatidão das medidas que daí provêem. Não se deveria considerar também a hipotese de utilizar stereo? Se houver uma 2ª camera disponivel e uma baseline decente claro.

Offline nvoltex

  • Mini Robot
  • *
  • Mensagens: 211
Re: opencv - Optical flow e estimação de velocidade linear 2D
« Responder #5 em: 03 de Junho de 2015, 00:15 »
O sistema não é apenas o IMU + camera, contudo depois de alguns testes com o IMU apercebi-me que ia precisar de outras fontes de informação relativas à velocidade para poder lidar com os grandes erros que estava a obter. Dito isto, esta é a única camera do sistema e não vai ser possível adicionar outra.

Já fiz alguns testes, usando as funções que referi mas ainda tenho algumas dúvidas em relação a como proceder. Visto que as features vão estar sempre a mudar, uma vez que a camera não vai estar sempre sobre o mesmo local, não posso fazer apenas uma inicialização do vector de features com o "goodFeaturesToTrack".

Além disso, ainda não sei como sei bem como passar das coordenadas da camera para o mundo usando opencv e a altura obtida do IMU.

Edit:
Devo admitir que também não sei com que exactidão é possivel obter a estimativa de velocidade usando optical flow.
« Última modificação: 03 de Junho de 2015, 00:20 por nvoltex »

Offline KammutierSpule

  • Mini Robot
  • *
  • Mensagens: 1.481
Re: opencv - Optical flow e estimação de velocidade linear 2D
« Responder #6 em: 03 de Junho de 2015, 09:07 »
Penso que nao é adequado usar features. Se vais estar a mover perpendicular ao plano, a imagem vai estar muito "blurada".
Penso que devias investigar como os "ratos" fazem tracking aos pontos.
Penso que é baseado (e o openCV deve ter algo do genero) em vectores (? de gradientes?) (penso que é isso o optical flow..) e assim consegues ter uma deslocacao relativa XY.
Anyway... o que quer que seja que obtenhas por imagem, vai ser sempre relativo... talvez possa ser usado para aceleracao.
Nao deve ser nada que ainda nao esteja inventado, é so descobrir os papers que estudam o assunto :)

Offline nvoltex

  • Mini Robot
  • *
  • Mensagens: 211
Re: opencv - Optical flow e estimação de velocidade linear 2D
« Responder #7 em: 03 de Junho de 2015, 09:59 »
Também tinha receio que uso de features podia não ser a melhor, daí andar à procura de algumas implementações simples para perceber como é que fazem e que funções do openCV têm as funcionalidades que necessito. Contudo tenho de ter em atenção que aquilo vai estar a correr num Odroid X2 com varias outras coisas em paralelo (entre as quais mais ComputerVision) pelo que também necessito de uma forma eficiente de o fazer.

Existem vários papers sobre o uso de optical flow em vez de odometria visual para a obtenção da egomotion do veículo onde está a camera. Eu de momento queria alguns exemplos para perceber o que é útil para este caso (dentro do openCV).

Entretanto ando a fazer uns testes para me familiarizar com a biblioteca.

Offline KammutierSpule

  • Mini Robot
  • *
  • Mensagens: 1.481
Re: opencv - Optical flow e estimação de velocidade linear 2D
« Responder #8 em: 03 de Junho de 2015, 10:11 »
Contudo tenho de ter em atenção que aquilo vai estar a correr num Odroid X2 com varias outras coisas em paralelo

Suponho que nao seja preciso mt resolucao.
Podes mesmo obter uma imagem alta resolucao, mas depois fazes resize para uma pequena que te de essa informacao.
Por exemplo os ratos opticos, a resolucao é ~16x16 .. ~32x32 pixeis. (é necessario ter um framerate elevado)

StarRider

  • Visitante
Re: opencv - Optical flow e estimação de velocidade linear 2D
« Responder #9 em: 03 de Junho de 2015, 10:22 »
Boas,

Encoders ... não estou a ver como.

O que o nvoltex pretende é saber a velocidade linear, logo necessita saber o
momento linear, logo necessita saber o deslocamento num intervalo de tempo.

Um IMU mede a velocidade angular e a aceleração, o que nos dá o movimento
linear a angular, porem para obter a velocidade linear é necessário integrar o
tempo e assumir uma aceleração constante e ter em conta que:
- É necessário uma boa calibração
- Existe um erro acumulativo
- É necessário um grande grau de exactidão na orientação do sensor de forma
a ser possível separar as medições de gravidade das medições de aceleração.

Com um IMU pequenos erros na estimativa da orientação vão produzir grandes
erros na medição da aceleração o que por sua vez vai dar ainda maiores erros
nas estimativas de velocidade

É por isto que sem o uso de outros sensores externos (FOG, Laser, GPS, etc) um
calculo exacto da velocidade com um IMU é para esquecer.

Se o grau de exactidão não for muito importante, é possível obter a velocidade
linear instantânea usando somente um IMU.

A fusão de um IMU com Visão já torna a coisa muito mais fiável, porem em sistemas
de navegação em que nem sempre seja possível determinar o Optical Flow
com exactidão (num avião, por exemplo, em deslocamento sobre nuvens sem visão
ao solo) ou num sistema sem referencial (um satélite por exemplo, ou algo que
se mova no espaço) esta fusão nada serve.

Por outro lado, e para os fins desejados pelo nvoltex, penso que a melhor solução
quer em simplicidade de implementação quer em custo, será usar um modulo GPS,
que para alem de dar só por si a velocidade linear com alguma precisão (sendo
sempre possível melhorar a precisão pela integração com os dados do IMU) tem
ainda o bonus de oferecer posicionamento global.

edit:
Estamos a falar de um drone ?

Abraços,
PA
« Última modificação: 03 de Junho de 2015, 10:26 por StarRider »

Offline nvoltex

  • Mini Robot
  • *
  • Mensagens: 211
Re: opencv - Optical flow e estimação de velocidade linear 2D
« Responder #10 em: 03 de Junho de 2015, 10:35 »
Eu também tenho um GPS no sistema, mas queria usar informação visual para ter alguma redundância. Além disso o GPS que tenho é "fraco", tendo um erro considerável.

O sistema é uma espécie de "blimp", portanto acaba por entrar na categoria de drones. A ideia de usar optical flow até veio dos drones mais vulgares - quadcopters. Para além de obter uma estimativa de velocidade, o uso do optical flow também ajuda a parar o veículo sobre um local (uma espécie de "hovering mode").

Offline jm_araujo

  • Mini Robot
  • *
  • Mensagens: 2.947
  • NERD!
Re: opencv - Optical flow e estimação de velocidade linear 2D
« Responder #11 em: 03 de Junho de 2015, 10:37 »
Não sabendo a aplicação, convém pelo menos antes de tentar enveredar por esse caminho fazer uma conta básica: tendo em conta a velocidade e tamanho do plano da câmara se o frame-rate que tens disponível é suficiente. Se à velocidade máxima  entre frames deslocares o quadro de imagem todo nem vale a pena dar-se ao trabalho. Por isso é que os ratos tem framerates parvos na ordem dos milhares de frames por segundo (como o campo de visão é reduzido, assim são obrigados).


Edit: descreveste a aplicação ao mesmo tempo que estava a dar a resposta... Não deves ter o problema que falei ;)

Offline nvoltex

  • Mini Robot
  • *
  • Mensagens: 211
Re: opencv - Optical flow e estimação de velocidade linear 2D
« Responder #12 em: 03 de Junho de 2015, 10:46 »
Sim, um framerate de por volta de 30hz (talvez até menos desse), uma vez que o veículo vai fazer apenas pequenos deslocamentos a baixas velocidades.

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.753
Re: opencv - Optical flow e estimação de velocidade linear 2D
« Responder #13 em: 03 de Junho de 2015, 12:44 »
Nao estou a ver como possas transformar as coordenadas da camera para o mundo so' com uma camera...

Offline nvoltex

  • Mini Robot
  • *
  • Mensagens: 211
Re: opencv - Optical flow e estimação de velocidade linear 2D
« Responder #14 em: 03 de Junho de 2015, 13:38 »
Uma vez que tenho a pose da camera e a distância ao solo, se tiver a camera calibrada deveria dar, não?