본문 바로가기
Project/SLAM

[HDL Localization 사용설명서] 전체 아키텍쳐 및 구성요소 (2)

by Gnaseel 2023. 5. 4.
728x90
반응형

앞 장에서는 패키지에 대한 기본적인 설명이나 동작 원리에 대해서 기술했다. 본 장에서는 해당 ROS 패키지가 어떤 구조를 가지고있으며, 각각을 구성하는 모듈들은 어떤 역할을 하는지 기술한다.

 

 

3. 패키지 개요

3.1 패키지 구성

의존 라이브러리

  • PCL (Point Cloud Library - pcd 핸들링 라이브러리)
  • OpenMP (C/C++ 기반 CPU 병렬처리 라이브러리)

필요 패키지

  • pcl_ros (ros 환경에서 PCL을 활용하기 위해 필요)
  • ndt_omp (Scan matching 알고리즘)
  • fast_gicp (Scan matching 알고리즘2)
  • hdl_global_localization (전역 환경에서 relocalize하기위해 사용)

PCL 알고리즘은 포인트클라우드를 다루기 위한 라이브러리이다. 라이다에서 출력되는 데이터를 효율적으로 관리하고 조작하기 위해 사용된다. OpenMP는 CPU의 병렬처리 라이브러리로, 시간소모가 큰 스캔매칭 알고리즘을 병렬화 하는 목적으로 사용된다.

 

pcl_ros는 위와 같이 PCL을 ros환경에서 사용하기 위해 의존하고, ndt_omp는 스캔매칭 알고리즘이다. fast_gicp도 스캔매칭 알고리즘이며, NDT 연산을 수행하기 힘든 저사양 연산장치에서 사용하기 위해 의존한다. 그리고 hdl_global_localization은 전역 위치를 재추정하거나, rviz에 지도시각화를 위해 사용되는데 분명 몇 년 전까지만해도 필수가 아니었는데 갑자기 의존하게 되었다. 아마 전역 위치 재추정 기능을 추가하기 위함같은데, 실제로도 launch에서 hdl_global_localization을 제외하고 실행시켜도 전체 프로세스에는 영향을 끼치지 않는다.

 

3.2 모듈 상세 설명

3.2.1 hdl_locazliation

메인 패키지이며 3개의 주요 소스코드 파일이 있다.

  • apps/hdl_localization_nodelet.cpp
    • 모든 프로세스의 진행을 담당하는 메인 모듈
    • 센서 입력(LiDAR, IMU)부터 위치 출력(Odom)까지 모든 절차가 본 파일에 포함되어있음
  • apps/globalmap_server_nodelet.cpp
    • 전역 지도 관리 모듈
    • PCD, UTM 등 다양한 파일 포멧을 읽어들여 전역지도 생성함
    • 생성된 전역 지도를 시각화하거나 외부 파일로 출력
  • src/hdl_localization/pose_estimator.cpp
    • 위치 연산 모듈
    • 오돔과 IMU로부터 현재 위치를 예측함
    • 전역지도와 LiDAR 스캔데이터로부터 현재 위치를 측정함
    • 예측값과 측정값을 기반으로 칼만필터를 운용하여 정확한 현재 위치를 추정함

 

본 패키지의 계산 과정은 위 3개 파일에서 동작하며, 뭔가 hdl_localization 패키지를 커스터마이징하여 활용하고싶다면 이 3개의 파일을 수정하는데 대부분의 시간을 사용할것이다. 나머지 파일들은 그다지 중요하지 않다. 더 커스터마이징 할만한 파일들은 스캔매칭 알고리즘이나 무향칼만필터 부분인데, 이건 이미 아이큐 300은 될것같은 사람들이 머리싸매고 만든 라이브러리이다. 아예 다른 라이브러리로 교체할 것이 아니라면 굳이 건들 필요가 없다.

 

3.2.2 hdl_global_localization

-> 추후 기술 예정


4. 아키텍쳐

4.1 정적 분석 (클래스 다이어그램)

hdl localization의 클래스 구조는 위와 같다. HdlLocalizationNodelet이 메인 클래스 역할이며 코어 역할을 맡고있다. 그 하위로는 실제 연산을 담당하는 Estimator 클래스들이 위치하며, 그 아래로는 Estimator에서 사용하는 무향칼만필터와, Pose, Odom 시스템 클래스가 있다.

4.2 통신 구조 분석

-> 추후 기술 예정

반응형