>  기사  >  기술 주변기기  >  GSLAM | 일반적인 SLAM 아키텍처 및 벤치마크

GSLAM | 일반적인 SLAM 아키텍처 및 벤치마크

王林
王林앞으로
2023-10-20 11:37:01725검색

갑자기 19년 된 논문을 발견했습니다

GSLAM: 일반 SLAM 프레임워크 및 벤치마크

오픈 소스 코드: https://github.com/zdzhaoyong/GSLAM

전문으로 직접 이동하여 품질을 느껴보세요. 이 작품~

1 Abstract

SLAM 기술은 최근 많은 성공을 거두며 첨단기술 기업들의 주목을 받고 있습니다. 그러나 기존 또는 신흥 알고리즘에 대한 인터페이스를 사용하여 속도, 견고성 및 이식성에 대한 벤치마크를 효과적으로 수행하는 방법은 여전히 ​​문제로 남아 있습니다. 본 논문에서는 평가 기능을 제공할 뿐만 아니라 연구자에게 자체 SLAM 시스템을 신속하게 개발할 수 있는 유용한 도구를 제공하는 GSLAM이라는 새로운 SLAM 플랫폼을 제안합니다. GSLAM의 핵심 기여는 보편적입니다. 통합 프레임워크에서 입력 데이터 세트, SLAM 구현, 시각화 및 애플리케이션의 상호 작용을 처리하도록 설계된 크로스 플랫폼, 완전 오픈 소스 SLAM 인터페이스입니다. 이 플랫폼을 통해 사용자는 플러그인 형태로 자신만의 기능을 구현하여 SLAM의 성능을 향상시키고 나아가 SLAM의 적용을 실제 애플리케이션으로 밀어 넣을 수 있습니다.

2 소개

1980년대부터 SLAM(Simultaneous Localization and Mapping)은 컴퓨터 비전 및 로봇 공학 분야에서 인기 있는 연구 주제였습니다. SLAM은 로봇 공학, 무인 항공기(UAV), 자율 주행, 가상 및 증강 현실 등 실시간 탐색이 필요한 많은 애플리케이션에 필수적인 기능을 제공합니다. 최근 몇 년 동안 SLAM 기술은 급속히 발전하여 단안 SLAM 시스템(특징점 기반, 직접 및 반직접 방법), 다중 센서 SLAM 시스템(RGBD, 쌍안 및 관성 보조 방법)을 포함한 다양한 SLAM 시스템이 제안되었습니다. ) 및 학습 기반 SLAM 시스템(지도 및 비지도 방법).

그러나 SLAM 기술의 급속한 발전으로 거의 모든 연구자들이 자신만의 SLAM 시스템에 대한 이론과 구현에만 집중하고 있기 때문에 아이디어 교환이 어렵고 다른 시스템으로의 마이그레이션 구현도 쉽지 않습니다. 이는 다양한 산업 분야에서 SLAM 기술의 신속한 적용을 방해합니다. 또한 현재 SLAM 시스템의 다양한 구현이 있으며 속도, 견고성 및 이식성을 효과적으로 벤치마킹하는 방법이 여전히 문제로 남아 있습니다. 최근 Nardi et al.과 Bodin et al.은 정량적이고 비교 가능하며 검증 가능한 실험 연구를 수행하고 다양한 SLAM 시스템 간의 장단점을 탐색하기 위해 통합된 SLAM 벤치마크 시스템을 제안했습니다. 이러한 시스템을 사용하면 데이터 세트 및 측정 평가 모듈을 사용하여 평가 실험을 쉽게 수행할 수 있습니다.

기존 시스템은 평가 벤치마크만 제공하므로, 본 논문에서는 SLAM 알고리즘의 개발, 평가, 적용 단계를 포함한 전체 수명주기를 서비스하는 플랫폼 구축이 가능하다고 믿습니다. 또한, 딥러닝 기반 SLAM은 최근 몇 년간 상당한 발전을 이루었기 때문에 기하학과 딥러닝 기반 SLAM 시스템의 통합을 더 잘 지원하기 위해서는 C++뿐만 아니라 Python도 지원하는 플랫폼을 만드는 것이 필요합니다. 따라서 본 논문에서는 평가 기능을 제공할 뿐만 아니라 연구자에게 자체 SLAM 시스템을 신속하게 개발할 수 있는 유용한 도구를 제공하는 새로운 SLAM 플랫폼을 소개합니다. 본 플랫폼을 통해 흔히 사용되는 기능을 플러그인 형태로 제공하므로, 사용자는 이를 직접 사용하거나 직접 기능을 생성하여 더 나은 성능을 얻을 수 있습니다. 이 플랫폼을 통해 SLAM 시스템의 실제 적용이 더욱 촉진될 수 있기를 바랍니다. 요약하면, 이 논문의 주요 기여는 다음과 같습니다.

  1. 이 논문은 이전 벤치마킹 시스템을 능가하는 연구 및 상업적 용도로 설계된 일반적인 크로스 플랫폼 완전 오픈 소스 SLAM 플랫폼을 제안합니다. SLAM 인터페이스는 여러 개의 가볍고 종속성이 없는 헤더 파일로 구성되어 있어 통합 프레임워크에서 플러그인 형태로 다양한 데이터 세트, SLAM 알고리즘 및 애플리케이션과 쉽게 상호 작용할 수 있습니다. 또한 웹 및 딥러닝 기반 SLAM 애플리케이션을 지원하기 위해 JavaScript 및 Python이 제공됩니다.
  2. 제안된 GSLAM 플랫폼에는 Estimator, Optimizer 및 Vocabulary를 포함한 세 가지 최적화 모듈이 유틸리티 클래스로 도입됩니다. Estimator는 강력한 샘플 일관성(RANSAC)을 갖춘 일련의 폐쇄형 솔버를 제공하는 것을 목표로 합니다. 스레드 및 SIMD 최적화 장소 인식.
  3. 위 인터페이스의 이점을 활용하여 이 작업은 기존 데이터 세트, SLAM 구현 및 시각화 애플리케이션에 대한 플러그인을 통합 프레임워크로 구현하고 평가하며, 향후에 등장할 벤치마크 또는 애플리케이션도 쉽게 추가로 통합할 수 있습니다.

다음은 먼저 GSLAM 프레임워크의 인터페이스를 소개하고 GSLAM의 작동 원리를 설명합니다. 둘째, Estimator, Optimizer 및 Vocabulary라는 세 가지 실용적인 구성 요소가 소개됩니다. 그런 다음 몇 가지 일반적인 공개 데이터 세트를 사용하여 GSLAM 프레임워크를 사용하여 널리 사용되는 다양한 SLAM 구현을 평가합니다. 마지막으로 이들 연구를 요약하고 향후 연구 방향을 기대한다.

3 관련 작업

동시 위치 파악 및 매핑

SLAM 기술은 알 수 없는 환경에서 지도를 구축하고 지도 내 위치 센서를 사용하는 데 주로 실시간 작업에 중점을 둡니다. 초기 SLAM은 주로 확장 칼만 필터링(EKF)을 기반으로 했습니다. 6자유도의 모션 매개변수와 3D 랜드마크는 단일 상태 벡터로 확률적으로 표현됩니다. 클래식 EKF의 복잡성은 랜드마크 수가 증가함에 따라 2차적으로 증가하여 확장성이 제한됩니다. 최근 몇 년 동안 SLAM 기술은 빠르게 발전했으며 특징점 기반, 직접 방법 및 반직접 방법을 포함하여 많은 단안 시각적 SLAM 시스템이 제안되었습니다. 그러나 단안 SLAM 시스템은 스케일 정보가 부족하고 순수한 회전 상황을 처리할 수 없으므로 견고성과 정확성을 향상시키기 위해 RGBD, 쌍안 및 관성 보조 방법을 포함한 일부 다른 다중 센서 SLAM 시스템이 등장했습니다.

많은 수의 SLAM 시스템이 제안되었지만 이러한 알고리즘의 인터페이스를 통합하는 작업은 거의 없었으며 성능에 대한 포괄적인 비교도 이루어지지 않았습니다. 또한 이러한 SLAM 알고리즘의 구현은 라이브러리가 아닌 독립 실행형 실행 파일로 출시되는 경우가 많으며 표준 구조를 따르지 않는 경우가 많습니다.

최근에는 딥러닝을 기반으로 한 지도 및 비지도 시각적 주행 거리계(VO)가 기존 기하학 기반 방법에 비해 참신한 아이디어를 제안했습니다. 그러나 여러 키프레임의 일관성을 더욱 최적화하는 것은 여전히 ​​쉽지 않습니다. GSLAM은 더 나은 전역 일관성을 달성하는 데 도움이 되는 도구를 제공합니다. 이 프레임워크를 통해 결과를 시각화하거나 평가하고 이를 다양한 산업 분야에 적용하는 것이 더 쉽습니다.

컴퓨터 비전 및 로봇공학 플랫폼

로봇공학과 컴퓨터 분야에서 ROS(Robotic System)는 노드 간 매우 편리한 통신 방법을 제공하며 대부분의 로봇공학 연구자들이 선호합니다. 많은 SLAM 구현에서는 센서 데이터를 구독하고 시각화 결과를 게시하기 위한 ROS 래퍼를 제공합니다. 그러나 SLAM 구현의 입력과 출력을 통합하지 않으므로 다양한 SLAM 시스템을 추가로 평가하기가 어렵습니다.

ROS 메시지 아키텍처에서 영감을 받은 GSLAM은 메신저라는 유사한 프로세스 간 통신 유틸리티 클래스를 구현합니다. 이는 SLAM 구현 내에서 ROS에 대한 대안을 제공하고 호환성을 유지합니다. 즉, 모든 ROS 정의 메시지가 프레임워크 내에서 지원되고 ROS 래퍼가 자연스럽게 구현됩니다. In-Process 설계로 인해 직렬화 및 데이터 전송 없이 메시지가 전달되며, 지연 및 추가 비용 없이 메시지를 보낼 수 있습니다. 동시에 메시지의 페이로드는 ROS 정의 메시지로 제한되지 않고 복사 가능한 모든 데이터 구조일 수도 있습니다. 또한 평가 기능을 제공할 뿐만 아니라 연구자에게 자체 SLAM 알고리즘을 신속하게 개발하고 통합할 수 있는 유용한 도구를 제공합니다.

SLAM 벤치마크

현재 KITTI 벤치마크, TUM RGB-D 벤치마크 및 ICL-NUIM RGB-D 벤치마크 데이터 세트를 포함한 여러 SLAM 벤치마크 시스템이 있습니다. 이러한 시스템은 평가 기능만 제공합니다. 또한 SLAMBench2는 이러한 벤치마크를 알고리즘 및 데이터세트로 확장하므로 사용자는 평가를 위해 게시된 구현을 SLAMBench2와 호환되도록 만들어야 하는데, 이는 더 많은 애플리케이션 영역으로 확장하기 어렵습니다. 이러한 시스템과 달리 본 논문에서 제안하는 GSLAM 플랫폼은 개발부터 평가, 적용까지 SLAM 구현의 전체 라이프사이클을 서비스할 수 있는 솔루션을 제공한다. 연구자에게 자체 SLAM 시스템을 신속하게 개발하고 통합 인터페이스를 기반으로 시각화, 평가 및 애플리케이션을 추가로 개발할 수 있는 유용한 도구를 제공합니다.

4 일반 SLAM 아키텍처

프레임워크 개요

GSLAM의 프레임워크는 그림에 나와 있습니다. 전반적으로 인터페이스는 세 부분의 상호 작용을 처리하도록 설계되었습니다.

  1. SLAM 구현의 입력을 처리합니다. SLAM을 실행하려면 센서 데이터와 일부 매개변수가 필요합니다. GSLAM의 경우 매개변수 구성 및 명령 처리를 위해 Svar 클래스를 사용합니다. SLAM 구현에 필요한 모든 센서 데이터는 데이터 세트 구현에서 제공되고 메신저를 사용하여 전송됩니다. GSLAM은 여러 가지 인기 있는 시각적 SLAM 데이터세트를 구현하므로 사용자가 자신만의 데이터세트 플러그인을 자유롭게 구현할 수 있습니다.
  2. SLAM 구현. GSLAM은 각 구현을 플러그인 라이브러리로 처리합니다. 개발자는 GSLAM 인터페이스 및 유틸리티 클래스를 기반으로 SLAM 구현을 쉽게 설계할 수 있습니다. 개발자는 인터페이스를 사용하여 추가 종속성을 도입하지 않고도 구현을 래핑할 수도 있습니다. 사용자는 SLAM 구현 외부에서 처리해야 하는 입력 및 출력에 신경 쓰지 않고 핵심 알고리즘 개발에 집중할 수 있습니다.
  3. SLAM 결과를 활용한 시각화 부분 또는 애플리케이션. SLAM 구현이 입력 프레임을 처리한 후 사용자는 결과를 표시하거나 활용하기를 원할 수 있습니다. 일반적으로 SLAM 결과는 표준 형식으로 게시되어야 합니다. 기본적으로 GSLAM은 시각화를 위해 Qt를 사용하지만 사용자는 자유롭게 맞춤형 시각화 도구를 구현하고 평가 애플리케이션과 같은 애플리케이션 플러그인을 추가할 수 있습니다.

GSLAM | 一个通用的SLAM架构和基准

이 프레임워크는 단안, 쌍안, RGBD 및 다중 센서 융합을 통한 다중 카메라 시각적 관성 주행 거리 측정을 포함하되 이에 국한되지 않는 다양한 유형의 SLAM 구현과 호환되도록 설계되었습니다. 최신 딥 러닝 플랫폼과 개발자는 Python으로 코딩하는 것을 선호하므로 GSLAM은 Python 바인딩을 제공하므로 개발자는 Python에서 SLAM을 구현하고 GSLAM을 사용하여 이를 호출하거나 Python을 사용하여 C++ 기반 SLAM 구현을 호출할 수 있습니다. 또한 웹 기반 사용을 위해 JavaScript가 지원됩니다.

기본 인터페이스 클래스

SLAM 인터페이스에서 일반적으로 사용되는 일부 데이터 구조에는 매개변수 설정/읽기, 이미지 형식, 자세 변환, 카메라 모델 및 지도 데이터 구조가 포함됩니다. 다음은 몇 가지 기본 인터페이스 클래스에 대한 간략한 소개입니다.

Paramter 설정

GSLAM은 헤더 파일만 포함하고 C++11을 사용하며 다음과 같은 기능을 갖춘 작은 매개변수 구문 분석 및 매개변수 설정 클래스 Svar를 사용합니다.

a. 도움말 정보. Google gflags와 같은 널리 사용되는 매개변수 구문 분석 도구와 유사하게 변수 구성은 명령줄 인수, 파일 및 시스템 환경에서 로드될 수 있습니다. 사용자는 또한 다양한 유형의 매개변수를 정의하고 도움말 문서에 표시되는 소개 정보를 제공할 수 있습니다.

b. 구성 파일을 더욱 강력하게 만들기 위해 변수, 함수 및 조건문을 지원하는 작은 스크립트 언어입니다.

c. 스레드로부터 안전한 변수 바인딩 및 공유. 자주 사용하는 변수를 포인터나 참조자로 묶어두는 것이 효율성뿐만 아니라 편의성도 제공하는 것이 좋습니다.

d, 간단한 함수 정의 및 C++ 또는 순수 스크립트에서 호출. 명령과 함수 간의 바인딩은 개발자가 파일 종속성을 분리하는 데 도움이 됩니다.

e. 트리 구조 표현을 지원합니다. 즉, XML, JSON 및 YAML 형식을 사용하여 구성을 쉽게 로드하거나 저장할 수 있습니다.

Intra-Process Messaging

ROS는 노드 간 매우 편리한 통신 방법을 제공하기 때문에 대부분의 로봇 공학 연구자들이 선호합니다. ROS2 메시지 아키텍처에서 영감을 받은 GSLAM은 메신저(Messenger)라는 유사한 프로세스 간 통신 유틸리티 클래스를 구현합니다. 이는 호환성을 유지하면서 SLAM 구현 내에서 ROS에 대한 대안을 제공합니다. 프로세스 간 설계 덕분에 Messenger는 추가 비용 없이 모든 클래스를 게시하고 구독할 수 있습니다. 다음은 더 많은 기능에 대한 소개입니다:

a. 인터페이스는 사용자가 사용하기 쉬운 ROS 스타일을 채택합니다. 또한 모든 ROS 정의 메시지를 지원합니다. 즉, 원래 ROS 메시징 시스템을 교체하는 데 작업이 거의 필요하지 않습니다.

b. 직렬화 및 데이터 전송이 없기 때문에 지연 및 추가 비용 없이 메시지를 보낼 수 있습니다. 동시에 메시지의 페이로드는 ROS 정의 메시지로 제한되지 않고 복사 가능한 모든 데이터 구조도 지원합니다.

c. 소스 코드에는 추가 종속성 없이 C++11 기반 헤더 파일만 포함되어 있어 이식성이 뛰어납니다.

d.API는 스레드로부터 안전하며 대기열 크기가 0보다 큰 경우 다중 스레드 조건부 알림을 지원합니다. 게시자와 구독자가 서로 연결되기 전에 주제 이름과 RTTI 데이터 구조가 올바르게 호출되는지 확인합니다.

3D Transforamtion

GSLAM | 一个通用的SLAM架构和基准

GSLAM | 一个通用的SLAM架构和基准

회전 부분의 경우 행렬, 오일러 각도, 단위 쿼터니언 및 거짓말 대수 so(3)를 포함하여 선택할 수 있는 여러 표현이 있습니다. 주어진 변환에 대해 이들 중 하나를 사용하여 이를 나타낼 수 있으며 서로 변환할 수 있습니다. 그러나 다중 변환과 다양체 최적화를 고려할 때 선택한 표현에 세심한 주의를 기울여야 합니다. 행렬 표현은 9개의 매개변수를 사용하여 과도하게 매개변수화되어 있는 반면 회전에는 자유도(DOF)가 3개만 있습니다. 오일러 각도 표현은 세 가지 변수를 사용하여 이해하기 쉽지만 범용 잠금 문제에 직면하고 다중 변환에 불편합니다. 단위 쿼터니언은 여러 회전을 수행하는 가장 효율적인 방법인 반면, 거짓말 대수는 널리 사용되는 최적화를 수행하는 일반적인 표현입니다.

GSLAM | 一个通用的SLAM架构和基准

마찬가지로 강체 및 유사 변환의 거짓말 대수 se(3) 및 sim(3)이 정의됩니다. GSLAM은 회전 부분을 표현하기 위해 쿼터니언을 사용하고 하나의 표현을 다른 표현으로 변환하는 기능을 제공합니다. 표 1은 변환 구현을 보여주고 이를 세 가지 다른 다양체 구현(Sophus, TooN 및 Ceres)과 비교합니다. Ceres 구현에서는 각축 표현을 사용하므로 회전의 지수 및 로그가 필요하지 않습니다. 표에서 볼 수 있듯이 GSLAM의 구현은 쿼터니언을 사용하고 더 나은 최적화를 제공하기 때문에 더 나은 성능을 발휘하는 반면, TooN은 행렬 구현을 사용하고 포인트 변환 측면에서 더 나은 성능을 발휘합니다.

GSLAM | 一个通用的SLAM架构和基准

이미지 형식

이미지 데이터의 저장과 전송은 비주얼 SLAM의 가장 중요한 기능 중 하나입니다. 효율성과 편의성을 높이기 위해 GSLAM은 cv::Mat와 호환되는 데이터 구조 GImage를 사용합니다. 스마트 포인터 카운터를 탑재하여 메모리를 안전하게 해제하고 메모리 복사 없이 쉽게 전송할 수 있습니다. 더 쉬운 SIMD(Single Instruction Multiple Data) 가속을 위해 데이터 포인터가 정렬됩니다. 사용자는 메모리 복사 없이 원활하고 안전하게 GImage와 cv::Mat 사이를 변환할 수 있습니다.

카메라 모델

GSLAM | 一个通用的SLAM架构和基准

SLAM에는 제조 결함이나 어안 또는 파노라마 카메라로 캡처한 이미지로 인한 방사형 및 접선 왜곡이 포함될 수 있으므로 투영을 설명하기 위해 다양한 카메라 모델이 제안됩니다. GSLAM은 OpenCV(ORB-SLAM에서 사용), ATAN(PTAM에서 사용) 및 OCamCalib(MultiCol-SLAM에서 사용)를 포함한 구현을 제공합니다. 사용자는 또한 이러한 클래스를 쉽게 상속하고 Kannala-Brandt 및 등각 파노라마 모델과 같은 다른 카메라 모델을 구현할 수도 있습니다.

지도 데이터 구조

SLAM 구현의 목표는 실시간으로 지도를 찾고 생성하는 것입니다. GSLAM은 여러 맵 프레임과 맵 포인트로 구성된 통합 맵 데이터 구조를 사용할 것을 권장합니다. 이 데이터 구조는 기능 기반 또는 직접 방법을 포함하여 대부분의 기존 시각적 SLAM 시스템에 적합합니다.

지도 프레임은 IMU 또는 GPS 원시 데이터, 깊이 정보 및 카메라 모델을 포함하여 센서에서 캡처한 다양한 정보 또는 추정 결과를 포함하여 다양한 시간의 위치 상태를 나타내는 데 사용됩니다. SLAM 구현은 이들 사이의 관계를 추정하고, 이들 사이의 연결이 포즈 그래프를 형성합니다.

맵 포인트는 일반적으로 기능 기반 방법에서 사용되는 프레임으로 관찰되는 환경을 나타내는 데 사용됩니다. 그러나 지도 지점은 키포인트뿐만 아니라 GCP(지상 기준점), 가장자리 선 또는 3D 객체도 나타낼 수 있습니다. 맵 프레임에 대한 대응은 흔히 번들 그래프라고 불리는 관찰 그래프를 형성합니다.

5 SLAM 구현 도구

SLAM 시스템을 보다 쉽게 ​​구현하기 위해 GSLAM에서는 유틸리티 클래스를 제공합니다. 이 섹션에서는 Estimator, Optimizer 및 Vocabulary라는 세 가지 최적화 모듈을 간략하게 소개합니다.

Estimator

순수한 기하학적 계산은 강력하고 정확한 실시간 솔루션이 필요한 근본적인 문제로 남아 있습니다. 전통적인 시각적 SLAM 알고리즘 또는 최신 시각적 관성 솔루션은 초기화, 재배치 및 루프 폐쇄를 위해 기하학적 비전 알고리즘을 사용합니다. OpenCV는 다양한 기하학적 알고리즘을 제공하고, Kneip은 카메라 자세 계산에만 국한된 기하학적 시각을 위한 도구 상자인 OpenGV를 제공합니다. GSLAM의 Estimator는 모든 사례를 포괄하는 폐쇄형 솔버 제품군을 제공하는 것을 목표로 하며 RANSAC(Robust Random Sampling Consistency Method)를 사용합니다.

표 2에는 Estimator에서 지원하는 알고리즘이 나열되어 있습니다. 주어진 관측 데이터를 기반으로 세 가지 범주로 나뉩니다. 2D-2D 매칭은 에피폴라 또는 호모그래피 제약 조건을 추정하는 데 사용되며, 이로부터 상대적 포즈를 분해할 수 있습니다. 2D-3D는 유명한 PnP 문제인 단안 또는 다중 카메라 시스템의 중앙 또는 비중심 절대 포즈를 추정하는 것에 해당합니다. 평면 피팅, 두 포인트 클라우드의 SIM 변환 추정과 같은 3D 기하학 기능도 지원됩니다. 대부분의 알고리즘은 헤더 전용 라이브러리이자 대부분의 플랫폼에서 사용할 수 있는 오픈 소스 선형 대수 라이브러리 Eigen을 사용합니다.

GSLAM | 一个通用的SLAM架构和基准

Optimizer

비선형 최적화는 현대 기하학적 SLAM 시스템의 핵심 부분입니다. 헤세 행렬의 높은 위도와 희소성으로 인해 그래프 구조는 SLAM의 복잡한 추정 문제를 모델링하는 데 사용됩니다. 일반적인 그래프 최적화 문제를 해결하기 위해 Ceres, G2O 및 GTSAM을 포함한 여러 프레임워크가 제안되었습니다. 이러한 프레임워크는 다양한 SLAM 시스템에서 널리 사용됩니다. ORB-SLAM 및 SVO는 BA 및 포즈 그래프 최적화를 위해 G2O를 사용합니다. OKVIS와 VINS는 IMU 요소를 사용한 그래프 최적화를 위해 Ceres를 사용하고 슬라이딩 윈도우는 계산 복잡성을 제어하는 ​​데 사용됩니다. Forster 등은 SVO 기반의 시각적 초기화 방법을 제안하고 GTSAM을 사용하여 백엔드를 구현했습니다.

GSLAM의 Optimizer는 PnP 솔버, BA, 포즈 그래프 최적화 등 대부분의 비선형 SLAM 문제에 대한 통합 인터페이스를 제공하는 것을 목표로 합니다. 이러한 문제에 대한 범용 플러그인은 Ceres 라이브러리를 기반으로 구현됩니다. BA와 같은 특정 문제의 경우 PBA 및 ICE-BA와 같은 좀 더 효율적인 구현도 플러그인으로 사용할 수 있습니다. 최적화 도구를 사용하면 개발자는 특히 딥 러닝 기반 SLAM 시스템의 경우 통합 인터페이스를 사용하여 다양한 구현에 액세스할 수 있습니다.

Vocabulary

장소 인식은 재배치 및 루프백 감지에 사용되는 SLAM 시스템의 가장 중요한 부분 중 하나입니다. Bag of Words(BoW) 방식은 효율성과 우수한 성능으로 인해 SLAM 시스템에서 널리 사용됩니다. FabMap은 RSLAM, LSD-SLAM 등의 시스템에서 사용되는 모양 기반 장소 인식을 위한 확률적 방법을 제안합니다. SIFT 및 SURF와 같은 부동 소수점 설명자를 사용하므로 DBoW2는 훈련 및 탐지를 위한 어휘 트리를 구축하고 바이너리 및 부동 소수점 설명자를 지원합니다. Refael은 인터페이스를 단순화하고 훈련 및 로딩 속도를 높이는 DBoW2, DBoW3 및 FBoW의 두 가지 개선된 버전을 제안했습니다. 이후 ORB-SLAM은 ORB 디스크립터를 채택하고 루프 감지, 재배치 및 빠른 매칭을 위해 DBoW2를 사용했습니다. 이후 ORB-SLAM2, VINS-Mono 및 LDSO와 같은 일련의 SLAM 시스템은 루프백 감지를 위해 DBoW3를 사용했습니다. 이는 SLAM 시스템에서 위치 인식을 구현하는 데 가장 널리 사용되는 도구가 되었습니다.

위 작업에서 영감을 받아 GSLAM은 다음과 같은 특징을 가진 DBoW3 어휘의 헤더 파일 전용 구현을 구현했습니다.

  1. OpenCV에 대한 종속성을 제거하고 모든 기능은 C++11에만 의존하는 헤더 파일에 있습니다. 성취하다.
  2. DBoW2/3과 FBoW의 장점을 결합하여 매우 빠른 속도와 사용 편의성을 제공합니다. DBoW3와 유사한 인터페이스를 제공하고 SSE 및 AVX 명령어를 사용하여 바이너리 및 부동 소수점 설명자를 가속화합니다.
  3. 향상된 메모리 사용량, 가속화된 로딩, 저장, 어휘 훈련, 이미지 기능에서 BoW 벡터로의 변환.

표 3은 4개의 워드백 라이브러리를 비교한 것입니다. 실험에서 각 상위 노드에는 10개의 하위 노드가 있으며 ORB 기능 감지는 ORB-SLAM을 사용하고 SIFT 감지는 SiftGPU를 사용합니다. ORB 어휘는 각각 레벨 4와 6 및 SIFT 어휘로 구현 결과에 사용됩니다. FBoW와 GSLAM은 모두 어휘 훈련을 위해 멀티스레딩을 사용합니다. GSLAM의 구현은 어휘 로드 및 저장, 새로운 어휘 교육, 장소 인식을 위한 설명자 목록을 BoW 벡터로 변환, 빠른 기능 일치를 위한 특징 벡터를 포함하여 거의 모든 프로젝트에서 다른 구현보다 성능이 뛰어납니다. 또한 GSLAM 구현은 더 적은 메모리를 사용하고 더 적은 수의 동적 메모리 블록을 할당합니다. DBoW2에 많은 메모리가 필요한 주된 이유는 조각화 문제 때문입니다.

GSLAM | 一个通用的SLAM架构和基准

6 SLAM 평가 벤치마크

기존 벤치마크에서는 정확성 평가를 위해 사용자가 테스트 데이터 세트를 다운로드하고 결과를 업로드해야 하는데, 이는 운영 환경을 통일하고 공정한 성능 비교를 평가하기에는 충분하지 않습니다. GSLAM의 통합 인터페이스 덕분에 SLAM 시스템의 평가가 더욱 우아해졌습니다. GSLAM의 도움으로 개발자는 SLAM 플러그인을 업로드하고 고정 리소스를 사용하여 고정된 환경에서 속도, 계산 비용 및 정확성에 대한 다양한 평가를 수행할 수 있습니다. 이 섹션에서는 일부 데이터세트와 구현된 SLAM 플러그인을 먼저 소개합니다. 그런 다음 세 가지 대표적인 SLAM 구현을 속도, 정확성, 메모리 및 CPU 사용량에 대해 평가합니다. 이 평가의 목적은 다양한 SLAM 플러그인을 사용한 통합 SLAM 벤치마크 구현 가능성을 입증하는 것입니다.

Datasets

SLAM 시스템을 실행하려면 일반적으로 센서 데이터 스트림과 해당 구성이 필요합니다. 개발자가 핵심 SLAM 플러그인 개발에 집중할 수 있도록 GSLAM은 표준 데이터 세트 인터페이스를 제공하며 개발자는 SLAM 입력에 신경 쓸 필요가 없습니다. 온라인 센서 입력과 오프라인 데이터는 다양한 데이터 세트 플러그인을 통해 제공됩니다. 올바른 플러그인은 지정된 데이터 세트 경로 접미사에 따라 동적으로 로드됩니다. 데이터세트 구현은 요청된 모든 센서 스트림을 관련 구성과 함께 제공해야 하므로 다양한 데이터세트에 대해 추가 설정이 필요하지 않습니다. 모든 다양한 센서 스트림은 표준 주제 이름과 데이터 형식을 사용하여 메신저를 통해 게시됩니다.

GSLAM은 표 4와 같이 여러 가지 인기 있는 시각적 SLAM 데이터 세트 플러그인을 구현했습니다. 또한 사용자는 헤더 전용 GSLAM 코어를 기반으로 데이터 세트 플러그인을 매우 쉽게 구현하고 이를 플러그인으로 게시하고 애플리케이션과 함께 컴파일할 수 있습니다.

GSLAM | 一个通用的SLAM架构和基准

SLAM 구현

그림 2는 내장된 Qt 시각화 도구를 사용하여 실행되는 오픈 소스 SLAM 및 SfM 플러그인의 일부 스크린샷을 보여줍니다. 프레임워크는 직접 방법, 반직접 방법, 기능 기반 방법, 심지어 SfM 방법을 포함한 다양한 아키텍처의 SLAM 시스템을 지원합니다. DSO 구현은 ROS 기반 구현과 같은 시각화를 위해 포인트 클라우드, 카메라 포즈, 궤적 및 포즈 맵과 같은 결과를 게시해야 합니다. 사용자는 통합 프레임워크를 사용하여 다양한 SLAM 플러그인에 액세스할 수 있으며 C++, Python 및 Node-JS 인터페이스를 기반으로 SLAM 기반 애플리케이션을 개발하는 것이 매우 편리합니다. 많은 연구자들이 개발에 ROS를 사용하기 때문에 GSLAM은 ROS 정의 메시지를 원활하게 전송하고 개발자가 표시를 위해 Rviz를 활용하거나 다른 ROS 기반 애플리케이션을 계속 개발할 수 있도록 ROS 시각화 플러그인도 제공합니다.

GSLAM | 一个通用的SLAM架构和基准

Evaluation

대부분의 기존 벤치마크는 데이터 세트만 제공하거나 사용자가 자체 평가를 수행할 수 있는 근거가 없기 때문에 GSLAM은 컴퓨팅 성능 및 정확성 평가를 위한 내장 플러그인과 일부 스크립트 도구를 제공합니다.

TUM RGBD 데이터 세트의 nostructure-texture-near-withloop 시퀀스는 평가 실행을 보여주기 위해 논문에서 사용됩니다. 다음 실험에서는 세 가지 오픈 소스 단안 SLAM 플러그인 DSO, SVO 및 ORB-SLAM을 사용합니다. 모든 실험에는 64비트 Ubuntu 16.04를 실행하는 i7-6700 CPU, GTX 1060 GPU 및 16GB RAM을 갖춘 컴퓨터가 사용되었습니다.

계산 성능 평가에는 그림 3과 같이 메모리 사용량, 할당된 메모리 블록 수, CPU 사용량, 각 프레임에 소요된 통계 시간이 포함됩니다. 결과는 SVO가 최소한의 메모리와 CPU 리소스를 사용하고 가장 빠른 속도를 달성한다는 것을 보여줍니다. 그리고 SVO는 시각적인 주행 거리계일 뿐이며 구현 내부에서 로컬 지도만 유지하므로 비용이 안정적으로 유지됩니다. DSO는 더 적은 수의 메모리 블록을 할당하지만 100MB 이상의 메모리를 소비하고 느리게 증가합니다. DSO의 한 가지 문제점은 프레임 수가 500개 미만으로 떨어지면 처리 시간이 급격히 증가하고 키프레임 처리 시간도 훨씬 길어진다는 것입니다. ORB-SLAM은 CPU 자원을 가장 많이 사용하고, 계산 시간은 안정적이지만, 메모리 사용량이 급격히 증가하며, BA가 G2O 라이브러리를 사용하고 증분 최적화 방식을 사용하지 않기 때문에 많은 수의 메모리 블록을 할당 및 해제합니다.

GSLAM | 一个通用的SLAM架构和基准

그림 4는 오도메트리 궤적의 평가 결과를 보여줍니다. 그림에서 볼 수 있듯이 SVO는 더 빠르지만 드리프트가 더 큰 반면, ORBSLAM은 APE(절대 자세 오차)에서 가장 높은 정확도를 달성합니다. 종합 평가는 플러그형 플러그인 애플리케이션이므로 포인트 클라우드 정확도와 같은 더 많은 평가 지표를 다시 구현할 수 있습니다.

GSLAM | 一个通用的SLAM架构和基准

7 Summary

이 글에서는 개발, 평가, 적용까지 지원을 제안하는 GSLAM이라는 새로운 범용 SLAM 플랫폼을 소개합니다. 이 플랫폼을 통해 일반적으로 사용되는 툴킷이 플러그인 형태로 제공되며, 사용자는 자신만의 모듈을 쉽게 개발할 수도 있습니다. 플랫폼을 더 쉽게 사용하려면 인터페이스를 C++11에만 종속되게 만드세요. 또한 기존 SLAM과 딥러닝 기반 SLAM을 보다 효과적으로 통합하거나 웹에서 분산 작업을 수행할 수 있도록 Python 및 JavaScript 인터페이스가 제공됩니다.

다음 연구에서는 쉽게 배우고 사용할 수 있도록 더 많은 SLAM 구현, 문서 및 데모 코드가 제공될 예정입니다. 또한 기존 SLAM과 딥러닝 기반 SLAM의 통합을 통해 SLAM 시스템의 미지의 가능성을 더욱 탐구할 예정입니다.

이 작품의 홈페이지는 다음과 같습니다.

GSLAM: 메인 페이지

SLAM 각 부분의 원리를 학습하기 위한 틀 같은 느낌이에요~

GSLAM | 一个通用的SLAM架构和基准

원본 링크: https://mp.weixin. qq.com/s/ PCxhqhK3t1soN5FI0w9NFw

위 내용은 GSLAM | 일반적인 SLAM 아키텍처 및 벤치마크의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 51cto.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제