Skip to content

ICP

ICP

De forma geral, o ICP é um algoritmo para fazer alinhamento entre dois conjuntos de dados, podem ser 2D, que chamamos de Affine ICP, e o ICP em 3D. No contexto de navegação autônoma, o ICP é usado para determinar a trajetória percorrida entre dois scans de point clouds obtidos de um sensor chamado LiDAR. O LiDAR tem um funcionamento semelhante ao radar, vulgarmente falando, que emite feixes de luz para determinar o ponto 3D do ambiente ao seu redor, por isso ele é o Light Detection and Ranging (LiDAR).

Uma das tecnologias que a gente desenvolve é em odometria de LiDAR para carros autônomos com uma empresa norte-americana. O ICP é utilizado em nosso algoritmo, bem como outros algoritmos e sensores para melhorar a precisão da odometria. Odometria é a tarefa de estimar, em 6 graus de liberdade ou menos, o movimento (translação + rotação) de um corpo rígido. Para isso, podemos usar o LIDAR, Câmera, IMU, GPS, ou combinar todos esses sensores para melhorar a precisão do algoritmo.

Mas nem sempre o ICP é usado, existem outras formas de fazer odometria, como no paper do LOAM que ele ele usa um detector de quinas na point cloud.

Se você se interessa por isso, eu recomendaria você estudar C++ e Estimação de Estado. C++ eu recomendo porque nessa indústria de navegação autônoma, é importante termos segurança, que um código de C++ oferece, e também usamos ele por questão de performance (velocidade e uso de multiprocessos, coisa que em Python é mais complicado).

Estimação de Estado existem vários livros, um deles é do Sebastian Thrun tem bastante matemática, se você gosta, vai fundo. Já C++, acredito que você pode procurar por cursos online, no YouTube, que você vai provavelmente achar algum material que se adeque ao seu estilo de aprendizado.

Referências interessantes

ICP(Iterative Closest Point) Algorithm John Lambert


Video rápido explicando o algoritmo:



Playlist de ICP:





Implementação do ICP

ClayFlannigan
KojiKobayashi
richardos

Libs que possam ser interessantes

ICP - A Python module for registering a photo with a database image of the same scene
Open3D - A Modern Library for 3D Data Processing

Mini curso:

Introdução ao Processamento de Nuvens de Pontos 3D
Ministrante: Natalia Amorim
Github do Material: https://github.com/NataliaCarvalho03/opencvismoday-material
Linkedin: https://www.linkedin.com/in/natalia-carvalho-02901798/
Dissertação sobre SFM: https://grupo-opencv-br.github.io/tutoriais-tecnologia/avancado/R-D-NATALIACARVALHODEAMORIM.pdf