PiLiDAR - LiDAR-Scanner für Raspberry Pi
(github.com/PiLiDAR)- PiLiDAR ist ein laufendes Projekt, das Raspberry Pi 4, LDRobot LiDAR, Raspberry Pi HQ Camera und einen Schrittmotor kombiniert, um einen DIY-360°-3D-Panoramascanner zu bauen
- Zu den Kernfunktionen gehören benutzerdefinierte serielle Treiber für LD06·LD19·STL27L, die Erzeugung von 6K-360°-Kugelpanoramen und die Erstellung von 3D-Szenen durch das Zusammensetzen von 2D-Ebenen anhand von Winkel und Offset
- Panoramen werden erstellt, indem Fischaugenfotos mit Hugin gestitcht werden; der Weißabgleich wird durch EXIF-basierte Belichtungskonstanz und iterative Optimierung der Farbverstärkung angepasst, und 3D-Szenen sampeln die vertex color aus dem Panorama
- Die Ergebnisse können mit Open3D visualisiert und als PCD·PLY·e57 exportiert werden; für die Ausrichtung mehrerer Szenen werden global registration und ICP-Feinabstimmung verwendet, für die Oberflächenerzeugung Poisson Surface Meshing
- Die Teilekosten liegen ohne Stromversorgung mit Stand April 2025 bei etwa 200–280 US-Dollar; Poisson Surface Meshing ist auf dem Pi4 sehr langsam, daher wird die Ausführung auf einem PC empfohlen
Was PiLiDAR baut
- PiLiDAR ist ein Projekt zum Selbstbau eines 360°-3D-Panoramascanners auf Raspberry-Pi-Basis und ist derzeit als Work in Progress gekennzeichnet
- Der Aufbau ist grob in drei Teile gegliedert
- LiDAR: benutzerdefinierte serielle Treiber für LDRobot LD06, LD19 und STL27L
- Panorama: Erzeugung einer 6K-360°-Kugelkarte
- 3D Scene: Aufbau einer 3D-Szene durch Zusammensetzen von 2D-Ebenen anhand von Winkel und Offset
LiDAR-Verarbeitungsfunktionen
- Der LiDAR-Treiber enthält eine CRC-Paketintegritätsprüfung
- Das Hardware-PWM des Raspberry Pi verwendet rpi_hardware_pwm und wird per Kurvenanpassung kalibriert
- Unterstützt 2D-Live-Visualisierung und Export
- Exportformate sind numpy oder CSV
Erzeugung von Panoramen und 3D-Szenen
- Das 6K-360°-Kugelpanorama wird erzeugt, indem Fischaugenfotos mit Hugin Panorama photo stitcher gestitcht werden
- Die Kamerabelichtung wird konstant gehalten, indem die EXIF-Daten automatisch aufgenommener Bilder gelesen werden
- Der Weißabgleich wird durch iterative Optimierung der Farbverstärkung konstant gehalten
- Die 3D-Szene wird durch Zusammensetzen von 2D-Ebenen auf Basis von Winkel und Offset aufgebaut
- Dabei wird die vertex color aus dem Panorama gesampelt
- Unterstützt Open3D-Visualisierung sowie den Export nach PCD, PLY und e57
- Für die Ausrichtung mehrerer Szenen werden global registration und ICP-Feinabstimmung verwendet
- Poisson Surface Meshing ist auf dem Pi4 sehr langsam, daher wird die Ausführung auf einem PC empfohlen
Vorläufige Ergebnisse und Scan-Zeit
- Die vorläufigen Ergebnisse basieren auf einem einzelnen Scan und wurden ohne Registration und Nachbearbeitung erzeugt
- Externe Scans werden als Beispiel mit colormapped intensity gezeigt, interne Scans mit vertex color
- Beispielhafte Scan-Zeiten sind wie folgt
- Initialisierung: 12 Sekunden
- Aufnahme von 4 Fotos: 17 Sekunden
- 0,167° × 0,18°-Scan: 1 Minute 24 Sekunden
- Stitching und Bereinigung: 37 Sekunden
Hardware-Konfiguration und Kosten
- Als LiDAR wird eines von drei Modellen verwendet
- LDRobot LD06: 80 US-Dollar
- LDRobot LD19: 70 US-Dollar
- LDRobot STL27L: 160 US-Dollar
- Kamera und Objektiv bestehen aus einer Raspberry Pi HQ Camera mit ArduCam M12 Lens und sind mit 60 US-Dollar angegeben
- Raspberry Pi 4 ist mit 50 US-Dollar, NEMA17 42-23-Schrittmotor und A4988-Treiber mit 10 US-Dollar angegeben
- Für die Stromversorgung gibt es zwei Varianten
- v1: 2 18650-Batterien und ein Step-Down-Converter
- v2: 10.000-mAh-USB-Powerbank und ein Step-Up-Converter
- Die Gesamtkosten liegen ohne Stromversorgung mit Stand April 2025 bei etwa 200–280 US-Dollar
- Kauf-Links sind nur Beispiele und nicht zwingend empfohlene Bezugsquellen
Motor, Getriebe und 3D-Druck
- Der Antrieb verwendet einen bipolaren A4988-Schrittmotortreiber und einen bipolaren NEMA17 42×42×23-Schrittmotor
- Der Schrittmotor ist 17HE08-1004S und das Drehmoment ist mit 17 Ncm angegeben
- Für 3D-Druckteile gibt es im separaten PiLiDAR-Hardware Repo Dateien für das Gehäuse und weitere Bauteile
- Für Objektivadapter und Getriebe werden externe Modelle verwendet
LiDAR-Spezifikationen und serielles Protokoll
- LD06-Spezifikationen
- Abtastfrequenz: 4500Hz
- baudrate: 230400
- Scanfrequenz: 5~13Hz
- Distanz: 2cm~12m
- Umgebungslicht: 30kLux
- STL27L-Spezifikationen
- Abtastfrequenz: 21600Hz
- baudrate: 921600
- Ein LD06-Paket hat insgesamt 48 Byte und verwendet eine Big-Endian-Struktur
- Startzeichen: 1 Byte, fester Wert
0x54 - Datenlänge: 1 Byte, derzeit fest auf 12 Messpunkte
- Geschwindigkeit: 2 Byte, Winkel pro Sekunde
- Startwinkel und Endwinkel: jeweils 2 Byte, Einheit 0,01 Grad
- Daten: 36 Byte, 12 Datenpunkte × 3 Byte
- Jeder Datenpunkt besteht aus 2 Byte Distanz und 1 Byte luminance
- Zeitstempel: 2 Byte, Einheit ms; beginnt nach Erreichen von 30000 erneut zu zählen
- CRC check: 1 Byte
- Startzeichen: 1 Byte, fester Wert
- Der Winkel jedes Datenpunkts wird durch lineare Interpolation zwischen Startwinkel und Endwinkel berechnet
Raspberry-Pi-Anschluss und Einrichtung
- Der Anschluss von LD06 oder STL27L besteht aus UART Tx, PWM, GND und VCC 5V
- Für die GPIO-Verbindungen des Raspberry Pi werden folgende Pins verwendet
- LD06 UART0 Rx: GP15
- LD06 PWM0: GP18
- Power Button: GP03
- Scan Button: GP17
- A4988 direction: GP26
- A4988 step: GP19
- A4988 microstepping mode: GP5, GP6, GP13
- Der Power Button ist fest mit Pin 3 verdrahtet und
gpio-shutdownist aktiviert - Beim GY-521-MPU-6060-Beschleunigungssensor wird i2c-GPIO verwendet, um benutzerdefinierte I2C-Pins zuzuordnen, da GPIO3 für den Power Button verwendet wird
- SDA: GPIO22
- SCL: GPIO27
- Der Scan Button wird über ein GPIO-Interrupt-Skript als systemd-Dienst registriert und automatisch gestartet
- UART-Berechtigungen werden entweder vorübergehend für
/dev/ttyS0gesetzt oder per udev-Regel im neuen Verfahren mit der GruppedialoutundMODE="0660"
Software und Remote-Arbeit
- Für das Hardware-PWM des Raspberry Pi wird das Overlay
pwm-2chanaktiviert und die RPi Hardware PWM library installiert - Für Panorama-Stitching werden Hugin und das enblend-Plugin installiert
- Zur Steuerung der Stromversorgung von USB-Ports wird das CLI-Tool uhubctl verwendet
- Jupyter wird für den Remote-Netzwerkzugriff mit den Optionen
--ipund--no-browsergestartet - Für die Open3D-Visualisierung aus der Ferne wird statt des Open3D Web Visualizer eher Plotly empfohlen
- Plotly scheint clientseitig zu rendern
- Der Open3D Web Visualizer rendert hostseitig und streamt JPG-Sequenzen, was CPU und WLAN des Pi belastet
Speicherung von Scan-Daten und Fehlerbehebung
- Um Scans auf USB-Speicher zu dumpen, ist ein Verfahren zum Klonen und Installieren von usb_dump enthalten
- In der Konfigurationsdatei wird
/home/pi/PiLiDAR/scansals Quellverzeichnis angegeben - Die Fehlerbehebung umfasst unter anderem
- CP210x Universal Windows Driver für Windows
RPi.GPIO RuntimeError: Failed to add edge detection, verursacht durch die Entfernung der sysfs-GPIO-Schnittstelle in Raspberry Pi OS Bookworm- als Alternative die Verwendung von rpi-lgpio
- Deaktivieren der Hardwarebeschleunigung, wenn VS Code auf dem Raspberry Pi schlecht läuft
- Da es kein pye57-Wheel für Raspberry Pi arm64 gibt, nach Installation von
libxerces-c-devaus dem Quellcode bauen - Verfahren zum Hinzufügen von WLAN-Einstellungen per SSH mit
wpa_supplicant.conf
Referenzimplementierungen und Inspiration
- Inspiration zum LD06 stammt von LIDAR_LD06_python_loder und Lidar_LD06_for_Arduino
- Für 360-Kamera-Stitching werden der StereoPi-Support-Fork von ShaunPrice und die 360-camera-Skripte von BrianBock als Referenz genannt
- Als weitere Python-LiDAR-Implementierung wird pyLIDAR erwähnt
- Als Referenzen zu ICP werden Doppler-ICP, KISS-ICP und Lidar-Visualizer aufgeführt
4 Kommentare
Meinungen auf Hacker News
Wirklich cool. Bei einem Hardware-Produkt würde ich empfehlen, beim Erstellen der Stückliste (BOM) Links und geschätzte Kosten mit anzugeben.
Die Preise werden sich ändern, aber eine grobe Kostenspanne hilft enorm dabei, etwa auf HN zu entscheiden, ob man es selbst ausprobieren will. Entscheidend ist nicht die exakte Zahl, sondern die ungefähre Größenordnung.
Was man bereits recherchiert hat, sollte man festhalten. Selbst wenn nicht für andere, dann für das zukünftige Ich. Viele Bauteile haben verwirrende Namen; mit Links lässt sich leichter prüfen, ob es dasselbe Teil ist. Und während des Projekts hat man die Teile ohnehin schon gekauft, also hat man Links und Preise vorliegen, was kaum zusätzliche Zeit kostet.
Nach ein paar Tagen oder Wochen erinnert sich niemand mehr daran, also muss man es dokumentieren. 10 Sekunden Notieren können später 30 Minuten erneutes Suchen ersparen. Das war eine der wichtigsten Lektionen, die ich zu Beginn als Ingenieur gelernt habe, und man muss gegen den dummen Teil im Kopf ankämpfen, der flüstert: „Das spart keine Zeit.“ Bei Code-Dokumentation ist es genauso.[0]
Nach grob 15 Minuten Suche sehen die Werte ungefähr so aus und können ungenau sein. Beim Lidar ist es eines von LD06 $80 https://www.aliexpress.us/item/3256803352905216.html, LD19 $70 https://amazon.com/DTOF-D300-Distance-Obstacle-Education/dp/…, STL27L $160 https://www.dfrobot.com/product-2726.html, Kamera und Objektiv $60 https://amazon.com/Arducam-Raspberry-Camera-Distortion-Compatible/dp/…, Raspberry Pi 4 $50, NEMA17 42-23 Stepper $10 https://www.amazon.com/SIMAX3D-Nema17-Stepper-Motor/dp/B0CQLFNSMJ
Selbst ohne Netzteil und Buck Converter liegt man bei etwa $200–$280.
[0] Als ich den Code zum ersten Mal schrieb, wussten nur ich und Gott, was da passiert; inzwischen weiß es nur noch Gott.
Je nach Quelle und Anzahl der Lieferungen muss man die Stücklistenpreise womöglich mit 2 oder 3 multiplizieren.
Es ist wirklich deprimierend, wenn der Zugang zu günstigen, guten Lernmaterialien, mit denen man Kindern und Erwachsenen Elektronik näherbringen kann, durch Steuern im Namen von Dingen wie der Verbesserung der Wettbewerbsfähigkeit der USA verschwindet. Ein komplettes Eigentor.
Im Wörterbuch finde ich keine Bedeutung, die in Richtung „die Menge von etwas reduzieren“ geht. [0]
Wikipedia behandelt die Etymologie auch nicht näher. [1]
[0] https://www.merriam-webster.com/dictionary/buck
[1] https://en.wikipedia.org/wiki/Buck_converter
Dann mach es doch selbst.
Aus der Perspektive von jemandem mit Familie, der viel zu wenig Zeit hat: Schon ein Projekt fertigzustellen ist anstrengend genug, und zur Dokumentation kommt man wahrscheinlich kaum. Wenn ich später alles noch einmal machen müsste, würde ich es vielleicht einfach lassen. Nicht jeder lebt im Keller seiner Mutter und hat freie Zeit übrig.
Der eigentliche Scanner ist hier: [1]
Maximale Reichweite 12 m, und ab diesem Punkt scheint es teuer zu werden. Lichtquelle, Filter und Sensor müssen alle besser werden.
Für die meisten kleinen Roboter ist das ausreichend, und es könnte auch als Zusatzsensor für autonome Fahrzeuge taugen, um Kinder und Hunde rund ums Auto zuverlässig zu erkennen. Aber ein oben montiertes Langstrecken-LIDAR bleibt weiterhin schwierig.
[1] https://www.ldrobot.com/
Meine erste Vermutung wäre, dass ab dieser Reichweite Lasersicherheit zu einem aktiv geregelten Prozess wird. Der Spiegel eines Laserscanners muss sich ständig bewegen, damit sich keine für die menschliche Netzhaut schädliche Energie ansammelt; daher braucht man ein sicherheitskritisches Steuersystem, das Spiegelgeschwindigkeit und -position kontinuierlich überwacht und den Laser abschaltet, wenn er zu langsam wird. Wie sehr liege ich daneben?
Vieles war in den „guten alten Zeiten“ besser, aber es ist wirklich erstaunlich, in einer Zeit zu leben, in der talentierte Einzelpersonen solche Technologien selbst bauen können.
In losem Zusammenhang: Ich suche eine günstige Möglichkeit, auf etwa 300 mm Abstand Distanzen mit ungefähr 10 Mikrometern Genauigkeit zu messen. Hat jemand eine Idee?
my mechanics hat vor ein paar Tagen ein Austauschvideo hochgeladen; die vorhandene Ausrüstung hatte eine Genauigkeit von 5 Mikrometern.
Beim Preis bin ich mir nicht sicher.
Mit einem guten Paar Messschiebern scheint das machbar. Je nach Genauigkeitsanforderung könnte man denselben Ansatz verwenden: ein Gitter aus kapazitiven Zellen, das über eine Messzelle gleitet, während ein Mikrocontroller beim Bewegen die Werte ausliest und anschließend
Atan2()für das Endergebnis verwendet. Nur der Meter-/Anzeige-Teil davon wird separat DRO (Digital ReadOut) genannt.Wenn das Budget keine Rolle spielt, gibt es auch fertige Closed-Loop-Stage-Lösungen:
https://www.pi-usa.us/en/
https://xeryon.com
Viel Glück – und mach dich auf einen Preisschock gefasst.
Außerdem ist wichtig, was für dich „günstig“ bedeutet.
Ich denke darüber nach, so etwas in diese Richtung zu automatisieren:
https://youtu.be/hnHjrz_inQU?si=dNzXVBVFsr7e8m_6
Auch Standard-Laser und Kamerasensoren können beim DIY-Basteln ziemlich unerwartete Präzision liefern.
Das Sketchfab-Beispiel ist fantastisch. Man kann sich durch den 3D-Raum bewegen, als wäre es eine Science-Fiction-Simulation.
Allerdings ist die Mausbedienung extrem verwirrend. Es erscheint ein „Greifen“-Icon, aber tatsächlich fühlt es sich nicht nach Greifen an, und die Bewegungsrichtung ist umgekehrt, sodass es sich völlig unnatürlich anfühlt.
Solche Teile könnte man vermutlich auch aus Saugrobotern von eBay oder Goodwill ausbauen.
Wirklich beeindruckend. Ich habe das Projekt nur grob überflogen, vielleicht ist es also schon enthalten, aber ich frage mich, ob es Genauigkeitsdaten gibt.
Zum Beispiel die Genauigkeit bei 10 m Entfernung – falls dieses LIDAR bei dieser Distanz nicht arbeitet, würde mich auch eine kürzere Entfernung interessieren.
Mit FARO-Scannern bin ich vertraut; sie verwenden einen anderen Mechanismus und sind für das Vermessen von Gebäuden ausreichend genau.
Mir ist klar geworden, dass der Scanner-Markt viele Segmente hat, darunter Leute, die Genauigkeit brauchen, und Leute, die Inhalte für Medien wie Spiele erstellen. Dieses Projekt ist wirklich kaum zu glauben.
Ich habe mich in letzter Zeit etwas mit Photogrammetrie beschäftigt, um Innenräume und Flächen zu scannen. Bisher scheint Metashape am besten zu passen, aber die Präzision ist noch nicht besonders gut, und ich verbessere noch meine Aufnahmetechnik.
Das Hauptziel ist, reale Gebäudeinnenräume in digitale Modelle für Erhaltung und Analyse zu überführen. LIDAR hatte ich kurz in Betracht gezogen, aber als zu schwierig und teuer beiseitegelegt; dieses Projekt scheint diese Annahme infrage zu stellen.
Mich würde interessieren, wie die Nachbearbeitungssoftware aussieht. Kann man eine Punktwolke erzeugen und sie mit anderen Daten wie DSLR-Fotos zum Texturieren kombinieren?
Auf dem zweiten Bild[1] sieht man, dass ein Teil der Wand wegen der hängenden Lampe nicht gescannt wurde, und wahrscheinlich konnte das LIDAR auch die Oberseite des Sofas nicht sehen. Kann man zwei oder mehr Punktwolken zusammenführen, um hinter Objekte und Kanten zu schauen? Kann die Software anhand gemeinsamer Wände oder Punkte automatisch ausrichten, dass es sich um denselben realen Raum handelt, oder muss man ziemlich viel manuell nachjustieren? Gibt es bei LIDAR etwas Entsprechendes zu coded targets oder ARTag[0]? Lässt sich das auf mehrere Räume skalieren?
Ich frage mich, ob es sich im Vergleich zu gut gemachter Photogrammetrie lohnt, oder ob es nur mehr Aufwand bedeutet.
Entschuldigung für die Fragen auf dem Niveau „ich weiß nicht einmal, was ich nicht weiß“.
0: https://en.wikipedia.org/wiki/ARTag
1: https://github.com/PiLiDAR/PiLiDAR/raw/main/images/interior....
Danke fürs Teilen dieser großartigen Arbeit. Mich interessieren Skalierbarkeit und Performance von PiLiDAR, wenn es auf große Outdoor-Datensätze angewendet wird.
Falls ihr es auf Datensätzen wie SemanticKITTI oder nuScenes gebenchmarkt habt, könntet ihr etwas zu Laufzeit, Speicherverbrauch und dazu sagen, wie gut es über die in der Arbeit verwendeten Innenraumszenen hinaus generalisiert?
Solche Datensätze werden meistens mit RGBA-Kameras erstellt, und die Punktwolken werden später in der Nachbearbeitung erzeugt.
Es ist also kein Verarbeitungsmodell, sondern ein Hardware-Hack, um echte Tiefendaten zu erfassen. Du kannst damit scannen, was du willst.
Genau das habe ich vor ein paar Wochen gesucht. Ich hatte seit Wochen Teile bei Amazon im Warenkorb, um ungefähr so etwas zu prototypen, war mir aber bei der eigentlichen Auswahl des LIDAR-Scanners nicht sicher.
Wenn ich aus dem Osterurlaub zurück bin, werde ich mir das als Ausgangspunkt ansehen.
Was ist die Taschenlampen-Community?
https://www.reddit.com/r/flashlight/
Das ist ein kleines Reddit-Subforum, das in Korea in etwa der Taschenlampen-Minor-Galerie von DC Inside entsprechen würde.
Danke.