Calibrer un scanner 2D monté sur un axe rotatif

9

Un scanner laser 2D est monté sur un axe rotatif. Je souhaite déterminer la matrice de transformation du centre de l'axe au centre du scanner, en utilisant uniquement l'entrée du scanner et l'angle de rotation.

entrez la description de l'image ici

Le scanner 2D lui-même est supposé calibré, il mesurera avec précision la position de tout objet à l'intérieur du plan du laser, en ce qui concerne l'origine du scanner.

L'axe rotatif est également calibré, il mesurera avec précision l'angle de son propre mouvement.

Le scanner est aligné et monté près du centre de rotation, mais le décalage exact est inconnu et peut dériver avec le temps.

Supposons qu'il soit impossible de mesurer directement la position et l'orientation du scanner. Je cherche un moyen de déterminer les valeurs exactes des 6 degrés de décalage que le scanner peut avoir par rapport à l'axe, déterminés uniquement sur les informations 2D du scanner et l'angle de rotation par rapport à l'axe.

entrez la description de l'image ici

Je m'intéresse principalement aux 4 décalages illustrés ici, car les deux autres n'ont pas d'importance en ce qui concerne la génération d'un nuage de points 3D cohérent à partir des données d'entrée.

En scannant un objet d'étalonnage connu, il devrait être possible de déterminer ces décalages. Quelles sont les formules mathématiques pour cela?

Quel type d'informations d'étalonnage est requis au minimum? Est-il par exemple possible de déterminer tous les paramètres simplement en balayant une surface plane, sans rien savoir de la surface si ce n'est qu'elle est plate?

(La matrice de transformation de l'axe de rotation au monde est également inconnue, mais celle-ci est triviale à déterminer une fois que la transformation de l'axe à la caméra est connue.)


Exemple

entrez la description de l'image ici

À gauche, la caméra est placée exactement sur l'axe de rotation. La caméra balaye un objet plan avec les points de référence AB et C. Sur la base des mesures de distance laser et de l'angle de l'axe, cet objet plan peut être reconstruit.

À droite, la caméra a un décalage inconnu par rapport à l'axe. Il scanne le même objet. Si le nuage de points est construit sans connaître ce décalage, la surface plane est mappée sur une surface courbe.

Puis-je calculer le décalage en fonction de la courbure de la surface?

Si je connais les distances et les angles réels entre A, B et C, comment puis-je calculer les décalages de la caméra à partir de cela? Quel serait le nombre minimum de points de référence dont j'ai besoin pour les 4 décalages?

HugoRune
la source

Réponses:

1

Si vous pouvez vous permettre d'avoir une petite partie de votre champ de vision obscurcie, vous voudrez peut-être envisager d'avoir un objet fiduciaire quelque part en vue.

Avec un objet fiducial approprié, en le balayant pendant que votre axe tourne, vous devriez pouvoir calculer les quatre décalages que vous désirez.

Si vous ne pouvez pas vous permettre d’obscurcir votre champ de vision en fonctionnement normal, vous devrez peut-être placer votre fiduciaire sur un actionneur qui lui est propre, le mettre en vue lorsque vous souhaitez le calibrer et le retirer pour un fonctionnement normal. Le seul problème ici est que vous limitez la précision de votre étalonnage par la précision de votre actionneur fiduciaire.

Notez que si une partie de votre champ de vision est déjà masquée par une autre partie de votre robot, il peut être approprié de l'utiliser comme fiduciaire, ou au moins comme point de montage pour un.

Mark Booth
la source
Mon problème n'est pas de placer un objet fiduciaire, c'est assez simple. Mon problème est de calculer les décalages. Comme vous le dites, il devrait être possible de calculer les quatre décalages en fonction d'un objet d'étalonnage, mais comment? Disons que je numérise un cube de dimensions connues. Je peux facilement voir que mes décalages sont incorrects si ce cube est mappé sur un nuage de points non planaire et non rectangulaire. Mais comment puis-je obtenir les bons décalages à partir de cela?
HugoRune
Merci pour la clarification @HugoRune - si vous pouviez modifier votre question pour inclure ces informations, alors j'espère que la prochaine personne à répondre pourra fournir une meilleure réponse. Je n'ai jamais fait ce type de calibrage qu'ayant déjà simplifié le problème en 2D, donc je ne peux que donner des conseils généraux.
Mark Booth
1

Dans ce cas, la méthode la plus simple consiste essentiellement à forcer le problème par la force brute, mais à le forcer de manière intelligente.

Ce dont vous aurez besoin, c'est d'un ensemble de données du scanner pendant qu'il scanne un objet, de préférence un objet mathématiquement simple comme un cube ou une sphère et la position de décalage exacte ou le décalage de cet objet par rapport au support de ce scanner.

Si vous disposez de ces deux informations, l'astuce suivante consiste essentiellement à tester différentes combinaisons de décalages du scanner (ce que j'appellerais généralement des valeurs d'étalonnage) jusqu'à ce que vous trouviez des décalages qui font que les données du scanner représentent précisément votre objet. Pour cela, vous pouvez soit deviner des valeurs au hasard, ce qui peut prendre une éternité et ne pas aboutir (mais en théorie, vous obtiendrez éventuellement la bonne réponse) ou vous pouvez utiliser une méthode d'optimisation

Pour utiliser une méthode d'optimisation, vous devrez développer une sorte de métrique pour dire si un ensemble particulier de décalages fonctionne mieux qu'un autre ensemble. Ensuite, quelle que soit la méthode d'optimisation que vous utilisez, elle utilisera ce score pour dire s'il faut ajuster les valeurs dans une direction particulière. Il finira par se fixer sur un ensemble particulier de valeurs qui semblent fonctionner le mieux.

Il s'agit d'une description assez brève et médiocre d'un sujet très approfondi, mais j'espère que cela vous orientera dans une direction. Si vous souhaitez une description plus détaillée de quelque chose, laissez un commentaire.

ApockofFork
la source