[ROS2]021: ROS 2의 빌드 시스템과 빌드 툴

maroo·2022년 7월 21일
0

ROS2

목록 보기
11/39

https://cafe.naver.com/openrt/24411

1. ROS 2의 빌드 시스템(build system)과 빌드 툴(build tools)

결론부터 말하자면 빌드 시스템은 단일 패키지를 대상으로 하며, 빌드 툴은 시스템 전체를 대상으로 한다.

빌드 시스템(build system)
-단일 패키지의 의존성을 해결하고 빌드하여 실행 가능한 파일을 생성
-C++: CMake(Cross Platform Make) 기반의 catkin과 ament_cmake
-Python: Python setuptools

ROS는 수많은 패키지가 함께 빌드하여 실행되는 구조기 때문에 각 패키지별로 서로 다른 빌드 시스템을 호출하고, 패키지들의 종속성이 매우 얽혀있는 경우에 이 얽혀있는 의존성 실타래를 풀고 토폴로지 순서대로 빌드해야 한다.
여기에 빌드 툴이 필요하다.

빌드 툴
-각 패키지에 기술되어 있는 종속성 그래프를 해석하고 토폴로지 순서로 각 패키지에 대한 특정 빌드 시스템을 호출
-ROS의 개발 환경 설정, 빌드 시스템 호출, 빌드 된 패키지를 사용하도록 실행 환경 구성

2. 빌드 시스템(build system)

ROS 1
-빌드 시스템: catkin-CMake(Cross Platform Make)만 지원
-빌드 환경: 패키지 폴더의 CMakeLists.txt 파일에 기술
-CMake 사용 이유: ROS 패키지를 멀티 플랫폼에서 빌드하기 위함

ROS 2
-빌드 시스템: ament_cmake(catkin의 업그레이드 버전)

-Python 패키지: ament_python으로 CMake를 사용하지 않고 Python 패키지 관리 가능

3. 빌드 툴(build tools)

-ROS 2의 빌드 도구: ament_tools >> colcon
-colcon (collective construction): ROS 2 패키지를 작성, 테스트, 빌드하는 CLI 타입의 명령어 도구
-colcon 사용 방법: colcon build 와 같은 CLI 형태의 명령어로 터미널창에서 수행

4.패키지 생성

ROS2 패키지 생성 방법은 2가지이다.

(1)직접 패키지 폴더를 만들고 그 안에 파일 시스템에 필수적인 package.xml이나 CMakeLists.txt 또는 setup.py 등을 포함시켜주고 소스 코드를 작성하는 것
(2)ros2cli 명령어 이용

초보는 (2), 숙련자로 갈수록 (1)방법을 주로 사용한다.

먼저 (2)방법대로 패키지를 만들어보자.
먼저 workspace로 이동한다.

$ cd ~/ros2_ws/src/

ROS 2 패키지 생성 명령어는 다음과 같다.
ros2 pkg create [패키지이름] --build-type [빌드 타입] --dependencies [의존하는패키지1][의존하는패키지n]
-'ros2 pkg create': 사용자가 패키지를 작성할 때 ament 빌드 시스템에 꼭 필요한 CMakeLists.txt와 package.xml을 포함한 패키지 폴더를 생성
-빌드 타입: RCL로 C++을 사용한다면 ament_cmake, Python을 사용한다면 ament_python

//Python일 경우
$ ros2 pkg create my_first_ros_rclpy_pkg --build-type ament_python --dependencies rclpy std_msgs
//C++일 경우
$ ros2 pkg create my_first_ros_rclcpp_pkg --build-type ament_cmake --dependencies rclcpp std_msgs

5. 빌드

5.1 빌드 명령어
ROS 2 특정 패키지 또는 전체 패키지를 빌드할 때는 colcon 빌드 툴을 사용한다.
우선 workspace로 이동하고, colcon build 명령어로 전체를 빌드한다.
빌드 옵션
---packages-select: 특정 패키지만 선택해 빌드
---symlink-install: symlink 이용

//전체 패키지 빌드
$ cd ~/ros2_ws && colcon build --symlink-install
//특정 패키지 빌드
$ cd ~/ros2_ws && colcon build --symlink-install --packages-select [패키지 이름]

5.2 빌드 명령어의 옵션
빌드 옵션의 변화 중 가장 좋은 3가지만 꼽아보자면 다음과 같다.
(1)Multiple workspace
ROS 2에서는 복수의 독립된 워크스페이스를 사용할 수 있어서 작업 목적 및 패키지 종류별로 관리할 수 있게 되었다.

(2)No non-isolated build
ROS 2에서는 모든 패키지를 별도로 빌드한다. 이 기능 변화를 통해 설치용 폴더를 분리하거나 병합할 수 있게 되었다.

(3)No devel space
ROS 2에서는 패키지를 빌드한 후 설치해야 패키지를 사용할 수 있다.

6. 빌드 시스템에 필요한 부가 기능

6.1 vcstool (버전 컨트롤 시스템 툴)
vcstool은,
사용자마다 사용하는 코드 리포지토리(github, bitbucket 등)와 버전 관리 시스템(git, bazaar 등)가 다양한데 이를 모두 ROS에서 원활히 사용할 수 있도록 하는 통합적 툴을 말한다.

$ mkdir -p ~/ros2_foxy/src
$ cd ~/ros2_foxy
$ wget https://raw.githubusercontent.com/ros2/ros2/foxy/ros2.repos
$ vcs import src < ros2.repos

위의 명령어들을 통해 vcs타입, 리포지토리 주소, 설치해야 하는 브랜치 등을 명시한 ros2.repos파일을 다운받아 패키지들을 관리할 수 있게 된다.

-wget: 특정 리포지토리의 파일을 내려받는 명령어
-vcs: vcstool의 실행 명령어

6.2 rosdep(의존성 관리 툴)
ROS에서는 의존성 자체를 해결해 주기 위한 방안으로 rosdep를 쓴다.
rosdep툴은 package.xml파일에 기술된 dependency정보를 참조해 의존성 패키지를 설치해 준다.

$ sudo rosdep init
$ rosdep update
$ rosdep install --from-paths src --ignore-src --rosdistro foxy -y --skip-keys "console_bridge fastcdr fastrtps rti-connext-dds-5.3.1 urdfdom_headers"

위의 명령어들은 ROS 2 Foxy를 소스코드로 설치하는 명령어이다.

6.3 bloom(바이너리 패키지 관리 툴)
개발한 패키지를 배포하기 위해서는 쉽게 설치, 사용할 수 있게 바이너리 패키지로 만들어 배포하는 것이 좋다.
bloom은 이 바이너리 패키지 배포 및 관리를 위한 툴이다.

profile
할수이따 ~

1개의 댓글

comment-user-thumbnail
2024년 3월 9일

구독 꾸욱~ 좋은 글 감사합니다.

답글 달기