#include
와 target_link_libraries()
를 통해 Kimera-PGMO의 기능을 사용할 수 있어.find_package()
가 어떤 역할을 하나?find_package(kimera_pgmo REQUIRED)
Kimera-PGMO 레포지토리 클론
git clone https://github.com/MIT-SPARK/Kimera-PGMO.git
cd Kimera-PGMO
의존성 설치
Kimera-PGMO는 몇 가지 추가 라이브러리를 필요로 해. 예를 들어, GTSAM이 필요하니 아래처럼 설치해.
sudo apt-get install libgtsam-dev
CMake로 빌드 준비
mkdir build && cd build
cmake ..
라이브러리 빌드
make -j$(nproc)
sudo make install
만약 소스 코드를 직접 포함하지 않고, 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)
${CMAKE_BINARY_DIR}/install
폴더에 설치해.add_dependencies()
로 프로젝트가 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;
}
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()
로 프로젝트에 연결해줘.hydra.rosinstall
파일에 Kimera-PGMO의 레포지토리가 포함되어 있을 가능성이 높아.rosdep
) 를 통해 Kimera-PGMO가 자동 설치될 수 있어.hydra.rosinstall
파일과 package.xml
파일을 확인하면 Kimera-PGMO의 설치 여부와 방법을 명확히 알 수 있을 거야.vcs import . < hydra/install/hydra.rosinstall
hydra/install/hydra.rosinstall
파일에 정의된 모든 Git 레포지토리를 현재 디렉터리(.
)로 클론해..rosinstall
파일은 다음과 같은 정보를 담고 있어:version
도 정의 가능.rosdep install --from-paths . --ignore-src -r -y
rosdep
명령은 ROS 패키지와 외부 라이브러리를 설치하는 도구야:rosdep install --from-paths . --ignore-src -r -y
rosdep
이 자동으로 설치해 줄 수 있어.cat package.xml
package.xml
파일에 Kimera-PGMO가 의존성으로 정의되어 있다면, rosdep
이 설치를 담당할 거야.vcs import
: 여러 Git 레포지토리를 한 번에 가져와서 로컬에 설정해.rosdep install
: 가져온 패키지들이 필요로 하는 시스템 의존성을 자동으로 설치해.rosdep install --from-paths . --ignore-src -r -y
의 역할rosdep
란?rosdep
은 ROS 패키지의 의존성을 자동으로 설치하는 도구rosdep install --from-paths . --ignore-src -r -y
--from-paths .
: 현재 폴더에서 ROS 패키지를 찾아서, 해당 패키지들이 필요로 하는 의존성을 확인해.--ignore-src
: 소스 코드는 건너뛰고, 필요한 시스템 패키지만 설치해.-r
: 의존성을 재귀적으로 탐색해. 즉, 하위 패키지가 필요로 하는 의존성도 함께 설치해.-y
: 사용자에게 설치 여부를 묻지 않고 자동으로 진행해.rosdep install --from-paths .
:package.xml
파일이 있는 ROS 패키지를 찾음.package.xml
파일에 명시된 의존성을 확인하고 설치함.package.xml
과 CMakeLists.txt
를 포함하는 코드와 의존성 정보의 단위ROS 패키지의 기본 디렉터리 구조는 이렇게 생겼어:
my_ros_package/
│── CMakeLists.txt # CMake 빌드 설정 파일
│── package.xml # 패키지 의존성을 정의하는 파일
│── src/ # 소스 코드 폴더
│── launch/ # launch 파일 폴더
│── include/ # 헤더 파일 폴더
package.xml
: 이 파일에 패키지 의존성과 메타정보가 담겨 있어.package.xml
에 정의해두지:<depend>kimera_pgmo</depend>
CMakeLists.txt
: ROS 프로젝트를 빌드하기 위한 설정 파일이야.rosdep install
이 ROS 패키지를 찾는 방식--from-paths .
의 의미--from-paths .
: 현재 경로(.
)와 그 하위 폴더들에서 ROS 패키지를 찾는다는 의미야.rosdep install
은 package.xml
파일을 기준으로 해당 폴더가 ROS 패키지인지 판단해.package.xml
파일이 있으면, ROS 패키지로 인식하고 의존성 목록을 가져와 설치를 진행해.rosdep install
이 하는 일--from-paths .
: 현재 폴더와 모든 하위 폴더를 탐색.package.xml
파일이 있는지 확인.package.xml
파일에 정의된 의존성을 확인하고, 설치되지 않은 의존성을 APT 패키지로 설치해.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
이 이를 확인하고 설치해줘.