VINS-Fusion
- camera와 IMU를 결합하여, 로봇의 위치와 자세를 추정하는 slam이다.
- 즉, 여러 센서의 측정값을 비선형 최적화로 묶어서, 현재의 위치+ pose + speed + Imu bias등을 추정한다.
- 카메라 : 주변 특징점의 움직임을 봄
- IMU : 가속도와 각속도를 측정
- 즉, 여러 센서의 측정값을 비선형 최적화로 묶어서, 현재의 위치+ pose + speed + Imu bias등을 추정한다.
- 이는 Visual-Inertial Odometry slam계열이다.
- 이는 VINS-mono의 확장판이다.
- VINS-Mono는 monocular carmera + IMU구조이다.
- 동작 흐름
- 1. Feature Tracking
- 이미지에서 특징점을 뽑고, 다음 프레임에서 특징점이 어디로 이동했는지 추적한다.
- 2. IMU Propagation
- IMU의 가속도계와 자이로스코프값을 사용해서, 짧은 시간동안의 움직임을 예측한다.
- 3. Visual-Ineritail Optimization
- 카메라 관측 오차와 IMU오차를 함께 최소화하는 최적화 문제를 푼다.
- 4. Marginalization
- 오래된 프레임은 제거하면서, 정보는 prior형태로 남겨서 계산량을 제한한다.
- 5. Loop Fusion / Global Fusion
- loop closure로 pose graph or global fusion을 통해서 장기 드리프트를 보정함.
- 1. Feature Tracking
- 주요 기능
- Visual - Inertial Odometry
- 카메라와 IMU로 로컬위치/자세 추정
- stereo VO/VIO
- 스테레오 카메라만 사용 or 스테레오+IMU 사용
- sliding - window optimization
- 최근 프레임들을 묶어서, 비선형 최적화 수행
- IMU preintegration
- 고주파 IMU데이터를 효율적으로 최적화에 반영
- online spatial calibration
- 카메라-IMU 외부 파라미터를 온라인 보정
- online temporal calibration
- 카메라와 IMU 시간 오프셋 보정
- loop closure
- 같은 장소를 다시 보았을때, 누적 드리프트를 줄임.
- gps golbal fusion
- VIO결과와 GPS를 결합해서 전역 좌표계 보정 가능
- Visual - Inertial Odometry
- 전체 파이프라인
- 1. feature tracking
- 2. IMU Pre-integraion
- imu는 카메라보다 훨씬 빠른 속도로 데이터가 들어온다. 이를 모두 넣으면 계산량이 처지니 imu preintegration과정을 거쳐야 한다.
- 3. initialization
- 초기화 과정은 vio-slam에서 매우 중요하다. 그래서 초기 위치 + 자세 + 속도 같은 것을 잘 잡아야한다.
- 4. sliding window optimization
- Vins-fusion은 모든 과거 프레임을 최적하 하지는 않는다. 왜냐면 이렇게 하면 계산량이 계속 커지기 때문...
- 대신에 최근 몇개의 keyFrame or frame만 유지한다... 이를 sliding window라고 부른다.
- Vins-fusion은 모든 과거 프레임을 최적하 하지는 않는다. 왜냐면 이렇게 하면 계산량이 계속 커지기 때문...
- 5. 최적화 문제로 오차를 줄인다.
- 6. marginalization
- 7. loop clouse
- 8. pose , path , odometry출력
설정 파리미터 파일

- imu
- 1: imu 사용
- 0 : imu 미사용
- num of cam
- 1 : monocular camera
- 2 : stereo camera
- imu topic : imu메시지를 받을 ros토픽
- image topic : 이미지를 받을 토픽
- output path : 출력 경로
- cam calib : 카메라 내부 파라미터 파일
- estimate extrinsic
- 카메라-imu 외부 파라미터 추정 여부이다. 즉, 위치/회전 관계를 VINS가 추정할지 정하는 옵션
- 0 : 아래에 따라오는 body_T_cam을 그대로 사용
- 1 : 주어진 값을 초기값으로 쓰고, 실행중에 약간 보정
- 2: extrinsic을 모르는 상태에서 추정
- body_T_cam
- IMU body좌표계와 카메라 좌표계 관계
- 앞의 3x3은 회전이다.
- 마지막 열은 translation이다. 위 사진의 예시로는 x = 0.006m , y=0.095m , z=0.000m이다.
- multiple thread
- 1 : 멀티스레드 사용
- 0 : 싱글
- feature tracking 설정
- max_cnt : 한 프레임에서 추적할 최대 feature point 개수이다. 값이 클수록 안정성은 좋아지나 계산량이 증가.
- min_dist : feature point사이의 최소 거리. 단위는 pixel이다.
- freq : VINS가 처리할 이미지 주파수이다.
- 만약 freq:10이라면, 카메라가 30Hz로 들어와도 10Hz수준으로 처리한다는 설정.
- F_threshold
- feature matching에서 잘못 매칭된 feature를 제거할때 사용. 값이 작을수록 엄격하게 제거
- show track : feature tracking결과를 화면에 보여줄지 정함
- 1 : tracking 이미지 표시
- 0 : 표시하지 않음
- flow back : optical flow추적후에 backward를 체크할지 정함
- 최적화 solver설정
- max solver time : 한번의 optimization에 사용할 최대 시간이다. 단위는 초단위이다.
- max num iterations : solver가 한번의 optimization에서 수행할 최대 반복 횟수.
- keyframe parallax : keyframe을 선택할때 사용하는 parallax threshold이다.
- imu noise설정
- acc_n : 가속도 측정값이 얼마나 noisy한지 나타냄.
- gyr_n : 자이로스코프 measurement noise이다.
- acc_w : 가속도걔 bias random walk noise이다.
- gyr_w : 자이로스코프 bias random walk noise이다.
- g_norm : 중력가속도 크기
- estimate_td : camera와 imu 사이의 시간지연이다. 즉, time delay를 추정할지 결정
- 0 : 추정 안함
- 1 : vins 실행중 time delay 추정
- td : camera와 imu 사이의 시간 offset이다.
- load previous pose graph : 이전에 저장해둔 pose graph를 불러올지 정함
- 0 : 이전 pose graph를 사용안함
- 1 : 이전 pose graph를 불러옴
- pose_graph_save_path : psoe graph를 저장하거나 불러올 경로
- save_image : pose graph용 or loop closure용 이미지를 저장할지 정함
- 0 : 저장 안함
- 1 : 이미지 저장
VINS-Fusion이 실패하는 경우
- 1. 시간 동기화 문제
- 카메라와 imu의 timestamp가 어긋나면, 빠르게 움직일때 pose가 흔들림
- 현상
- - 초기화 실패
- - scale 이상
- - trajectory가 갑자기 튐
- - 회전시에 위치가 크게 흔들림
- 2. calibration 문제
- 카메라 intrinsic , distortion, stereo extrinsic등이 틀리면, reprojection error가 커진다.
- 현상
- - 스테레어 depth가 이상함
- - loop closure후에도 경로가 이상함
- - feature는 잘 잡히나, trajectory가 휘어짐
- 3. imu noise parameter문제
- imu noise와 bias random walk값을 잘못 넣으면, imu를 너무 믿거나 안믿게 됨
- 현상
- - 진동에 민감함
- - 정지 상태에서도 drift
- - 빠른 움직임에서 발산
- 4. 특징점 부족
- 현상
- - loop closure fail
- tracking lost
- 현상
'gazebo > SLAM' 카테고리의 다른 글
| [issac sim] FAST-LIVO2 - 1 (0) | 2026.06.17 |
|---|---|
| FAST-LIVO2 (0) | 2026.06.08 |
| [Slam] Vins-Fusion (0) | 2026.05.26 |
| pySLAM (1) | 2025.12.06 |
| rtabmap으로 3d 지도 작성 (0) | 2025.06.27 |