Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags
more
Archives
Today
Total
관리 메뉴

what i learned

[VSLAM] SLAM이란? 본문

Image Processing

[VSLAM] SLAM이란?

햄식이111 2023. 7. 20. 14:56

SLAM(Simultaneous Localization And Mapping)

위치 추정 및 지도를 동시에 작성하는 알고리즘이다.

💡 Localization & Mapping
Localization(위치추정): 지도를 보고 실제 내 주변의 정보와 비교하여 현재 내 위치를 파악
Mapping(지도작성): 현재 내 위치를 알고 주변 환경에 대한 지도를 생성

Localization과 Mapping 어느 것이 먼저가 될 수 없기 때문에 최적화를 통해 이 문제를 해결하는 것이 SLAM의 특징이다.

로봇이 Localization과 Mapping을 하기 위해 카메라나 라이다를 사용하여 SLAM을 진행하는데, 카메라로 처리하는 것을 VSLAM(Visual SLAM), 라이다로 처리하는 것을 Lidar SLAM이라고 한다.

 

VSLAM중에서도 카메라의 종류에 따라 Monocular VSLAM, Stereo/Multi-camera VSLAM, RGB-VSLAM으로 구분된다.

 

SLAM의 종류는 크게 offline SLAM과 online SLAM으로 나뉠 수 있다.

offline SLAM은 Bundle Adjustment(BA)-based SLAM과 유사하고, online SLAM은 Kalman Filter(KF) 혹은 Particle Filter(PF)과 같은 filter-based SLAM이다.

 

최근 Graph SLAM이 많이 사용되고 있는데 로봇의 노드(node)와 엣지(edge)로 구성된 그래프 구조를 사용하여 로봇의 pose와 map을 구하는 방법이다.

Factor graph SLAM

 

 

SLAM을 사용하는 이유

위에서 언급했듯이 SLAM은 Localization과 Mapping을 동시에 수행하기 때문에 어느 것 하나 확실한 데이터 값을 얻지 못한 채로 시작한다.

사전에 정확한 정보가 없기 때문에 정확성이 떨어질 수 있지만, Loop Closure를 만들고 나면 오차를 점차 줄일 수 있기 때문에 SLAM이 사용되고 있다.

💡 Loop Closure
로봇이 모든 경로를 다 돌고 다시 제자리로 왔을 경우를 말한다.

하지만 로봇의 pose가 불확실하기 때문에 SLAM을 진행하는데 어려움이 있다.

예를 들어, 아래의 그림처럼 로봇의 불확실한 위치 범위 내에서 어떤 랜드마크를 바라보고 있는지 확신하기 어렵기 때문이다.

출처 https://youtu.be/d1TvU_jvMsE

이러한 문제를 해결하기 위해 SLAM에서는 data association이 필요하다.

 

 

수학적으로 표현한 SLAM

로봇의 모션과 센서의 값들을 활용해서 맵 데이터와 로봇의 pose값을 확률적으로 추론한다.

$$ p \big\{x_{0:T}, m \mid z_{1:T}, u_{1:T}\big\} $$

$u_{1:T} = \big\{u_{1}, u_{2}, u_{3}\ldots , u_{T}\big\}$ :로봇의 움직임(robot's control(motion))

$z_{1:T} = \big\{z_{1}, z_{2}, z_{3}\ldots , z_{T}\big\}$ :센서 값(observations)

$m$ :맵 데이터(map of environment)

$x_{0:T} = \big\{x_{0}, x_{1}, x_{2}\ldots , x_{T}\big\}$ :로봇의 궤적(path of the robot, robot's pose(trajectory))

 

출처 https://youtu.be/d1TvU_jvMsE

  1. $u_{t-1}$: 로봇의 움직임이 생겨서
  2. $x_{t-1}$: pose의 값이 변경되고
  3. $z_{t-1}$: 바뀐 pose의 값으로 observation값을 추정하면
  4. $m$: map point가 생성
  5. $u_{t}$: 지난 pose의 값에 로봇의 움직임이 더해져서
  6. $x_{t}$: pose의 값이 다시 한번 변경되면
  7. $z_{t}$: 바뀐 pose의 값으로 observation값을 추정하고
  8. $m$: map point가 생성된다.

위의 과정에서 정확하게 얻을 수 있는 값은 로봇의 motion인 $u$와 센서 값 $z$이며, 로봇의 pose를 나타내는 $x$값과 map을 형성하는 $m$값은 알기 어렵다.

 

✔️ motion model

이전 값과 로봇의 motion값을 어떻게 조합해서 최대한 정확한 값을 얻어낼 수 있을지에 대한 값

$$ p \big\{x_{T}\mid x_{t-1}, u_{T}\big\} $$

✔️ observation model

센서에서 얻는 값으로 map을 어떻게 추론할 수 있는지에 대한 값

$$ p \big\{z_{T}\mid x_{t}\big\} $$

 

 

SLAM 알고리즘

  1. 시각적 주행 거리측정(Visual odometry)
  2. 루프 폐쇄 검출(Loop closure detection)
  3. 백엔드 최적화(Backend optimization)
  4. 맵 표현(Map representation)

SLAM은 data를 획득하여 noise를 제거한 후 특징점을 추출한다.

 

 

SLAM의 종류

초기 SLAM은 Bayes필터에 기반한 방법들을 사용하여 연구

ex. EFK(Extended Kalman Filter) SLAM, FAST SLAM

최근엔 Graph 구조를 이용한 최적화나 특징점을 찾아 해결하는 SLAM 사용

ex. ORB SLAM

 

 

 

[참고자료]

[youtube] 스스로 만드는 위치 지도 슬램(SLAM) 기술의 원리

[youtube] SLAM DUNK season2

 


공부한 내용을 기록하는 공간입니다.

잘못된 정보가 있을 경우 댓글로 피드백 주세요.

올바른 지식을 알려주셔서 감사합니다:)