Published on

Overview of SLAM

본 포스팅은 SLAM에 개괄적인 것들을 소개 목표로 작성이 되었다. 온보딩을 위해 급하게 분야에 대한 간략한 조사만 이루어져서 수정사항이 필요할 경우 아래 댓글로 남겨주길 바람.

Overview

용어 정리가 너무 안되어 있어서 terminology를 포커스로 두고 정리를 해보았다. 간략하게 내 지난 연구를 소개하면 휴머노이드 모델을 모션 데이터를 기반으로 해서 강화학습을 통해 원하는 task를 수행하는 것이 주제였다. 연결점을 굳이 찾자면, 로보틱스에서는 sim2real이라고 기반이 되는 연구를 해왔는데, 이 부분이 전체적인 SLAM 단계에서는 Planning&control 이라고 볼 수 있을 것 같다.

좀 더 친절한 설명을 위해서 내 방식으로 SLAM을 접근해보겠다.

로봇의 행동을 중심으로 용어를 두개로 나누어 볼 수 있었다.

  • Perception(인지): SLAM (Localization & Mapping)
  • Action(행동): Planning & Control

요약을 하면, 인지 부분에서는 로봇 스스로가 전체적인 환경을 build하고 해당 환경에서 어디에 있는지 스스로 인지를 하고 그에 대한 행동을 취하는 것으로 나눌 수 있다.

What is SLAM?

Simultaneous Localization And Mapping 의 준말이다. 직역하면 동시에 위치 추정과 맵핑으로 풀어 볼 수 있다.

위 사진은 전형적인 SLAM 파이프라인인데, 데이터 습득을 제외하고

  • Localization: Visual Odometry(VO), Loop closure, Backend optimization
  • Mapping: Map representation

로보틱스에서 자주 출연하는 용어인 frontend와 backend의 큰 차이점은 외부 센서로 직접 얻은 정보를 직접 처리 유무로 나뉘는 것 같다.

  • Frontend: Data acquisition, VO, Loop closure
  • Backend: Backend optimization, Map representation

결론적으로 SLAM은 로봇 스스로가 자신이 어디에 있는지 인식(localization) 하고 주변에 어떤 것들이 있는지 알아내는 것(mapping), 이 두 가지의 문제를 동시에 해결해 나가고자 하는 방향이 곧 SLAM이라고 볼 수 있다.

Camera Calibration

🎯 목표: 카메라에 대한 자세(위치 및 방향, pose)를 결정한다. 실세계 3차원 점과 카메라로 캡쳐한 이미지의 해당 투영된 픽셀간의 관계를 결정하는 데 있어서 모든 정보를 구한다. 쉽게 말하면 카메라에 대한 initial 정보들을 선행적으로 구하는 것이라고 본인은 이해했다..

Preliminary로 알아야할 정보는 좌표계 변환으로 이 과정에서 transformation matrix로 계산이 된다는 것이 특징이다. 보통은 카메라와 실세계 사이 좌표 기준으로 변환을 하게 되는데, 이와 관련해서는 유사하게 컴퓨터그래픽스 파이프라인을 이해하면 행렬변환 부분에 있어서는 이해가 수월하지 않을까 싶다(?)

위 이미지와 같이 calibration은 두 단계를 거치는데,

  • Intrinsic: 카메라 내부 관련 정보들 - 초점 거리, 광학 중심, 왜곡 계수
  • Extrinsic: 카메라 외부 관련 정보들 - 카메라의 회전 및 이동
좌표계 행렬 계산 순서좌표계 행렬 공식

좀 이해가 안될 것 같은데 결국에는 오른쪽에서 ⬅ 왼쪽으로 계산하는 모양새가 좌표계 입장에서 변환하는 것이기 때문이다. 흔히 헷깔릴수 있는 cam2world 같은 변환 행렬은 카메라 자체를 world 좌표계에 놓는다기 보단 카메라의 좌표계를 world 좌표계 자체로 변환하는 것으로 이해해야 한다.

따라서 위 함수는 world2cam 변환 좌표계라고 이해하면 될 것 같음..!

Distortion

데이터를 카메라를 통해 습득을 하게 되는데, 이 과정에서 발생하는 카메라의 왜곡 현상을 풀어야한다. 이는 Calibration 과정에서 얻은 distortion parameter(왜곡 계수)로 이를 처리한다. 초기화 과정에서 발생하는 오차들을 최소화하고 SLAM의 모든 과정은 "카메라가 정확하다"를 전제로 깔고 가기 때문에 필수불가결한 부분이다.

더 정확히 말하면 outlier로 인한 노이즈 및 feature detection error 그리고 카메라가 정확한 parameter가 있다는 전제하에 계산되기 때문에 초기 설정이 굉장히 중요하다.

보통 Calibration 과정은 Zhang's method라고 해서 외부 파라미터를 고려하지 않고 내부 파라미터로 calibration하는 경우가 있다. 10년전 부터는 딥러닝과 접목해서 intrinsic, extrinsic 부분의 왜곡을 해결하려는 시도가 있어 왔다.

이를 undistortion 과정으로 전처리로 아래와 같은 과정들이 있다.

Intrinsic Distortion

  • Radial distortion: 렌즈의 굴절에 의한 왜곡
  • Tangential distortion: 렌즈가 이미지와 평행하지 않을 경우 발생하는 왜곡

Extrinsic Distortion

보통은 OpenCV에서 제공하는 SolvePNP로 해결한다. 영상을 통해 획득한 카메라의 위치 방향(camera pose)를 획득한다.

다른 대안으로 PNP에서 발전된 여러 연구가 있는데, 딥러닝으로 푸는 시도들이 있다.

  • EPnP(Efficient PnP): 속도, 정확성 ⬆️, 실시간 활용
  • UPnP(Uncalibrated Perspective-n-Point): extrinsic+intrinsic parameter 추정, camera calibration을 정확히 모를 때 유용
  • POSIT(Pose from Orthography and Scaling with Iteration): 카메라가 orthographic일 때
  • P3P(Perspective-n-Point with Three Correspondences): 3개의 데이터만 사용
  • LHM(Linear-iterative Hybrid Method)
  • DSAC(Differentiable Sample Consensus)
  • Deep PnP: EPro-PNP와 같이 네트워크를 통해 2D-3D 매칭쌍을 찾음으로 정확한 pose 추정 가능
  • Global PnP: global optimal solution, robust to outliers but higher computational cost

Visual Odometry

데이터를 얻은 후에는 visual odometry로 로봇이 움직이는 전체적인 경로(odometry, trajectory)를 즉, 회전과 이동 파라미터를 계산한다.

정확히 정의를 내리면, 카메라 영상 입력을 바탕으로 인접한 사이의 센서 움직임을 예측하여 6DOF(euler+kartesian coord)을 계산하게 된다. 입력으로 들어가는 영상의 갯수에 따라 아래와 같이 나눌 수 있다.

  • Monocular VO: 한 개의 비디오로 인식. 물체의 거리가 먼 경우 혹은 소형 로봇에 활용된다.
  • Stereo VO: 주변 사물 인식에 있어서 monocular보단 신뢰성이 있는 결과물을 보이나 너무 멀리 떨어진 사물의 경우 인식하는데 있어서 한계를 보인다.

그리고 VO의 단점 중 하나로는 Drift Error로 동일한 장소에 도착했음에도 누적되는 오류로 실제 궤적과 차이가 발생하게 된다. 이러한 문제는 loop closure 즉, 루프 폐쇄 검출로 보정을 하게 된다.

Mapping

SLAM 파이프라인에 있어서 마지막 단계로 센서와 랜드마크 자세를 이용해 환경 맵을 만드는 과정이다. 상황이나 정확성, 가용가능 컴퓨팅 자원 등 요소들을 고려하여 선정한다.

아래는 Map의 종류

  • Geometric Map: Voxel, Point, Depth, Mesh
    • Depth의 경우 지도 학습으로 예측이 가능한데, 이 경우 depth 데이터를 학습하여 입력영상으로부터 바로 depth 예측, GT depth 영상 확보의 어려움이 존재한다(multi view로 얻은 데이터로 활용이 가능은 하다)
  • Semantic Map: Object 분리
  • General Map: Neural Model에 들어가는 implicit한 표현

Mapping의 경우 고전적인, 기하학적인 방법을 취하자면 최근 연구에엣는 depth 관련 정보를 딥러닝을 통해서 얻을 수 있다.

  • Depth Anything(2024)

Volume Reconstruction

3D Reconstruction과 동음이의어라고 생각하는데, 실제의 물체의 모습이나 모양을 복원한다. 여러 개의 이미지를 통해 복원을 하는데 여기서 가장 많이 나오는 Structure from Motion(SfM)이 대표적이다.

원리는 위 이미지인 Epipolar geometry라고 해서 스테리오 비전에서의 기하를 triangulation 하는 과정을 기반으로 한다.

전통적으로는 Mesh, Point로 explicit한 방법으로 표현된다.

비교적 최근 연구인 NeRF(2020)로 continuous한 scene을 딥러닝을 통해 복원이 가능함을 시사하였으음, 후속 연구에 해당하는 3d gaussian splatting(2023), TRIPS(2024)이 이에 해당한다.

Planning & Control

경로를 계획하고 최적화된 계획하 로봇을 제어하는 단계이다. 최근 연구는 planning 부분을 아예 데이터로 생략하거나 강화학습에서 보상함수로 조금 더 동적인 계획과 제어를 가능하게 연구를 진행해오고 있다. 아래는 그와 관련된 연구와 모델이다.

  • Conditional Variational AutoEncoder
  • Adversarial Motion Prior
  • Adversarial Skill Embeddings

각각의 정의는 아래와 같다.

  • Planing: 시작 상태(start state)에 목표 상태(goal state)까지 장애물들을 회피하면서 임무를 수행할지에 대한 최적의 계획
  • Control: 주어진 task를 actuator에서 힘이나 토크를 변환한다.

Wrapup & Conclusion

제어 부분에서 이제 인지하는 부분을 연결해서 생태계로 확장할 수 있다는 생각에 좀 설렌다고 해야하나 ㅋㅋ 다행히 기반이 되는 지식들(좌표계 계산 등등)은 대학원 다니면서 조교로 여러번 스스로 공부한 내용들이라 무리가 크게는 없었던 것 같다.

그리고 피드백 받은 것 중 하나가 이러한 단어 하나하나 정의에 매몰되기 보다는 그냥 하나의 숲으로 보고 개념을 이해하라.. 라고 방향을 잡아주셨다. (사실 나도.. 거창하게 하나의 단어로 정의내리는걸 안좋아하기 한다..ㅋㅋㅋㅋ)

암튼 나의 개괄적인 분석을 토대로 회사 문서를 조금 더 꼼꼼하게 봐야겠다.

Reference

함께 읽으면 좋은 글들 모음
Authors