2023.11.27 DAY49
SLAM과 C++ 강의를 들었다. SLAM은... 너무 어렵다. 뭔가 알것 같으면서도 모르겠다ㅠ 다음주에 실습을 해야 조금 이해될 것 같기도 하다. C++ 강의는 들을 때마다 너무 신기하다. 코딩 가이드라인은 진짜 대학교때 배웠으면 너무 좋았을 것 같다. 개발할 때 이런것들 때문에 시간을 생각보다 많이 썼던 것 같은데 미리 알았으면 더 좋은 코드를 구현할 수 있었을 것 같다
📝 배운 내용
Code quality improvement for C++
- 정적 검증
- coding convention과 format 확인
- 사전에 문제를 알려주는 것으로 실행시키지 않고 잠재적 오류를 검사
- 동적 검사
- 프로그램이 제대로 동작하는지 전체적인 프로그램의 퍼포먼스 분석
- Test
- 유닛 테스트 : 개별 기능을 검증 / 독립적으노 실행
- 통합 테스트 : 여러 기능이 올바르게 통합되어 작동하는지 확인
- 퍼포먼스 테스트 : 소프트웨어의 성능을 측정하고 평가
- 시스템 테스트 : 전체 프로그램 자체에 대해 테스트
clang
- clang-format : format을 맞춰주는 것
- clang-tidy : 분석해주는 도구. 너무 편할 것 같다.
Perspective n Points
- 2D와 3D간에 correspondence가 주어졌을 때 카메라의 pose를 추정
- 이미지에서 feature를 뽑고 map과 매칭함으로써 map에서 자신의 위치를 찾을 수 있게 해주는 localization 기술
- P3P Grunert method
Least squares
- error의 제곱을 사용하여 최적의 방법을 찾는다
Maximum-a-posterioir (MAP) estimation in SLAM
- motion model : 현재 위치와 관련된 state를 추정할 수 있게 해주는 수식
- observation model : landmark의 위치와 관련된 state를 추정할 수 있게 해주는 수식
- SLAM state = 1개 robot motion state + 다수의 landmark state
- 두 모델 모두 노이즈가 있기 때문에 어렵다 (노이즈 누적 = drift)
- 두 모델을 동시에 최적화 joint optimization을 통해 동시적 위치추정과 mapping을 할 수 있다!!
- 노이즈 패턴을 분석하여 최적의 로봇 pose와 landmark position 값을 찾는다
Graph-based SLAM (batch SLAM)
- 여러 시점의 state를 한번에 추론
- factor graph : node(robot과 landmark state정보)와 edge(motion, observation model 정보)로 이루어진 그래프
- loop closure : loop 속의 누적된 error를 제거
Bundle Adjustment(BA)
- N-view geometry에서 카메라 pose와 landmark position을 고정해준다 -> 최적화
- rejection error를 최소화
- non-linear 최적화 방법을 사용
- loop closure 상황에서 누적된 error를 해소시킬 때 / siliding window 최적화를 수행할 때 BA 방법을 사용한다
- gauss-newton mathod / schur complement 방버으로 BA를 진행한다
- m-estimator와 같은 커널을 사용하여 outlier를 제거해주는 것도 중요하다