Open Source Robotics

Uma coleção selecionada de projetos, ferramentas e software de robótica de código aberto de alta qualidade.

libpointmatcher

Biblioteca ICP modular para registro de nuvens de pontos 2D/3D e mapeamento

Licença

BSD-3-Clause

Visão geral

libpointmatcher é uma biblioteca C++ modular que implementa o algoritmo Iterative Closest Point (ICP) para registro de nuvens de pontos 2D e 3D. Possui arquitetura de pipeline flexível em que cada etapa (filtragem de dados, matching, rejeição de outliers, minimização de erro) pode ser configurada de forma independente. Voltada a aplicações robóticas como SLAM e mapeamento 3D, suporta vários formatos de nuvens e integra-se a ROS. A biblioteca é amplamente usada na pesquisa acadêmica de robótica como implementação de referência de ICP.

libpointmatcher é uma biblioteca C++ modular que implementa o algoritmo Iterative Closest Point (ICP) para alinhar nuvens de pontos 2D e 3D. Desenvolvida originalmente no Autonomous Systems Lab da ETH Zurich por Francois Pomerleau e Stephane Magnenat, hoje é mantida ativamente pelo Northern Robotics Laboratory (Norlab) da Laval University.

O principal ponto forte da biblioteca é sua arquitetura de pipeline totalmente modular. Cada etapa do processo ICP — filtragem da entrada, correspondência de pontos, rejeição de outliers e minimização de erro — é implementada como um módulo intercambiável. Esse design permite que pesquisadores testem sistematicamente diferentes escolhas algorítmicas e configurações, tornando-a uma ferramenta preferida para benchmarking acadêmico e desenvolvimento de métodos.

libpointmatcher é escrita em C++ para eficiência, com bindings Python para prototipagem rápida. Oferece suporte a implantação baseada em Docker, integra-se ao ROS para aplicações robóticas em tempo real e aparece em várias listas curadas de bibliotecas essenciais de robótica e processamento de LiDAR.

Por que importa

A libpointmatcher tornou-se a implementação de referência open source padrão para registro de nuvens de pontos baseado em ICP na robótica acadêmica. Sua arquitetura modular permite que pesquisadores troquem componentes individuais do pipeline ICP — filtros de dados, matchers, filtros de outliers, minimizadores de erro —, o que a torna ideal para benchmarking e para o desenvolvimento de novas abordagens de registro.

Problema que resolve

Alinhar nuvens de pontos de sensores LiDAR ou de profundidade é fundamental para o mapeamento e a localização de robôs, mas as implementações de ICP costumam ser monolíticas e difíceis de personalizar. A libpointmatcher oferece um pipeline ICP totalmente modular, no qual cada etapa pode ser configurada ou substituída de forma independente, permitindo a comparação sistemática de estratégias de registro e a fácil integração em sistemas SLAM maiores.

Pontos principais

  • Pipeline ICP modular com filtros de dados, matchers, filtros de outliers e minimizadores de erro intercambiáveis
  • Suporta registro de nuvens de pontos 2D e 3D para mapeamento e localização
  • Desenvolvido originalmente no Autonomous Systems Lab da ETH Zurich, hoje mantido pelo Norlab na Universidade Laval
  • Oferece bindings Python junto com a biblioteca principal em C++
  • Disponível como imagens Docker para facilitar a implantação e a pesquisa reproduzível

Para quem é

  • Pesquisadores em robótica que fazem benchmarking ou desenvolvem métodos de registro de nuvens de pontos
  • Desenvolvedores de SLAM baseado em LiDAR que precisam de um backend ICP configurável
  • Engenheiros de veículos autônomos que trabalham com pipelines de localização e mapeamento
  • Estudantes de pós-graduação que estudam percepção 3D e correspondência de varreduras

Limitações

  • Focado especificamente em registro baseado em ICP — não inclui correspondência baseada em características ou em aprendizado
  • O desempenho em nuvens de pontos muito grandes pode exigir ajuste cuidadoso dos filtros de dados e da subamostragem
  • A documentação é completa, mas alguns tutoriais refletem versões mais antigas da API
  • Depende da libnabo para a busca de vizinhos mais próximos, o que adiciona uma dependência de compilação

Este site requer JavaScript. Por favor, habilite o JavaScript para explorar nossos projetos de robótica.