Non-linear Optimization

SLAM 추정은 결국 다음 비용 함수를 최소화하는 문제로 귀결됩니다.

F(x)=12iei(x)Σi12F(\mathbf{x}) = \frac{1}{2}\sum_i \|\mathbf{e}_i(\mathbf{x})\|^2_{\Sigma_i^{-1}}

상태 x\mathbf{x} (자세, 랜드마크, 바이어스)에 대해, 각 ei\mathbf{e}_i는 잔차입니다 — 재투영 오차, 오도메트리 오차, IMU 오차일 수 있으며, 역공분산으로 가중됩니다. 이 잔차들은 상태에 대해 비선형입니다: 카메라 투영은 깊이로 나누고, 회전은 곡면 형태의 매니폴드 위에 존재합니다. 따라서 닫힌 형태의 해가 없으며, 반복적으로 풀어야 합니다.

반복적 하강 템플릿

실용적인 모든 솔버는 하나의 루프를 공유합니다: 초기 추정값 x0\mathbf{x}_0에서 시작하여, 비용을 감소시키는 업데이트 Δx\Delta\mathbf{x}를 반복적으로 찾아 적용하고, 업데이트나 그래디언트가 미미해지면 멈춥니다. 방법들은 Δx\Delta\mathbf{x}를 선택하는 방식에서 차이가 납니다.

매니폴드 위에서의 최적화

카메라 자세는 벡터가 아니라 SE(3)\mathrm{SE}(3)의 원소입니다 — 회전 행렬에 업데이트를 단순히 더하면 직교성이 깨집니다. 표준적인 해법은 리 대수 상의 국소 섭동(local perturbation) ξR6\boldsymbol{\xi} \in \mathbb{R}^6을 최적화하고, 지수 사상을 통해 이를 적용하는 것입니다.

TTexp(ξ^)T \leftarrow T \cdot \exp(\hat{\boldsymbol{\xi}})

솔버는 항상 작은 벡터 ξ\boldsymbol{\xi}만 보게 되고, 리트랙션이 상태를 매니폴드 위에 유지시켜 줍니다. 모든 SLAM 라이브러리가 이를 구현하고 있습니다 (Ceres의 local parameterization, g2o의 vertex oplus, GTSAM의 retraction).

SLAM 문제를 풀 수 있게 만드는 요소들

솔버 출력 읽는 법

반복은 실용적인 기준에 따라 멈춥니다: 반복당 비용 감소량이 허용 오차 이하로 떨어지거나, 업데이트 노름 Δx\|\Delta\mathbf{x}\|가 미미해지거나, 그래디언트 노름이 0에 가까워지거나, 반복/시간 예산이 소진되는 경우입니다 (실시간 시스템은 종종 키프레임당 번들 조정 반복 횟수를 몇 번으로 제한합니다). 풀이가 잘못되었을 때 증상은 원인과 매핑됩니다: 비용이 폭증하는 것은 대체로 초기 추정값이 나쁘거나 야코비안에 버그가 있다는 뜻이고, 작은 스텝들이 많은데도 비용이 높은 상태로 정체되는 것은 나쁜 국소 최소값으로 수렴했거나 모델링되지 않은 이상치가 있음을 시사하며, 정규 방정식 행렬이 랭크 결핍인 것은 관측 불가능한 방향(게이지 자유도, 제약 없는 랜드마크)이 존재하여 사전 정보나 고정이 필요함을 가리킵니다.

SLAM에서의 의미

현대 SLAM 시스템의 백엔드 — 번들 조정, 포즈 그래프 최적화, VIO 슬라이딩 윈도우, 직접 광도 정렬 — 는 모두 매니폴드 위에서 가우스-뉴턴/LM 반복으로 풀리는 희소 비선형 최소제곱의 한 사례입니다. 확률론적 관점(MLE & MAP)은 무엇을 최소화할지를 말해주고, 비선형 최적화는 어떻게 최소화할지를 말해줍니다. 여기에 익숙해지면 어디서든 도움이 됩니다: 논문의 “다음 에너지를 최소화한다”는 절을 읽는 것, 발산을 진단하는 것(초기화가 나쁜가? 파라미터화가 잘못됐나? 이상치인가?), Ceres/g2o/GTSAM을 효과적으로 사용하는 것 모두가 이 내용에 기반합니다.

실습

관련 문서