IMU 사전 적분

IMU는 100–1000 Hz로 측정값을 생성하는 반면, 카메라는 10–30 Hz로 키프레임을 전달한다. 단순한 VIO 정식화라면 모든 IMU 판독값을 추정기에 삽입하여 상태 변수의 수가 폭증할 것이다. 더 나쁜 것은, 단순 적분은 세계 프레임에서 이루어진다는 점이다: 적분된 결과는 구간 시작 시점의 절대 자세에 의존하므로, 최적화기가 그 자세를 조정할 때마다 모든 원시 IMU 데이터를 재적분해야 할 것이다.

사전 적분(Lupton과 Sukkarieh가 2012년에 도입)은 두 문제를 모두 해결한다. 두 키프레임 시각 iijj 사이의 IMU 측정값은 키프레임 ii의 로컬 프레임에서 적분되어, 다음과 같은 간결한 상대 운동 요약을 만든다:

(ΔRij,  Δvij,  Δpij)\left(\Delta\mathbf{R}_{ij},\; \Delta\mathbf{v}_{ij},\; \Delta\mathbf{p}_{ij}\right)

— 상대 회전, 속도 변화, 위치 변화. 결정적으로, 이 양들은 IMU 측정값과 바이어스 추정값에만 의존하며 절대 자세에는 의존하지 않는다. 이들은 한 번 계산되고 저장되어, 팩터 그래프에서 iijj의 상태를 연결하는 단일 “IMU 팩터”로 동작한다. 최적화기가 자세를 옮겨도 아무것도 재적분할 필요가 없다.

수식

측정 모델 ω~t=ωt+bg+ηg\tilde{\boldsymbol{\omega}}_t = \boldsymbol{\omega}_t + \mathbf{b}^g + \boldsymbol{\eta}^g,   a~t=Rt(atg)+ba+ηa\;\tilde{\mathbf{a}}_t = \mathbf{R}_t^\top(\mathbf{a}_t - \mathbf{g}) + \mathbf{b}^a + \boldsymbol{\eta}^a에서 출발하여, 사전 적분된 항들은 [i,j)[i, j) 구간의 IMU 샘플에 걸쳐 누적된다:

ΔRij=t=ij1Exp ⁣((ω~tbig)δt)\Delta\mathbf{R}_{ij} = \prod_{t=i}^{j-1} \mathrm{Exp}\!\big((\tilde{\boldsymbol{\omega}}_t - \mathbf{b}^g_i)\,\delta t\big)

Δvij=t=ij1ΔRit(a~tbia)δt,Δpij=t=ij1[Δvitδt+12ΔRit(a~tbia)δt2]\Delta\mathbf{v}_{ij} = \sum_{t=i}^{j-1} \Delta\mathbf{R}_{it}\,(\tilde{\mathbf{a}}_t - \mathbf{b}^a_i)\,\delta t, \qquad \Delta\mathbf{p}_{ij} = \sum_{t=i}^{j-1}\Big[\Delta\mathbf{v}_{it}\,\delta t + \tfrac{1}{2}\Delta\mathbf{R}_{it}\,(\tilde{\mathbf{a}}_t - \mathbf{b}^a_i)\,\delta t^2\Big]

여기서 중력은 등장하지 않는다 — 이는 절대 방향을 알 수 있는 아래의 잔차에서만 다시 나타난다. 의사 코드로 표현하면, 이 누적은 키프레임 구간마다 한 번 실행되는 단순한 루프이다:

ΔR, Δv, Δp ← I, 0, 0
for each IMU sample (ω̃, ã, δt) in [i, j):
    Δp ← Δp + Δv·δt + ½·ΔR·(ã − bᵃ)·δt²
    Δv ← Δv + ΔR·(ã − bᵃ)·δt
    ΔR ← ΔR · Exp((ω̃ − bᵍ)·δt)
    (propagate covariance and bias Jacobians alongside)

IMU 잔차

이렇게 만들어진 팩터는 (현재의 자세/속도/바이어스 추정값과 중력으로부터) 예측된 상대 운동을 저장된 사전 적분 측정값과 비교하며, 이는 재투영 잔차가 예측된 픽셀과 관측된 픽셀을 비교하는 방식과 정확히 대응된다:

rΔR=Log(ΔRijRiRj),rΔv=Ri(vjvigΔtij)Δvij\mathbf{r}_{\Delta R} = \mathrm{Log}\big(\Delta\mathbf{R}_{ij}^\top\,\mathbf{R}_i^\top\mathbf{R}_j\big), \qquad \mathbf{r}_{\Delta v} = \mathbf{R}_i^\top\big(\mathbf{v}_j - \mathbf{v}_i - \mathbf{g}\,\Delta t_{ij}\big) - \Delta\mathbf{v}_{ij}

rΔp=Ri(pjpiviΔtij12gΔtij2)Δpij\mathbf{r}_{\Delta p} = \mathbf{R}_i^\top\big(\mathbf{p}_j - \mathbf{p}_i - \mathbf{v}_i\,\Delta t_{ij} - \tfrac{1}{2}\mathbf{g}\,\Delta t_{ij}^2\big) - \Delta\mathbf{p}_{ij}

이는 누적 루프 도중 전파된 공분산으로 가중치가 부여되며(여기서 IMU noise model 파라미터가 들어온다).

실용적으로 만드는 두 가지 개선

흔한 함정

SLAM에서의 의미

사전 적분은 최적화 기반 VIO를 실시간으로 만든 단일 아이디어다: 수백 개의 고속 측정값을 키프레임 쌍당 하나의 팩터로 압축하면서도 정확히 재선형화 가능하게 유지한다. 모든 현대 긴밀 결합 VIO 시스템이 이를 기반으로 하며, ΔRij\Delta\mathbf{R}_{ij}가 어떻게 형성되고 바이어스에 대해 보정되는지를 이해하는 것이 어떤 VIO 코드베이스든 이해하는 가장 빠른 길이다.

관련 문서