Calibre um scanner 2D montado em um eixo rotativo

9

Um scanner a laser 2D é montado em um eixo rotativo. Desejo determinar a matriz de transformação do centro do eixo para o centro do scanner, usando apenas a entrada do scanner e o ângulo de rotação.

insira a descrição da imagem aqui

O próprio scanner 2D é considerado calibrado, medindo com precisão a posição de qualquer objeto dentro do plano do laser, em relação à origem do scanner.

O eixo rotativo também é calibrado, mede com precisão o ângulo de seu próprio movimento.

O scanner está alinhado e montado próximo ao centro de rotação, mas o deslocamento exato é desconhecido e pode sofrer variações ao longo do tempo.

Suponha que seja impraticável medir diretamente a posição e a orientação do scanner. Estou procurando uma maneira de determinar os valores exatos dos 6 graus de deslocamento que o scanner pode ter em relação ao eixo, determinado apenas nas informações 2d do scanner e no ângulo de rotação do eixo.

insira a descrição da imagem aqui

Estou interessado principalmente nas 4 compensações descritas aqui, pois as outras duas não importam em relação à geração de uma nuvem de pontos 3D consistente a partir dos dados de entrada.

Ao digitalizar um objeto de calibração conhecido, deve ser possível determinar esses desvios. Quais são as fórmulas matemáticas para isso?

Que tipo de informação de calibração é necessária no mínimo? Por exemplo, é possível determinar todos os parâmetros simplesmente escaneando uma superfície plana, sem saber nada sobre a superfície, exceto que ela é plana?

(A matriz de transformação do eixo de rotação para o mundo também é desconhecida, mas essa é trivial para determinar uma vez que a transformação do eixo para a câmera é conhecida.)


Exemplo

insira a descrição da imagem aqui

À esquerda, a câmera é colocada exatamente no eixo de rotação. A câmera digitaliza um objeto plano com os pontos de referência AB e C. Com base nas medições da distância do laser e no ângulo do eixo, esse objeto plano pode ser reconstruído.

À direita, a câmera possui um deslocamento desconhecido para o eixo. Ele verifica o mesmo objeto. Se a nuvem de pontos for construída sem conhecer esse deslocamento, a superfície plana será mapeada para uma superfície curva.

Posso calcular o deslocamento com base na curvatura da superfície?

Se eu sei as distâncias e ângulos do mundo real entre A, B e C, como posso calcular as compensações da câmera a partir disso? Qual seria o número mínimo de pontos de referência necessários para todas as 4 compensações?

HugoRune
fonte

Respostas:

1

Se você pode permitir que uma pequena parte do seu campo de visão seja obscurecida, considere ter um objeto fiducial em algum lugar à vista.

Com um objeto fiducial adequado, digitalizando-o à medida que seu eixo gira, você deve poder calcular os quatro deslocamentos desejados.

Se você não pode permitir que seu campo de visão seja obscurecido durante a operação normal, pode ser necessário colocar seu fiducial em um atuador próprio, exibindo-o quando você deseja calibrar e retirá-lo para operação normal. O único problema aqui é que você limita a precisão da sua calibração pela precisão do seu atuador fiducial.

Observe que se alguma parte do seu campo de visão já estiver obscurecida por outra parte do seu robô, e pode ser adequado para uso como fiducial ou, no mínimo, como ponto de montagem de um robô.

Mark Booth
fonte
Meu problema não é colocar um objeto fiducial, isso é bastante simples. Meu problema é calcular as compensações. Como você diz, deve ser possível calcular os quatro deslocamentos com base em um objeto de calibração, mas como? Digamos que eu digitalize um cubo de dimensões conhecidas. É fácil ver que meus deslocamentos estão errados se esse cubo for mapeado para uma nuvem de pontos não plana e não retangular. Mas como obtenho as compensações corretas disso?
HugoRune 12/02
Obrigado pelo esclarecimento @HugoRune - se você puder editar sua pergunta para incluir essas informações, esperamos que a próxima pessoa a responder seja capaz de fornecer uma resposta melhor. Eu só fiz esse tipo de calibração, pois já simplifiquei o problema para 2D, então só posso dar conselhos gerais.
Mark Booth
1

O método mais simples nesse caso é essencialmente forçar o problema, mas forçá-lo de maneira inteligente.

O que você precisará é de um conjunto de dados do scanner enquanto estiver digitalizando um objeto, de preferência um objeto matematicamente simples como um cubo ou uma esfera e a posição exata do deslocamento ou deslocamento desse objeto em relação à montagem deste scanner.

Se você tiver essas duas informações, o próximo truque é essencialmente testar várias combinações de compensações do scanner (o que eu normalmente chamaria de valores de calibração) até encontrar compensações que façam com que os dados do scanner representem com precisão o seu objeto. Para isso, você pode adivinhar aleatoriamente valores que podem levar uma eternidade e não chegar a lugar nenhum (mas, em teoria, eventualmente, você obteria a resposta certa) ou pode usar um método de otimização

Para usar um método de otimização, você precisará desenvolver algum tipo de métrica para dizer se um conjunto específico de compensações funciona melhor que outro conjunto. Então, qualquer método de otimização que você estiver usando usará essa pontuação para dizer se deve ajustar os valores em uma direção específica. Eventualmente, ele se estabelecerá em um conjunto específico de valores que parecem funcionar melhor.

Esta é uma descrição bastante breve e pobre de um tópico muito aprofundado, mas espero que você o indique em uma direção. Se você quiser uma descrição mais detalhada de qualquer coisa, deixe um comentário.

ApockofFork
fonte