"Fitter" un nuage de points

Bonjour,
Dans le cadre de mon travail je suis amené à développer un logiciel pour statuer sur les pièces que nous fabriquons. Ces pièces sont contrôlées à l’aide de machines tridimensionnelles et il en ressort un nuage de points 3D issus du scanning du profil contrôlé. Comme le contrôle se fait sur le même plan seul les coordonnées XY me sont utiles. Le profil, pour simplifier est en dent de scie mais avec des rayons de raccordements à la place des angles vifs.
Ce que je cherche à faire est de faire « rentrer » le maximum de points dans une zone de tolérance qui suit le profil. Pour y parvenir voilà comment je procède. Dans plusieurs boucles imbriquées je fais une rotation de mes points puis un déplacement en XY, ensuite je compte le nombre de points en dehors de la zone de tolérance. À la fin je regarde quelle position et rotation me donne le moins de points en dehors. Seulement avec mes premiers essais, le temps de calcul est beaucoup trop long.
La zone de tolérance est définie par les coordonnées des points de début, de fin des segments, arcs et leurs centres. J’ai regardé du coté de la régression linaire mais je me casse les dents dessus. Faire un ajustement d’une droite c’est assez simple mais tout un profil théorique « rigide » qui ne peut être décrit par une seule fonction c’est une autre histoire. Peut-être avec plusieurs régressions linéaires sous contraintes mais ma réflexion bloque sur l’interprétation géométrique. De plus comme les tolérances sont évolutives et non symétriques sur les rayons et de valeurs différentes sur les deux faces de la dent (mais symétrique), intuitivement je dirais que la position qui ajuste au mieux le profil n’est pas forcement celle qui « rentre » le plus de points. Comment aborderiez-vous le problème ?
Voici une image représentant le profil en noir et en rouge la tolérance supérieur et inférieur.
Merci.119560

Réponses

  • Bonjour,

    j'ai souvent ce genre de problématiques au boulot.
    Une possibilité est de définir au préalable un profil théorique "optimal" entre les profils de tolérance (plusieurs méthodes pour ça).
    Puis de choisir N points sur ce profil théorique optimal : Mi, qui correspondent un à un aux points mesurés sur le profil réel.

    Suite à une mesure de profil réel, on détermine le couple rotation/translation envoyant "optimalement" le nuage mesuré sur le nuage Mi théorique.
    Une fois effectué ce déplacement, une somme quadratique pondérée sur les écarts points mesurés/théoriques donne une évaluation du profil réel.
    On peut pondérer par exemple selon la largeur du profil de tolérance au voisinage du point considéré (poids important si tolérance fine...).

    L'avantage de telles méthodes est une bonne efficacité numérique.
  • Bonjour,

    Par quel procédé vous détermineriez ce couple rotation/translation?
  • Par exemple :

    Commencer par appliquer la translation qui envoie le centre de gravité des points mesurés sur le centre de gravité des points théoriques.

    En notant $\left(x_{i};y_{i}\right)$ les coordonnées des points mesurés après application de la translation précédente, et $\left(u_{i};v_{i}\right)$ les coordonnées des points théoriques, on cherche à minimiser la fonction :

    $f\left(\theta\right)=\sum_{i}\left(\left(x_{i}\cos\theta-y_{i}\sin\theta-u_{i}\right)^{2}+\left(x_{i}\sin\theta+y_{i}\cos\theta-v_{i}\right)^{2}\right)$,
    qui une fois développée et simplifiée est de la forme

    $f\left(\theta\right)=A+B\cos\theta+C\sin\theta$.

    Vous trouvez $\alpha$ minimisant $f$, et remplacez les$\left(x_{i};y_{i}\right)$ par $\left(x_{i}\cos\alpha-y_{i}\sin\alpha\ ;\ x_{i}\sin\alpha+y_{i}\cos\alpha\right)$
  • Bonjour

    Une dernière question, comment déterminez-vous vos coefficients de pondération ? Sont-ils proportionnels aux intervalles de tolérances ? Par exemple dans mon cas, l'intervalle le plus fin est de +/-0.008 mm et le plus fort de +/-0.05 mm.

    Merci.
Connectez-vous ou Inscrivez-vous pour répondre.