Ref.
_01. https://nbviewer.org/github/niosus/notebooks/blob/master/icp.ipynb
위의 노트북에는 그림이 일부 안보이길래 보충..
ICP 의 자세한 내용은 위의 링크나 다른 곳에 잘 설명 혹은 자료가 많은 것 같다.
자율 주행(?)/SLAM 에 ICP 알고리즘이 나와서 Study~~~中
- 오픈소스와 유용한 자료 기여자분들께 감사~~~~
※ 진입장벽이 힘들지만, 시간이 지나면 괜찮아질거라 믿는다 !!!
※ 아직 Study 중이라, 오류가 있을수도 있다... 그럴쑤 있어~~~암~~
※ 기술 블로그도 시간과 노~~오~~력, 정~~성이 필요한 것 같다. 내멋대로 작성하는 느낌인데 이것도 어쩔 수 없오~~~ 훌륭한 블로거는 다른 분들에게 양보하겠다!!!
< 그림 1. example data >
그림 1은 ICP 설명을 위한 data 이다.
- Q 는 true data set, P 는 Q 에 회전 및 병진을 가한 data set
ICP 는 회전과 병진을 찾는 알고리즘인 것 같은데..... (아직 study 중...)
- P = Rot * Q + translation
자, ICP 를 공부하기 위한 샘플 데이터는 준비되었다...
ICP 에는 데이터의 무게중심(?)을 구하는 과정이 있다.
- 무게중심은 평균인 것 같은데...
- 회전을 찾기 용이하기 위해서 P 와 Q 를 origin 으로 이동시키는 역할로 보임...
- 그림 2는 무게중심을 제외한 전처리 후의 그래프이다.
- 느낌상, bias 를 제거하는 것 뉘앙스의 전처리와 유사해 보임
ICP 의 기본로직은 알고리즘 이름에도 표현되어 있듯이 Closest 포인트를 찾아서 반복하는 것이다.
- 어떤 유투브에서는 Data Association 으로 표현하기도 하던데, P와 Q 의 correspondence 를 찾는 과정이다.
- 간단하다, 이중 for 문을 돌면서, P와 각 요소와 Q의 각 요소의 Euclidean distance 를 비교하여 가장 가까운 포인트들을 C = { i, j } 쌍으로 저장함
* 예제는 2차원이므로 Euclidean distance !! 코드는 결국 norm (P - Q) 형태 !!
- 그림 3은 P 집합과 Q 집합의 corrspondence pair 를 회색 선으로 나타낸 그림
SVD 를 이용하여 회전과 병진을 찾는다.
- SVD 방식은 좀 더 자료등을 찾아봐서 이해가 필요한데..
- P_correct = R_found * P + t_found
- 그림 4는 P_correct 와 Q 의 그래프
- 이전보다 P와 Q 가 정렬이 되긴 했다.
댓글 없음:
댓글 쓰기