PiLiDAR: escáner LiDAR con Raspberry Pi
(github.com/PiLiDAR)- PiLiDAR es un proyecto en desarrollo para crear un escáner panorámico 3D DIY de 360° combinando una Raspberry Pi 4, un LiDAR LDRobot, una Raspberry Pi HQ Camera y un motor paso a paso
- Sus funciones principales incluyen drivers seriales personalizados para LD06, LD19 y STL27L, generación de panoramas esféricos 360° en 6K, y creación de escenas 3D ensamblando planos 2D según ángulos y offsets
- Los panoramas se generan uniendo fotos ojo de pez con Hugin; la exposición se mantiene con datos EXIF y el balance de blancos se ajusta mediante optimización iterativa de la ganancia de color, mientras que las escenas 3D muestrean vertex color desde el panorama
- Los resultados se pueden visualizar con Open3D y exportar como PCD, PLY y e57; para alinear varias escenas se usan global registration y ajuste fino con ICP, y para generar superficies se usa Poisson Surface Meshing
- El costo de componentes, sin incluir la fuente de alimentación, es de aproximadamente 200 a 280 dólares a abril de 2025; Poisson Surface Meshing es muy lento en la Pi4, por lo que se recomienda ejecutarlo en una PC
Qué crea PiLiDAR
- PiLiDAR es un proyecto para construir por cuenta propia un escáner panorámico 3D de 360° basado en Raspberry Pi, y actualmente figura como en desarrollo
- La configuración se divide en tres partes principales
- LiDAR: drivers seriales personalizados para LDRobot LD06, LD19 y STL27L
- Panorama: generación de mapas esféricos 360° en 6K
- Escena 3D: construcción de una escena 3D ensamblando planos 2D según ángulos y offsets
Funciones de procesamiento LiDAR
- El driver LiDAR incluye verificación CRC de integridad de paquetes
- El PWM por hardware de Raspberry Pi usa rpi_hardware_pwm y se calibra mediante ajuste de curvas
- Soporta visualización 2D en vivo y exportación
- Los formatos de exportación son numpy o CSV
Generación de panoramas y escenas 3D
- El panorama esférico 360° en 6K se crea uniendo fotos ojo de pez con Hugin Panorama photo stitcher
- La exposición de la cámara se mantiene constante leyendo los datos EXIF de las imágenes capturadas automáticamente
- El balance de blancos se mantiene constante optimizando iterativamente la ganancia de color
- La escena 3D se construye ensamblando planos 2D según ángulos y offsets
- Se muestrea vertex color desde el panorama
- Soporta visualización con Open3D y exportación a PCD, PLY y e57
- Para alinear varias escenas usa global registration y ajuste fino con ICP
- Poisson Surface Meshing es muy lento en la Pi4, por lo que se recomienda ejecutarlo en una PC
Resultados preliminares y tiempos de escaneo
- Los resultados preliminares corresponden a un solo escaneo y no incluyen registration ni posprocesamiento
- El escaneo exterior se ofrece como ejemplo de colormapped intensity, y el escaneo interior como ejemplo de vertex color
- Ejemplos de tiempos de escaneo
- Inicialización: 12 segundos
- Captura de 4 fotos: 17 segundos
- Escaneo de 0.167° × 0.18°: 1 minuto 24 segundos
- Stitching y limpieza: 37 segundos
Configuración de hardware y costo
- Se usa uno de tres LiDAR
- LDRobot LD06: 80 dólares
- LDRobot LD19: 70 dólares
- LDRobot STL27L: 160 dólares
- La cámara y el lente son una combinación de Raspberry Pi HQ Camera y ArduCam M12 Lens, indicada en 60 dólares
- La Raspberry Pi 4 figura en 50 dólares, y el motor paso a paso NEMA17 42-23 con driver A4988 en 10 dólares
- Hay dos opciones de alimentación
- v1: 2 baterías 18650 y un step-down converter
- v2: power bank USB de 10,000 mAh y un step-up converter
- El costo total, sin incluir la fuente de alimentación, es de aproximadamente 200 a 280 dólares a abril de 2025
- Los enlaces de compra son solo ejemplos y no necesariamente tiendas recomendadas
Motor, caja reductora e impresión 3D
- El sistema de accionamiento usa un driver paso a paso bipolar A4988 y un motor paso a paso bipolar NEMA17 42×42×23
- El motor paso a paso es 17HE08-1004S, con un torque indicado de 17 Ncm
- Las piezas impresas en 3D tienen archivos de housing y componentes adicionales en el repo PiLiDAR-Hardware aparte
- El adaptador de lente y la caja reductora usan modelos externos
Especificaciones LiDAR y protocolo serial
- Especificaciones del LD06
- Frecuencia de muestreo: 4500 Hz
- baudrate: 230400
- Frecuencia de escaneo: 5 a 13 Hz
- Distancia: 2 cm a 12 m
- Luz ambiental: 30 kLux
- Especificaciones del STL27L
- Frecuencia de muestreo: 21600 Hz
- baudrate: 921600
- El paquete LD06 tiene un total de 48 bytes y estructura big endian
- Carácter de inicio: 1 byte, valor fijo
0x54 - Longitud de datos: 1 byte, actualmente fija en 12 puntos de medición
- Velocidad: 2 bytes, ángulo por segundo
- Ángulo inicial y ángulo final: 2 bytes cada uno, unidad de 0.01 grados
- Datos: 36 bytes, 12 puntos de datos × 3 bytes
- Cada punto de datos consta de 2 bytes de distancia y 1 byte de luminance
- Timestamp: 2 bytes, en ms, vuelve a contar al llegar a 30000
- CRC check: 1 byte
- Carácter de inicio: 1 byte, valor fijo
- El ángulo de cada punto de datos se calcula mediante interpolación lineal entre el ángulo inicial y el final
Conexión y configuración de Raspberry Pi
- La conexión del LD06 o STL27L se compone de UART Tx, PWM, GND y VCC 5 V
- La conexión GPIO de Raspberry Pi usa lo siguiente
- 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
- El botón de encendido se cablea directamente al Pin 3 y se activa
gpio-shutdown - Como el GPIO3 se usa para el botón de encendido, el acelerómetro GY-521 MPU 6060 mapea pines I2C personalizados mediante i2c-GPIO
- SDA: GPIO22
- SCL: GPIO27
- El botón de escaneo se inicia automáticamente registrando un script de interrupción GPIO como servicio systemd
- Para permisos de UART, se puede dar permiso temporalmente a
/dev/ttyS0o, con el método nuevo, usar reglas udev para configurar el grupodialoutyMODE="0660"
Software y trabajo remoto
- El PWM por hardware de Raspberry Pi se usa activando el overlay
pwm-2chane instalando la RPi Hardware PWM library - Para el stitching de panoramas se instalan Hugin y el plugin enblend
- Para controlar la alimentación de los puertos USB se usa la herramienta CLI uhubctl
- Jupyter se ejecuta con las opciones
--ipy--no-browserpara acceso remoto por red - Para visualización remota con Open3D se indica que conviene usar Plotly en lugar de Open3D Web Visualizer
- Plotly parece renderizar del lado del cliente
- Se indica que Open3D Web Visualizer renderiza del lado del host y transmite una secuencia de JPG, lo que carga la CPU y el Wi‑Fi de la Pi
Almacenamiento de datos de escaneo y solución de problemas
- Se incluye un procedimiento para clonar e instalar usb_dump a fin de volcar los escaneos en un almacenamiento USB
- El archivo de configuración define
/home/pi/PiLiDAR/scanscomo directorio de origen - La sección de solución de problemas incluye
- CP210x Universal Windows Driver para Windows
RPi.GPIO RuntimeError: Failed to add edge detection, causado por la eliminación de la interfaz sysfs GPIO en Raspberry Pi OS Bookworm- Uso de rpi-lgpio como alternativa
- Desactivar la aceleración por hardware cuando VS Code funciona lento en Raspberry Pi
- Compilar pye57 en Raspberry Pi arm64 tras instalar
libxerces-c-dev, porque no hay wheel disponible - Procedimiento con
wpa_supplicant.confpara agregar configuración Wi‑Fi por SSH
Implementaciones de referencia e inspiración
- La inspiración relacionada con LD06 proviene de LIDAR_LD06_python_loder y Lidar_LD06_for_Arduino
- Para el stitching de cámara 360 se tomaron como referencia el fork con soporte para StereoPi de ShaunPrice y los scripts 360-camera de BrianBock
- Se menciona pyLIDAR como otra implementación LiDAR en Python
- Como referencias relacionadas con ICP se incluyen Doppler-ICP, KISS-ICP y Lidar-Visualizer
4 comentarios
Opiniones en Hacker News
Muy genial. Si es un producto de hardware, recomiendo que al hacer la lista de materiales (BOM) anoten también los enlaces y el costo estimado.
Los precios van a cambiar, pero tener un rango aproximado de costos ayuda muchísimo a decidir, al verlo en sitios como HN, si vale la pena intentarlo uno mismo. Lo importante no es la cifra exacta, sino la escala aproximada.
Conviene anotar lo que ya investigaste. Aunque no sea para otros, le servirá a tu yo del futuro. Hay muchas piezas con nombres confusos, y tener enlaces facilita confirmar si es el mismo componente; además, durante el proyecto ya compraste las piezas, así que casi no toma tiempo extra guardar el enlace y el precio.
Después de unos días o semanas nadie se acuerda, así que hay que documentarlo. Anotar algo en 10 segundos puede evitarte 30 minutos de volver a buscarlo después. Una de las mayores lecciones que aprendí al empezar como ingeniero fue esta, y hay que pelear contra esa parte tonta de la cabeza que susurra “esto no ahorra tiempo”. Lo mismo aplica para documentar código[0].
Estos son valores que encontré buscando unos 15 minutos y pueden no ser exactos. El Lidar es uno de estos: 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; cámara y lente $60 https://amazon.com/Arducam-Raspberry-Camera-Distortion-Compatible/dp/…; Raspberry Pi 4 $50; motor paso a paso NEMA17 42-23 $10 https://www.amazon.com/SIMAX3D-Nema17-Stepper-Motor/dp/B0CQLFNSMJ.
Incluso sin incluir la fuente de alimentación y el convertidor buck, son unos $200~$280.
[0] Cuando escribí el código por primera vez, Dios y yo sabíamos qué estaba pasando; con el tiempo, ahora solo Dios lo sabe.
Quizá haya que multiplicar los precios de la lista de materiales por 2 o 3, según el origen y la cantidad de envíos.
Es realmente deprimente que el acceso a materiales de aprendizaje baratos y buenos para introducir a niños y adultos a la electrónica desaparezca al gravarse con impuestos bajo pretextos como mejorar la competitividad de EE. UU. Es un autogol en toda regla.
Al consultar el diccionario, no veo un significado cercano a “reducir la cantidad de algo”. [0]
Wikipedia tampoco trata mucho la etimología. [1]
[0] https://www.merriam-webster.com/dictionary/buck
[1] https://en.wikipedia.org/wiki/Buck_converter
Entonces hazlo tú.
Desde la posición de alguien con familia y muy poco tiempo, solo terminar un proyecto ya es bastante difícil, y es muy probable que casi no pueda documentarlo. Si tuviera que volver a hacerlo después, quizá simplemente no lo haría. No todo el mundo vive en el sótano de su mamá disfrutando de tiempo libre.
El escáner real está aquí: [1]
Tiene distancia máxima de 12 m, y parece que a partir de este punto empieza a encarecerse. La fuente de luz, los filtros y los sensores tienen que mejorar todos.
Para la mayoría de los robots pequeños es suficiente, y también podría servir como sensor auxiliar en un auto autónomo para detectar de forma confiable niños y perros alrededor del vehículo. Pero los LIDAR de largo alcance montados en la parte superior siguen siendo difíciles.
[1] https://www.ldrobot.com/
Mi primera suposición es que, a partir de esa distancia, la seguridad láser se vuelve un proceso de control activo. Como el espejo del escáner láser debe moverse continuamente para que no se acumule en la retina humana una cantidad de energía dañina, se necesita un sistema de control obligatorio de seguridad que monitoree de forma continua la velocidad y posición del espejo, y que apague el láser si se vuelve demasiado lento. ¿Qué tan equivocado estaré?
Había muchas cosas mejores en los “viejos buenos tiempos”, pero es realmente asombroso vivir en una época en la que una persona talentosa puede crear esta tecnología por su cuenta.
En algo relacionado, estoy buscando una forma barata de medir distancias con una precisión de unos 10 micrones a una distancia de alrededor de 300 mm. ¿Alguna idea?
my mechanics subió un video de reemplazo hace unos días, y el equipo existente tenía una precisión de 5 micrones
No sé bien el precio
Parece posible incluso con un buen par de calibradores. Según los requisitos de precisión, podrías usar el mismo enfoque. Se coloca una retícula de celdas capacitivas que se desliza sobre una celda de medición, y un microcontrolador lee los valores al moverse y luego usa Atan2() para el resultado final. La parte de medición de eso, por separado, es lo que se llama DRO (Digital ReadOut)
Si no tienes restricciones de presupuesto, también hay soluciones de etapas de lazo cerrado ya hechas:
https://www.pi-usa.us/en/
https://xeryon.com
Suerte, y prepárate para el golpe de la etiqueta de precio
También importa qué significa “barato” para ti
Estoy pensando en automatizar algo en esta línea:
https://youtu.be/hnHjrz_inQU?si=dNzXVBVFsr7e8m_6
Incluso láseres y sensores de cámara comerciales, si los trasteas en modo DIY, pueden dar una precisión bastante inesperada
El ejemplo de Sketchfab es fantástico. Puedes moverte dentro del espacio 3D como en una simulación de ciencia ficción
Eso sí, los controles con el mouse son demasiado confusos. Aparece un ícono de “agarrar”, pero en realidad no se siente como que agarres nada, y la dirección de movimiento está invertida, así que se siente totalmente antinatural
Parece que también se podrían sacar piezas así de aspiradoras robot de eBay o Goodwill
Es realmente impresionante. Solo le di una mirada rápida al proyecto, así que quizá ya esté incluido, pero me da curiosidad si hay datos de precisión
Por ejemplo, la precisión a 10 m de distancia; si este LIDAR no funciona a esa distancia, me gustaría saberlo aunque sea para una distancia menor
Estoy familiarizado con los escáneres FARO, que usan un mecanismo de otro tipo y son lo bastante precisos para mediciones de edificios
También me di cuenta de que el mercado de escáneres tiene varias ramas, entre ellas quienes necesitan precisión y quienes crean contenido para medios tipo videojuegos. Este proyecto es realmente increíble
Últimamente he estado trasteando un poco con fotogrametría para escanear habitaciones y espacios interiores. Hasta ahora Metashape parece ser lo que mejor encaja, pero la precisión todavía no es muy buena, y también estoy mejorando mi técnica de captura
El objetivo principal es convertir interiores de edificios reales en modelos digitales para preservación y análisis. Consideré brevemente LIDAR, pero lo descarté por demasiado difícil y caro; este proyecto parece cuestionar esa suposición
Me da curiosidad cómo es el software de posprocesamiento. ¿Se puede obtener una nube de puntos y combinarla con otros datos, como fotos DSLR, para texturizar?
En la segunda imagen[1] se ve que una lámpara colgante bloqueó parte de la pared, y probablemente el LIDAR tampoco vio la parte superior del sofá. ¿Se pueden combinar dos o más nubes de puntos para ver detrás de objetos y esquinas? ¿El software puede alinear automáticamente que es la misma habitación real usando paredes o puntos comunes, o hay que ajustarlo bastante a mano? ¿Existe en LIDAR algo equivalente a coded targets o ARTag[0]? ¿Se puede escalar a varias habitaciones?
Me pregunto si vale la pena considerarlo frente a una fotogrametría bien hecha, o si solo implicaría más trabajo
Perdón por preguntas de alguien que ni siquiera sabe qué es lo que no sabe
0: https://en.wikipedia.org/wiki/ARTag
1: https://github.com/PiLiDAR/PiLiDAR/raw/main/images/interior....
Gracias por compartir este gran trabajo. Me interesa la escalabilidad y el rendimiento de PiLiDAR al aplicarlo a conjuntos de datos exteriores a gran escala
Si lo han evaluado en datasets como SemanticKITTI o nuScenes, ¿podrían comentar sobre el tiempo de ejecución, el uso de memoria y qué tan bien generaliza más allá de las escenas interiores usadas en el artículo?
Esos datasets normalmente se crean con cámaras RGBA, y las nubes de puntos se generan después en una etapa de posprocesamiento
O sea, no es un modelo de procesamiento, sino un hack de hardware para obtener datos reales de profundidad. Puedes montar lo que quieras
Esto es justo lo que estaba buscando hace unas semanas. Había tenido piezas en el carrito de Amazon durante semanas para prototipar algo más o menos parecido, pero no estaba seguro de la elección del escáner LIDAR en sí
Cuando vuelva de las vacaciones de Pascua, tendré que revisar esto como punto de partida
¿Qué es la comunidad de linternas?
https://www.reddit.com/r/flashlight/
Es una pequeña comunidad dentro de Reddit, algo así como la galería menor de linternas de DC Inside en Corea.
Gracias.