IMU 잡음 모델

원시 IMU 측정값은 구조화된 방식으로 오염된다. (Woodman의 입문서를 따르는) 전체 오차 모델은 센서별로 바이어스, 스케일 팩터 오차, 교차 축 오정렬, 백색 잡음을 포함한다:

a~=a+ba+Saa+Maa+ηa,ω~=ω+bg+Sgω+Mgω+ηg\tilde{\mathbf{a}} = \mathbf{a} + \mathbf{b}^a + \mathbf{S}^a\mathbf{a} + \mathbf{M}^a\mathbf{a} + \boldsymbol{\eta}^a, \qquad \tilde{\boldsymbol{\omega}} = \boldsymbol{\omega} + \mathbf{b}^g + \mathbf{S}^g\boldsymbol{\omega} + \mathbf{M}^g\boldsymbol{\omega} + \boldsymbol{\eta}^g

여기서 S\mathbf{S}는 (대각) 스케일 팩터 오차이고 M\mathbf{M}은 교차 축 감도이다. VIO 추정기는 S\mathbf{S}M\mathbf{M}이 공장 또는 오프라인 캘리브레이션으로 처리된다고 가정하고 온라인 항 두 가지만 유지한다 — 부가적인 백색 잡음과 천천히 변화하는 바이어스:

ω~=ω+bg+ηga~=a+ba+ηa\tilde{\boldsymbol{\omega}} = \boldsymbol{\omega} + \mathbf{b}^g + \boldsymbol{\eta}^g \qquad \tilde{\mathbf{a}} = \mathbf{a} + \mathbf{b}^a + \boldsymbol{\eta}^a

η\boldsymbol{\eta}는 평균이 0인 백색 가우시안 잡음이며, 각 바이어스는 자체의 백색 구동 잡음을 갖는 랜덤 워크로 모델링된다: b˙=ηb\dot{\mathbf{b}} = \boldsymbol{\eta}^b.

이 두 항이 왜 그렇게 중요한가

네 가지 파라미터와 그 단위

VIO 설정에는 네 개의 숫자(흔히 축별이지만 보통 공유됨)가 필요하다:

파라미터기호일반적인 연속시간 단위
자이로 잡음 밀도 (각도 랜덤 워크)σηg\sigma_{\eta^g}rad/s/Hz\mathrm{rad/s/\sqrt{Hz}}
가속도 잡음 밀도 (속도 랜덤 워크)σηa\sigma_{\eta^a}m/s2/Hz\mathrm{m/s^2/\sqrt{Hz}}
자이로 바이어스 랜덤 워크σbg\sigma_{b^g}rad/s2/Hz\mathrm{rad/s^2/\sqrt{Hz}}
가속도 바이어스 랜덤 워크σba\sigma_{b^a}m/s3/Hz\mathrm{m/s^3/\sqrt{Hz}}

이들은 연속시간 밀도다. 이산 샘플링 간격 Δt\Delta t에서 사용하려면, 표준 변환은 측정 잡음에 대해 ση,d=ση/Δt\sigma_{\eta,d} = \sigma_\eta / \sqrt{\Delta t}, 바이어스 증분에 대해 σb,d=σbΔt\sigma_{b,d} = \sigma_b \sqrt{\Delta t}이다 — 이는 구현 버그의 만성적인 원인이다(함정 참조). 이 네 숫자는 EKF의 공분산 전파나 사전 적분된 IMU 팩터의 공분산에 직접 들어간다. 즉, 추정기가 카메라에 비해 IMU를 얼마나 신뢰하는지를 결정한다.

앨런 분산: 파라미터 식별

**앨런 분산(Allan variance)**은 장시간(수 시간, 온도가 안정된) 정지 로그로부터 이 잡음 파라미터들을 식별하는 표준 도구다. 로그-로그 스케일에서 평균화 시간 τ\tau에 대해 앨런 편차 σ(τ)\sigma(\tau)를 플롯하면 기울기로 잡음 소스를 분리할 수 있다:

기울기잡음 소스파라미터
1/2-1/2백색 잡음(각도/속도 랜덤 워크)ση\sigma_{\eta} (잡음 밀도, τ=1s\tau = 1\,\mathrm{s}에서 읽음)
00 (평탄한 최소값)바이어스 불안정성
+1/2+1/2바이어스 랜덤 워크σb\sigma_{b} (랜덤 워크 밀도)

이 플롯에서 읽은 네 숫자는 정확히 VINS-Mono, OpenVINS, Kimera-VIO 및 그 외 모든 VIO 시스템의 설정 파일이 요구하는 파라미터로, 예를 들어 Kalibr 스타일의 imu.yaml에서:

# continuous-time noise densities (example structure — measure your own values)
gyroscope_noise_density:     ...   # [rad/s/sqrt(Hz)]
gyroscope_random_walk:       ...   # [rad/s^2/sqrt(Hz)]
accelerometer_noise_density: ...   # [m/s^2/sqrt(Hz)]
accelerometer_random_walk:   ...   # [m/s^3/sqrt(Hz)]
update_rate: 200.0                 # [Hz]

kalibr_allan이나 allan_variance_ros 같은 도구가 이 로그-후-피팅 절차를 자동화한다. 실제로는 모델링되지 않은 효과(진동, 온도 램프, 스케일 팩터 잔차)를 흡수하기 위해 값을 앨런 분산으로 도출한 값보다 어느 정도(흔히 몇 배) 부풀려 사용하는 경우가 많다.

흔한 함정

SLAM에서의 의미

잡음 모델은 여러분의 하드웨어와 추정기 사이의 계약이다: 시각적 팩터에 대한 IMU 팩터의 가중치를 결정한다. 파라미터가 너무 낙관적이면 필터가 IMU를 과신하게 된다(진동 하에서 발산); 너무 비관적이면 IMU의 운동 정보를 버리게 된다. 앨런 분산 플롯을 실행하고 읽을 수 있는 능력은 실제 하드웨어에 VIO를 배포하는 사람이라면 누구나 갖춰야 할 기본적인 실무 역량이다.

관련 문서