PiLiDAR - scanner LiDAR com Raspberry Pi
(github.com/PiLiDAR)- PiLiDAR é um projeto em andamento para criar um scanner panorâmico 3D de 360° DIY combinando Raspberry Pi 4, LiDAR da LDRobot, Raspberry Pi HQ Camera e motor de passo
- Os recursos principais incluem driver serial customizado para LD06·LD19·STL27L, geração de panoramas esféricos 360° em 6K e criação de cenas 3D montando planos 2D com base em ângulo e deslocamento
- Os panoramas são criados costurando fotos olho de peixe com Hugin, mantendo a exposição com base em EXIF e ajustando o balanço de branco por otimização iterativa de ganho de cor; as cenas 3D fazem amostragem de vertex color a partir do panorama
- Os resultados podem ser visualizados com Open3D e exportados em PCD·PLY·e57; para alinhar várias cenas são usados global registration e ajuste fino com ICP, e para geração de superfícies é usado Poisson Surface Meshing
- O custo das peças, excluindo a fonte de alimentação, fica em cerca de US$ 200–280 em abril de 2025, e o Poisson Surface Meshing é muito lento no Pi4, sendo recomendado executá-lo em um PC
O que o PiLiDAR cria
- PiLiDAR é um projeto para montar por conta própria um scanner panorâmico 3D de 360° baseado em Raspberry Pi, atualmente marcado como trabalho em andamento
- A estrutura é dividida em três partes principais
- LiDAR: driver serial customizado para LDRobot LD06, LD19 e STL27L
- Panorama: geração de mapa esférico 360° em 6K
- Cena 3D: composição de uma cena 3D montando planos 2D de acordo com ângulo e deslocamento
Recursos de processamento LiDAR
- O driver LiDAR inclui verificação de integridade de pacote com CRC
- O PWM por hardware do Raspberry Pi usa rpi_hardware_pwm e é calibrado com ajuste de curva
- Suporta visualização 2D em tempo real e exportação
- Os formatos de exportação são numpy ou CSV
Geração de panorama e cena 3D
- O panorama esférico 360° em 6K é criado costurando fotos olho de peixe com o Hugin Panorama photo stitcher
- A exposição da câmera é mantida constante lendo os dados EXIF das imagens capturadas automaticamente
- O balanço de branco é mantido consistente por otimização iterativa do ganho de cor
- A cena 3D é montada compondo planos 2D com base em ângulo e deslocamento
- Faz amostragem de vertex color a partir do panorama
- Suporta visualização com Open3D e exportação em PCD, PLY e e57
- Para alinhar várias cenas, usa global registration e ajuste fino com ICP
- O Poisson Surface Meshing é muito lento no Pi4, então é recomendado executá-lo em um PC
Resultados preliminares e tempo de varredura
- Os resultados preliminares são baseados em uma única varredura, sem registration nem pós-processamento
- A varredura externa é mostrada como colormapped intensity, e a interna como exemplo de vertex color
- Exemplos de tempo de varredura:
- Inicialização: 12 segundos
- Captura de 4 fotos: 17 segundos
- Varredura de 0.167° × 0.18°: 1 minuto e 24 segundos
- Costura e organização: 37 segundos
Configuração de hardware e custos
- O LiDAR usa uma destas três opções
- LDRobot LD06: US$ 80
- LDRobot LD19: US$ 70
- LDRobot STL27L: US$ 160
- A câmera e a lente usam a combinação Raspberry Pi HQ Camera + ArduCam M12 Lens, indicada em US$ 60
- O Raspberry Pi 4 custa US$ 50, e o stepper NEMA17 42-23 com driver A4988 aparece como US$ 10
- Há duas opções de alimentação
- v1: 2 baterias 18650 e step-down converter
- v2: power bank USB de 10.000mAh e step-up converter
- O custo total, excluindo a fonte de alimentação, é de cerca de US$ 200–280 em abril de 2025
- Os links de compra são apenas exemplos e não representam fornecedores necessariamente recomendados
Motor, caixa de redução e impressão 3D
- O conjunto de acionamento usa driver de stepper bipolar A4988 e stepper bipolar NEMA17 42×42×23
- O stepper é o 17HE08-1004S, com torque indicado de 17 Ncm
- As peças para impressão 3D têm arquivos de carcaça e componentes adicionais em um repositório separado, o PiLiDAR-Hardware Repo
- O adaptador de lente e a caixa de redução usam modelos externos
Especificações LiDAR e protocolo serial
- Especificações do LD06
- Frequência de amostragem: 4500Hz
- baudrate: 230400
- Frequência de varredura: 5~13Hz
- Distância: 2cm~12m
- Luz ambiente: 30kLux
- Especificações do STL27L
- Frequência de amostragem: 21600Hz
- baudrate: 921600
- O pacote do LD06 tem 48 bytes no total e usa estrutura big endian
- Caractere inicial: 1 byte, valor fixo
0x54 - Comprimento dos dados: 1 byte, atualmente fixado em 12 pontos de medição
- Velocidade: 2 bytes, ângulo por segundo
- Ângulo inicial e ângulo final: 2 bytes cada, unidade de 0,01 grau
- Dados: 36 bytes, 12 pontos de dados × 3 bytes
- Cada ponto de dados é composto por 2 bytes de distância e 1 byte de luminância
- Timestamp: 2 bytes, em ms, reinicia ao chegar a 30000
- CRC check: 1 byte
- Caractere inicial: 1 byte, valor fixo
- O ângulo de cada ponto de dados é calculado por interpolação linear entre o ângulo inicial e o final
Conexão e configuração do Raspberry Pi
- A conexão do LD06 ou STL27L é composta por UART Tx, PWM, GND e VCC 5V
- As conexões GPIO do Raspberry Pi usam o seguinte
- 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
- O botão de energia é ligado diretamente ao Pin 3, com
gpio-shutdownativado - O acelerômetro GY-521 MPU 6060 usa mapeamento customizado de pinos I2C com i2c-GPIO, porque o GPIO3 é usado para o botão de energia
- SDA: GPIO22
- SCL: GPIO27
- O botão de varredura é configurado para iniciar automaticamente registrando um script de interrupção GPIO como serviço systemd
- As permissões da UART podem ser dadas temporariamente a
/dev/ttyS0, ou, de forma mais nova, usar regras udev com o grupodialouteMODE="0660"
Software e trabalho remoto
- O PWM por hardware do Raspberry Pi é usado ativando o overlay
pwm-2chane instalando a RPi Hardware PWM library - Para costura de panorama, são instalados Hugin e o plugin enblend
- O controle de energia das portas USB usa a ferramenta CLI uhubctl
- O Jupyter é executado com as opções
--ipe--no-browserpara acesso remoto pela rede - Para visualização remota com Open3D, é indicado que usar Plotly é melhor do que o Open3D Web Visualizer
- O Plotly aparenta fazer renderização no lado do cliente
- O Open3D Web Visualizer renderiza no host e transmite uma sequência de JPG, o que sobrecarrega a CPU e o Wi‑Fi do Pi
Armazenamento dos dados de varredura e solução de problemas
- Está incluído o procedimento para clonar e instalar o usb_dump a fim de despejar as varreduras em um armazenamento USB
- O arquivo de configuração define
/home/pi/PiLiDAR/scanscomo diretório de origem - Os itens de solução de problemas incluem
- Driver universal do Windows para CP210x
RPi.GPIO RuntimeError: Failed to add edge detection, causado pela remoção da interface sysfs GPIO no Raspberry Pi OS Bookworm- Uso de rpi-lgpio como alternativa
- Desativar aceleração de hardware quando o desempenho do VS Code no Raspberry Pi estiver ruim
- Como não há wheel do pye57 para Raspberry Pi arm64, instalar
libxerces-c-deve compilar - Procedimento com
wpa_supplicant.confpara adicionar configuração de Wi‑Fi via SSH
Implementações de referência e inspiração
- A inspiração relacionada ao LD06 vem de LIDAR_LD06_python_loder e Lidar_LD06_for_Arduino
- Para costura de câmera 360, são referenciados o fork do ShaunPrice com suporte ao StereoPi e o script 360-camera do BrianBock
- Outra implementação de LiDAR em Python mencionada é pyLIDAR
- Como referências relacionadas a ICP, aparecem Doppler-ICP, KISS-ICP e Lidar-Visualizer
4 comentários
Opiniões no Hacker News
Muito legal. Se é um produto de hardware, recomendo que, ao montar a lista de materiais (BOM), você inclua links e custos estimados
Os preços vão mudar, mas ter uma faixa aproximada de custo ajuda muito alguém que vê isso em lugares como o HN a decidir se vale a pena tentar fazer por conta própria. O importante não é o número exato, e sim a ordem de grandeza
Vale a pena anotar o que você já pesquisou. Mesmo que não seja pelos outros, será útil para o seu eu do futuro. Há muitas peças com nomes confusos, então ter links facilita confirmar se é o mesmo item; e, durante o projeto, como você já comprou as peças, ter links e preços quase não toma tempo extra
Depois de alguns dias ou semanas ninguém se lembra de nada, então é preciso documentar. Anotar por 10 segundos pode evitar 30 minutos de procura depois. Essa foi uma das maiores lições que aprendi quando comecei como engenheiro, e é preciso lutar contra aquela parte idiota da cabeça que sussurra “isso não vai economizar tempo”. O mesmo vale para documentação de código[0]
Depois de procurar por uns 15 minutos, os valores que encontrei são estes, e podem não estar corretos. O Lidar é um destes: LD06 US$ 80 https://www.aliexpress.us/item/3256803352905216.html, LD19 US$ 70 https://amazon.com/DTOF-D300-Distance-Obstacle-Education/dp/…, STL27L US$ 160 https://www.dfrobot.com/product-2726.html; câmera e lente US$ 60 https://amazon.com/Arducam-Raspberry-Camera-Distortion-Compatible/dp/…, Raspberry Pi 4 US$ 50, motor de passo NEMA17 42-23 US$ 10 https://www.amazon.com/SIMAX3D-Nema17-Stepper-Motor/dp/B0CQLFNSMJ
Mesmo sem a fonte de alimentação e o conversor buck, fica algo em torno de US$ 200 a US$ 280
[0] Quando escrevi o código pela primeira vez, eu e Deus sabíamos o que estava acontecendo; com o tempo, agora só Deus sabe
Talvez seja preciso multiplicar os preços da lista de materiais por 2 ou 3, dependendo da origem e do número de remessas
É realmente deprimente que materiais baratos e bons para apresentar eletrônica a crianças e adultos, aos quais antes se tinha acesso, desapareçam com impostos em nome de coisas como aumentar a competitividade dos EUA. É um gol contra completo
Olhando no dicionário, não vejo um sentido próximo de “reduzir a quantidade de algo”. [0]
A Wikipedia também não trata a etimologia em detalhes. [1]
[0] https://www.merriam-webster.com/dictionary/buck
[1] https://en.wikipedia.org/wiki/Buck_converter
Então faça você mesmo
Para alguém com família e pouquíssimo tempo, só concluir um projeto já é pesado, e é bem provável que quase não dê para documentar. Se tiver que refazer depois, talvez eu simplesmente não faça. Nem todo mundo mora no porão da mãe com tempo sobrando
O scanner real está aqui: [1]
A distância máxima é de 12 m, e parece que é a partir desse ponto que começa a ficar caro. A fonte de luz, os filtros e os sensores precisam todos ser melhores
Para a maioria dos robôs pequenos, é suficiente, e também pode servir como sensor auxiliar em carros autônomos, para detectar crianças e cães de forma confiável ao redor do veículo. Mas o LIDAR de longo alcance montado na parte superior ainda é difícil
[1] https://www.ldrobot.com/
Meu primeiro palpite é que, a partir dessa distância, a segurança do laser talvez passe a exigir um processo de controle ativo. Como o espelho do scanner a laser precisa continuar se movendo para que não se acumule energia prejudicial à retina humana, torna-se necessário um sistema de controle obrigatório de segurança que monitore continuamente a velocidade e a posição do espelho e desligue o laser se ele ficar lento demais. Quão errado estou?
Havia muita coisa melhor nos “bons velhos tempos”, mas é realmente incrível viver numa época em que uma pessoa talentosa consegue criar esse tipo de tecnologia por conta própria
Um pouco relacionado: estou procurando uma forma barata de medir distância com cerca de 10 mícrons de precisão a uma distância de mais ou menos 300 mm. Alguma ideia?
my mechanics publicou um vídeo de substituição há alguns dias, e o equipamento antigo tinha precisão de 5 mícrons
Não sei bem o preço
Parece possível até com um bom par de paquímetros. Dependendo do requisito de precisão, dá para usar a mesma abordagem: uma grade de células capacitivas que desliza sobre a célula de medição, com um microcontrolador lendo os valores conforme se move e depois usando Atan2() no resultado final. A parte de “medidor” disso, separadamente, é chamada de DRO (Digital ReadOut)
Se não houver restrição de orçamento, também existem soluções prontas de estágios em malha fechada:
https://www.pi-usa.us/en/
https://xeryon.com
Boa sorte, e prepare-se para o choque dos preços
Também importa o que “barato” significa para você
Estou pensando em automatizar algo nesta direção:
https://youtu.be/hnHjrz_inQU?si=dNzXVBVFsr7e8m_6
Lasers e sensores de câmera prontos também podem entregar uma precisão bem inesperada quando mexidos em modo DIY
O exemplo no Sketchfab é fantástico. Dá para circular pelo espaço 3D como numa simulação de ficção científica
Mas os controles do mouse são confusos demais. Aparece um ícone de “pegar”, mas na prática não dá a sensação de estar pegando nada, e a direção de movimento é invertida, então parece totalmente antinatural
Talvez dê para retirar peças desse tipo de robôs aspiradores do eBay ou da Goodwill
Realmente impressionante. Só passei os olhos pelo projeto, então talvez já esteja lá, mas fiquei curioso se há dados de precisão
Por exemplo, a precisão a 10 m de distância; se este LIDAR não funcionar nessa distância, gostaria de saber para uma distância menor também
Estou familiarizado com scanners FARO, que usam um mecanismo de outro tipo e são precisos o suficiente para medições de edificações
Também percebi que o mercado de scanners tem várias vertentes, incluindo pessoas que precisam de precisão e pessoas que criam conteúdo para mídias como jogos. Este projeto é realmente difícil de acreditar
Ultimamente tenho mexido um pouco com fotogrametria para escanear cômodos e espaços internos. Até agora, o Metashape parece ser o mais adequado, mas a precisão ainda não é muito boa, e também estou melhorando a técnica de captura
O objetivo principal é transformar interiores de edifícios reais em modelos digitais para preservação e análise. Cheguei a considerar LIDAR por um momento, mas descartei por parecer difícil e caro demais; este projeto parece abalar essa suposição
Fico curioso para saber como é o software de pós-processamento. Dá para obter uma nuvem de pontos e combiná-la com outros dados, como fotos de DSLR, para texturização?
Pela segunda imagem[1], uma parte da parede não foi escaneada por causa de uma luminária pendurada, e provavelmente o LIDAR também não viu a parte de cima do sofá. É possível juntar duas ou mais nuvens de pontos para enxergar atrás de objetos e cantos? O software consegue alinhar automaticamente com base em paredes ou pontos comuns, entendendo que se trata do mesmo cômodo real, ou é preciso ajustar bastante à mão? Existe no LIDAR algo equivalente a coded targets ou ARTag[0]? Dá para escalar para vários cômodos?
Quero saber se vale a pena considerar isso em comparação com uma fotogrametria bem-feita, ou se só dá mais trabalho
Desculpe se as perguntas são do tipo em que eu nem sei o que não sei
0: https://en.wikipedia.org/wiki/ARTag
1: https://github.com/PiLiDAR/PiLiDAR/raw/main/images/interior....
Obrigado por compartilhar este trabalho incrível. Fico curioso sobre a escalabilidade e o desempenho do PiLiDAR quando aplicado a grandes conjuntos de dados externos
Se vocês fizeram benchmarks em datasets como SemanticKITTI ou nuScenes, poderiam compartilhar tempo de execução, uso de memória e até que ponto ele generaliza bem além das cenas internas usadas no artigo?
Esses datasets normalmente são criados com câmeras RGBA, e as nuvens de pontos são geradas depois na etapa de pós-processamento
Então não é um modelo de processamento, mas um hack de hardware para obter dados reais de profundidade. Você pode rodar o que quiser em cima disso
Era exatamente isso que eu estava procurando algumas semanas atrás. Eu vinha mantendo peças no carrinho da Amazon há semanas para prototipar algo mais ou menos parecido, mas não tinha certeza sobre a escolha do scanner LIDAR em si
Quando voltar do feriado de Páscoa, vou olhar isto como ponto de partida
O que é a comunidade de lanternas?
https://www.reddit.com/r/flashlight/
É uma comunidade pequena dentro do Reddit, algo equivalente, no nosso contexto, à galeria minor de lanternas do DCInside.
Obrigado.