Determinar a posição e a velocidade de um carrinho de ponte rolante usando uma câmera digital e OpenCV





Na visão computacional, existe um método para medir a distância a um objeto sem o uso de sensores de profundidade e câmeras estéreo. Neste artigo, o método é usado para determinar a posição e a velocidade de um carrinho de ponte rolante.



Pelo fato de o carrinho ser equipado com codificadores, poderei mostrar com que precisão esse método, baseado na similaridade dos triângulos, funciona. O artigo mostra como medir distâncias com uma câmera e como ela pode ser usada em tarefas práticas.



O tema é dedicado à minha dissertação de mestrado, que escrevi há dois anos.



Equipamento



O estudo foi realizado no laboratório industrial da OOO PO Privod-Avtomatika, na cidade de Magnitogorsk, com uma ponte rolante instalada que simula o funcionamento de uma ponte rolante real.







Durante o experimento, um vídeo do movimento do guindaste foi gravado com um procedimento simultâneo de leitura dos codificadores. Os gráficos de velocidade foram obtidos no software SoMove da Schneider Electric.



O vídeo foi gravado em uma câmera Canon EOS 1200D com resolução de 1920x1080.



Para detectar o carrinho, uma etiqueta gráfica com um retângulo desenhado e um círculo dentro é usada. A solução não é totalmente bem-sucedida, antes do experimento eu deveria ter entendido melhor os rótulos. Mas com a ajuda da análise de contorno (restrições de área e proporção), ainda fui capaz de detectar o retângulo desejado. Acrescentarei também que, se o objeto for fácil de detectar e o tamanho físico puder ser medido com precisão, um rótulo gráfico não será necessário.



Algoritmo de trabalho



O método de cálculo de distância é baseado na semelhança de triângulos que convergem na abertura da lente.







Vamos medir a área da marca no papel usando uma régua e a área da marca no quadro usando a biblioteca opencv. Conhecendo o comprimento focal, podemos calcular a distância até o objeto.



Experimentando



Uma câmera digital é instalada na frente de um carrinho de ponte rolante. A uma distância suficiente para que o ângulo de visão cubra toda a área do guindaste.





Diagrama de instalação. Vista de cima.



Dois vídeos de teste foram gravados, movimento ao longo do eixo x - para trás, para longe da câmera e ao longo do eixo y - primeiro para a esquerda e depois para a direita. Os valores de posição e tempo são gravados na matriz numpy e depois

exportados para o Matlab, onde os gráficos de deslocamento S (t) são construídos.







Diferenciando os dados, obtemos gráficos da velocidade V (t).



x_veloc = np.diff(x_position) / np.diff(time_mas)


Uma vez que os gráficos de movimento têm ruído sutil associado à detecção de borda imprecisa e iluminação irregular, a operação de diferenciação aumenta muito esse ruído.







Vamos suavizar o ruído usando um filtro de 1ª ordem no Matlab e comparar as leituras do codificador com as leituras da câmera digital.







Os gráficos mostram quão precisa a medição de distância pode ser obtida com uma câmera.



Para reduzir o nível de ruído e obter gráficos mais suaves, foi desenvolvida uma segunda versão da tag com visor e iluminação local.







Em teoria, isso deveria permitir reduzir o ruído e, assim, aumentar a precisão da medição. Infelizmente, ainda não conseguimos testar a nova versão da tag.



Para aqueles que estão interessados ​​em aprender mais sobre rastreamento de objetos com base na análise de contorno, há um bom artigo Estimando a precisão dos métodos de rastreamento para determinar coordenadas 2d e velocidades de sistemas mecânicos a partir de dados de fotografia digital.



No artigo, falei sobre o método mais simples para medir a distância a um objeto e mostrei qual precisão de medição pode ser obtida. Obrigado a todos pela atenção.



All Articles