ORB - SLAM 2 추적의 국부 지도 추적
4226 단어 ORB - SLAM 알고리즘
지난번 에는 ORB - SLAM 2 추적 과정 에서 각 프레임 의 초기 위치 에 대한 평 가 를 설명 했다.돌 이 켜 보면 초기 위치 에 대한 평 가 는 주로 프레임 과 프레임 사이 에서 이 루어 지 는데 세 가지 방법 으로 평가 할 수 있다. Track With Motion Model, Track Reference KeyFrame, Relocalization.
Track With Motion Model 은 카메라 가 항속 운동 을 한다 고 가정 하고 앞의 프레임 의 위치 와 항속 변위 에 따라 현재 프레임 의 위 치 를 추산 한 다음 에 앞의 프레임 의 특징 점 을 옮 겨 다 니 며 추 산 된 현재 프레임 위치 에 따라 특징 점 에 대응 하 는 3D 지도 점 을 현재 프레임 에 투영 시 켜 투영 점 부근 에서 특징 점 을 검색 하여 일치 시 켜 특징 점 이 검색 범 위 를 좁 힌 다.일치 속 도 를 빠르게 합 니 다. 이 과정 은 SearchByProjection () 함 수 를 통 해 이 루어 집 니 다.최종 적 으로 일치 하 는 3D 지도 점 - 2D 특징 점 을 얻 었 습 니 다.그 다음 에 Bundle Adjustment 를 실시 하여 중 투영 오 차 를 최소 화하 여 현재 프레임 위치 자 세 를 최적화 시 키 고 초기 자 세 를 얻 으 며 최적화 함 수 는 다음 과 같다.
Optimizer::PoseOptimization(&mCurrentFrame);
Track Reference KeyFrame 은 운동 모델 이 아직 구축 되 지 않 았 거나 포 지 셔 닝 이 완료 되 지 않 았 을 때 BoW 를 통 해 현재 프레임 을 참조 키 프레임 특징 점 과 일치 시 키 는 과정 으로 SearchByBoW () 함 수 를 통 해 이 루어 집 니 다.3D 지도 점 - 2D 특징 점 이 일치 하 는 것 을 얻 은 후에 Track With Motion Model 과 같이 3D - 2D 의 재 투영 오 차 를 최적화 하여 초기 자 세 를 얻 을 수 있 습 니 다. 여기 서 최적화 하기 전에 이전 프레임 의 자 세 를 현재 프레임 의 초기 자세 로 하면 최적화 수렴 을 가속 화 할 수 있 습 니 다.Relocalization 은 잃 어 버 린 것 을 추적 할 때 현재 프레임 과 후보 키 프레임 을 BoW 를 통 해 특징 점 을 매 칭 한 다음 에 EPnP 알고리즘 을 통 해 위치 자 세 를 추정 하고 앞의 두 가지 방법 과 일치 한 다음 에 중 투영 오 차 를 최소 화하 여 위치 자 세 를 최적화 하 는 것 이다.
상기 세 가지 방법 은 모두 프레임 간 의 매 칭 을 바탕 으로 3D - 2D 재 투영 오 차 를 최적화 하여 현재 프레임 의 초기 자 세 를 얻 는 것 이다.이렇게 얻 은 초기 자 세 는 믿 을 만 한 것 이 아니 라 두 프레임 의 데이터 정보 만 이용 했다. 만약 에 앞의 프레임 의 질 이 너무 떨 어 지면 얻 은 자 세 는 신뢰 도가 낮다.따라서 더 많은 정 보 를 이용 하기 위해 서 는 현재 프레임 을 국부 지도 와 일치 시 키 고 최적화 시 켜 야 한다. 즉
TrackLocalMap()
.국부 지도 추적
카메라 운동 에 따라 우 리 는 국부 지도 에 새로운 관건 적 인 프레임 과 3D 지도 점 을 추가 하여 국부 지 도 를 유지 합 니 다. 그러면 추적 과정 에서 특정한 프레임 에 문제 가 발생 하 더 라 도 국부 지 도 를 이용 하여 우 리 는 그 프레임 의 정확 한 위 치 를 구 할 수 있 습 니 다.다음은 국부 지도 추적 을 하 는 절차 입 니 다.
부분 맵 업데이트
부분 지도 업데이트
UpdateLocalMap()
는 주로 관건 프레임 에 대한 업데이트 UpdateLocalKeyFrames()
와 부분 지도 점 의 업데이트 UpdateLocalPoints()
를 포함한다.부분 키 프레임 업데이트
mvpLocakKeyFrames
절 차 는 다음 과 같 습 니 다.map keyframeCounter;
mvpLocakKeyFrames
;keyframeCounter
에서 모든 관건 적 인 프레임 을 옮 겨 다 니 며 그 와 의 공시 정도 가 가장 높 은 10 개의 관건 적 인 프레임 을 얻 었 고 모두 mvpLocakKeyFrames
에 삽입 했다.keyframeCounter
에서 모든 관건 프레임 을 옮 겨 다 니 며 모든 관건 프레임 의 하위 관건 프레임 (> = 1) 과 부모 관건 프레임 (= 1, 공시 정도 가 가장 높 은 이전의 관건 프레임) 을 모두 mvpLocakKeyFrames
에 삽입 합 니 다.부분 지도 점 업데이트
mvpLocalMapPoints
절 차 는 다음 과 같 습 니 다.mvpLocalMapPoints
;mvpLocakKeyFrames
을 옮 겨 다 니 며 부분 관건 프레임 의 지도 점 을 mvpLocalMapPoints
에 삽입 합 니 다.부분 맵 포인트 일치
부분 지도 점 일치
SearchLocalPoints()
부분 지도 점 을 현재 프레임 과 일치 합 니 다.절 차 는 다음 과 같다.
mvpMapPoints
MapPoints 가 참여 하지 않 은 검색 을 표시 합 니 다.이 MapPoints 는 프레임 간 매 칭 과정 에서 사 용 됩 니 다.mvpLocalMapPoints
을 현재 프레임 에 투영 하고 투영 행렬 은 프레임 간 의 매 칭 을 통 해 얻 을 수 있다.부분 지도 점 이 현재 프레임 의 시야 내 (시야 내, mbTrackInView 는 true) 에 있 는 지 판단 하고 시야 내 지도 점 만 투영 하여 일치 합 니 다.판단 요 구 는 투영 점 이 이미지 안에 있 는 지 여부 입 니 다.지도 점 에서 카메라 중심 거리 가 사이즈 변환 범위 내 에 있 는 지 여부;카메라 중심 에서 지도 점 까지 의 벡터 와 지도 점 의 평균 시각 협각 이 60 ° 보다 작 습 니까?matcher.SearchByProjection(mCurrentFrame,mvpLocalMapPoints,th);
3D 국부 지도 점 - 2D 특징 점 의 조합 을 얻 을 수 있 습 니 다.BundleAdjustment
Bundle Adjustment 중 투영 오차 최소 화 카메라 위치 최적화:
Optimizer::PoseOptimization(&mCurrentFrame);
이 를 통 해 알 수 있 듯 이 이 몇 단 계 는 Track With Motion Model 과 유사 하 다. 다만 Track With Motion Model 의 일치 점 은 프레임 간 매 칭 을 통 해 얻 은 것 이 고 Track LocalMap 은 Track With Motion Model 의 일치 점 을 제거 하고 국부 지도 에서 더 많은 일치 점 을 찾 아 대위 자세 에 대한 최 적 화 를 실현 한다.