Robot programming lecture note
기말 정리 Robot Programming
10. To understand SLAM
Localization
- 2장의 사진이 있을 때, 실제 location 이나 trajectory를 알 수 있는가?
- 실제 지도가 있고, 카메라 intrinsic parameter를 알면 알 수 있음.
Mapping
- 2장의 사진을 통해 Map을 만들 수 있는가?
- 나의 정확한 pose와 카메라 intrinsic parameter를 알면 알 수 있음.
Feature points
- Feature
- Salient and repeatable points or regions
- Requirements
- 다른 이미지에서 같은 point가 비슷한 feature를 가지고 있어야함.
- 뷰 포인트가 변경 되어도 동일한 위치에서 발견되어야 함.
- Rotation invariant
- Scale invariant
- Feature extraction method
- Point-based methods
- Harris Corner
- Fast
- Blob-based methods
- DOF(Different of Gaussian)
- LoG(Laplacian of Gaussian)
- Region-based methods
- MSER(Maximally stable extremal regions)
- Point-based methods
- Feature Matching
- Template matching
- Template: 2D matrix centered on point
- Window를 통해 비교를 하여 matching
- SAD: Sum of Absolute Differences
- SSD: Sum of Squared Differences
- NCC: Normalized Cross Correlation
- SSD가 SAD에 비해 outlier에 덜 민감함.
- robust하지 않음.
- Feature matching
- descriptor → matching
- Discriptor
- Feature point에 대한 설명
- ex) SIFT, ORF, SURF
- Template matching
Localization & Mapping
- Mapping
- feautre extraction & matching
- back proejection
- 정확하게 카메라의 ray가 어디서 오는지 모르지만 카메라의 방향은 알기 때문에, 카메라에서 각 점을 이은 선이 한점에서 만나는 점을 찾는다. 해당 점은 실제 feature가 있던 위치.
- Localization
- Data association
- Pose estimation
- 실제 물체의 position, intrinsic parameter, 2D position을 알면 카메라의 Rotation, Translation을 알 수 있음.
11. Introduction to SLAM
SLAM
- Simultaneously localization and mapping
- Given Data
- The robot’s controls (로봇 제어)
- Observation
- Wanted
- Map of the environment
- Path of the robot
- Probabilistic Approaches’
- Given data 또한 완벽하게 정확하지 않음.
- 따라서 확률 사용.
- Full SLAM vs Online SLAM
- Full SLAM estimates the entire path
- Online SLAM estimates only the latest pose
- Motion model
- Described the relative motion of the robot
- 이전 pose 와 control을 알 때, 어떠한 pose를 취하고 있는지
- Gausian Model, Non-Gaussian Model
- Observation mdoel
- measurements with the robot’s pose
- Gaussian Model, Non-Gaussian model
12. Probabilistic Robotics
Marginalization
- 원하는 변수는 제외하고 다 더해서 원하는 변수만 남겨 놓는 것.
Bayes Formula
Causal vs Diagnostic Reasoning
- Diagnostic
-
P(open z), 즉, 어떤 상황에서 해당 사건이 일어났을 확률
-
- Causal
-
p(z open), 어떤 사건이 일어났을 때, 어떤 상황인 경우 - 주로 Causal이 얻기 쉬움
-
Recursive Bayesian Updating
- Markov assumption
- 만약 현재 상태가 이전 상태와 독립하다고 가정하고 구함.
Action
- Action은 절대로 정확하게 원하는대로 수행되지 않음. 따라서 확률을 이용하여 Action을 취했을 때, 다음 State를 예측. Bay
Bayes Filter
- Given: observation, Sensor model, Action model, Prior state
- Wanted: Next state
13. Homogeneous Coordinate
Homogeneous Coordinates
- a system of coordinates used in projective geometry(Euclidian geometry)
- Single Matrix can represent affine transformations and projective transformations
- From Homogeneous to Euclidian Coordinates
Transformation and Rotation Matric
- Chaining tranformation via matrix
- x’ = M1M2x
14. Motion and Sensor Models
Recursive Bayes Filter
Prediction and Correction Step
- Prediction step
- Correction step
- Bayes filter는 recursive state estimation을 위한 framework.
- 다른 방식들을 사용한 다양한 filter들 존재.
Motion model
- 로봇의 모델은 불명확함.
- 두가지 방식의 motion model 존재
- Odometry-based
- wheel encoder가 있는 시스템을 위해 존재
- wheel encoder? 얼마의 힘을 주면 얼만큼 바퀴가 돌아가는지 계산하는 encoder
- Velocity-based
- wheel encoder가 없는 system을 위함
- 두가지 방법 중 Odometry-based가 더 정확.
- Odometry-based
Odometry Model
Robot motion
Noise
- Calculating the Posterior
Velocity-based Model
- Velocity-based Model은 로봇이 원을 그리며 지나간다고 생각을 하고, 이전 위치와 velocity를 이용하여 다음 위치를 구함.
![Screen Shot 2022-12-15 at 12.55.49 AM.png](_posts/Robot-Programming-lecture-note/Screen_Shot_2022-12-15_at_12.55.49_AM.png” class=”img-fluid rounded z-depth-1” zoomable=true %}
- Motion Equation
![Screen Shot 2022-12-15 at 12.56.09 AM.png](_posts/Robot-Programming-lecture-note/Screen_Shot_2022-12-15_at_12.56.09_AM.png” class=”img-fluid rounded z-depth-1” zoomable=true %}
- 이때 odometry-based model과는 다르게 로봇 자체의 위치만을 계산하고, 로봇이 바라보는 방향에 대해서는 구하지 않음. heading 정보 없음.
-
따라서 이를 해결하기 위해 추가적인 rotation 정보 더해서 로봇의 heading 세부조정함.
![Screen Shot 2022-12-15 at 12.58.59 AM.png](_posts/Robot-Programming-lecture-note/Screen_Shot_2022-12-15_at_12.58.59_AM.png” class=”img-fluid rounded z-depth-1” zoomable=true %}
Sensor Model
- Sensor로 측정된 값을 통해 observation update
- 이때 모델을 통해서 얻은 데이터은 서로 독립적이라고 가정.
- Model for Laser Scanner
- Beam-based Sensor Model
- Beam-Endpoint Model
- Sensor가 측정한 값을 기준으로 Gaussian blur 처리.
- 이후 각 확률들을 더하기만 하면 되기 때문에 매우 efficient하다.
- Ray-cast Model
- Mixture of four models
- exponential distribution(Reflected by the obstacle) + gaussian distribution(Target) + uniform distribution(For random measurement) + pick distribution (For maximum measurement)
- Measurement error type
- Ray reflected by the obstacles
- Random measurment
- Maximum range measurement
- Perceiving Landmarks with Range-Bearing Sensors
15. Kalman Filter
- Linear Gaussian distribution을 사용.
- 장점
- only need Mean and Variance
- 장점
Kalman Filter - 1D case
- Prediction
- Summation of Gaussian distribution
- Update
- 측정값의 평균, 분산과 예측값의 평균, 분산을 이용하여 최종값 update
- 평균을 구하는 방식은 분산이 더 작은 분포 쪽에 weight을 줄 수 있음.
- Kalman gain
- 만약 mearsurement is more accurate, K = 1
Kalman filter - Multivariate
- Prediction
- 1D와 동일한 방식으로 진행.
- F: state transition matrix from state to state
- B: state transition matrix from control to state
- X and U matrix have different dimension → 맞춰줘야함
- Covariance 사용하여 prediction 진행
- Update
- 이떼 X는 predicted mean , H는 state transition matrix (using for synchronized dimension)
</figure>
<figure>
</figure>
- H 삭제. H는 dimension을 맞춰주기 위해 사용한 matrix이기 때문에 삭제 가능.
- 최종
<figure>
</figure>
Kalman Filter Assumption
- Kalman filter의 한계
- 모든 상황이 linear하다고 가정.
- 따라서 linear하지 않는 상황에서는 사용하지 못함.
- Gaussian distribution이 유지가 되지 않음.
16. Extended Kalman Filter
Kalman Filter Problem
- linear하지 상황에서 transformation을 하게 되면, 더이상 Gaussian Distribution이 아니게 된다. 따라서 이를 더이상 mean과 variance만을 이용하여 구할 수 없음.
- 하지만, 대부분 실제 상황에서는 nonlinear한 함수이다. 따라서 Kalman Filter를 사용할 수 없음.
- 이를 해결하기 위해 Local linearization을 사용.
Non-linear transformation
- Non-linear한 상황에서, 특정 부분은, linear transformation으로 approximate할 수 있음.
-
Taylor series를 이용하여 특정 부분을 linearization함.
![Screen Shot 2022-12-16 at 5.27.53 PM.png](_posts/Robot-Programming-lecture-note/Screen_Shot_2022-12-16_at_5.27.53_PM.png” class=”img-fluid rounded z-depth-1” zoomable=true %}
- Non-square matrix에서는 variance를 Jacobian matrix(접면을 나타냄)를 이용.
EKF Linearization - First order Taylor Expansion
- Prediction
- Correction
- Kalman Filter vs Extended Kalman Filter
17. EKF SLAM
EKF SLAM
- State space for the 2D plane constructed with robot’s pose and landmarks
- Mean and Variance
- Filter Cycle
- Initialization
- Robot은 자신만의 reference frame이 존재 (주로 처음 시작 frame이 reference frame) 이때 모든 Land mark는 모르기 때문에, 0으로 초기화
-
Variance의 경우, 처음 위치는 불확실성이 없어 무조건 0, 반대로 landmark에 대해서는 불확실성이 매우 높기 때문에 무한대로 초기화 해줌(해당 값을 사용하지 않겠다는 뜻)
![Screen Shot 2022-12-16 at 5.53.00 PM.png](_posts/Robot-Programming-lecture-note/Screen_Shot_2022-12-16_at_5.53.00_PM.png” class=”img-fluid rounded z-depth-1” zoomable=true %}
- State prediction
-
로봇의 motion이 다음과 같을 때, 이를 2N+3 차원으로 보내주기 위해 차원을 맞춰줌.
![Screen Shot 2022-12-16 at 6.00.46 PM.png](_posts/Robot-Programming-lecture-note/Screen_Shot_2022-12-16_at_6.00.46_PM.png” class=”img-fluid rounded z-depth-1” zoomable=true %}
-
Jacobian matrix only affects the robot’s motion. Not the landmarks. 따라서 landmark 부분은 Identity matrix 사용.
![Screen Shot 2022-12-16 at 5.54.44 PM.png](_posts/Robot-Programming-lecture-note/Screen_Shot_2022-12-16_at_5.54.44_PM.png” class=”img-fluid rounded z-depth-1” zoomable=true %}
![Screen Shot 2022-12-16 at 6.13.54 PM.png](_posts/Robot-Programming-lecture-note/Screen_Shot_2022-12-16_at_6.13.54_PM.png” class=”img-fluid rounded z-depth-1” zoomable=true %}
![Screen Shot 2022-12-16 at 6.16.14 PM.png](_posts/Robot-Programming-lecture-note/Screen_Shot_2022-12-16_at_6.16.14_PM.png” class=”img-fluid rounded z-depth-1” zoomable=true %}
-
Prediction 진행
![Screen Shot 2022-12-16 at 6.19.04 PM.png](_posts/Robot-Programming-lecture-note/Screen_Shot_2022-12-16_at_6.19.04_PM.png” class=”img-fluid rounded z-depth-1” zoomable=true %}
-
- Measurement prediction
-
현재 위치를 바탕으로 observation 예측
![Screen Shot 2022-12-16 at 6.21.28 PM.png](_posts/Robot-Programming-lecture-note/Screen_Shot_2022-12-16_at_6.21.28_PM.png” class=”img-fluid rounded z-depth-1” zoomable=true %}
-
Jacobian 계산 후 high dimensional space로 이동.
![Screen Shot 2022-12-16 at 6.24.14 PM.png](_posts/Robot-Programming-lecture-note/Screen_Shot_2022-12-16_at_6.24.14_PM.png” class=”img-fluid rounded z-depth-1” zoomable=true %}
![Screen Shot 2022-12-16 at 6.25.55 PM.png](_posts/Robot-Programming-lecture-note/Screen_Shot_2022-12-16_at_6.25.55_PM.png” class=”img-fluid rounded z-depth-1” zoomable=true %}
-
- Measurement
- Data association
-
이후 correction 진행.
![Screen Shot 2022-12-16 at 6.27.06 PM.png](_posts/Robot-Programming-lecture-note/Screen_Shot_2022-12-16_at_6.27.06_PM.png” class=”img-fluid rounded z-depth-1” zoomable=true %}
-
- Update
- Initialization
Loop Closing
- 이전에 왔던 공간을 인식하고, error들을 optimize하면서 uncertainty를 줄이는 것.
- 하지만 loop closure가 잘못된 loop을 생성할 수도 있음.
EKF SLAM Correlations
- Landmark estimation은 모두 fully correlated 함.
- Correlation map에서 볼 수 있듯이, 모두 연관되어 있음.
EKF SLAM in the Limit
- 각 Landmake location의 covariance는 Vehicle location estimation에 결정됨.
EKF SLAM Complexity
- Cost per step: O(n^2)
- Memory consumpotion: O(n^2)
18. Particle Filters and Monte Carlo Localization
Particle Filter
- Particle Filter는 이미 Map을 아는 상태에서 진행.
- Recursive Bayes filter
- Non-parametric approach
- Key Idea: Sampling
- 임의의 분포를 여러개의 samples을 통해 나타낸다.
- Particle Set
-
Set of weighted samples
![Screen Shot 2022-12-16 at 8.10.31 PM.png](_posts/Robot-Programming-lecture-note/Screen_Shot_2022-12-16_at_8.10.31_PM.png” class=”img-fluid rounded z-depth-1” zoomable=true %}
- Rejection Sampling
- 임의의 값 C 지정
- 각 x 마다의 f(x)를 구했을 때 C보다 큰 샘플들만 모았을때 나온 결과는 분산을 대변.
- 임의의 값 C 지정
- Importance Sampling Principle
- Gaussian distribution의 경우, 다음과 같은 식을 이용하여 분산에 맞는 샘플을 얻을 수 있음. 하지만, 임의의 분산의 경우에는 이러한 식을 구하는 방법이 어려움.
- 이때에는 분산의 차이를 이용하여 진행. 즉, proposal 분산에 대한 sample을 우선 먼저 추출. 이후 각 가중치를 이용하여 해당 샘플이 target 분포와 맞는 sample이 될 수 있도록 한다.
![Screen Shot 2022-12-18 at 1.41.12 AM.png](_posts/Robot-Programming-lecture-note/Screen_Shot_2022-12-18_at_1.41.12_AM.png” class=”img-fluid rounded z-depth-1” zoomable=true %}
-
Monte Carlo Localization
- 위의 Particle Filter를 Motion model에 적용한 것이 Monte Carlo Localization.
- 각 파티클은 Pose hypothesis를 나타냄
- Particle Filter와 달라진 부분은, 각 sample을 구하는 방식과 weight를 구하는 방식
- Sample을 구하는 방식은 모션 모델을 이용하여 구함.
- Weight를 구하는 방식은 observation model을 통해서 구함.
Resampling
- 가장 그럴듯한 샘플들만 남겨 가능성이 적은 Particle은 제거.
- 크게 2가지 방식 존재
- Roulette wheel
- 각 Weight를 normalize한 후, Binary search를 통해 진행.
- 한번의 1개씩 random하게 particle을 추출한다.
- 따라서 시행할 때마다 다르므로 Variance 큼.
- O(J log J)
- Stochastic universal sampling
- Low variance
- O(J)
- 화살표를 돌리면서 그때마다 화살표에 해당하는 W을 가지고 있는 Particle만 채택
- Roulette wheel
19. Fast SLAM
Dimensionality Problem
- Particle Filter는 low dimension에서 효과있음.
- 실제 SLAM은 High-dimension
- 따라서 Particle filter를 SLAM에서 사용하기 위해 로봇의 Pose에만 Particle Filter를 적용. Map은 EKF를 사용하여 로봇의 trajectory estimation으로 사용. 즉, 각각의 Particle마다 Map을 예측하고, Observation과 비교하며 진행.
Rao-Blackwellization
![Screen Shot 2022-12-17 at 11.22.33 PM.png](_posts/Robot-Programming-lecture-note/Screen_Shot_2022-12-17_at_11.22.33_PM.png” class=”img-fluid rounded z-depth-1” zoomable=true %}
Rao-Blackwellization for SLAM
FastSLAM
- 각각의 Particle은 각각의 Landmark에 대한 EKF를 가지고 있음.
Short version
Long version
20. Occupancy Grid Maps
Logit
- 언제나 확률분포로 변환 가능하게 하는 함수, log(odds)
- Odds : P/not P
Grid Maps
- Map을 grid로 나누는 것.
- 각 cell은 occupied인지 free space인지 판단.
- Non-parametric
- Assumption
- The area either free or occupied
- binary random variable
- World is static
- The cells are independent (계산상의 편의를 위해)
-
Occupancy Probabilities
![Screen Shot 2022-12-18 at 12.53.42 AM.png](_posts/Robot-Programming-lecture-note/Screen_Shot_2022-12-18_at_12.53.42_AM.png” class=”img-fluid rounded z-depth-1” zoomable=true %}
-
두 확률을 나누면 Odds 계산 가능. Odds와 Binary random variable에서 다음과 같은 성질을 이용하여 P(x) 계산.
![Screen Shot 2022-12-18 at 1.09.34 AM.png](_posts/Robot-Programming-lecture-note/Screen_Shot_2022-12-18_at_1.09.34_AM.png” class=”img-fluid rounded z-depth-1” zoomable=true %}
-
이때 조금 더 효율적인 계산을 위하여 Log Odds notion을 사용.
![Screen Shot 2022-12-18 at 1.12.26 AM.png](_posts/Robot-Programming-lecture-note/Screen_Shot_2022-12-18_at_1.12.26_AM.png” class=”img-fluid rounded z-depth-1” zoomable=true %}
-
즉, inverse sensor model 만 알고 있으면 단순 덧샘으로 log odds를 구할 수 있고 이를 이용하여 마지막에 아래의 식을 통해 p(x)를 구할 수 있음.
![Screen Shot 2022-12-18 at 1.11.07 AM.png](_posts/Robot-Programming-lecture-note/Screen_Shot_2022-12-18_at_1.11.07_AM.png” class=”img-fluid rounded z-depth-1” zoomable=true %}
-
- Inverse Sensor Model
- 로봇의 위치와 센서 관측값이 있을 때 각 cell의 occupied 되어 있을 확률이다. 여기서는 2가지 모델을 예를 보여준다.
- Sonar Sensor model
- Sonar sensor는 상대적으로 거리 측정값에 대한 noise가 큼.
- Sonar센서는 측정값의 noise가 크기 때문에 d가 상대적으로 크다.
- Laser Range Finder(LiDAR sensor)
- Lidar는 sonar에 비해 거리측정 오차가 매우 적다. 따라서 occupied로 생각하는 영역이 sonar모델에 비해 매우 좁다.4
- Sonar Sensor model
- 로봇의 위치와 센서 관측값이 있을 때 각 cell의 occupied 되어 있을 확률이다. 여기서는 2가지 모델을 예를 보여준다.
Sonar Sensor
Laser Range Finder
22. Visual SLAM
Building and Tracking a map
- Building
- Tracking
- Point correspondences를 통해 pose 구함.
Component of Visual SLAM
- Short-term tracking
- Pose estimation given the map
- Keyframe proposals
- Long-term tracking
- Visual place recognition
- Loop closure detection over keyframes
- Mapping
- Building and optimizing the map over keyfrrames
- Data fusion
Local Features
- 주변과 다르게 특징이 되는 이미지 feature
- Saliency, Locality
Feature detection
- Corners, Blob regions
- Conrner
- 모든 방향에서 변화가 일어남.
-
Gradient를 이용하여 Corner 찾음.
![Screen Shot 2022-12-18 at 2.03.23 AM.png](_posts/Robot-Programming-lecture-note/Screen_Shot_2022-12-18_at_2.03.23_AM.png” class=”img-fluid rounded z-depth-1” zoomable=true %}
- 이때 H는
- Blob detecter
- LoG(Laplacian of Gaussian)
- 엣지부분에서 위아래 변화. 일정 부분 이하로 두 엣지 사이가 가까워지면 (blob) 값 중첩되어 커짐., 블록의 크기 정해져있음. 동일 커널로 이미지 크기 다양하게 하여 찾음.
- 이미지에 blob이 많고, 해당 kernel 에 걸리는 blob을 찾고싶을 때 kernel 고정
- 반대의경우에는 kernel을 여러개 사용하거나, 아님 이미지의 크기를 여러개 사용하여 kernel을 여러개 사용하는 방식과 동일하게 사용할 수 있도록 함
- DOG
- 가우시안의 차를 이용하여 계산(SIFT에서 사용)
- 이미지 blur 4번 한 것이 이미지 크기를 줄인 것과 동일. 따라서 이미지를 줄여서 사용. → 계산량 감소
- LoG(Laplacian of Gaussian)
- Point detector
- FAST
- 가운데 점을 중심으로 원을 16개 점 → 연속해서 12개의 점이 밝을 경우 코너로 정의.
- FAST
Feature descriptor
- Template: N*N image patch를 이용, Descriptor: 주로 Vetor를 이용하여 표현.
- Template matching
- SAD
-
difference 값이 작을수로 matching. (절대값)
![Screen Shot 2022-12-18 at 2.13.48 AM.png](_posts/Robot-Programming-lecture-note/Screen_Shot_2022-12-18_at_2.13.48_AM.png” class=”img-fluid rounded z-depth-1” zoomable=true %}
-
- SSD
-
SAD와 동일, L2 norm (outlier에 더 강함)
![Screen Shot 2022-12-18 at 2.13.57 AM.png](_posts/Robot-Programming-lecture-note/Screen_Shot_2022-12-18_at_2.13.57_AM.png” class=”img-fluid rounded z-depth-1” zoomable=true %}
-
- NCC
- 밝기값이 바뀌어도 동일한 feature임을 인식하기 위해 Normalization 진행.
-
maximum 값 = 1
![Screen Shot 2022-12-18 at 2.14.23 AM.png](_posts/Robot-Programming-lecture-note/Screen_Shot_2022-12-18_at_2.14.23_AM.png” class=”img-fluid rounded z-depth-1” zoomable=true %}
- SAD
- Descriptor
- HOG
- 각 픽셀이 위와 아래의 gradient를 비교하여 gradient vector값 구함. 회전에 취약함.
- Dominant orientation을 기준으로 각 히스토그램의 값을 미뤄서 rotation맞춤.
- SIFT (Orientation assignment)
- HOG와 비슷하게 grandient vector를 구한 후, 4*4 window에 8개의 direction으로 vector 합쳐줌.
-
pick point를 기준으로 돌림. 이후 HOG와 비슷하게 gradient vector 구함. tree 형식으로 매칭.
![Screen Shot 2022-12-18 at 2.18.27 AM.png](_posts/Robot-Programming-lecture-note/Screen_Shot_2022-12-18_at_2.18.27_AM.png” class=”img-fluid rounded z-depth-1” zoomable=true %}
- BRIEF
- binary 값 사용. matching: Hamming distance 사용.
- 다른 값의 개수를 찾으면 되기 때문에, XOR 사용하여 빠르게 matching할 수 있음.
- 픽셀 페어값의 순서 항상 동일해야됨. rotation에 매우 취약.
- ORB
- Fast, BRIEF 두가지 방식을 모두 차용하여 수행.
- 처음 detection때 orient값까지 함께 주함. Gradient 값으로 전체 patch의 rotation값을 구함.
- 이미지를 돌려준 다음에 BRIEF 사용.
- HOG
23. ORB SLAM
System structure
- tracking
- localization of camera
- Selecting new keyframe
- Local mapping
- Keyframe process
- Local BA
- Culling redundant Keyframes
- Loop closing
- Searching loops for every Keyframes
- Pose graph optimization
Prerequisite
- Covisibility graph
- 각 keyframe들이 edge로 연결되어 있는 그래프.
- 각 edge의 weight은 각 Keyframe에서 겹치는 Key point들을 나타냄.
- Essantial graph
- Minimal spanning tree (최소신장트리) 가장 연결이 많이 되는 Keyframe들만 사용.
- Bag of words
- code → clustered descriptor (dimension을 나눌 때 cluster 되어있는 부분)
- code book → 각 code를 histogram으로 표현.
- 즉 해당 scen에 대한 descriptor
- Perspective n Point
- n : 2D to 3D일때 사용된 점의 개수
- 2D를 넣으면 3D pose 나옴. (translation & rotation)
- Camera coordinate 에 대한 World coordinate (지정 좌표계)
- Bundle Adjustment
- pixel → world point 구한후, 이를 다시 projection하여 최적화.
- intrinsic parameter , pose, point 보정
Place Recognition
- Visual vocabulary와 Recognition Database (Codebooks of keyframes)를 이용하여 Place recognition 진행.
Tracking
- Feature extraction
- 256 bit descriptor
- Harris corner로 candidate pixel extract, 이것들로 진행
- Pose estimation
- Homography → 평면간의 matrix
- Fundamental Matrix → 3D planar scene matrix
- Relocalization
- Track Local Map
- pose에 대해서만 bundle adjustment 진행.
- New Keyframe Decision
Local Mapping
- Recent Map Point Clustering
- New Map Point creation
- Local BA: 3D map, pose 둘다 adjustment 진행 전체를 하는것이 아닌 주변 연결된 몇개의 keyframe 간의 optimize 진행.
- Local keyframe culling: keyframe culling 진행. (90% map points are visible in 3 other keyframes)
Loop Closing
- Loop Detection
- Loop Correction