빌드 시스템과 빌드 툴
ROS의 경우, 패키지와 노드 단위로 구성되어 있고, 각 패키지는 또 다른 패키지와 호환되기 위해 의존성(Dependency를) 가지게 된다.
일반적으로 드라이버단이나 기본적인 기능만 가진 low-level 패키지 일수록 RCL (ROS Client Libraries)과 의존성을 가지고, High-level 패키지이면 수십 개의 패키지를 필요로 하는 복잡한 의존성을 가진다.
Build System
빌드 시스템은 단일 패키지에서 동작하며, 단일 패키지의 의존성을 해결하고 빌드하여 실행 가능한 파일을 생성한다. ROS1의 빌드 시스템은 CMake를수정한 catkin을 사용했고 빌드 환경은 패키지 폴더의 CMakeLists.txt. 파일에 기술해 사용했다.
ROS2의 경우 새로운 빌드 시스템 ament를 사용하며, 그 중에서도 ament_cmake를 사용하며 이는 catkin의 업그레이드 버전이다. ros1과 비슷하게 빌드 설정 파일 CMakeLists.txt에 기술된 빌드 설정을 기반으로 빌드를 수행한다. 또한 ament는 또한 파이썬 패키지도 관리가 가능하다.
Build Tools
ROS는 수많은 패키지가 함께 빌드되어야 실행할 수 있는 구조이고, 각 패키지별로 서로 다른 빌드 시스템을 호출해야한다. 따라서 종속성에 맞춰 순서대로 빌드하는 것이 중요하며, 이 떄 사용되는 것이 빌드 툴이다. ROS1에서는 catkin_make, catkin_tools를 사용했다면, ROS2에서는 colcon을 사용하고 있다. 이는 ROS2 패키지를 작성하고, 테스트, 빌드까지 해결해주는 CLI 타입의 명령어 도구이다.
패키지 생성하기
ROS2 패키지를 생성하는 방법은 크게 두 가지가 존재한다!
•
직접 패키지 폴더를 만들고 ‘package.xml’, ‘CMakeLists.txt’, ‘setup.py’ 을 포함 시키고 소스 코드 작성
•
ROS2CLI 명령어를 이용하기
패키지를 생성하는 명령어는 다음과 같다.
$ ros2 pkg create [패키지이름] --build-type [빌드 타입] --dependencies [의존하는패키지1] [의존하는패키지n]
# CPP and Python
$ ros2 pkg create my_first_ros_rclcpp_pkg --build-type ament_cmake --dependencies rclcpp std_msgs
$ ros2 pkg create my_first_ros_rclpy_pkg --build-type ament_python --dependencies rclpy std_msgs
Bash
복사
이 때 의존하는 패키지로 std_msgs와 rclcpp/rclpy 를 사용하였는데, 이들은 각각 표준 메시지 패키지, C/C++/python 을 사용하기 위한 클라이언트 라이브러리이다.
이러한 패키지 설정은 package.xml에서 직접 입력해도 된다.
위의 명령어를 통해 패키지를 만들면 아래와 같이 파일 시스템이 구성됨을 알 수 있다.
빌드 하기
ROS2의 특정 패키지 또는 전체 패키지를 빌드할 때에는 colcon build tool을 사용한다, 소스코드가 있는 workspace로 이동하고 명령어를 입력해 전체 빌드한다. 명령어는 아래와 같다.
$ cd ~/robot_ws && colcon build --symlink-install
$ cd ~/robot_ws && colcon build --symlink-install --packages-select [패키지 이름]
Bash
복사
빌드 명령어 옵션
ROS2에서 유용한 빌드 옵션을 소개한다.
•
Multiple workspace ⇒ 복수의 독립된 워크스페이스를 사용할 수 있다. 작업 목적 및 패키지 종류별로 관리할 수 있게 되었다.
•
No non-isolated build ⇒ 모든 패키지를 별도로 빌드한다. 설치용 폴더 분리 가능
•
No devel space ⇒ 패키지를 빌드 한 후 설치해야 패키지를 사용할 수 있다
빌드 시스템에 필요한 부가 기능
•
vcstools : 버전 컨트롤 시스템 툴
•
rosdep : 해당 패키지의 의존성 환경 해결해주는 툴
•
bloom : 바이너리 패키지 배포 및 관리를 위한 툴