3D-Laserscanner auf Android-Handy


Ich präsentiere Ihnen einen DIY-Scanner, der auf einem Android-Smartphone basiert.

Beim Entwerfen und Erstellen eines Scanners war ich zunächst daran interessiert, große Objekte zu scannen. Minimum - die Figur einer Person in vollem Wachstum mit Genauigkeit - mindestens 1-2 mm.

Diese Kriterien wurden erfolgreich erfüllt. Erfolgreich gescannte Objekte in natürlichem Licht (ohne direktes Sonnenlicht). Das Scanfeld wird durch den Erfassungswinkel der Kamera des Smartphones und die Entfernung bestimmt, in der der Laserstrahl eine ausreichende Helligkeit für die Erkennung (tagsüber im Raum) beibehält. Dies ist eine Figur einer Person in voller Größe (1,8 Meter) mit einer Arbeitsbreite von 1,2 Metern.

Der Scanner wurde aus Überlegungen erstellt, "und ob etwas mehr oder weniger Nützliches und Interessantes getan werden soll, wenn nichts zu tun ist." Alle Abbildungen basieren auf dem Beispiel eines Testobjekts (das Hochladen von menschlichen Scans ist nicht korrekt).

Wie die Erfahrung gezeigt hat, ist ein Scanner dieser Art von Software zweitrangig und es wurde am wenigsten Zeit dafür aufgewendet (für die endgültige Version. Abgesehen von Experimenten und Sackgassenoptionen). Daher werde ich im Artikel nicht auf die Funktionen der Software eingehen (Link zu den Quellcodes am Ende des Artikels.)

Der Zweck des Artikels besteht darin, über Deadlock-Zweige und Probleme zu sprechen, die auf dem Weg zur Erstellung der endgültigen Arbeitsversion aufgetreten sind.

Für den Scanner verwendet die endgültige Version:

  1. Samsung S5 Telefon
  2. Rote und grüne Laser mit einer Linse für eine Linie (90-Grad-Linie) bei 30 mW mit Glasoptik (nicht die billigste).
  3. Schrittmotoren 35BYGHM302-06LA 0,3A, 0,9 °
  4. A4988 Schrittmotortreiber
  5. Bluetooth-Modul HC-05
  6. STM32F103C8t-Karte

A4988-Treiber sind auf einen halben Schritt eingestellt, der mit einem 15-> 120-Getriebe 400 * 2 * 8 Schritte pro PI ergibt.

Die Wahl der Scan-Technologie.


Die folgenden verschiedenen Optionen wurden berücksichtigt.

LED-Projektor.


Die Option wurde geprüft und berechnet. Selbst teure Projektoren haben nicht die richtige Auflösung, um die erforderliche Genauigkeit zu erreichen. Und es lohnt sich nicht, über billige zu sprechen.

Mechanische Abtastung eines Laserstrahls in Kombination mit einem Beugungsgitter.


Die Idee wurde getestet und als passend erachtet. Aber aus Gründen der DIY-Leistung nicht:

  1. Wir brauchen einen ausreichend starken Laser, damit die Markierungen nach der Beugung hell genug sind (der Abstand zum Objektiv des Smartphones beträgt 1,2 Meter). Und meine Augen tun mir leid. Ein Laserpunkt mit bereits 30mW ist nicht sinnvoll.
  2. Die Anforderungen an das präzise mechanische Scannen in 2 Ebenen sind für die DIY-Leistung zu hoch.

Mechanischer Standardscan einer Laserlinie auf einem stationären Scanobjekt.


Letztendlich wurde die Option mit zwei Lasern unterschiedlicher Farben gewählt.


  1. Verschiedene Farben von Lasern ermöglichen es, sie unabhängig voneinander in einem einzigen Bild zu erfassen.
  2. Die Position der Laser auf gegenüberliegenden Seiten der Kamera ermöglicht es Ihnen, zwei Scans in einem Durchgang zu erhalten.
  3. Mit zwei Scans gleichzeitig können Sie die Qualität der Scannerausrichtung objektiv beurteilen (Scans müssen konvergieren und sich überlappen).

Wie sich herausstellte, ist das letzte Kriterium das wichtigste. Die Qualität des Scans wird vollständig durch die Genauigkeit der Messung der geometrischen Abmessungen und Winkel des Scanners bestimmt. Durch das Vorhandensein von zwei Scans von zwei Lasern können Sie die Qualität des Scans sofort bewerten:
Punktwolken konvergierten. Das heißt, Flugzeuge, die von zwei Lasern erfasst wurden, konvergierten auf der gesamten Oberfläche.

Fehlgeschlagene Version des mechanischen Teils des 28BYJ-48.



Obwohl ich von Anfang an davon ausgegangen bin, dass dies eine Sackgasse ist, die nicht die erforderliche Genauigkeit bietet, habe ich sie dennoch mit verschiedenen Tricks überprüft:

  1. Die Achse des Motors wird durch das Lager fixiert.
  2. Reibungselement und Stopper für die Probenahme des Getriebespiels hinzugefügt.
  3. Ein Versuch, die "genaue Position" eines Fototransistors durch Laserbelichtung zu bestimmen

Die Wiederholbarkeit der Rückkehr an dieselbe Stelle der Laserlinie erwies sich als gering - 2-3 mm in einem Abstand von 1,5 Metern. Während des Getriebebetriebs sind trotz der scheinbaren Laufruhe in einer Entfernung von 1,5 Metern Rucke von 1 bis 3 mm erkennbar.

Das heißt, 28BYJ-48 ist für einen mehr oder weniger genauen Scanner großer Objekte völlig ungeeignet.

Scananforderungen basierend auf meiner Erfahrung


Ein obligatorisches Element des Sweeps muss ein Getriebe sein.

Machen Sie keinen Fehler im 1 / x-Schrittmodus. Die Experimente zeigten, dass im 1/16 Modus auf dem A4988 Mikroschritte nicht einheitlich sind. Und um 1/8 macht sich diese Unebenheit im Auge bemerkbar.

Die optimalste Lösung für das Getriebe war die Verwendung eines Riemenrads. Obwohl es sich als ziemlich umständlich herausstellte, ist es einfach zu erstellen und genau.
Die Positionierungsgenauigkeit (genauer gesagt die Positionierwiederholbarkeit der Ausgangsposition der Laser zum Abtasten) der Laser betrug etwa 0,5 mm für 5 mm der Laserlinienbreite in 4 Metern Entfernung. Das heißt, Bei einer Abtastentfernung (1,2 bis 1,8 Meter) ist es im Allgemeinen schwierig zu messen.

Positionierung - Optokoppler (chinesischer Noname) an den Schlitzen in der Scheibe unter den Lasern.

Probleme bei der Übertragung von Steuersignalen vom Telefon zum Steuermodul für Laser und Schrittmotoren


Der Steuerkanal stellte sich als Engpass in Bezug auf die Scangeschwindigkeit heraus. Da dies eine gemächliche DIY-Entwicklung zu Ihrem eigenen Vergnügen war, wurden alle Kommunikationsmethoden mit einem Smartphone ausprobiert.

Übertragung von Steuersignalen über Audio-Buchse (Telefon Audio-Buchse => Oszilloskop)


Die hemmendste Art, Daten in Echtzeit zu übertragen. Ja, auch mit schwebender Zeit. Bis zu 500 ms (!) Von der Softwareaktivierung der Audiodatenübertragung bis zum tatsächlichen Auftreten des Signals in der Audio-Buchse.

Diese Exotik wurde überprüft, weil ich mich bei der Arbeit mit mobilen Chipkartenlesern auseinandersetzen musste.

Fotodioden auf dem Smartphone-Bildschirm (Teil des Telefonbildschirms => Fototransistoren + STM32F103)


Aus Gründen des Interesses wurde sogar eine solche exotische Methode als Fototransistoren mit einer 2 × 2-Matrix in Form von Wäscheklammern auf dem Bildschirm getestet.

Diese Methode zur Übertragung von Informationen vom Telefon war zwar die schnellste, aber nicht so grundlegend schneller (10 ms gegenüber 50 ms) als Bluetooth, was seine Mängel (Wäscheklammer auf dem Bildschirm) in Kauf nehmen würde.

IR-Kanal (Telefon => TSOP1736-> STM32F103)


Praktisch verifiziert und die Art der Übertragung über den IR-Kanal. Sogar eine Implementierung des Datenübertragungsprotokolls musste durchgeführt werden.

Es stellte sich jedoch auch heraus, dass IR nicht sehr praktisch ist (es ist unpraktisch, den Fotosensor am Telefon anzubringen) und nicht viel schneller als Bluetooth.

WiFi-Modul (Telefon => ESP8266-RS232-> STM32F103)


Die Ergebnisse der Überprüfung dieses Moduls erwiesen sich als völlig entmutigend. Es stellte sich heraus, dass die Laufzeitanforderungsantwort (Echo) unvorhersehbar im Bereich von 20 bis 300 ms (durchschnittlich 150 ms) schwebte. Warum und was - nicht verstanden. Ich bin nur auf einen Artikel gestoßen, in dem ein erfolgloser Versuch beschrieben wurde, den ESP8266 für den Echtzeitdatenaustausch mit strengen Anforderungen an die Anforderungs- / Antwortzeit zu verwenden.

Das heißt, ESP8266 mit "Standard" TCP -> RS232 Firmware ist für solche Zwecke nicht geeignet.

Ausgewählte Option für Steuermodul und Signalübertragung


Letztendlich wurde nach allen Experimenten der Bluetooth-Kanal (HC-05-Modul) ausgewählt. Es gibt eine stabile (und dies ist die wichtigste) Datenübertragungsanforderungs- / Antwortzeit von 40 ms.

Die Zeit ist ziemlich groß und beeinflusst die Scanzeit (die Hälfte der Gesamtzeit) stark.
Die beste Option wurde jedoch nicht erreicht.

Als Steuermodul eine weit verbreitete Karte mit SM32F103C8T.


Methoden zum Erkennen einer Linie in einem Frame.


Der einfachste Weg, die Laserlinien im Rahmen zu isolieren, besteht darin, die Subtraktion des Rahmens bei ausgeschaltetem Laser und des Rahmens mit dem Laser zu verwenden.

Grundsätzlich funktioniert die Suche nach Frames auch ohne Subtraktion. Aber bei Tageslicht funktioniert es viel schlimmer. Obwohl dieser Modus in der Software für Vergleichstests belassen wurde (Foto des Modus unten. Alle anderen Fotos mit dem Bildsubtraktionsmodus).


Der praktische Wert der Option ohne Subtrahieren von Frames war gering.

Es ist möglich und möglich, das Lasersignal aus diesen verrauschten Informationen zu extrahieren. Er kümmerte sich jedoch nicht darum.

Die Option mit Frame-Subtraktion funktioniert gut.

Alle Experimente mit Versuchen, die Linie zu approximieren und den gesamten Frame zu verarbeiten, zeigten, dass je komplexer der Algorithmus ist, desto häufiger „macht er Fehler“ und verlangsamt sogar die Verarbeitung „on the fly“. Der schnellste (und einfachste) Algorithmus zum Auffinden eines Lasers (Laserpunkt) auf einer horizontalen Linie war:

  • Für jeden Punkt der Linie wird die Summe der Quadrate des Laserfarbpegels (RGB) in dem in der Konfiguration angegebenen Fenster berücksichtigt (13 px - experimentell optimaler Wert für das Fenster).
  • Der Laserpunkt ist die Mitte des Fensters mit dem Maximalwert der Summen der Farbstufen.

Die Zeit zum Verarbeiten eines Frames durch Suchen nach den „grünen“ und „roten Linien“ beträgt 3 ms.

Punktwolken für den roten und den grünen Laser werden getrennt gezählt. Bei richtiger mechanischer Einstellung werden sie mit einer Genauigkeit von <1 mm reduziert.

Genauigkeit und Ausrichtung


Die Genauigkeit lag innerhalb von 1 mm in einem Abstand von 1,2 Metern. Hauptsächlich aufgrund der Auflösung der Kamera des Telefons (1920 x 1080) und der Laserstrahlbreite.

Es ist sehr wichtig, die richtigen Scans zu erhalten, um statisch und dynamisch zu konfigurieren. Die Genauigkeit / Ungenauigkeit ist deutlich sichtbar, wenn beide Punktwolken in MeshLab geladen werden. Idealerweise sollten die Punktwolken konvergieren und sich gegenseitig ergänzen.

Statische Parameter werden einmal so genau wie möglich eingestellt:

  1. Die Tangente des Blickwinkels der Kamera.
  2. Die Länge der "Schultern" der Laser (von der Mitte der Linse bis zur Rotationsachse).

Und natürlich die maximale Fokussierung von Laserlinsen bei einer bestimmten Abtastentfernung und die "Vertikalität" der Laserlinien.

Der dynamische Parameter des tatsächlichen Winkels der Position der Laser relativ zur virtuellen Ebene des Rahmens muss jedes Mal neu eingestellt werden, wenn das Telefon in der Halterung gemischt wird. Hierzu wird der Konfigurationsmodus in der Software vorgenommen. Durch Reduzieren des Laserbildschirms auf die Mitte und Einstellen des Winkels muss der berechnete Abstand für beide Laser so nahe wie möglich am tatsächlichen (gemessenen) Abstand eingestellt werden.

Vor der Feinabstimmung:


Nach der Einstellung:


Schlussfolgerungen


Vielleicht kann dieser Entwurf von jedem wiederholt werden. Ich schneide alle Details von Glasfaser bis CNC.

Ohne eine CNC-Fräsmaschine ist es natürlich schwierig, eine Riemenscheibe unter dem Laser herzustellen. Unter Berücksichtigung der Tatsache, dass Sie mit der richtigen Geduld einen Drehwinkel von maximal 90 Grad benötigen, kann die Riemenscheibe auch mit einer Feile ausgeschnitten werden.

Aber es ist besser, es auf CNC zu machen. Die Anforderungen an das Axialspiel der Drehbaugruppe sind hoch. Die Qualität der Scans wird zu 100% von der Genauigkeit der Herstellung und Ausrichtung bestimmt.

Der Scanner hat im Hintergrund. Manchmal zeitweise für ein paar Monate. Daher kann ich die Gesamtkomplexität seiner Erstellung nicht beurteilen.

Die Gesamtkosten der Struktur sind nicht zu hoch. Wie meine Experimente gezeigt haben, können Sie, obwohl es weit entfernt von industriellen Scannern großer Objekte ist, recht anständige Scans erhalten.
Die Qualität der Scans wird hauptsächlich von der Genauigkeit des mechanischen Teils beeinflusst. In diesem Sinne ist es beim Heimwerken schwierig, mit den für Industriescanner entwickelten Mechaniken umzugehen.

Quellcode

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


All Articles