SLAM
ICP Localization
ingus kinematics
2025. 2. 3. 23:42
개요
- 동일하지만 위치와 방향이 다른 두 개의 포인트 클라우드가 있을 때, 어떻게 하면 정합할 수 있으며 두 포인트 클라우드의 관계를 어떻게 하면 구할 수 있을까?
- 많은 방법들이 있겠지만, 이 문제를 해결할 수 있는 제일 기초적인 방법인 ICP에 대해서 알아보도록 하자.
Reference
ICP & Point Cloud Registration - Part 2: Unknown Data Association (Cyrill Stachniss, 2021)
Part 2 of 3: Point cloud registration with unknown data associations using the Iterative Closest Point (ICP) algorithm. Cyrill Stachniss, Spring 2021 #UniBonn #StachnissLab #robotics #computervision #photogrammetry #lecture


Iterative Closest Point (ICP) - 5 Minutes with Cyrill
Iterative Closest Point (ICP) explained in 5 minutes Series: 5 Minutes with Cyrill Cyrill Stachniss, 2020 Link to Jupyter Notebook: https://nbviewer.jupyter.org/github/niosus/notebooks/blob/master/icp.ipynb Credits: Video by Cyrill Stachniss Images by Igor Bogoslakvskyi Thanks to Igor Bogoslakvskyi and Olga Vysotska Intro music by The Brothers Records


ICP (Iterative Closed Point)
Center of Mass
- 포인트 점군들 Q, P가 있을 때, 각각의 포인트들의 평균 값을 구할 수 있다.
- μQ=1/∣C∣∑qi\mu_Q=1/|C|\sum q_i
- 그리고 다시 원래의 포인트들과 평균 점의 차이를 통해 새로운 포인트 클라우드를 계산할 수 있다. (Q`, P`)
- 수학적으로 보면 포인트 클라우드 평균 위치만큼 평행 이동을 시킨 것이다.
- 즉,
cross-covariance
행렬을 구한 것이다.
- 즉,
- 물리적으로 보면
translation
영향을 제거하여rotation
성분만을 남겨놓고 싶기 때문이다.
Orthogonal Procrustes Problem
- 이 문제를
Orthogonal Procrustes
문제라고 보고 있다.Orthogonal Procrustes
문제는 선형 대수학에서 두 개의 행렬이 주어졌을 때, 하나의 행렬을 orthogonal 행렬을 사용하여 다른 행렬에 최대한 가깝게maaping
하는 문제이다. 이 문제는 다양한 응용 분야에서 사용되며, 특히 데이터 분석, 기계 학습, 컴퓨터 비전 등에서 두 데이터 세트 간의 최적의 정합(registration
)을 찾는데 활용된다.
- 회전 행렬 R의 조건과 특징
Orthogonal
- 모든 열 벡터 (
Column vector
)들이 서로 직교(내적이 1)
- 각 벡터들의 길이가 1 (
unit vector
)
- 모든 열 벡터 (
det(R) = 1
- 행렬식이 1이라는 의미는 선형 변환 (
Linear combination
) 관점에서 본다면 변환 이후에도 공간의 부피가 보존된다는 것을 의미
- 만약 det(R) = -1이라면 이는 회전과 동시에 공간이 반사 (
reflection
) 된다는 것을 의미
- 행렬식이 1이라는 의미는 선형 변환 (
Singular Value Decomposition
cross-covariance matrix
를 계산했을 때, Q`과 P`의 곱을 계산하는 것이다.
- 이
cross-covariance matrix
는 결국 두 포인트 클라우드의 상관 관계를 담고 있는matrix
이다.
covariance matrix
를SVD
로 분해하면 D와 V^T를 구할 수 있다.
- U와 V^T는
orthogonal matrix
이기 때문에 이 둘의 곱 또한orthogonal matrix
이며 행렬식 (det
)은 -1 아니면 1이 나온다.
- 즉, 둘의 곱은 회전 행렬 (
Rotation matrix
)를 의미한다.
- 결론적으로 두 포인트 클라우드의
data association
을 표현한 상관 관계를 갖는cross covariance matrix
를SVD
분해를 이용하면 두 포인트 클라우드 사이의 관계를 표현한Rotation matrix
를 계산할 수 있다.
SVD-Based Alignment Summary
- 수학적으로 보면
Orthogonal Procrustes
문제는 두 행렬 사이의 변환을 찾아내는 문제이다.
- 행렬WW가 두 데이터(Q,PQ,P)의 연관성을 표현한
cross-covariance matrix
라고 해보자. 그럼WW를 SVD를 통해 분해하면,W=UΣVTW=U\Sigma V^T라고 표현할 수 있다. 여기서UVTUV^T를 최적의 회전 행렬이라고 이야기 할 수 있다. 그것의 대한 근거는 두 포인트 클라우드Q,PQ,P의 크기 즉,프로비니우스 norm
인∣∣Q−RP∣∣F||Q-RP||_F 를 최소화 하기 때문이다.
- 여기서
프로비니우스 norm
으로 예시를 들었지만,Euclidean norm
또한 일치한다.
ICP with Unknown Data Association
- 하지만 대부분 데이터 연관성을 아는 것은 어렵다. 따라서 반복적으로 가장 가까운 점을 찾는 알고리즘이 필요하다. 이것이 바로
ICP
이다.
- 코드 작성
curPointCloud = {};
prePointCloud = {};
covarianceMatrix = {};
u,s,v = 0;
error = 0.0;
threshold = 0.0;
R = 0;
T = 0;
error = get_maximum_value();
while(error > threshold)
{
curPointCloud = getPointCloud();
// Get the cross covariacne matrix between two point clouds
covarianceMatrix = calcCrossCovarianceMatrix(prePointCloud, curPointCloud);
// SVD (Singular Value Decomposition)
u,s,v = svd(covarianceMatrix);
// Rotation matrix from SVD
R = u * v.T;
// Translation
T = prePointCloud + R * curPointCloud;
// Calculate the error
error = calcError(R,T);
prePointCloud = curPointCloud;
}
setPose(R,T);
고려해야 할 사항
Closest-Point Matching
- 가장 가까운 점을 찾기 위해선?→ KD-tree 같은 알고리즘 사용
Uploaded by Notion2Tistory v1.1.0