SLAM (Simultaneous Localization and Mapping)

한종우·2022년 12월 1일
0

SLAM

목록 보기
1/1
post-thumbnail

SLAM쪽 공부를 하면서 ICP부터 정리하려 했으나, SLAM이 뭔지에 대해 간단히 짚는 글을 따로 분리하는 게 좋을 것 같아 작성한다.

SLAM (Simultaneous Localization and Mapping)

SLAM의 영어를 직역하자면 동시적인 localization과 mapping이다.

  • localiztion: 위치를 추정
  • mapping: map 구축

[Localization: 위치 추정]
localization은 스마트폰으로도 많이 사용하는 GPS를 생각하면 이해가 빠르다. GPS 센서는 지구에서 내 위치에 대한 위도, 경도, 고도를 가져오는데 이 과정이 결국 내 위치를 추정하는 것이다.
운전을 할 때 내 위치를 알아야 네비게이션에서 경로를 알려줄 수 있듯이 자율주행에서도 localization은 필수적이다.

[Mapping: map 구축]
mapping이라는 말은 SLAM을 처음 접하는 사람에게는 생소할 수 있는 용어다. GPS가 여러 위성으로부터의 데이터를 얻어 위치를 추정하듯이, GPS가 아닌 다른 센서 (LiDAR, 카메라 등)으로 위치를 추정하기 위해서도 landmark가 필요하다.

ex)
landmark 예시

이해하기 쉬운 예시를 들자면 우리는 친구에게 내 위치를 설명할 때 근처의 건물을 기준으로 설명하곤 한다. "낙성대역 4번 출구쪽에 있는 스타벅스 앞" 이라고 설명했을 때 "스타벅스"라는 것도 하나의 기준이지만 "낙성대역 4번 출구"라는 정보가 추가적으로 있었기 때문에 우리는 위치를 하나로 특정할 수 있다. 이처럼 기준이 될 수 있는 landmark가 있으면, 그리고 많으면 많을수록 localization을 쉽게 수행할 수 있는데, 이러한 landmark들을 포함한 map을 만드는 것이 mapping의 역할이다.

[SLAM: Localization + Mapping]
즉 SLAM은 sensor data만으로 landmark를 포함한 map을 만들면서, map에 있는 landmark를 통해 현재 위치를 추정하는 것을 동시에 수행한다.
사용하는 센서에 따라 SLAM을 구분하기도 한다.

  • Visual SLAM: 카메라 사용
  • LiDAR SLAM: LiDAR 사용

Visual SLAM이나 LiDAR SLAM이라고 해서 꼭 한 가지 센서만 사용하는 것은 아니다. GPS나 IMU 등을 함께 사용하면 정확도가 높아지기 때문에 여러 센서들을 함께 사용하곤 한다.
Visual SLAM에 대해서는 지식이 부족하여 본 글에서는 먼저 어느 정도 공부한 LiDAR SLAM에 대해서 설명하고 마치고자 한다.

LiDAR SLAM

NDT matching

LiDAR(Light Detection And Ranging) 센서도 SLAM을 위해 많이 사용하는 센서다. LiDAR는 레이저 펄스를 발사해서 돌아오는 시간을 측정해서 스캔하는 센서로 주위에 대한 point가 위 그림에서 가장 마지막 그림처럼 데이터를 얻을 수 있다. 여러 point이기 때문에 point cloud라고도 한다.
LiDAR를 이용하면 건물 벽면이나 바닥면의 point 정보를 꽤나 높은 정밀도로 알 수 있기 때문에 여러 위치에서 측정한 point들을 잘 모은다면 주위의 모든 건물에 대한 지도, 즉 points map을 만들 수 있다. 이 과정이 LiDAR를 이용한 mapping이다.
그림에서 흰색으로 나타난 두번째 그림이 Rviz에 visualization한 points map이다. SVL Simulator에서 제공하는 CubeTown에 대한 points map인데 살펴보면 빗면과 건물 등의 feature가 잘 표현된 것을 확인할 수 있다.

LiDAR SLAM

이처럼 잘 만들어진 points map이 있다면, 현재 LiDAR가 측정한 point 데이터가 points map과 align되는 위치가 현재 LiDAR의 위치라고 생각할 수 있다. 이 과정이 LiDAR를 이용한 localization이다.

localization을 잘 하기 위해서는 좋은 points map이 필요하다. 그런데, 좋은 points map을 만들기 위해서는 scan한 LiDAR data를 정확한 위치에서 합쳐야 한다(영어로는 새로운 point를 register한다고 표현한다). 즉, 높은 퀄리티의 mapping을 위해서 localization을 잘 해야한다.
SLAM이 어려운 이유는 이처럼 localization과 mapping이 상호 보완적인 관계이기 때문이다.

자율주행을 할 때에 mapping을 할 필요는 없다. 이미 만들어진 points map을 시스템 시작 시에 불러오는 것이 계산 부하 면에서도, 성능 면에서도 더 좋다. 이처럼 LiDAR를 통해 localization만 한다고 하면 points map은 이미 주어져 있다고 가정한다.

LiDAR SLAM에서의 Problem Definition

Two 3-D point Problem

앞으로 소개할 ICP나 NDT 등의 LiDAR SLAM에서 풀고자 하는 문제는 결국 위의 그림처럼 요약된다. 하나의 고정된 map이 있고, LiDAR가 새로 scan한 data가 있을 때 이를 최적으로 register할 수 있도록 변환하는 선형 변환 (translation, rotation) 행렬을 구하는 것이다.

언뜻 보면 기존의 map이 주어지기 때문에 localization 과정이 아니냐고 생각할 수 있다. 하지만, bib_i를 처음 scan한 LiDAR points라고 생각한다면, 그 point에 제일 잘 맞는 위치에 새로운 point를 계속해서 합치면 결국 map이 만들어진다. 즉, mapping도 같은 문제를 해결해야 하므로 localization과 같은 알고리즘을 사용한다. 하지만 자율주행 시와 같이 굳이 mapping을 할 필요가 없이 localization만 해도 되는 경우가 있기 때문에 각 경우에 따라 사용하는 알고리즘은 다를 수 있다.

  • localization: 빠르게 수행하는 것이 중요하므로 (자율주행에서 localization이 느리게 수행되면 어떻게 될지 생각해보자) 정확도를 약간 포기하더라도 실행시간이 빠른 알고리즘을 선호한다.
  • mapping: mapping만 한다고 하면 더 정확한 map을 만드는 것이 중요하므로 실행시간이 느리더라도 정확한 알고리즘을 사용하는 것이 좋다.

NDT가 대표적으로 정확도를 낮추는 대신 실행시간을 줄인 알고리즘의 예시이다. 구체적인 알고리즘은 이후의 글에서 소개하도록 하겠다.

profile
고양이를 좋아하는 개발자

0개의 댓글