ICP는 source 점과 target의 대응점을 반복해 변환을 줄이고, NDT는 target 공간을 voxel별 정규분포로 만들어 source가 그 분포에 잘 놓이도록 최적화합니다. 둘 다 초기값이 필요한 국소 정합이므로 점군 전처리·해상도·동적 물체·수렴 판정과 실패 감시를 함께 설계해야 합니다.
아래에서는 용어의 차이를 실제 시스템 경계, 실패 조건과 검증 순서로 나눠 살펴봅니다.
ICP와 NDT는 두 점군 사이의 강체 변환을 찾지만 오차를 계산하는 대상이 다르다
source 점군을 target 점군에 겹치도록 3D 이동과 회전을 최적화한다는 목적은 같습니다. ICP는 대응점 또는 대응 평면의 거리를 줄이고, NDT는 target 공간의 voxel마다 만든 확률분포에서 source 점의 가능도를 높입니다.
로봇 SLAM 글의 프런트엔드에서 사용할 수 있는 국소 정합 기법이지만, 이 글은 지도·루프 폐쇄 전체가 아니라 두 알고리즘의 입력·초기값·해상도·수렴 판정과 실패 조건을 비교합니다.
정합 입력은 같은 시간·좌표·범위를 가진 source와 target, 그리고 초기 변환이다
LiDAR 한 스캔과 이전 스캔, 현재 스캔과 지역 지도, 깊이 카메라 점군과 CAD 모델처럼 source와 target의 역할을 먼저 정합니다. 단위·센서 frame·타임스탬프가 다르면 최적화가 보정 오차와 실제 이동을 함께 흡수합니다.
2D·3D LiDAR 비교 글처럼 LaserScan과 PointCloud2의 차원과 관측 범위를 확인하고, motion distortion이 큰 회전형 LiDAR에서는 한 스캔 안의 시각 차이를 보정한 뒤 정합합니다.
ICP는 최근접 대응을 만들고 이상치를 거른 뒤 변환을 반복 갱신한다
PCL ICP 튜토리얼의 기본 흐름은 대응점 검색, 변환 추정, 적용과 수렴 확인을 반복하는 방식입니다. point-to-point는 점 간 거리를, point-to-plane은 target 법선 방향 거리를 줄여 평면 환경에서 더 빠르게 수렴할 수 있습니다.
최근접점이 실제 같은 표면이라는 보장은 없습니다. 최대 대응 거리, reciprocal 대응, robust kernel, RANSAC과 법선 각도 제한으로 잘못된 대응을 줄이되 유효 대응 수가 너무 적어지는 구간을 별도 실패로 처리합니다.
NDT는 target을 voxel로 나누고 각 셀의 평균·공분산에 source를 맞춘다
PCL NDT 튜토리얼은 큰 점군을 voxel별 정규분포로 표현하고 변환된 source 점의 likelihood를 최적화합니다. 명시적인 point-to-point 대응을 매 반복마다 만들지 않는다는 점이 ICP와 다릅니다.
voxel 안에 점이 너무 적거나 한 평면 방향으로만 분포하면 공분산이 불안정할 수 있습니다. resolution을 크게 잡으면 구조가 뭉개지고 작게 잡으면 빈 셀과 계산량이 늘어납니다.
ICP와 NDT 모두 초기값이 필요한 국소 정합이며 전역 재지역화 알고리즘은 아니다
PCL registration 모듈 문서는 ICP와 NDT를 초기 guess가 필요한 정합군으로 분류합니다. 겹침이 적거나 반복 구조에서 초기값이 다른 장소에 가까우면 낮은 오차의 잘못된 해로 수렴할 수 있습니다.
휠·IMU 적분, 이전 프레임 pose, GNSS 또는 특징 기반 전역 정합으로 초기값을 제공합니다. 추적이 끊겼을 때 같은 국소 정합을 더 오래 반복하는 것은 재지역화를 대신하지 않으므로 별도 전역 후보 생성기로 전환합니다.
| 항목 | ICP | NDT |
|---|---|---|
| 오차 대상 | 점-점·점-평면 대응 | voxel 정규분포 likelihood |
| 주요 해상도 | 다운샘플·대응 거리 | voxel resolution |
| 환경 영향 | 대응점·법선·겹침 | 셀 점수·분포 조건 |
| 공통 위험 | 초기값·국소 최소·동적점 | 초기값·국소 최소·동적점 |
전처리 leaf size와 NDT resolution, ICP 대응 거리는 센서 밀도와 구조 크기에 맞춘다
다운샘플 voxel이 너무 크면 얇은 기둥과 모서리가 사라지고, 너무 작으면 노이즈와 점 수가 늘어납니다. ICP 최대 대응 거리는 초기 오차보다 충분히 커야 하지만 다른 벽까지 대응될 만큼 커서는 안 됩니다.
NDT resolution은 한 셀 안에 통계가 만들어질 점이 있으면서도 복도 폭·차량 크기 같은 구분 구조를 보존해야 합니다. coarse-to-fine으로 큰 해상도에서 초기 정렬 후 작은 해상도로 다듬는 실험을 단일 값과 비교합니다.

평면·긴 복도·반복 선반은 관측되지 않는 방향과 잘못된 대응을 만든다
평평한 벽 한 장만 보면 벽을 따라 움직이는 방향은 점-평면 오차가 거의 변하지 않을 수 있습니다. 긴 복도와 반복 선반은 여러 위치가 비슷해 초기값이 조금만 틀려도 이웃 구조에 정합될 수 있습니다.
Hessian·공분산·법선 분포와 조건수를 통해 약한 방향을 찾고, IMU 회전과 휠 이동 같은 보완 관측을 사용합니다. 정합이 반환한 6D 변환의 모든 축을 똑같이 신뢰하지 않습니다.
사람·지게차·흔들리는 식생과 지면은 정적 지도 정합을 오염시킨다
source와 target 사이에 움직인 물체는 같은 세계 점이 아니므로 큰 점 덩어리가 잘못된 이동을 끌 수 있습니다. 지면이 점 수의 대부분을 차지하면 수평 이동보다 roll·pitch와 높이에 과도한 영향이 생길 수 있습니다.
ROI, 지면 분리, semantic 또는 시간 일관성 필터로 동적 후보를 줄이고 robust loss를 적용합니다. 필터 전후 유효점 수와 공간 분포를 기록해 실패 때 점이 너무 적었는지 동적점이 남았는지 구분합니다.
수렴 플래그와 fitness score가 낮아도 올바른 장소를 찾았다는 증거는 아니다
반복 구조의 다른 벽에 잘 맞으면 대응 거리와 likelihood가 좋아도 실제 pose는 틀릴 수 있습니다. 라이브러리의 converged는 반복 변화량이나 목적함수 조건을 만족했다는 뜻이지 정답 위치를 확인했다는 뜻이 아닙니다.
초기값에서 변환된 크기, 예상 속도·가속도 한계, IMU·휠·GNSS 잔차, 유효 대응 비율과 주변 지도 일관성을 함께 게이트합니다. 점수가 좋은데 변환 점프가 큰 결과는 보류하고 재정합 또는 재지역화로 보냅니다.
하나를 고집하기보다 coarse 정합과 ICP 정제로 역할을 나눌 수 있다
NDT 또는 특징 기반 정합으로 넓은 초기 오차를 줄인 뒤 point-to-plane ICP로 표면을 정밀하게 맞추는 파이프라인을 구성할 수 있습니다. 반대로 센서와 환경에 따라 ICP가 더 빠르고 안정적일 수 있으므로 이름만으로 순서를 정하지 않습니다.
각 단계가 허용할 초기 오차, 실행 시간 예산과 실패 반환 조건을 명시합니다. 앞 단계가 실패했는데 마지막 ICP가 억지로 결과를 내지 않도록 quality flag와 변환 상한을 전달합니다.
검증 데이터는 초기 오차·겹침·속도·동적 비율과 환경 구조를 체계적으로 바꾼다
정답 변환이 있는 rosbag·시뮬레이션·측량 궤적에서 translation과 rotation 초기값을 격자로 바꾸고 수렴 basin을 그립니다. 겹침률과 점 밀도, range noise, 동적 물체 비율과 CPU 부하를 함께 바꿉니다.
정상 오차와 실행 시간뿐 아니라 잘못 수렴한 비율, 실패를 올바르게 거부한 비율과 재시도 시간을 기록합니다. 한 번의 대표 bag에서 튜닝한 값을 다른 건물·야외·적재 상태의 holdout 주행에 적용합니다.
| 시험 축 | 바꿀 조건 | 판정값 |
|---|---|---|
| 초기값 | 이동·회전 오차 격자 | 수렴 영역·오수렴률 |
| 점군 | 겹침·밀도·노이즈 | 정확도·유효 대응 |
| 환경 | 복도·평면·동적 물체 | 약한 축·거부율 |
| 운영 | 속도·CPU·지도 크기 | 지연·드롭·복구 시간 |
운영 로그에는 파라미터와 초기값, 종료 이유와 거부 결정을 한 묶음으로 남긴다
source·target 시각과 frame, 필터 범위, leaf size, NDT resolution, ICP 대응 거리, 초기 변환, 반복 수와 종료 조건을 기록합니다. 최종 pose와 score만 남기면 같은 실패를 재생해도 파라미터가 달라 원인을 찾기 어렵습니다.
rosbag2 기록·재생 글처럼 원시 점군과 TF·IMU·휠 odom, 파라미터 버전을 함께 보존합니다. 결과가 게이트에서 거부됐는지, fallback이 무엇이었는지까지 남겨 잘못 수렴한 pose가 제어로 전달되지 않게 합니다.

ICP와 NDT 차이에서 자주 묻는 질문
ICP와 NDT 중 어느 것이 항상 더 빠른가요?
점 수·다운샘플·법선 계산·voxel resolution·초기값과 구현에 따라 달라집니다. 같은 하드웨어와 데이터에서 정확도·오수렴률·지연을 함께 비교해야 합니다.
NDT는 초기값 없이도 전역 위치를 찾나요?
일반적인 PCL NDT도 초기 guess가 필요한 국소 정합입니다. 추적을 잃었을 때는 특징 기반 전역 정합이나 장소 인식 등 별도 재지역화가 필요합니다.
ICP fitness score가 낮으면 pose가 맞나요?
대응점 거리가 작다는 신호일 뿐 반복 구조의 잘못된 장소에도 낮을 수 있습니다. 변환 점프, 독립 센서 잔차와 정답 궤적으로 검증합니다.
point-to-plane ICP가 point-to-point보다 항상 좋은가요?
평면 법선이 안정적이면 빠르게 수렴할 수 있지만 노이즈·곡면·희소점에서 법선이 틀리면 나빠질 수 있습니다. 법선 추정 범위와 품질을 함께 시험합니다.
ICP와 NDT를 같이 써도 되나요?
가능합니다. coarse 정합과 정밀 정제를 나눌 수 있지만 각 단계의 실패 플래그와 변환 상한을 전달해야 마지막 단계가 잘못된 초기값을 숨기지 않습니다.
ICP와 NDT의 수렴 반환값은 로봇의 실제 위치를 자동으로 증명하지 않습니다. 초기값·환경 구조·동적점과 보정 오차를 포함한 정답 데이터로 오수렴 탐지와 복구까지 검증해야 합니다.