6 points par GN⁺ 2025-04-20 | 4 commentaires | Partager sur WhatsApp
  • PiLiDAR est un projet en cours qui combine un Raspberry Pi 4, un LiDAR LDRobot, une Raspberry Pi HQ Camera et un moteur pas-à-pas pour créer un scanner panoramique 3D DIY à 360°
  • Ses fonctions clés comprennent un pilote série personnalisé pour les LD06, LD19 et STL27L, la génération de panoramas sphériques 360° en 6K, et la création de scènes 3D en assemblant des plans 2D selon des angles et des offsets
  • Les panoramas sont produits en assemblant des photos fisheye avec Hugin ; l’exposition est maintenue via les données EXIF, la balance des blancs est ajustée par optimisation itérative des gains de couleur, et la scène 3D échantillonne les vertex colors depuis le panorama
  • Les résultats peuvent être visualisés avec Open3D et exportés en PCD, PLY et e57 ; l’alignement de plusieurs scènes utilise le global registration et un affinage ICP, tandis que la génération de surface repose sur Poisson Surface Meshing
  • Le coût des composants est d’environ 200 à 280 dollars hors alimentation, au 1er avril 2025, et il est recommandé d’exécuter Poisson Surface Meshing sur PC car il est très lent sur Pi4

Ce que crée PiLiDAR

  • PiLiDAR est un projet de fabrication maison d’un scanner panoramique 3D à 360° basé sur Raspberry Pi, actuellement indiqué comme en cours de développement
  • L’ensemble se divise en trois grandes parties
    • LiDAR : pilote série personnalisé pour LDRobot LD06, LD19 et STL27L
    • Panorama : génération d’une carte sphérique 360° en 6K
    • Scène 3D : construction d’une scène 3D en assemblant des plans 2D selon des angles et des offsets

Fonctions de traitement LiDAR

  • Le pilote LiDAR inclut un contrôle d’intégrité des paquets par CRC
  • Le PWM matériel du Raspberry Pi utilise rpi_hardware_pwm et est calibré par ajustement de courbe
  • La visualisation 2D en direct et l’export sont pris en charge
    • Les formats d’export sont numpy ou CSV

Création de panoramas et de scènes 3D

  • Les panoramas sphériques 360° en 6K sont créés en assemblant des photos fisheye avec Hugin Panorama photo stitcher
  • L’exposition de la caméra est maintenue constante en lisant les données EXIF des images prises automatiquement
  • La balance des blancs est stabilisée par optimisation itérative des gains de couleur
  • La scène 3D est construite en assemblant des plans 2D selon les angles et les offsets
    • Les vertex colors sont échantillonnées depuis le panorama
    • La visualisation avec Open3D et l’export en PCD, PLY et e57 sont pris en charge
    • L’alignement de plusieurs scènes utilise le global registration et un affinage ICP
    • Poisson Surface Meshing est très lent sur Pi4, il est donc recommandé de l’exécuter sur PC

Résultats préliminaires et temps de scan

  • Les résultats préliminaires correspondent à un scan unique, sans registration ni post-traitement
  • Le scan extérieur est fourni comme exemple d’intensité avec colormap, et le scan intérieur comme exemple avec vertex color
  • Exemple de temps de scan
    • Initialisation : 12 secondes
    • Prise de 4 photos : 17 secondes
    • Scan à 0,167° × 0,18° : 1 min 24 s
    • Stitching et nettoyage : 37 secondes

Configuration matérielle et coût

  • Le LiDAR utilise l’un des trois modèles suivants
    • LDRobot LD06 : 80 dollars
    • LDRobot LD19 : 70 dollars
    • LDRobot STL27L : 160 dollars
  • La caméra et l’objectif combinent une Raspberry Pi HQ Camera et un ArduCam M12 Lens, indiqués à 60 dollars
  • Le Raspberry Pi 4 est indiqué à 50 dollars, et le moteur pas-à-pas NEMA17 42-23 avec pilote A4988 à 10 dollars
  • Deux modes d’alimentation sont prévus
    • v1 : deux batteries 18650 et un convertisseur step-down
    • v2 : une batterie externe USB 10 000 mAh et un convertisseur step-up
  • Le coût total est d’environ 200 à 280 dollars hors alimentation, au 1er avril 2025
  • Les liens d’achat ne sont donnés qu’à titre d’exemple et ne constituent pas nécessairement des vendeurs recommandés

Moteur, réducteur et impression 3D

Spécifications LiDAR et protocole série

  • Spécifications du LD06
    • Fréquence d’échantillonnage : 4500 Hz
    • baudrate : 230400
    • Fréquence de scan : 5 à 13 Hz
    • Distance : 2 cm à 12 m
    • Lumière ambiante : 30 kLux
  • Spécifications du STL27L
    • Fréquence d’échantillonnage : 21600 Hz
    • baudrate : 921600
  • Un paquet LD06 fait au total 48 octets, avec une structure big endian
    • Caractère de début : 1 octet, valeur fixe 0x54
    • Longueur des données : 1 octet, actuellement fixe à 12 points de mesure
    • Vitesse : 2 octets, angle par seconde
    • Angle de départ et angle de fin : 2 octets chacun, unité de 0,01 degré
    • Données : 36 octets, 12 points de données × 3 octets
    • Chaque point de données comprend une distance sur 2 octets et une luminance sur 1 octet
    • Horodatage : 2 octets, en ms, repart de zéro lorsqu’il atteint 30000
    • CRC check : 1 octet
  • L’angle de chaque point de données est calculé par interpolation linéaire entre l’angle de départ et l’angle de fin

Connexion et configuration du Raspberry Pi

  • La connexion du LD06 ou du STL27L se compose de UART Tx, PWM, GND et VCC 5V
  • Les connexions GPIO du Raspberry Pi utilisent les broches suivantes
    • 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
  • Le bouton d’alimentation est câblé en dur sur la broche 3, avec gpio-shutdown activé
  • Comme le GPIO3 est utilisé pour le bouton d’alimentation, l’accéléromètre GY-521 MPU 6060 mappe des broches I2C personnalisées via i2c-GPIO
    • SDA : GPIO22
    • SCL : GPIO27
  • Le bouton de scan démarre automatiquement via un script d’interruption GPIO enregistré comme service systemd
  • Les permissions UART sont accordées temporairement à /dev/ttyS0, ou, dans la nouvelle méthode, via des règles udev définissant le groupe dialout et MODE="0660"

Logiciel et travail à distance

  • Le PWM matériel du Raspberry Pi s’utilise en activant l’overlay pwm-2chan et en installant la bibliothèque RPi Hardware PWM
  • Hugin et le plugin enblend sont installés pour le stitching des panoramas
  • Le contrôle de l’alimentation des ports USB utilise l’outil en ligne de commande uhubctl
  • Jupyter est lancé avec les options --ip et --no-browser pour un accès réseau à distance
  • Pour la visualisation Open3D à distance, il est indiqué que Plotly est préférable à Open3D Web Visualizer
    • Plotly semble effectuer le rendu côté client
    • Open3D Web Visualizer effectuerait le rendu côté hôte et streamerait une séquence JPG, ce qui sollicite le CPU et le Wi-Fi du Pi

Stockage des données de scan et dépannage

  • Une procédure est incluse pour cloner et installer usb_dump, afin de déverser les scans vers un stockage USB
  • Le fichier de configuration définit /home/pi/PiLiDAR/scans comme répertoire source
  • Les points de dépannage incluent
    • CP210x Universal Windows Driver pour Windows
    • RPi.GPIO RuntimeError: Failed to add edge detection, dû à la suppression de l’interface GPIO sysfs dans Raspberry Pi OS Bookworm
    • L’utilisation de rpi-lgpio comme alternative
    • La désactivation de l’accélération matérielle lorsque VS Code est lent sur Raspberry Pi
    • L’absence de wheel pye57 pour Raspberry Pi arm64, nécessitant l’installation de libxerces-c-dev puis une compilation
    • La procédure wpa_supplicant.conf pour ajouter une configuration Wi-Fi via SSH

Implémentations de référence et inspirations

4 commentaires

 
GN⁺ 2025-04-20
Avis sur Hacker News
  • Vraiment très cool. Pour un produit matériel, je recommande, quand on établit une liste de composants (BOM), d’y inclure les liens et les coûts estimés
    Les prix changeront, mais avoir une fourchette approximative aide énormément à décider, en voyant ça sur HN par exemple, si l’on veut tenter de le faire soi-même. L’important n’est pas le chiffre exact, mais l’ordre de grandeur
    Mieux vaut noter les recherches déjà faites. Même si ce n’est pas pour les autres, ce sera utile à votre futur vous. Beaucoup de composants ont des noms qui prêtent à confusion, donc les liens permettent de vérifier plus facilement qu’il s’agit bien du même objet ; et pendant le projet, comme vous avez déjà acheté les pièces, vous avez déjà les liens et les prix, ce qui ne demande presque pas de temps supplémentaire
    Au bout de quelques jours ou semaines, personne ne s’en souvient, donc il faut documenter. Prendre 10 secondes pour le noter peut éviter de passer 30 minutes à le rechercher plus tard. C’est l’une des plus grandes leçons que j’ai apprises en commençant comme ingénieur, et il faut lutter contre cette partie idiote de son cerveau qui murmure que « ça ne fera pas gagner de temps ». C’est pareil pour la documentation du code[0]
    Voici les valeurs que j’ai trouvées en cherchant vite fait pendant 15 minutes environ, elles peuvent être inexactes. Le Lidar est l’un de ceux-ci : 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 ; caméra et objectif à 60 $ https://amazon.com/Arducam-Raspberry-Camera-Distortion-Compatible/dp/… ; Raspberry Pi 4 à 50 $ ; moteur pas-à-pas NEMA17 42-23 à 10 $ https://www.amazon.com/SIMAX3D-Nema17-Stepper-Motor/dp/B0CQLFNSMJ
    Même sans l’alimentation ni le convertisseur buck, on est autour de 200 à 280 $
    [0] Quand j’ai écrit le code pour la première fois, Dieu et moi savions ce qui se passait ; avec le temps, désormais seul Dieu le sait

    • Ce genre de projet d’apprentissage risque de devenir beaucoup moins accessible à cause des droits de douane extrêmes et de la suppression de l’exemption pour les petits montants
      Il faudra peut-être multiplier les prix de la liste de composants par 2 ou 3 selon la source et le nombre d’expéditions
      C’est vraiment déprimant de passer d’un accès à des supports d’apprentissage peu chers et de qualité pour initier enfants et adultes à l’électronique à leur disparition sous l’effet de taxes imposées au nom de choses comme l’amélioration de la compétitivité américaine. Un véritable but contre son camp
    • Comme c’est sur GitHub, on peut aider en envoyant une PR pour la liste de composants
    • Je sais ce qu’est un convertisseur buck, mais je me demande pourquoi on l’appelle « buck converter »
      Même dans le dictionnaire, je ne vois pas vraiment de sens proche de « réduire la quantité de quelque chose ». [0]
      Wikipédia ne détaille pas non plus l’étymologie. [1]
      [0] https://www.merriam-webster.com/dictionary/buck
      [1] https://en.wikipedia.org/wiki/Buck_converter
    • Je suis surpris que ce niveau de coût soit trop élevé pour des entreprises comme Tesla
    • C’est le commentaire le plus ingrat que j’aie vu aujourd’hui, à venir asséner « voilà ce qu’il aurait fallu faire »
      Dans ce cas, faites-le vous-même
      Quand on a une famille et qu’on manque cruellement de temps, rien que terminer le projet est déjà énorme, et il y a de fortes chances qu’on ne puisse quasiment pas le documenter. S’il fallait y revenir plus tard, on pourrait tout simplement ne pas le faire. Tout le monde ne vit pas dans le sous-sol de sa mère avec du temps libre à revendre
  • Le scanner réel est ici : [1]
    Portée maximale de 12 m, et il semble que ce soit à partir de là que ça commence à coûter cher. La source lumineuse, les filtres et les capteurs doivent tous être meilleurs
    C’est suffisant pour la plupart des petits robots, et ça peut aussi convenir comme capteur auxiliaire pour voiture autonome, par exemple pour détecter de manière fiable enfants et chiens autour du véhicule. Mais le LIDAR longue portée monté en hauteur reste difficile
    [1] https://www.ldrobot.com/

    • J’aimerais savoir d’où vient réellement cette hausse de prix. Je ne trouve pas grand-chose en cherchant
      Ma première hypothèse est qu’à partir de cette distance, la sécurité laser devient peut-être un processus de contrôle actif. Comme le miroir du scanner laser doit rester en mouvement pour éviter qu’une énergie nocive ne s’accumule sur la rétine d’une personne, il faut un système de contrôle de sécurité indispensable qui surveille en continu la vitesse et la position du miroir, et coupe le laser s’il ralentit trop. À quel point est-ce que je me trompe ?
  • Il y avait beaucoup de choses meilleures au « bon vieux temps », mais c’est vraiment incroyable de vivre à une époque où des individus talentueux peuvent fabriquer eux-mêmes ce genre de technologie

  • Dans un registre un peu lié, je cherche un moyen bon marché de mesurer une distance avec une précision d’environ 10 microns à environ 300 mm. Des idées ?

    • Ça semble entrer dans le domaine des afficheurs numériques de position (DRO) utilisés sur les fraiseuses et les tours
      my mechanics a publié il y a quelques jours une vidéo de remplacement, et l’équipement existant avait une précision de 5 microns
      Je ne connais pas vraiment le prix
    • Tout dépend de l’amplitude de mouvement de l’écart à mesurer, et de la possibilité pour le système de mesure de toucher quelque chose ou d’être fixé
      Une bonne paire de pieds à coulisse pourrait aussi faire l’affaire. Selon les exigences de précision, on pourrait utiliser la même approche : une grille de cellules capacitives glissant au-dessus de la cellule de mesure, avec un microcontrôleur qui lit les valeurs pendant le déplacement puis utilise Atan2() pour le résultat final. La partie « règle » seule de ce système s’appelle un DRO (Digital ReadOut)
    • J’ai eu un problème similaire et j’ai dû fabriquer un dispositif sur mesure d’un coût que je préfère ne pas admettre. Je recommande donc de commencer par regarder les kits DRO pour fraiseuses CNC
      Si le budget n’est pas une contrainte, il existe aussi des solutions de platines en boucle fermée prêtes à l’emploi :
      https://www.pi-usa.us/en/
      https://xeryon.com
      Bonne chance, et prépare-toi au choc des tarifs
    • J’ai quelques idées de conception pour un système DIY, mais tout dépend de l’argent et du temps que tu peux consacrer aux expériences
      Ce que signifie « bon marché » pour toi compte aussi beaucoup
      Je réfléchis à automatiser quelque chose dans cette direction :
      https://youtu.be/hnHjrz_inQU?si=dNzXVBVFsr7e8m_6
      Des lasers et capteurs caméra du commerce, bricolés en DIY, peuvent aussi donner une précision assez surprenante
    • Pour trouver des idées, ça vaut aussi le coup de regarder ceci : https://youtu.be/qMYBwbTIL-0
  • L’exemple Sketchfab est fantastique. On peut se déplacer dans l’espace 3D comme dans une simulation de science-fiction
    En revanche, les contrôles à la souris sont vraiment déroutants. Une icône de « saisie » apparaît, mais on n’a pas du tout l’impression de saisir quoi que ce soit, et le sens de déplacement est inversé, ce qui paraît complètement contre-intuitif

  • On pourrait peut-être récupérer ce genre de pièces dans des robots aspirateurs trouvés sur eBay ou chez Goodwill

    • Ici, par « ce genre de pièces », il s’agit de capteurs LIDAR
  • C’est vraiment impressionnant. Je n’ai fait que parcourir rapidement le projet, donc c’est peut-être déjà dedans, mais je me demande s’il existe des données de précision
    Par exemple la précision à 10 m ; si ce LIDAR ne fonctionne pas à cette distance, même à une distance plus courte, ça m’intéresserait
    Je connais bien les scanners FARO, qui utilisent un mécanisme différent et sont suffisamment précis pour les relevés architecturaux
    J’ai aussi découvert que le marché des scanners se divise en plusieurs segments, notamment les gens qui ont besoin de précision et ceux qui créent du contenu pour des médias comme les jeux. Ce projet est vraiment à peine croyable

  • Ces derniers temps, je bidouille un peu la photogrammétrie pour scanner des pièces et des espaces intérieurs. Jusqu’ici, Metashape semble être ce qui me convient le mieux, mais la précision n’est pas encore terrible, et j’améliore aussi ma technique de prise de vue
    L’objectif principal est de transformer l’intérieur de bâtiments réels en modèles numériques pour la conservation et l’analyse. J’avais brièvement envisagé le LIDAR, puis je l’avais écarté comme trop difficile et trop coûteux, mais ce projet semble remettre cette hypothèse en question
    Je me demande à quoi ressemble le logiciel de post-traitement. Peut-on obtenir un nuage de points et le fusionner avec d’autres données, comme des photos DSLR, pour faire du texturage ?
    Sur la deuxième image[1], une partie du mur n’a pas été scannée parce qu’elle est masquée par une lampe suspendue, et le LIDAR n’a probablement pas vu le dessus du canapé non plus. Peut-on fusionner deux nuages de points ou plus pour voir derrière les objets et les angles ? Le logiciel peut-il aligner automatiquement la même pièce réelle à partir de murs ou de points communs, ou faut-il faire pas mal d’ajustements à la main ? Existe-t-il pour le LIDAR un équivalent des coded targets ou d’ARTag[0] ? Est-ce extensible à plusieurs pièces ?
    Je me demande si ça vaut la peine par rapport à une photogrammétrie bien faite, ou si ça demande simplement plus d’efforts
    Désolé pour ces questions de quelqu’un qui ne sait même pas ce qu’il ignore
    0: https://en.wikipedia.org/wiki/ARTag
    1: https://github.com/PiLiDAR/PiLiDAR/raw/main/images/interior....

    • C’est de la pub assez directe, mais si tu as un iPhone Pro ou un iPad Pro avec Lidar intégré, tu devrais essayer Dot3D. Ça fait tout ce que tu décris, et c’est conçu pour être facile à utiliser
  • Merci d’avoir partagé ce superbe travail. Je suis curieux de connaître la scalabilité et les performances de PiLiDAR appliqué à de grands jeux de données extérieurs
    Si vous l’avez benchmarké sur des jeux de données comme SemanticKITTI ou nuScenes, pourriez-vous indiquer le temps d’exécution, l’utilisation mémoire, et dans quelle mesure il généralise au-delà des scènes intérieures utilisées dans l’article ?

    • Je pense qu’il y a un malentendu. Corrigez-moi si je me trompe, mais ce n’est pas un modèle de traitement de données : c’est un scanner LIDAR DIY pour l’acquisition de données
      Ces jeux de données sont généralement créés avec des caméras RGBA, et les nuages de points sont générés ensuite lors d’une étape de post-traitement
      Donc ce n’est pas un modèle de traitement, mais un hack matériel pour obtenir de vraies données de profondeur. Tu peux ensuite en faire ce que tu veux
  • C’est exactement ce que je cherchais il y a quelques semaines. J’ai des pièces dans mon panier Amazon depuis des semaines pour prototyper quelque chose d’à peu près similaire, mais je n’étais pas sûr du choix du scanner LIDAR à utiliser
    Quand je rentrerai des vacances de Pâques, je vais regarder ça comme point de départ

 
chcv0313 2025-04-22

Qu’est-ce que la communauté des lampes torches ?

 
savvykang 2025-05-03

https://www.reddit.com/r/flashlight/
C'est une petite communauté sur Reddit, comparable en France à la galerie mineure des lampes torches de DC Inside.

 
chcv0313 2025-05-20

Merci