300x250

Xiang Gao, Tao Zhang 저자의 'Introduction to Visual SLAM from Theory to Practice' 책을 통해 SLAM에 대해 공부한 내용을 기록하고자 한다.

책의 내용은 주로 'SLAM의 기초 이론', 'system architecture', 'mainstream module'을 다룬다.

 

포스팅에는 기초 이론만 다룰 것이며, 실습을 해보고 싶다면 다음 github를 참조하자.

 

https://github.com/gaoxiang12/slambook2

 

GitHub - gaoxiang12/slambook2: edition 2 of the slambook

edition 2 of the slambook. Contribute to gaoxiang12/slambook2 development by creating an account on GitHub.

github.com

 

Visual Odometry 이전 과정인 feature extraction 및 feature matching 과정에 대한 내용은 다음 글을 참조하자.

 

https://jjuke-brain.tistory.com/entry/Visual-Odometry-1-ORB-Feature-Feature-Matching

 

Visual Odometry (1) - Feature Method, ORB Feature, Feature Matching

Xiang Gao, Tao Zhang 저자의 'Introduction to Visual SLAM from Theory to Practice' 책을 통해 SLAM에 대해 공부한 내용을 기록하고자 한다. 책의 내용은 주로 'SLAM의 기초 이론', 'system architecture', 'ma..

jjuke-brain.tistory.com

 

카메라의 motion(pose)를 추정할 때의 세 가지 경우 중 2D-2D case인 epipolar geometry를 다루는 내용은 다음을 참조하자.

 

https://jjuke-brain.tistory.com/entry/Visual-Odometry-2-Epipolar-Geometry-Triangulation?category=987160

 

 

 

 

 

 

 

 

 

Triangulation

 

Epipolar geometry를 통해 카메라의 motion을 추정한 뒤, 이를 활용하여 feature point들의 위치를 추정해 주어야 한다.

그런데 monocular SLAM에서는 픽셀의 detph를 모르므로, triangulation을 통해 이러한 depth를 추정해줄 필요가 있다.

 

Triangulation이란, 같은 landmark(feature point)를 다른 위치에서 관측하고, 관측 위치와 landmark 간의 거리를 구하는 과정을 말한다.

 

 

 

 

Direct Solution

 

Triangulation to Estimate the Depth

 

위와 같이 왼쪽 이미지가 reference인 I1,I2 이미지가 있다고 해보자.

카메라의 principal points O1,O2에 대해, O1에서 O2까지의 transform 을 R,t로 표현한다.

p1I1 상의 feature point이며, p2와 같은 feature를 가리킨다.

 

여기서 두 직선 O1p1O2p2는 점 P에서 교차하며, 이 점을 3D map point라 한다.

실제로 노이즈 때문에 그림과 같이 두 직선이 완전히 교차하지 않을 수 있다. (그림 상에서는 2차원으로 표현해서 교차해 보이지만, 실제로 3차원 상에서는 화면을 뚫고 들어가는 방향의 거리가 존재한다고 생각하면 된다.)

따라서 이를 least-square 개념으로 풀 수 있다.

 

Epipolar geometry의 정의에 따라, 두 feature points의 normalized coordinate를 각각 x1,x2라 하면 다음을 만족한다.

 

s2x2=s1Rx1+t

 

이제 epipolar geometry의 결과인 R,t를 바탕으로 두 feature points의 depth인 s1s2를 구하려 한다.

기하학적으로,  I2로의 projection을 p2에 가깝게 하는 ray O1p1상의 3차원 점을 찾아볼 수 있다. (반대로 O2p2에 대해서도 가능하다.)

 

여러 방법이 있지만, 결과는 비슷하다. s1을 계산해보자. 위 식에 x2를 양변에 곱하면 다음 식을 얻는다.

 

s2x2x2=0=s1x2Rx1+x2t

 

스스로의 외적이 되므로 좌변은 영벡터가 되고, 우변은 s1에 대한 방정식이 되어 s1을 바로 구할 수 있다.

s1을 구하면 s2는 처음 식에 대입하여 쉽게 구할 수 있다.

이렇게 depth를 구할 수 있는데, 문제는 노이즈가 존재하기 때문에 epipolar geometry로 구한 R,t가 위 식을 정확히 0으로 만들지 못한다는 것이다.

따라서 이와 같은 direct solution을 얻기보다 least-square solution을 얻는 방법이 더 일반적이다.

Least-square solution은 OpenCV 라이브러리에 구현되어 있다.

 

 

 

 

 

Limitation & Uncertainty

 

Triangulation을 수행할 때, 카메라가 점 O1에서 충분히 많이 translation할 때에만 epipolar geometry에서 삼각형이 형성된다. 따라서 카메라가 회전만 할 경우에는 삼각형이 생성되지 않으므로 triangultaion을 수행할 수 없다.

 

또한, 아래와 같이 triangulation contradiction을 야기하는 triangulation의 uncertainty를 고려해야 한다.

 

Contradiction of Triangulation

 

Translation t가 작을수록 pixel의 uncertainty δθ에 의한 depth의 uncertainty δd가 커진다. (정량적으로 sin법칙을 통해 구해볼 수도 있다.)

 

Triangulation의 정확도를 높이기 위해서는 다음과 같은 방법을 사용한다.

  1. Feature points 추출 시 정확도를 향상시킨다. 즉, image의 resolution을 증가시킨다.
    • 이는 계산량을 증가시키는 문제를 낳는다.
  2. Translation의 양을 증가시킨다.
    • 직관적으로 생각해봐도 translation이 커질수록 보이지 않던 부분이 많이 보일 것이다. 하지만 외관이 너무 많이 바뀌어도 feature extraction과 matching이 어려워질 수 있다.
    • 이러한 trade-off를 contradiction of triangulation이라 한다.

 

 

728x90
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기