ORBSLAM2 학습노트(3)-부분지도
4508 단어 slam
LocalMapping 초기화
지난 장에서 우리는 프로그램의 주요 라인을 완전하게 걸었지만 국부적인 설계도와 폐쇄된 그림자를 조금도 보지 못했다.이 두 기능의 입구는 어디입니까?시스템 객체를 인스턴스화할 때 시스템 클래스의 구조 함수는 첫 번째 시작점으로 돌아갑니다.
//Initialize the Local Mapping thread and launch
mpLocalMapper = new LocalMapping(mpMap, mSensor==MONOCULAR);
mptLocalMapping = new thread(&ORB_SLAM2::LocalMapping::Run,mpLocalMapper);
//Initialize the Loop Closing thread and launch
mpLoopCloser = new LoopClosing(mpMap, mpKeyFrameDatabase, mpVocabulary, mSensor!=MONOCULAR);
mptLoopClosing = new thread(&ORB_SLAM2::LoopClosing::Run, mpLoopCloser);
이 문장들은 창도와 폐환 대상을 실례화하고 백엔드 창도와 폐환의 런 함수를 실행하는 새로운 라인을 열었다.우리 먼저 local Mapping부터 봅시다.이 함수는 큰while 순환입니다.순환이 시작되면 SetAcceptKeyFrames(false)를 통해 트랙킹 라인이 바쁘다는 것을 알려주고 키프레임을 나에게 보내지 마세요.이후 대기 목록에서 관건적인 프레임을 꺼내서 bow 설명을 계산하고 이 프레임에 일치하는 지도점을 훑어보고 이 지도점들에 관측 정보를 업데이트합니다.마지막으로 프레임에 따라 공통 뷰를 업데이트하고 프레임을 그림에 삽입하는 프레임 관련 작업을 수행합니다.
공통 뷰 업데이트
공통 뷰란?공통 뷰는 프레임과 프레임 사이의 연관 관계를 나타내는 그림입니다.공통 뷰를 설정하는 동안 프레임과 키점만 연결됩니다.공통 뷰는 각 키프레임과 가장 많은 맵 포인트를 공유하는 처음 키프레임을 기록합니다.1. 현재 프레임의 지도점을 두루 훑어보고 이 지도점을 관측할 수 있는 관건적인 프레임과 그 관측할 수 있는 지도점의 수를 통계하여 KFcounter에 저장한다.2. KFcounter를 옮겨다니며 공통 지도점의 수가 한도값보다 많은 관건적인 프레임에 대해 AddConnection(this,mit->second) 함수를 통해 링크를 만든다. 사실은 이 프레임을 현재 프레임의 mConnectedKeyFrameWeights에 저장하는 것이다.3. 생성 트리를 업데이트합니다.생성 트리는 키프레임을 연결하는 가장 작은 트리로, 각 키프레임은 가장 높은 공유 트리를 자신의 부모 트리로 사용합니다.
지도점의 삭제, 갱신과 융합
새 키프레임을 삽입하고 새 맵 포인트를 만들면 이 점의 품질이 그다지 좋지 않을 수 있으므로 함수MapPointCulling () 를 통해 삭제해야 합니다.삭제할 수 있는 경우는 다음과 같습니다.이 점을 관측할 수 있는 프레임 수와 이론적으로 관측할 수 있는 프레임 수는 1/4보다 작다.이 관건점이 생성되고 두 개 이상의 관건 프레임이 지났지만, 이 관건을 관측할 수 있는 관건 프레임 수는 한도값보다 작다. (한 항목은 3, 두 항목은 2)이후 Create New MapPoints () 를 호출하여 인접 프레임의 삼각화를 통해 지도점을 복원합니다.1. 현재 프레임의 공시도가 가장 높은 전 n 프레임을 얻어 인접 프레임이라고 한다.이후에 현재 프레임과 인접 프레임의 세계 좌표를 구하여 기선의 길이를 구하고 기선이 충분하고 경치가 길지 않을 때 지도점을 생성한다.2. 두 프레임 사이의 기본 행렬을 계산하고 호출
matcher.SearchForTriangulation(mpCurrentKeyFrame,pKF2,F12,vMatchedIndices,false);
극좌표 구속을 사용하여 일치하는 경우 검색 범위를 제한하여 피쳐 점 일치를 수행합니다.정합 후 삼각법으로 재건하여 이 점이 카메라 전방에 있는지 확인한 후 다시 투영 오차를 계산하고 한도값보다 작으면 정합이 유효하다고 여긴다.그 다음 주문을 Mappoint로 포장하면 됩니다.마지막으로 지도점의 융합을 해야 한다. 이런 상황이 발생할 수 있기 때문에 같은 공간점인데도 서로 다른 방식으로 지도점으로 여러 번 추가된다.방법은 다음과 같다.현재 프레임의 인접 키프레임과 인접 키프레임의 인접 키프레임을 찾습니다.2. 현재 프레임의 지도점과 인접한 관건 프레임의 특징점을 매칭하여 매칭한 후 이 특징점과 지도점이 있으면 이 두 지도점을 융합시킨다.이후 키프레임에 인접한 지도점과 현재 프레임의 지도점을 일치시킵니다.마지막으로 지도점의 묘사, 평균 관측 방향, 공시도 등 업데이트 작업을 한다.
이 절차가 완성되면 위치와 지도점을 최적화하기 위해localBA를 한 번 진행합니다.KeyFrameCulling을 호출하여 불필요한 프레임을 삭제합니다. (90 이상의 지도점은 세 개의 관건 프레임에 관측됩니다.) 현재 프레임을 폐쇄 탐지 대기열에 추가하면 건도 순환이 완성됩니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
ORBSLAM2 학습노트(3)-부분지도이 문장들은 창도와 폐환 대상을 실례화하고 백엔드 창도와 폐환의 런 함수를 실행하는 새로운 라인을 열었다.우리 먼저 local Mapping부터 봅시다.이 함수는 큰while 순환입니다.순환이 시작되면 SetAcce...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.