핵심 요약
VINS-Mono는 저가 단안 카메라와 IMU 조합만으로 metric 6-DoF state estimation을 수행하기 위해 initialization, tightly-coupled VIO, relocalization, pose graph optimization을 하나의 시스템으로 묶는다.
VINS-Mono는 하나의 최적화식이라기보다, 실제 환경에서 쓸 수 있는 monocular VIO system을 만드는 데 필요한 초기화, 추정, 재위치추정, 전역 보정을 모두 묶은 논문이다.
Robust Initialization
움직이는 초기 상태에서 scale, gravity, velocity, gyro bias를 추정.
Tightly-coupled VIO
sliding window에서 IMU preintegration residual과 visual feature residual을 함께 최적화.
Relocalization
feature-level loop constraint를 local VIO cost 안에 직접 추가.
4-DoF Pose Graph
gravity로 roll/pitch가 관측 가능하므로 position과 yaw 중심의 4-DoF graph를 최적화.
핵심은 시스템 경계다. VINS-Mono는 initialization, calibration, local estimation, relocalization, global consistency를 따로 떼어놓지 않고 하나의 estimator lifecycle로 묶는다.
scale ambiguity
작고 간단하지만 metric scale을 직접 복원하지 못함.
빠르지만 history 제한
재귀 업데이트는 빠르지만 오래된 선형화와 feature 처리에서 정확도 한계 가능.
optimization-based system
sliding-window nonlinear optimization을 사용하고 local/global 양쪽에서 loop를 처리.
논문 상세 정리
아래부터는 기존 논문 내용을 최대한 담은 상세 해석이다. 핵심 흐름에서 벗어나는 배경지식, notation, 부가 자료는 접어두었다.
Problem: 단안 VIO는 왜 시스템 문제가 되는가
VINS-Mono의 문제의식은 단안 카메라가 싸고 작다는 장점은 있지만, vision-only로는 metric scale을 직접 알 수 없다는 데서 시작한다. IMU를 붙이면 scale, roll, pitch가 관측 가능해지고 motion blur나 texture-less 구간 사이를 메워줄 수 있지만, 동시에 initialization, IMU bias, camera-IMU extrinsic, nonlinear optimization, long-term drift가 한꺼번에 문제가 된다.

논문이 풀고자 하는 문제는 하나의 module 성능이 아니라, monocular VINS가 처음 켜지고 오래 움직이며 다시 장소를 찾는 전체 과정이다.
단안 vision은 scale이 불명확하고, IMU는 충분한 acceleration excitation이 있어야 scale을 관측.
정지 상태 가정 없이 움직이는 상태에서 시작해야 하므로 SfM과 IMU alignment가 중요.
local VIO는 계산량을 제한하는 대신 yaw와 position drift가 누적.
드론, mobile AR, 대규모 handheld route에서는 실시간 추정과 실패 후 복구까지 필요.
VINS-Mono를 읽을 때는 “preintegration 수식이 새롭다”보다, metric scale을 확보하는 초기화부터 drift를 줄이는 loop까지 estimator 생애주기를 연결했다는 점을 중심으로 보는 편이 자연스럽다.
Related Work 위치 보기
Related Work는 VINS-Mono가 loose-coupled, EKF 기반, graph optimization 기반 VIO 사이에서 어떤 선택을 하는지 보여준다.
| 흐름 | 핵심 특징 | VINS-Mono의 선택 |
|---|---|---|
| Loose-coupled | vision pose와 IMU를 후단에서 결합 | raw feature observation과 preintegrated IMU를 같은 최적화에 투입 |
| Filter-based VIO | 실시간성은 좋지만 linearization history에 민감 | sliding-window nonlinear optimization 사용 |
| Graph-based VIO | 정확도는 좋지만 시스템 완결성이 과제 | initialization, relocalization, pose graph까지 함께 구성 |
| Loop closure | visual SLAM에서 drift 제거에 핵심 | DBoW2 detection 후 feature-level residual로 VIO에 직접 연결 |
Mechanism: initialization, VIO, relocalization을 어떻게 묶나
VINS-Mono의 방법론은 크게 네 덩어리다. 먼저 image feature와 IMU preintegration을 준비하고, vision-only SfM과 IMU alignment로 scale/gravity/velocity를 초기화한다. 이후 sliding window에서 IMU state, camera-IMU extrinsic, feature inverse depth를 함께 최적화하고, loop가 검출되면 feature-level constraint와 4-DoF pose graph로 전역 일관성을 맞춘다.

핵심은 IMU로 metric scale을 확보하고, feature residual로 local pose를 제약하며, loop로 drift를 줄이는 구조다.
| 구간 | 무엇을 해결하나 | 핵심 장치 |
|---|---|---|
| Preprocessing | feature tracking과 IMU integration을 최적화 입력으로 정리 | KLT, keyframe selection, bias-aware preintegration |
| Initialization | 초기 움직임에서 scale, gravity, velocity, gyro bias 복원 | vision-only SfM + visual-inertial alignment |
| Local VIO | camera pose, velocity, bias, extrinsic, inverse depth 추정 | sliding-window MAP optimization |
| Global consistency | local drift를 loop 정보로 보정 | feature-level relocalization + 4-DoF pose graph |
IMU는 image frame 사이에 훨씬 높은 주기로 들어온다. 그래서 매번 raw IMU를 처음부터 다시 적분하기보다, 두 image frame 사이의 움직임을 position, velocity, rotation 변화량으로 미리 묶어두는 편이 효율적이다. VINS-Mono의 preintegration은 이 압축값을 최적화에 넣고, bias가 조금 바뀌면 Jacobian으로 빠르게 보정하는 역할을 한다.
| 먼저 볼 기호 | 의미 | 처음 읽을 때의 직관 |
|---|---|---|
| \(\hat{\mathbf{a}}_t\) | IMU가 측정한 acceleration | 순수한 움직임이 아니라 bias, gravity, noise가 섞인 값 |
| \(\hat{\boldsymbol{\omega}}_t\) | IMU가 측정한 angular velocity | gyro bias 때문에 그대로 회전으로 쓰기 어려움 |
| \(\mathbf{b}_a, \mathbf{b}_\omega\) | accelerometer / gyroscope bias | 시간에 따라 조금씩 변하므로 state에 포함해 추정 |
| \(\mathbf{R}_w^t\mathbf{g}^w\) | world gravity를 IMU frame으로 본 항 | IMU 측정에는 실제 가속도와 중력이 함께 들어감 |
IMU preintegration 세부 수식 보기
여기서는 두 frame 사이 IMU 측정이 어떤 상대 제약으로 바뀌는지 정리한다. 핵심은 raw IMU sequence를 매번 다시 적분하지 않고, window optimization에 들어갈 상대 motion constraint로 바꾸는 것이다.
| 기호 | 의미 | 읽는 포인트 |
|---|---|---|
| \(\boldsymbol{\alpha}_{b_{k+1}}^{b_k}\) | relative position preintegration | 초기 pose와 gravity 항을 분리한 상대 이동량 |
| \(\boldsymbol{\beta}_{b_{k+1}}^{b_k}\) | relative velocity preintegration | frame 간 velocity 변화량 |
| \(\boldsymbol{\gamma}_{b_{k+1}}^{b_k}\) | relative rotation preintegration | quaternion 기반 상대 회전 |
| \(\Delta t_k\) | 두 keyframe 사이 시간 간격 | position과 velocity 예측에서 gravity 영향이 시간에 따라 누적 |
| \(\mathbf{J}, \mathbf{P}\) | bias correction Jacobian과 covariance | bias가 조금 바뀔 때 재적분을 피하기 위한 장치 |
Initialization은 먼저 vision-only SfM으로 up-to-scale camera pose와 feature를 만든 뒤, IMU preintegration과 맞춰 metric scale, gravity, velocity를 찾는 단계다. 여기서 scale이나 gravity 방향이 틀리면 뒤의 sliding-window VIO가 좋은 초기값 없이 시작하게 되므로, VINS-Mono는 이 단계를 별도의 estimator bootstrap으로 다룬다.

| 초기화에서 찾는 값 | 왜 필요한가 | 틀리면 생기는 문제 |
|---|---|---|
| \(s\) | 단안 SfM의 arbitrary scale을 실제 길이로 변환 | trajectory와 velocity 크기가 함께 틀어짐 |
| \(\mathbf{g}^{c_0}\) | gravity 방향을 기준으로 roll/pitch 안정화 | IMU residual이 잘 맞지 않고 자세가 흔들림 |
| \(\mathbf{v}_{b_k}^{b_k}\) | frame마다 IMU motion을 이어주는 속도 초기값 | 초기 window가 수렴하기 어려움 |
| \(\delta\mathbf{b}_\omega\) | gyro bias를 먼저 보정해 rotation alignment 안정화 | preintegrated rotation이 SfM 회전과 계속 어긋남 |

초기화 이후에는 최근 keyframe들만 남긴 sliding window 안에서 state를 반복적으로 갱신한다. VINS-Mono가 추정하는 것은 camera pose만이 아니라 IMU pose, velocity, bias, camera-IMU extrinsic, feature inverse depth까지 포함된 묶음이다. Eq. (22)는 이 변수들이 IMU 측정과 visual feature 관측을 동시에 잘 설명하도록 맞추는 MAP objective다.

| 최적화 대상 | 무엇을 의미하나 | 왜 같이 풀어야 하나 |
|---|---|---|
| \(\mathbf{p}, \mathbf{q}\) | IMU/body position과 orientation | camera pose는 IMU-body pose와 extrinsic을 통해 결정 |
| \(\mathbf{v}\) | body velocity | IMU preintegration residual에서 position과 rotation을 이어줌 |
| \(\mathbf{b}_a, \mathbf{b}_\omega\) | accelerometer / gyroscope bias | bias를 고정하면 장기적으로 IMU constraint가 틀어짐 |
| \(\lambda_l\) | feature inverse depth | 단안 feature의 depth를 window 안에서 함께 추정 |
| \(\mathbf{p}_c^b, \mathbf{q}_c^b\) | camera-IMU extrinsic | camera observation과 IMU state를 같은 좌표계로 연결 |
| Residual | 담당하는 제약 | 읽는 포인트 |
|---|---|---|
| \(\mathbf{r}_p\) | marginalization prior | window 밖으로 나간 state 정보를 버리지 않고 prior로 압축 |
| \(\mathbf{r}_B\) | IMU preintegration residual | position, velocity, rotation, bias가 IMU motion과 일관적인지 확인 |
| \(\mathbf{r}_C\) | visual measurement residual | feature ray가 추정한 camera pose/depth와 잘 맞는지 확인 |
| \(\rho\) | robust loss | 잘못 추적된 feature가 전체 최적화를 망치지 않게 영향 축소 |
IMU / visual residual 세부 보기



Loop가 검출되면 VINS-Mono는 과거 pose로 현재 pose를 단순히 교체하지 않는다. 먼저 BRIEF matching과 RANSAC으로 같은 장소를 다시 본 feature인지 확인하고, 이 loop feature를 현재 sliding-window objective에 추가한다. 그 다음 keyframe graph에서는 gravity로 이미 안정적인 roll/pitch는 고정하고, 장기 drift가 주로 쌓이는 position과 yaw만 최적화한다.


| Loop 정보가 들어가는 위치 | 역할 | 효과 |
|---|---|---|
| local VIO | loop feature residual을 현재 window cost에 추가 | 현재 pose가 과거 관측과 feature level에서 일관되도록 보정 |
| global pose graph | keyframe 사이 sequence edge와 loop edge를 함께 최적화 | 오래 누적된 position/yaw drift를 전역적으로 완화 |
| 4-DoF graph | roll/pitch는 고정하고 position/yaw만 조정 | IMU gravity 관측을 활용해 필요한 자유도에만 집중 |
VINS-Mono의 설계는 local 정확도와 전역 일관성을 분리하지 않는다. loop 정보는 local VIO에는 feature residual로, global graph에는 4-DoF edge로 들어간다.
IMU와 feature를 sliding window 안에서 동시에 최적화.
tracking failure 이후에도 initialization module을 다시 사용.
loop closure와 pose graph로 장기 drift를 제한.
Evidence: 어떤 환경에서 검증했나
평가는 public EuRoC dataset뿐 아니라 handheld indoor/outdoor route, campus-scale long-term route, MAV feedback control, mobile AR까지 포함한다. 핵심은 local VIO 정확도만이 아니라, loop closure와 relocalization이 들어간 전체 시스템의 안정성을 함께 보여준다는 점이다.
실험은 정확도 비교, 장거리 drift, 실시간성, 실제 적용 가능성을 각각 다른 방식으로 확인한다.
OKVIS mono/stereo와 비교해 loop closure 포함 VINS-Mono의 translation drift 감소 확인.
700 m mixed route와 5.62 km campus route에서 long-term consistency 확인.
MAV closed-loop flight와 iPhone mobile AR에서 실제 사용 가능성 확인.
데이터셋 이름보다 “어떤 능력을 검증했는가”를 기준으로 보면 평가가 더 잘 정리된다.
| 검증 질문 | 사용한 근거 | 논문이 보여주는 점 |
|---|---|---|
| local VIO 정확도 | EuRoC MH 03 / MH 05, OKVIS 비교 | pure VIO는 OKVIS와 유사하고, loop 포함 시 translation error 감소 |
| loop closure 효과 | indoor loop, mixed indoor/outdoor route | yaw/position drift를 누적 후 다시 줄이는 효과 |
| 실시간성 | Table I timing statistics | feature, optimization, loop detection, pose graph가 CPU에서 실시간 범위 |
| deployment | MAV, iPhone7 Plus, Tango 비교 | robot feedback control과 mobile AR에서 동작 가능 |


실험 결과 그림 더 보기
본문에서는 대표 결과만 보이고, EuRoC/indoor/MAV/mobile의 세부 그림은 여기서 확인한다.














Usage / Limits: 언제 쓰기 좋은가
VINS-Mono는 monocular camera와 IMU만 사용할 수 있는 mobile robot, drone, AR/VR 장치에서 특히 의미가 있다. 다만 단안 VIO 특성상 충분한 motion excitation, feature tracking 품질, camera-IMU calibration/time sync, loop detection 품질에 의존한다.
VINS-Mono는 센서 구성이 작고 저렴해야 하면서도 metric pose가 필요한 경우에 강하다.
| 적합한 경우 | 주의할 경우 | 이유 |
|---|---|---|
| 카메라+IMU만 있는 drone/mobile AR | 정지 상태에서 바로 scale을 얻어야 하는 경우 | scale observability에는 acceleration excitation 필요 |
| 실시간 local odometry + loop closure가 필요한 route | feature가 거의 없는 장면, 강한 motion blur | front-end feature tracking 품질에 영향 |
| roll/pitch가 gravity로 안정화되는 platform | IMU calibration/time sync가 불안정한 setup | extrinsic/bias/time alignment가 estimator 안정성에 직접 영향 |
느낀점
(진행중...)
Problem: why is monocular VIO a system-level problem?
VINS-Mono starts from a simple constraint: monocular vision is cheap and compact, but it cannot directly recover metric scale. Adding an IMU makes scale, roll, and pitch observable, but it also introduces initialization, bias, extrinsic calibration, nonlinear optimization, and long-term drift as coupled system problems.

The paper is about the full estimator lifecycle: bootstrapping, tracking, recovery, and global correction.
Acceleration excitation is needed before monocular VINS can observe metric scale.
SfM and IMU alignment must start from unknown motion.
Local VIO accumulates position and yaw drift.
Real-time recovery and loop handling are needed for drones and mobile devices.
Read VINS-Mono as a complete estimator pipeline rather than as a single equation.
Related Work position
VINS-Mono chooses optimization-based sliding-window fusion and completes it with initialization, relocalization, and global correction.
Mechanism: how are initialization, VIO, and relocalization connected?
A useful way to read the method is to separate “how the estimator starts” from “how it keeps running.” VINS-Mono first turns visual features and high-rate IMU measurements into optimization inputs, bootstraps scale and gravity, then keeps poses, velocity, bias, extrinsic, and inverse depths consistent inside a sliding window.

The system opens metric scale with IMU, estimates local motion with feature residuals, and closes long-term drift with loops.
| Part | Problem solved | Core device |
|---|---|---|
| Preprocessing | Prepare feature tracks and IMU constraints. | KLT, keyframes, bias-aware preintegration |
| Initialization | Recover scale, gravity, velocity, gyro bias. | SfM + visual-inertial alignment |
| Local VIO | Estimate pose, velocity, bias, extrinsic, inverse depth. | Sliding-window MAP optimization |
| Global | Reduce accumulated drift. | Relocalization + 4-DoF pose graph |
| Notation to keep in mind | Meaning | Reading cue |
|---|---|---|
| \(\mathbf{b}_a, \mathbf{b}_\omega\) | accelerometer / gyroscope bias | estimated because raw IMU readings drift over time |
| \(\boldsymbol{\alpha}, \boldsymbol{\beta}, \boldsymbol{\gamma}\) | preintegrated position, velocity, rotation | compressed IMU motion between image frames |
| \(\lambda_l\) | feature inverse depth | lets monocular feature depth be optimized with poses |
IMU preintegration details
The local estimator is not optimizing camera pose alone. It balances a marginalization prior, an IMU preintegration residual, and a visual feature residual so that old information, inertial motion, and image observations agree inside the same window.

| Term | Role | Intuition |
|---|---|---|
| \(\mathbf{r}_p\) | marginalization prior | keeps information from states removed from the window |
| \(\mathbf{r}_B\) | IMU residual | checks position, velocity, rotation, and bias consistency |
| \(\mathbf{r}_C\) | visual residual | checks whether feature rays agree with estimated pose and depth |
Initialization / residual equations







Evidence: where is the system validated?
The experiments cover EuRoC, handheld indoor/outdoor routes, a 5.62 km campus-scale route, closed-loop MAV flight, and mobile AR. The point is not only local VIO accuracy, but also system-level robustness with loop closure and relocalization.
The paper tests accuracy, drift, runtime, and deployment.
Loop-enabled VINS-Mono reduces translation drift compared with local-only estimates.
Mixed indoor/outdoor and campus-scale routes test long-term consistency.
MAV and mobile AR experiments demonstrate real deployment.


Additional experiment figures














Usage / Limits: when is it useful?
VINS-Mono is most useful when only a monocular camera and IMU are available, yet metric pose is required. It still depends on sufficient excitation, feature quality, camera-IMU calibration/time sync, and reliable loop detection.
It is a strong baseline for compact camera-IMU platforms.
| Use | Watch | Reason |
|---|---|---|
| Drone/mobile AR with camera+IMU | Stationary startup requiring immediate scale | Scale needs acceleration excitation |
| Real-time odometry plus loop closure | Low-texture or strong motion blur | Feature tracking quality matters |
| Gravity-stabilized platforms | Poor calibration or time sync | Extrinsic/bias/time alignment affects stability |
Takeaway
(In progress...)
Comments