-
SLAM 구현 기법에는 어떤 것들이 있고, 각각의 특징은 무엇일까요?SLAM/SLAM 전반 2021. 6. 27. 16:35
SLAM 알고리즘의 종류를 분류하려면 사용하는 센서 기준, 2D/3D 기준, 활용 분야 기준 등등 다양한 기준이 있겠지만, 가장 근본적이라고 생각되는 기준은 구현에 사용된 수학적 기법입니다.
일단 SLAM의 workflow와 해결해야 할 문제들에 대해 알아보도록 하겠습니다. Agent(로봇 또는 카메라를 들고 있는 사람 등)가 이동하면서 일정 시간 간격으로 공간을 측정하고(LiDAR, 카메라, 초음파 센서 등), 그 측정 간격 사이의 이동 정보를 추정하고(=Pose estimation), 이를 통해 측정된 데이터를 적절하게 정렬해 지도를 만드는 과정이 일반적인 SLAM 알고리즘의 흐름입니다. 2D/3D 또는 센서의 종류에 따라 측정되고 추정되는 정보의 양과 형태에는 차이가 있겠지만, 기본적인 흐름은 동일합니다.
만약 모든 센서가 완벽하다면(=측정 오차가 전혀 없고 예외 상황이 발생하지 않는다면), SLAM 구현은 엄청 쉽습니다. 카메라를 사용한 SLAM을 예로 든다면, 일정 간격으로 찍은 사진을 (이동 정보를 활용해서) 이어 붙이면 끝입니다.
그런데 당연히 현실의 센서에는 오차가 있습니다. 스테레오 카메라는 너무 가깝거나 먼 물체는 거리 측정이 부정확하고, 초음파 센서는 애초에 별로 정확하지도 않으며, LiDAR라고 해도 약간의 오차는 분명히 존재합니다. 계산 과정에서 반올림하며 버려진 소수점 아래 몇 자리의 숫자들도 오차로 볼 수 있습니다. 그리고 outlier(이상치)라는 이름으로, 완전히 잘못 측정된 값들도 반드시 존재합니다.
인텔 RealSense D435 스테레오 카메라를 이용해 얻은 3차원 정보입니다. 3차원 정보나 스테레오 카메라에 익숙하지 않은 사람이 보더라도, 여기저기 오차와 측정되지 않은 부분들이 존재함을 느낄 수 있습니다. 더 좋은 센서를 써 볼 수도 있겠고, 카메라 보정을 시도해볼 수도 있겠지만 어쨌든 오차는 없앨 수 없습니다.
오차와 이상치가 SLAM에서 큰 문제가 되는 이유는, 오차가 누적되기 때문입니다. 간단한 2차원 LiDAR SLAM을 예로 들어 보겠습니다. 먼저 모든 센서가 완벽한 상황의 SLAM입니다.
Source : https://www.youtube.com/watch?v=saVZtgPyyJQ 이동 거리와 방향이 완벽하게 추정된다면, LiDAR가 측정한 완벽한 2D 스캔 정보를 이어붙이기만 하면 완벽한 지도가 완성됩니다.
그러나 이동량 추정에 오차가 있다면, 즉 센서가 측정한 이동량과 실제 이동량이 같지 않다면, 다음과 같이 오차가 누적되어 지도는 매우 부정확해집니다. 초록색이 실제 로봇 위치, 회색이 잘못 추정된 로봇 위치입니다.
Source : https://www.youtube.com/watch?v=saVZtgPyyJQ 보이는 것과 같이, LiDAR가 완벽하더라도 이동량 추정의 오차가 있으면 지도 작성은 크게 실패합니다. 현실에서는 측정 센서에도 오차가 있고, 오차의 정도가 일정하지도 않으며, 3차원 SLAM에서는 더욱 더 잘못될 여지가 많습니다. 하지만 앞에서도 언급했듯 오차는 줄이려고 시도해볼 수는 있지만, 없앨 수는 없습니다.
그렇다면 방법은 하나뿐으로, 오차를 사후적으로 보정하는 기법을 포함하는 수밖에 없습니다.
이 오차 보정 기법의 종류에 따라 SLAM 알고리즘들이 수학적으로 구분됩니다. 저는 크게 2가지로 분류해서 이해를 했는데, 하나는 필터 기반 SLAM이고, 또 다른 하나는 그래프 기반 SLAM입니다.
필터 기반 SLAM은 최초로 제안된 SLAM 기법으로 Kalman Filter, Particle Filter, Rao-Blackwellized Particle Filter등 다양한 '필터'를 사용해 매 프레임에서의 측정/추정 오차를 보정하고자 하는 기법입니다. 필터의 종류에 따라 작동 방식은 다르지만, 기본적으로 이 방식의 SLAM에서는 [예측] -> [관측] -> [업데이트]를 반복하며 시스템의 상태(SLAM에서는 Agent의 위치와 방향)에 대한 최적의 통계적 예측을 얻는 것을 시도합니다. 이것만 읽어서는 당연히 이해가 안 되는 게 맞고, 그림과 수식을 사용해서 자세히 설명해야 하는데 이론 설명 및 코드 리뷰 후에 시간이 남으면 돌아와서 정리해 보려고 합니다.
그래프 기반 SLAM은 최근 몇 년간 활발하게 발전되어 온 SLAM 기법으로, Agent의 위치와 방향을 그래프로 구성하고 이 그래프를 최적화함으로써 최선의 예측을 얻는 것을 시도합니다. 여기서도 이것만 읽어서는 당연히 이해가 안 될 것이고, 본격적인 이론 설명 및 코드 리뷰에서 자세히 설명하고 들어가도록 하겠습니다. 일반적으로 좀더 직관적인 이해가 가능하고, Large-scale 환경(실외 환경 등)에서의 성능도 좋다고 합니다. 현대적인 SLAM기법의 대세라고 할 수 있겠습니다.
하나 알아두면 좋은 점은, 필터 기반 SLAM이 구식 기술이고 더 이상 사용되지 않는 것이 아니라는 점입니다. 필터 기반 SLAM은 비교적 작은 Scale의 환경에서 작동하지만, 그래프 기반 방식에 비해 실시간으로 최적의 위치/방향 데이터를 제공할 수 있고(그래프 기반 방식은 사후적으로 위치/방향 데이터를 보정) 비교적 낮은 사양으로 구동이 가능하다는 특징 때문에(당연히 항상 그런 것은 아니지만) VR/AR 등에 더 적합한 특성을 가지고 있다고 할 수 있습니다. 실외 환경에서의 지도 작성이 주 목적이라면 그래프 기반 SLAM을 사용해야겠지만, 어쨌든 용도에 따라 기법을 취사선택해야지 하나가 더 우세하다고 하기는 힘들어 보입니다.
이 분류에 해당하지 않거나 반만 걸쳐 있는 SLAM 기법들도 존재합니다. 저는 일단은 '스테레오 카메라를 사용한 그래프 기반 SLAM'에 대해 집중적으로 공부하고 리뷰해 보기로 결정했습니다.
'SLAM > SLAM 전반' 카테고리의 다른 글
그래프 기반 SLAM의 동작 방식 (0) 2021.06.27 왜 SLAM 공부를 시작했나요? (0) 2021.06.27 SLAM 공부를 위한 선행지식과, 공부를 통해 배울 수 있는 것은? (0) 2021.06.27 SLAM이란 무엇인가요? (0) 2021.06.27