영상출처 : www.youtube.com/watch?v=_i8PaekcguA
※ 문제가 될시 삭제하겠습니다.
▶Localization과 Mapping은 Chicken-Egg 문제이다
- Map이 있어야 내가 현재 어디 있는지 알수 있다(Localization)
- 특정 지점에 있어야 Map을 생성할 수 있다(Mapping)
▶다양한 Localization 방법
- (GPS 전파를 받지 못하는 경우) 간접적인 물리량 활용
e.g. 휠 인코더, 카메라, IMU 센서 등
- 카메라를 이용할 경우 Visual SLAM을 활용한다.
: 단안 카메라, 양안 카메라 등 방식에 따라 방법이 다르다.
- 라이다 센서 활용
: 공간 분해능(Resolution)이 높다.
※ 단안 카메라는 BaseLine이 고정되지 않아 Disparity는 카메라 이동으로 구할 수 있지만, Depth는 구할 수 없다.
반면, 양면 카메라는 BaseLine이 고정되어 (Stereo Matching을 이용하여) 깊이를 알 수 있다(BaseLine이 멀 수록 먼 거리를 측정할 수 있다)
▶SLAM 전체 구성
Visual odometry
: 인접한 이미지 사이 순차적인 정보를 계산
: 카메라가 3차원 상 이동하였음 고려, Drift Error(누적 오차)가 발생한다.
Backend Optimization (혹은 State Estimation)
: 누적 오차를 제거
: 그외, 센서 노이즈
: e.g. 필터 기반(칼만, 파티클 필터), 비선형 최적화(bundle adjustment, pose graph optimization)
Loop Closing - 과거 정보와 비교
: 대부분은 이미지간의 유사성을 판단 or QR 코드 활용
Mapping
: 환경 맵을 만드는 과정
e.g. 무인 청소 로봇의 경우 2차원 맵이면 충분하지만, 자율주행 드론은 3차원 지도가 필요하다.
: 맵 표현 방법 예시
- PointCloud
- Voxel
- Surfel
- Occupancy grid map
: 맵 밀도에 따른 종류
- Spase, Dense, Semi-Dense
▶SLAM 종류
Spase SLAM
- 일부의 정보만 취득 (landmark or feature)
- ORB-SLAM
Dense SLAM
- 취득된 데이터 전부 다 사용 - RGB-D 카메라를 이용하기도 한다
- InfiniTam
Semi-Dense SLAM
- 이전 프레임간의 Intensity 차이를 확인하여 카메라 Transformation을 계산
- 주로 Edge와 같이 특징 적인 부분만 맵으로 만든다.
- LSD SLAM by 뮌헨 공과대학
Lidar SLAM
- LOAM(Lidar Odometry And Mapping)
▶SLAM 상태 추정 모델
모션 모델
- 수학적 모델 : $ x_k = f(x_{k-1}, u_k, w_k) $
- f() : 모션 모델을 나타내는 함수
- $w_k$ : 모션 모델에 대한 노이즈
- $u_k$ : 모션 센서 입력 혹은 컨트롤 입력
센서 모델
- 로봇이 $x_k$ 위치에서 랜드마크 $y_k$ 를 볼때 관측 데이터 $z_{k,j}$가 생성되는 것을 표현
- 수학적 정의 : $ z_{k,j} = h(y_j, x_k, v_{k,j}) $
- h() : 센서 모델을 나타내는 함수
- $v_{k,j}$ : 센서 모델에 대한 노이즈
Visual Localization Challenge(Video)