SLAM
SLAM = Simultaneous Localization and Mapping
SLAM은 동시에 Localization(본인의 위치를 확인) 및 지도 제작의 약자이다. 이는 주변 환경에 대해 사전 정보가 없는 상황에서 센서(ex. 카메라, 라이다)를 이용하여 이동 중에 주변 환경의 모델을 확립하고 자신의 pose를 추정하는 작업이다.
SLAM은 로봇 공학 분야에서 광범위하게 사용되었으며, 자율주행 및 여러 분야에서 필수적으로 필요한 기술로 주목받고 있다.
SLAM의 목적은 Localization과 Mapping의 문제를 확실히 해결하는 것이다. Localization은 로봇(센서)이 자신의 위치를 추정하면서 주변 환경인 지도를 생성하는 것이 필요한데, 그렇다면 어떻게 본인의 위치를 추정하고 지도를 만들 수 있을까?
그 해답은 바로 센서의 정보를 활용해야 하는 것이다. 즉, SLAM을 하기 위해서는 센서가 필수적이다.
대표적인 비전 센서로는 카메라, LiDAR 등 여러 센서가 존재하는데, 그중 3D LiDAR는 어떤 방식으로 동작하는지에 대해 알아보고자 한다.
3D LiDAR
LiDAR = Light Detection and Ranging
LiDAR는 빛 감지 및 범위(거리 측정)를 의미하며, 레이저 펄스를 쏘고 반사되어 돌아오는 시간을 측정하여 반사체의 위치좌표를 측정하는 레이다 시스템이다. 레이저 펄스 신호가 측정 범위 내 물체에 반사되는 시간을 측정하여 물체와 센서 사이의 거리를 계산하는 방식으로 진행된다.
3D LiDAR는 초당 수백만 포인트를 방출하여 주변 환경에 대한 모델을 확립할 수 있게 한다. 3D LiDAR에서 방출되는 빔의 수를 일반적으로 "채널 수"라고 하며, 채널 수는 포인트 클라우드의 LoD(Level of Detail)을 표현할 수 있게 된다. 8, 16, 32 등 다양한 채널이 존재하며 현재는 주로 128개의 채널이 사용되고 있다. 따라서 단시간에 수백만 개의 레이저 빔을 방출하고 센서와 주변 물체 사이의 거리를 측정할 수 있게 된다.
3D LiDAR 장점
그렇다면 왜 3D LiDAR를 사용할까?
테슬라의 경우 고가의 라이더를 다른 센서들로 대체할 수 있다고 얘기하고 있지만, 그럼에도 3D LiDAR를 사용하는 이유는 무엇일까?
대표적인 센서인 카메라와 비교해보면, 카메라는 2D 이미지를 통해 환경을 생성한다. 하지만 3D LiDAR는 레이저 기반의 기술을 활용하여 주변 환경의 실시간 고해상도 3D 지도 및 포인트 클라우드를 생성하여 정확한 물체의 거리를 측정할 수 있고 순간적으로 수백만 개의 포인터를 생성할 수 있게 된다.
또한, 카메라는 외부 요인(ex. 조명)에 영향을 크게 받게 되어 예측할 수 없는 사각지대에 민감한 반면에, 3D LiDAR의 경우 자체 광원을 통해 주변 조명 조건에 Robust 하여 더 정확한 환경 모델을 적립할 수 있게 된다.
3D LiDAR SLAM framework
일반적인 SLAM의 framework는 크게 Front-End와 Back-End로 나뉜다.
Front-End에서는 주로 센서에 의존하는 처리 방식으로, 센서로부터 읽어온 데이터를 pre-processing하여 odometry motion을 추정하는 작업 등을 진행하게 된다.
Back-End에서는 센서에 의존하지 않으며 일관된 궤도 및 맵을 얻을 수 있도록 Graph pose를 최적화(optimazation)하는 작업 등을 진행하게 된다.
3D LiDAR SLAM의 작동 방식을 보여주는 일반적인 흐름은 다음과 같다.
SLAM의 전체적인 시스템에 크게 벗어나지 않으며, LiDAR를 이용하여 SLAM을 진행할 수 있는 시스템을 다음과 같이 일반화할 수 있게 된다.
그렇다면 각 블록에 대표적인 알고리즘에 대해 알아보고자 한다.
Undistortion
첫 번째 단계는 각 스윕에서 왜곡하지 않은 포인트를 얻는 것이다. 위의 간단한 계산(Distance = cxt)을 사용하여 하나의 스윕에서 3D 공간으로 포인트를 투영하면 주변이 흐릿하게 표현된다. 라이더가 각 스윕 동안 이동하여 센서와 물체 사이의 거리가 한 스윕 내에서 달라지기 때문에 일어나게 된다. 이 과정을 "Undistortion"이라고 하며, 포인트를 왜곡하지 않기 위해 SLAM은 최신 포즈 정보를 사용하여 센서의 움직임을 예측하게 된다.
Point Selection
앞의 프로세스를 통해 왜곡이 없는 포인트에 대한 처리를 마쳤다면, 이제 위치를 추정하기 위해 사용되는 포인트를 선택하게 된다.
한 번의 스윕에 수십만 개의 포인트가 포함되기 때문에 후속 계산을 위해 포인트를 식별하는 작업을 하게 된다. 이를 3D LiDAR SLAM에서 "특징점(Feature point)"를 찾는다고 한다. 가장 잘 알려진 3D Lidar SLAM 접근 방식 중 하나인 LOAM은 평면(Planer point)과 가장자리 점(Edge point)을 추출한다.
이 프로세스에는 계산 프로세스를 가속화하기 위한 "복셀화"도 포함한다. 3D 공간을 작은 3D 공간 그룹인 Voxel로 나눈 후, 각 복셀에서 대표점만 선택하여 포인트 클라우드의 크기를 줄여 계산에서의 이점을 얻을 수 있게 한다.
Frame Matching
이것은 현재 프레임(한 번의 스윕으로 수집된 포인트 클라우드)에서 포즈를 얻는 마지막 프로세스로 이 단계에서 SLAM 시스템은 현재 프레임을 이전 프레임과 일치시켜 포즈를 얻는다. 이 매칭 작업을 수행하기 위해 시스템은 현재 프레임과 참조(이전) 프레임 사이에서 해당 특징점(대응점)을 찾을 수 있어야 한다.
주요 접근 방식은 NDT(Normal Distributions Transform)와 ICP(Iterative Closest Point) 등의 알고리즘이 존재한다.
Map Extension
다음 단계는 Map Extension으로 LiDAR의 현재 포즈뿐만 아니라 3D 공간에서 현재 프레임의 모든 지점 위치를 이해하고 각 지점의 위치를 사용하여 기존 지도에 추가하여 지도를 확장하는 작업이다. Frame Matching 작업과 같이 응용해서 사용할 수 있다.
Loop Closure Detection
시스템이 공간을 이동하고 환경 모델을 구축함에 따라 생성되는 지도에 반영되는 측정 오류 및 센서 드리프트가 계속 누적되게 된다. Loop Closure Detection은 시스템이 이전에 매핑된 영역을 다시 방문하고 있음을 인식하고 이전에 연결되지 않은 맵 부분을 루프로 연결하여 맵에 누적된 오류를 수정하는 작업이다. 대표적인 알고리즘으로 Scan Context가 있다.
Relocalisation
SLAM에서 현지화라는 용어는 주어진 환경과 공간 내에서 시스템의 방향과 위치를 인식하는 것이며, Relocalisation은 시스템이 추적을 잃을 때(또는 새로운 환경에서 초기화될 때) 발생하며 현재 관찰 가능한 기능을 기반으로 위치를 다시 추정해야 한다. 시스템이 관찰한 기능을 사용 가능한 맵과 일치시킬 수 있는 경우 맵에서 해당 포즈로 자체 Localization 하고 SLAM을 다시 진행하게 된다.
이렇게 3D LiDAR SLAM에 대한 일반적인 프로세스가 진행되게 된다.
3D 공간을 직관적으로 표현할 수 있는 장점을 가진 LiDAR 센서를 기반으로 앞으로의 SLAM 연구가 어떤 방향으로 진행될 지 많은 기대를 할 수 있게 되었다.
Reference
[1]: 위키백과 - Wiktionaryhttps://en.wiktionary.org
[2]: 벨로다인 - https://velodynelidar.com/
[3]: 루미솔 - http://www.lumisol.co.kr/
[4]: https://www.kudan.io/blog/3d-lidar-slam-the-basics/
[5]: Ji Zhang, Sanjiv Singh, "LOAM: Lidar Odometry and Mapping in real time", Robotics: Science and Systems Conference (RSS), 109-111, 2014
[6]: Kim, Giseop, and Ayoung Kim. "Scan context: Egocentric spatial descriptor for place recognition within 3d point cloud map." 2018 IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS). IEEE, 2018.