hydra install - kimera_pgmo 사용법

About_work·2024년 10월 16일
0

lifelong scene graph

목록 보기
24/56

1. CMakeLists.txt 파일로 이해하기

6. 정리

  • Kimera-PGMO는 로봇 위치 추정과 그래프 최적화에 유용한 라이브러리야.
  • 이 라이브러리를 프로젝트에 사용하려면:
    1. GitHub에서 클론하고 빌드하거나,
    2. CMake의 ExternalProject 기능으로 자동으로 포함할 수 있어.
  • 프로젝트 코드에서는 #includetarget_link_libraries() 를 통해 Kimera-PGMO의 기능을 사용할 수 있어.

1. kimera_pgmo란 무엇인가?

  • Kimera-PGMO는 SLAM(동시 위치 추정 및 지도 작성) 관련 라이브러리야. Kimera 프로젝트의 일부로, 주로 그래프 최적화포즈 그래프 맵핑을 지원해.

2. kimera_pgmo를 프로젝트에 포함하는 방법

2.1 find_package()가 어떤 역할을 하나?

find_package(kimera_pgmo REQUIRED)
  • 이 명령어는 CMake가 kimera_pgmo 패키지를 찾도록 지시하는 거야.

3. kimera_pgmo를 가져오고 설치하는 방법

방법 1: 소스 코드 직접 빌드

  1. Kimera-PGMO 레포지토리 클론

    • 프로젝트의 외부 라이브러리로 사용할 것이기 때문에, 다음 명령어로 로컬에 클론해.
    git clone https://github.com/MIT-SPARK/Kimera-PGMO.git
    cd Kimera-PGMO
  2. 의존성 설치
    Kimera-PGMO는 몇 가지 추가 라이브러리를 필요로 해. 예를 들어, GTSAM이 필요하니 아래처럼 설치해.

    sudo apt-get install libgtsam-dev
  3. CMake로 빌드 준비

    mkdir build && cd build
    cmake ..
  4. 라이브러리 빌드

    make -j$(nproc)
    sudo make install
  • 이 과정은 Kimera-PGMO가 시스템에 설치되도록 해줘. 설치가 완료되면 CMake가 이 라이브러리를 찾아서 사용할 수 있어.

방법 2: CMake의 ExternalProject 기능 사용

만약 소스 코드를 직접 포함하지 않고, CMake에서 자동으로 다운로드 및 빌드하도록 설정하고 싶다면 ExternalProject 기능을 사용할 수 있어.

include(ExternalProject)

ExternalProject_Add(
  kimera_pgmo
  GIT_REPOSITORY https://github.com/MIT-SPARK/Kimera-PGMO.git
  GIT_TAG master
  PREFIX ${CMAKE_BINARY_DIR}/kimera_pgmo
  CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/install
)

# 빌드된 라이브러리 경로를 포함하도록 설정
add_dependencies(${PROJECT_NAME} kimera_pgmo)
include_directories(${CMAKE_BINARY_DIR}/install/include)
link_directories(${CMAKE_BINARY_DIR}/install/lib)
  • 이 코드가 하는 일:
    1. Kimera-PGMO를 빌드 시 자동으로 GitHub에서 다운로드하고 빌드해.
    2. 빌드 결과를 ${CMAKE_BINARY_DIR}/install 폴더에 설치해.
    3. 이후, add_dependencies() 로 프로젝트가 kimera_pgmo에 의존하도록 설정해.

4. 프로젝트에서 kimera_pgmo 사용하기

4.1 C++ 코드에서 Kimera-PGMO 사용하기

Kimera-PGMO를 프로젝트에 포함하고, C++ 코드에서 사용할 수 있어.

예제 코드 (src/main.cpp):

#include <kimera_pgmo/KimeraPgmo.h>
#include <iostream>

int main() {
    kimera_pgmo::KimeraPgmo pgmo;
    std::cout << "Kimera-PGMO initialized!" << std::endl;
    return 0;
}

4.2 CMake에서 kimera_pgmo 링크하기

CMakeLists.txt에 다음 내용을 추가해 kimera_pgmo를 프로젝트와 링크할 수 있어.

find_package(kimera_pgmo REQUIRED)

target_link_libraries(${PROJECT_NAME} PUBLIC kimera_pgmo::kimera_pgmo)
  • find_package() 로 설치된 Kimera-PGMO를 찾고,
  • target_link_libraries() 로 프로젝트에 연결해줘.

2. README를 통해 공부

2. 결론

  • Kimera-PGMO 설치 방법에 대해 README에 직접적으로 언급된 부분은 없지만, 다음과 같은 연관성을 유추할 수 있어:
    1. hydra.rosinstall 파일에 Kimera-PGMO의 레포지토리가 포함되어 있을 가능성이 높아.
    2. ROS 의존성 관리(rosdep) 를 통해 Kimera-PGMO가 자동 설치될 수 있어.
    3. Kimera-VIO와 Kimera-PGMO는 같은 프로젝트의 일부로, 함께 설치해야 할 가능성도 있어.
  • 최종적으로 hydra.rosinstall 파일package.xml 파일을 확인하면 Kimera-PGMO의 설치 여부와 방법을 명확히 알 수 있을 거야.

  • rosdep install은 kimera_pgmo의 외부 의존성만 설치할 뿐, kimera_pgmo 소스 코드를 빌드하지 않아.
  • vcs import 로 가져온 kimera_pgmo 소스 코드는 Hydra 프로젝트를 빌드할 때 함께 빌드돼.
  • Hydra의 CMakeLists.txt 에서 kimera_pgmo를 의존성으로 명시했기 때문에, Hydra 프로젝트를 빌드하면 kimera_pgmo도 자동으로 빌드돼.

1. Kimera 관련 힌트가 포함된 부분들

1.1. Building Hydra 섹션

vcs import . < hydra/install/hydra.rosinstall
  • hydra/install/hydra.rosinstall 파일에 정의된 모든 Git 레포지토리를 현재 디렉터리(.)로 클론해.
  • .rosinstall 파일은 다음과 같은 정보를 담고 있어:
    • 각 레포지토리의 경로(local-name): 로컬에 저장될 폴더 이름.
    • 각 레포지토리의 URL(uri): GitHub에서 가져올 위치.
    • 특정 버전이 필요하다면 version 도 정의 가능.
rosdep install --from-paths . --ignore-src -r -y

1.3. Kimera-PGMO가 ROS 의존성으로 포함될 가능성

  • rosdep 명령은 ROS 패키지와 외부 라이브러리를 설치하는 도구야:
    rosdep install --from-paths . --ignore-src -r -y
  • 만약 Kimera-PGMO가 ROS 패키지 또는 외부 의존성으로 등록되어 있다면, rosdep이 자동으로 설치해 줄 수 있어.

확인 방법

  1. ROS 의존성 파일에서 Kimera-PGMO가 정의되어 있는지 확인:
    cat package.xml
    • package.xml 파일에 Kimera-PGMO가 의존성으로 정의되어 있다면, rosdep이 설치를 담당할 거야.



5. 결론

  • vcs import: 여러 Git 레포지토리를 한 번에 가져와서 로컬에 설정해.
  • rosdep install: 가져온 패키지들이 필요로 하는 시스템 의존성을 자동으로 설치해.
  • Kimera-PGMO는 vcs import 과정에서 자동으로 클론되고, rosdep install 과정에서 의존성 패키지(GTSAM 등)가 자동으로 설치돼.
  • 이 방식으로 Hydra 프로젝트가 필요한 모든 외부 라이브러리를 한꺼번에 설정할 수 있어.

2. rosdep install --from-paths . --ignore-src -r -y의 역할

rosdep란?

  • rosdepROS 패키지의 의존성을 자동으로 설치하는 도구
  • ROS 프로젝트에서 필요한 시스템 패키지나 외부 라이브러리를 설치할 때 사용

명령어 분석

rosdep install --from-paths . --ignore-src -r -y
  • --from-paths .: 현재 폴더에서 ROS 패키지를 찾아서, 해당 패키지들이 필요로 하는 의존성을 확인해.
  • --ignore-src: 소스 코드는 건너뛰고, 필요한 시스템 패키지만 설치해.
  • -r: 의존성을 재귀적으로 탐색해. 즉, 하위 패키지가 필요로 하는 의존성도 함께 설치해.
  • -y: 사용자에게 설치 여부를 묻지 않고 자동으로 진행해.

5. 정리

  • rosdep install --from-paths .:
    1. 현재 폴더와 모든 하위 폴더를 탐색package.xml 파일이 있는 ROS 패키지를 찾음.
    2. package.xml 파일에 명시된 의존성을 확인하고 설치함.
  • ROS 패키지란:
    • package.xmlCMakeLists.txt를 포함하는 코드와 의존성 정보의 단위

1. ROS 패키지란?

ROS 패키지의 정의

  • ROS 패키지로봇 운영 체제(ROS)코드, 데이터, 의존성 정보를 포함하는 최소 단위
  • ROS 패키지는 주로 소스 코드, launch 파일, 메시지 정의, 의존성 목록 등을 포함하고 있음

ROS 패키지의 구조

ROS 패키지의 기본 디렉터리 구조는 이렇게 생겼어:

my_ros_package/
│── CMakeLists.txt        # CMake 빌드 설정 파일
│── package.xml           # 패키지 의존성을 정의하는 파일
│── src/                  # 소스 코드 폴더
│── launch/               # launch 파일 폴더
│── include/              # 헤더 파일 폴더
  • package.xml: 이 파일에 패키지 의존성메타정보가 담겨 있어.
    예를 들어, Kimera-PGMO가 필요하면 package.xml에 정의해두지:
<depend>kimera_pgmo</depend>
  • CMakeLists.txt: ROS 프로젝트를 빌드하기 위한 설정 파일이야.

2. rosdep install이 ROS 패키지를 찾는 방식

1) --from-paths .의 의미

  • --from-paths .: 현재 경로(.)와 그 하위 폴더들에서 ROS 패키지를 찾는다는 의미야.

2) 어떤 기준으로 ROS 패키지를 찾을까?

  • rosdep installpackage.xml 파일을 기준으로 해당 폴더가 ROS 패키지인지 판단해.
  • 만약 폴더에 package.xml 파일이 있으면, ROS 패키지로 인식하고 의존성 목록을 가져와 설치를 진행해.

3. rosdep install이 하는 일

  1. --from-paths .: 현재 폴더와 모든 하위 폴더를 탐색.
  2. 각 폴더에 package.xml 파일이 있는지 확인.
  3. package.xml 파일에 정의된 의존성을 확인하고, 설치되지 않은 의존성을 APT 패키지로 설치해.
  4. 예를 들어, Kimera-PGMO를 의존성으로 포함한 package.xml은 이렇게 생겼을 거야:
   <package>
     <name>hydra</name>
     <version>1.0.0</version>
     <description>A ROS package for Hydra project</description>
     <maintainer email="user@example.com">Hydra Team</maintainer>

     <depend>kimera_pgmo</depend>  <!-- 의존성 -->
     <depend>gtsam</depend>
   </package>
  • 위와 같이 package.xml 파일에 의존성이 명시되면, rosdep이 이를 확인하고 설치해줘.

profile
새로운 것이 들어오면 이미 있는 것과 충돌을 시도하라.

0개의 댓글