
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.