Scanner laser 3D sur téléphone Android


Je vous présente un scanner DIY basé sur un smartphone Android.

Lors de la conception et de la création d'un scanner, tout d'abord, j'étais intéressé par la numérisation de gros objets. Minimum - la figure d'une personne en pleine croissance avec précision - au moins 1-2 mm.

Ces critères ont été atteints avec succès. Objets scannés avec succès à la lumière naturelle (sans lumière directe du soleil). Le champ de balayage est déterminé par l'angle de capture de la caméra du smartphone et la distance à laquelle le faisceau laser maintient une luminosité suffisante pour la détection (pendant la journée dans la pièce). Il s'agit d'une figure d'une personne en pleine hauteur (1,8 mètre) avec une largeur de travail de 1,2 mètre.

Le scanner a été fait à partir de considérations "et s'il fallait faire quelque chose de plus ou moins utile et intéressant quand il n'y a rien à faire." Toutes les illustrations sont basées sur l'exemple d'un objet «test» (le téléchargement de scans humains n'est pas correct).

Comme l'expérience l'a montré, pour un scanner de ce type de logiciel, il est secondaire et le moins de temps a été consacré à celui-ci (pour la version finale. Mis à part les expériences et les options sans issue). Par conséquent, je ne toucherai pas aux fonctionnalités du logiciel dans l'article (Lien vers les codes source à la fin de l'article.)

Le but de l'article est de parler des branches de blocage et des problèmes collectés sur le chemin de la création de la version de travail finale.

Pour le scanner, la version finale utilise:

  1. Téléphone Samsung S5
  2. Lasers rouges et verts avec une lentille pour une ligne (ligne à 90 degrés) à 30 mW avec optique en verre (pas la moins chère).
  3. Moteurs pas à pas 35BYGHM302-06LA 0,3A, 0,9 °
  4. Pilotes de moteur pas Ă  pas A4988
  5. Module Bluetooth HC-05
  6. Carte STM32F103C8t

Les pilotes A4988 sont réglés à demi-pas, ce qui avec une boîte de vitesses 15-> 120 donne 400 * 2 * 8 pas par PI.

Le choix de la technologie de numérisation.


Les différentes options suivantes ont été envisagées.

Projecteur LED.


L'option a été envisagée et calculée. Même les projecteurs coûteux n'ont pas la bonne résolution pour atteindre la précision requise. Et ça ne vaut même pas la peine d'en parler à bas prix.

Balayage mécanique d'un faisceau laser en combinaison avec un réseau de diffraction.


L'idée a été testée et jugée appropriée. Mais pas pour les performances de bricolage, pour des raisons:

  1. Nous avons besoin d'un laser suffisamment puissant, pour qu'après la diffraction, les marques soient suffisamment brillantes (la distance à l'objectif du smartphone est de 1 à 2 mètres). Et mes yeux sont désolés. Un point laser déjà avec 30mW n'est pas utile.
  2. Les exigences pour un balayage mécanique de précision sur 2 plans sont trop élevées pour les performances de bricolage.

Balayage mécanique standard d'une ligne laser sur un objet de balayage fixe.


Finalement, l'option a été choisie avec deux lasers de couleurs différentes.


  1. Différentes couleurs de lasers permettent de les détecter indépendamment dans une seule trame.
  2. L'emplacement des lasers sur les côtés opposés de la caméra vous permet d'obtenir deux numérisations en une seule passe.
  3. Deux scans à la fois vous permettent d'évaluer objectivement la qualité de l'alignement du scanner (les scans doivent converger et se chevaucher).

Il s'est avéré que le dernier critère est le plus important. La qualité de la numérisation est entièrement déterminée par la précision de la mesure des dimensions géométriques et des angles du scanner. Et la présence de deux scans de deux lasers vous permet d'évaluer immédiatement la qualité du scan:
Des nuages ​​de points ont convergé. C'est-à-dire les avions capturés par deux lasers ont convergé sur toute la surface.

Version infructueuse de la partie mécanique du 28BYJ-48.



Bien que dès le début, j'ai supposé qu'il s'agissait d'une option sans issue qui ne fournissait pas la précision nécessaire, je l'ai quand même vérifiée avec diverses astuces:

  1. L'axe du moteur est fixé par le roulement.
  2. Élément de friction et butée ajoutés pour l'échantillonnage du jeu de boîte de vitesses.
  3. Une tentative de déterminer la "position exacte" par un phototransistor par exposition au laser

La répétabilité du retour au même endroit de la ligne laser s'est avérée faible - 2-3 mm à une distance de 1,5 mètre. Pendant le fonctionnement de l'engrenage, malgré l'apparente douceur, des secousses de 1 à 3 mm sont visibles à une distance de 1,5 mètre.

C'est-à-dire 28BYJ-48 est totalement inadapté à un scanner plus ou moins précis de gros objets.

Exigences de numérisation basées sur mon expérience


Un élément obligatoire du balayage doit être une boîte de vitesses.

Ne vous méprenez pas sur le mode pas 1 / x. Les expériences ont montré qu'en mode 1/16 sur les micro-étapes A4988 ne sont pas uniformes. Et au 1/8, cette irrégularité est perceptible dans l'œil.

La solution la plus optimale pour la boîte de vitesses était l'utilisation d'un engrenage à courroie. Bien que cela se soit avéré assez lourd, il est facile à créer et précis.
La précision de positionnement (plus précisément, la répétabilité de positionnement de la position initiale des lasers pour le balayage) des lasers s'est avérée être d'environ 0,5 mm pour une largeur de ligne laser de 5 mm sur 4 mètres de distance. C'est-à-dire à une distance de balayage (1,2-1,8 mètres), il est généralement difficile à mesurer.

Positionnement - optocoupleurs (noname chinois) sur les fentes du disque sous les lasers.

Problèmes de transmission des signaux de commande du téléphone au module de commande des lasers et des moteurs pas à pas


Le canal de contrôle s'est avéré être un goulot d'étranglement en termes de vitesse de balayage. Comme il s'agissait d'un développement de bricolage pour votre propre plaisir, toutes les méthodes de communication avec un smartphone ont été essayées.

Transmission des signaux de contrôle via la prise audio (prise audio du téléphone => oscilloscope)


La façon la plus inhibitrice de transmettre des données en temps réel. Oui, même avec un temps flottant. Jusqu'à 500 ms (!) De l'activation logicielle de la transmission des données audio à l'apparition réelle du signal dans la prise audio.

Cet exotique a été vérifié, car au travail, je devais m'occuper de lecteurs de cartes à puce mobiles.

Photodiodes sur l'écran du smartphone (tranche de l'écran du téléphone => phototransistors + STM32F103)


Par souci d'intérêt, même une méthode aussi exotique a été testée comme phototransistors avec une matrice 2x2 sous la forme de pinces à linge sur l'écran.

Bien que cette méthode de transmission d'informations depuis le téléphone soit la plus rapide, mais pas fondamentalement plus rapide (10 ms vs 50 ms) que Bluetooth, qui accepterait ses défauts (pince à linge à l'écran).

Canal IR (téléphone => TSOP1736-> STM32F103)


Pratiquement vérifié et la méthode de transmission via le canal IR. Même une certaine mise en œuvre du protocole de transfert de données devait être effectuée.

Mais l'IR s'est également avéré peu pratique (il n'est pas pratique de monter le capteur photo sur le téléphone), et pas beaucoup plus rapide que Bluetooth.

Module WiFi (téléphone => ESP8266-RS232-> STM32F103)


Les résultats de la vérification de ce module se sont avérés complètement décourageants. La réponse à la demande (écho) pendant l'exécution s'est avérée être flottante de façon imprévisible dans la plage de 20 à 300 ms (une moyenne de 150 ms). Pourquoi et quoi - n'a pas compris. Je suis tombé uniquement sur un article décrivant une tentative infructueuse d'utiliser l'ESP8266 pour l'échange de données en temps réel avec des exigences strictes en matière de temps de demande / réponse.

C'est-Ă -dire ESP8266 avec le firmware "standard" TCP -> RS232 ne convient pas Ă  de telles fins.

Option sélectionnée pour le module de commande et la transmission du signal


Finalement, après toutes les expériences, le canal Bluetooth (module HC-05) a été sélectionné. Il donne un temps de demande-réponse de transfert de données stable (et c'est le plus important) de 40 ms.

Le temps est assez long et affecte considérablement le temps de scan (la moitié du temps total).
Mais la meilleure option n'a pas été obtenue.

En tant que module de contrôle, une carte répandue avec SM32F103C8T.


Méthodes de détection d'une ligne dans une trame.


La façon la plus simple d'isoler les lignes laser dans le cadre consiste à utiliser la soustraction du cadre avec le laser éteint et du cadre avec le laser.

En principe, la recherche par trame fonctionne également sans soustraction. Mais cela fonctionne bien pire en plein jour. Bien que ce mode ait été laissé dans le logiciel pour des tests comparatifs (photo du mode ci-dessous. Toutes les autres photos avec le mode de soustraction de trame).


La valeur pratique de l'option sans soustraire les images était faible.

Il est possible et possible d'extraire le signal laser de ces informations bruyantes. Cependant, il n'a pas pris la peine.

L'option avec soustraction de trame fonctionne bien.

Toutes les expériences avec des tentatives d'approximation de la ligne et de traitement de la trame entière ont montré que plus l'algorithme est complexe, plus souvent il «fait des erreurs» et ralentit même le traitement «à la volée». L'algorithme le plus rapide (et le plus simple) pour trouver un laser (point laser) sur une ligne horizontale était:

  • Pour chaque point de la ligne, la somme des carrĂ©s du niveau de couleur laser (RVB) dans la fenĂŞtre spĂ©cifiĂ©e dans la configuration est prise en compte (13 px - valeur optimale expĂ©rimentalement pour la fenĂŞtre)
  • Le point laser est le milieu de la fenĂŞtre avec la valeur maximale des sommes des niveaux de «couleur».

Le temps nécessaire pour traiter une image en recherchant les «lignes vertes» et «rouges» est de 3 ms.

Les nuages ​​de points pour le laser rouge et vert sont comptés séparément. Avec un réglage mécanique correct, ils sont réduits avec une précision <1 mm.

Précision et alignement


La précision était de 1 mm à une distance de 1,2 mètre. Principalement en raison de la résolution de l'appareil photo du téléphone (1920 x 1080) et de la largeur du faisceau laser.

Il est très important d'obtenir les analyses correctes pour configurer la statique et la dynamique. La précision / inexactitude est clairement visible lors du chargement des deux nuages ​​de points dans MeshLab. Idéalement, les nuages ​​de points devraient converger et se compléter.

Les paramètres statiques sont définis aussi précisément que possible une fois:

  1. La tangente de l'angle de vue de la caméra.
  2. La longueur des "épaules" des lasers (du centre de la lentille à l'axe de rotation).

Et bien sûr, la focalisation maximale des lentilles laser à une distance de balayage donnée et la "verticalité" des lignes laser.

Le paramètre dynamique de l'angle réel de la position des lasers par rapport au plan virtuel du cadre doit être ajusté à chaque fois lors du mélange du téléphone dans le support. Pour cela, le mode de configuration dans le logiciel est effectué. En réduisant l'écran laser au centre et en ajustant l'angle, il est nécessaire de régler la distance calculée aussi près que possible de la vraie distance (mesurée) pour les deux lasers.

Avant le réglage fin:


Après ajustement:


Conclusions


Peut-être que cette conception peut être répétée par n'importe qui. J'ai coupé tous les détails de la fibre de verre à la CNC.

Bien sûr, sans fraiseuse CNC, il est difficile de faire une poulie sous le laser. Mais compte tenu du fait que vous avez besoin d'un angle de rotation d'un maximum de 90 degrés, avec une patience appropriée, la poulie peut également être découpée avec une lime.

Mais il vaut mieux le faire sur CNC. Les exigences de jeu axial de l'ensemble rotatif sont élevées. La qualité des numérisations est déterminée à 100% par la précision de fabrication et d'alignement.

Le scanner a fait en arrière-plan. Parfois, par intermittence pendant quelques mois. Par conséquent, je ne peux pas évaluer la complexité totale de sa création.

Le coût total de la structure n'est pas trop élevé. Comme mes expériences l'ont montré, bien qu'il soit loin des scanners industriels de gros objets, vous pouvez obtenir des scans assez décents.
La qualité des numérisations est principalement affectée par la précision de la pièce mécanique. En ce sens, en bricolage, il est difficile de faire face à la mécanique créée pour les scanners industriels.

Code source

Source: https://habr.com/ru/post/fr412479/


All Articles