J'ai en tête depuis quelque temps une idée, mais je ne sais pas comment la mettre en place. J'aimerais me construire un petit module physique contenant des capteurs (accéléromètres, gyromètres, etc.) me permettant de scanner une surface réelle en 3D (sphère, ovale, cylindre, etc.) afin d'en récupérer le jumeau numérique. Quelqu'un s'est‑il déjà penché sur la question et avez‑vous des pistes ?
Je pensais essayer de créer un module avec des accéléromètres et des gyromètres dans les trois directions, ce qui me permettrait de connaître à tout moment ma position dans l'espace. Si vous avez d'autres moyens, je suis preneur .
ce sera très difficile et très cher d'avoir une précision sub-millimétrique (même millimétrique) qui serait sans doute nécessaire pour avoir un vrai jumeau...
Les outils à base d'image vidéo et de lidar sont plus performants
J'ai dû mal à comprendre ce que tu veux faire exactement et comment ton module pourra scanner un objet 3D, par exemple un cylindre.
Tu pourrais décrire la démarche que tu imagines ?
Moi à ta description, j'image une roulette comme on le faisait dans l'ancien temps pour calculer les distances sur une carte IGN.
Mais du coup comme l'indique @J-M-L comment voit tu la génération des surfaces à partir de ton nuage de point ?
@terwal
Justement, c'est là que je bloque !
Je pensais utiliser des accéléromètres et des gyromètres afin de détecter mes déplacements.
Sur le papier, si mon module se déplace, il a une accélération. Connaissant l'accélération et la direction, on peut déterminer la vitesse de déplacement et la position par rapport au point de départ à tout instant (accélération-vitesse-position en fonction du temps de déplacement).
Ça c'est sur le papier car en réalité, le moindre écart avec la réalité entraîne des dérives dans les résultats et fausse donc toute la suite du raisonnement...
Oui, j'avais bien compris cette partie, hormis à la précision et dérive près.
Mais c'est plus la partie sur comment tu comptes faire le maillage qui me pose problème.
Si on prend un feuille de papier par exemple, on peut l'assimilé à un Parallélépipède, donc tu peux suivre les bords.
Mais si ta feuille a été froissé par exemple, comment compte tu numériser cette feuille?
tu pourras alors par exemple suivre un cadrillage, mais avec quel pas 10cm, 5cm, 1cm, 1mm ?
Je ne sais pas si tu vois ce que je veux dire ?
Tu as pris des exemples bien plus simple qu'une feuille froissé, mais c'est pour exprimer quel procéssus tu comptes appliquer et quel résultat tu comptes espérer ?
D’une manière générale c’est faisable cela dit car on sait extraire un solide 3D à partir d’un nuage de points ➜ l’algorithme classique est l’enveloppe convexe (convex hull) si le solide est globalement convexe et pour des formes plus complexes, on utilise un algorithme de reconstruction comme « Poisson Surface Reconstruction » ou « Ball Pivoting ». Il y a pas mal de littérature sur le sujet. (C’est ce que font les logiciels des géomètres avec le nuage de point obtenu par leur lidar rotatif)
Cela dit je posais la question car a ma connaissance il n’existe pas de bibliothèques sur Arduino capables de reconstruire un solide 3D à partir d’un nuage de points. Ces algorithmes demandent trop de mémoire et de puissance de calcul.
Il faut transférer les données vers un PC et utiliser des bibliothèques comme PCL ou MeshLab ou si on veut programmer sous Python on peut utiliser des bibliothèques comme Open3D ou PyntCloud qui offrent ces algos.
Oui, le problème n'est pas trop la faisabilité dans l'absolue que le comment @thism1 imagine faire tout ça.
Pour moi il faut déjà avoir une idée précise de la méthode de l'acquisition.
Par exemple la proposition d'utiliser un M5 peut être intéressante, mais quelle procédure va permettre à un "cube" de scanner un cylindre ou une balle de quelque cm de rayon ?
Si on imagine que le système est très précis, il suffit de toucher des points en appuyant sur un bouton par exemple. Et au final on obtient un nuage. Même s’ils ont été acquis dans un ordre un peu aléatoire, c’est pas grave et les bibliothèque savent s’y retrouver pour bâtir le solide correspondant.
Oui je mets pour l'instant de coté la précision de la centrale d'inertie.
Ce qui me gêne c'est le "il suffit", par exemple si on reprend mon exemple de feuille froissé avec donc un objet possédant des surfaces concaves.
De même, je serais curieux de savoir comment avec ton procédé, tu numérises une sphère.
Pour être un brin provocateur, il suffit d'essayer même mentalement pour tout de suite s'apercevoir qu'il ne suffit pas de cliquer sur un bouton
L'ordre n'a aucune importance en soit, mais cela permet d'atteindre plus facilement le nombre de point qu'il est nécessaire pour avoir la précision que l'on s'est fixé.
Si on prends par exemple un dé, acquérir les 8 sommets et suffisant en imaginant que ceux ci sont accessibles si l'objet est en "pseudo lévitation"(pas de magie ici )
Encore une fois pour une sphère on se rends compte que c'est déjà un peu plus complexe de la faire léviter pour la scanner avec un cube.
J'ai aussi volontairement pas demandé quelle serait la précision estimé d'une acquisition par appuis sur l'objet qui fait l'acquisition.
Bon tu va me dire que de toute façon, il est probable que l'exactitude du système sera inférieur à l'erreur engendré par l'appuis
Oui et non, cela dépend pour beaucoup de la forme que tu veux scanner et de l'exactitude que tu veux atteindre.
Si ton procédé est complétement au hasard, tu auras plus de mal à scanner des formes complexes alors que des formes simples ne poseront aucun soucis.
Ce que je veux dire, c’est que l’ordre des points dans un nuage n’a aucune importance pour la reconstruction d’une surface : les bibliothèques travaillent uniquement avec les coordonnées (x, y, z) des points, qui définissent leur position dans R3. Ce sont les relations géométriques locales entre les points — telles que la distance euclidienne ou les orientations normales estimées — qui déterminent la forme de la surface. L’algorithme se charge ensuite d’identifier les structures locales cohérentes pour générer les facettes.
Plus le nuage contient de points, plus la densité d’échantillonnage est élevée et donc c'est ce qui permet une meilleure approximation de la surface originale (en maths on dit qu'un échantillonnage dense minimise l’erreur de Hausdorff entre la surface reconstruite et la surface réelle, à condition que le bruit soit faible. Une densité suffisante permet aussi une meilleure estimation des normales, souvent obtenues par PCA locale sur les k-plus proches voisins).
Si la surface à reconstruire n’est pas convexe, certains algorithmes comme l’enveloppe convexe échouent à capturer les concavités. Dans ce cas, il faut utiliser des méthodes adaptées, par exemple l’algorithme Ball Pivoting, qui repose sur un principe géométrique : une sphère de rayon fixe pivote autour de triangles existants du maillage, en cherchant à toucher trois points du nuage à la fois, ce qui permet de suivre fidèlement les courbures et cavités de la surface.
mais bon, tout ça c'est théorique, la précision des IMUs "de base" que l'on a, même avec des algos de fusion, ne donneront pas la précision nécessaire si on veut faire un objet un tant soit peu compliqué.
Un montage mécanique à X degrés de liberté avec des encodeurs à chaque axe qui déterminent la position dans l'espace d'une pointe serait plus envisageable à mon avis.
Je pense que j'avais compris
Cela t'étonnera surement mais tu n'es pas le seul à avoir fait de la 3D et des maths
Je voulais juste indiqué qu'il ne suffit pas de prendre des points au hasard
Comme de toute façon rien ne garantit que ton cube d'acquisition ait la taille nécessaire pour acquérir des surface concave et que vu la taille par exemple d'un M5 (pris comme exemple de volume du scanner) l'exactitude soit dans les choux.
un algorithme de maillage convexe peut aussi très bien faire l'affaire
C'est théorique au carré, car avant de parler de l'exactitude des IMUs, l'exactitude de la forme de ton scanner te mettra dans les choux et ne te permettrons même pas d'utiliser des algos complexes.
Je suis forcément d'accord, mais cela dépend pour beaucoup du type d'objet à scanner de l'exactitude espéré et encore une fois, du scanneur.
Si tu veux scanner ta voiture échelle 1/1, pour avoir une forme générale assez reconnaissable, un stylo ou un cube contenant une IMUs peut peut être envisageable, pour scanner ton lapin de paque en chocolat de 10cm de haut, je ne suis pas sûre que le cube soit la meilleur solution .
@thism1 parlait d'objet géométrique assez simple et convexe, mais ne donne pas la taille de ceux-ci.
Donc je trouve que de partir sur des conseils matériel ou algorithmique est un peu prématuré.
hum, cette partie là on peut la gérer : on peut envisager une aiguille fixée au bout de la boîte (disons un parallélépipède) qui contient l'arduino, l'IMU etc.
Pour déterminer la position de la pointe, il faut combiner trois informations :
➜ l’orientation du parallélépipède donnée par les angles d’Euler, qui permet de savoir dans quelle direction la pointe est orientée
➜ la position du parallélépipède dans l’espace, qui sert de point de départ à la transformation (c'est la partie la plus difficile à cause des dérives)
➜ la position de la pointe par rapport au parallélépipède dans son propre repère, qui est fixe et connue.
En appliquant la rotation correspondant à l’orientation, puis en ajoutant la translation correspondant à la position du parallélépipède, on obtient la position absolue de la pointe dans l’espace.
Les IMU pas chers dérivent rapidement à cause du bruit dans les capteurs. Le gyroscope accumule de petites erreurs à chaque intégration, ce qui dégrade l’estimation de la rotation avec le temps. L’accéléromètre confond gravité et mouvement, et le magnétomètre est sensible aux perturbations magnétiques. Même avec un algorithme de fusion, les rotations finissent par s’éloigner de la réalité, surtout en mouvement prolongé...
Oui, c'est ce que j'avais compris des différents retour que j'ai pu lire.
mais c'est surtout le temps ou la mesure peu être considéré comme bonne dont j'ai aucune idée?
Si la dérive permet quand même un petit temps d'utilisation(ex 1min), on peut aussi imaginer une remise à zéro. Mais avant tout il faut au moins savoir les ordres de grandeurs, de la prise de point et des dérives réel.