[데브코스 자율주행 TIL] DAY 49 (11/27)

happy_quokka·2023년 11월 28일
0
post-thumbnail

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를 제거해주는 것도 중요하다

0개의 댓글