서두(서쪽머ㄹ) : BUILD에 있어서 SYSTEM과 TOOLS는 어떤 차이가 있을까?
그냥 뭐, 쓰니까 쓰던대로 틀에 익숙해져서 쓰는 것보다 왜 그렇게 쓰는지가 궁금했다.
BUILD SYSTEM과 BUILD TOOLS의 차이는 패키지의 대상으로 명확히 할 수 있다.
단일 패키지를 대상으로 하는지, 전체 패키지를 대상으로 하는 지의 차이이다.
빌드 시스템은 단일 패키지를 대상으로, 빌드 툴은 시스템 전체를 대상으로 한다.
그럼 의문점이 생긴다. 굳이 왜? 단일 패키지와 시스템 전체로 나눠야할까?
알다시피 의존성 때문이다.
ROS는 코드의 재사용성 때문에 패키지와 노드 단위로 구성되어 있고,
각 패키지는 다른 패키지와의 상호 호환을 위해 의존성을 갖게 된다.
의존성 레벨에 따라서 지니는 패키지가 역할이 다른데,
상위 레벨일 수록 수십 개의 패키지가 필요로 하는 복합적인 의존성을 지닌다.
현재 내가 사용하고 있는 C++에서는 CMAKE(Cross Platform Make)를 기반으로 하는 catkin과 ament_cmake가 있으며,
Python에서는 Python setuptools를 사용한다고 한다.(파이썬은 안써봐서 모르겠다)
한줄 요약 :
BUILD SYSTEM - 단일 패키지에서 동작
이것만 보면 빌드 시스템만을 통해 ROS의 패키지들을 사용할 수 있을 것 같지만,
ROS 의 구조 특성상 수많은 패키지를 함께 빌드해야 하기에, 단일 패키지의 의존성을 해결하고 토폴로지 순서대로 빌드해야 한다. 이러한 상황에 사용되는 것이 BUILD TOOL이다
빌드 툴은 각 패키지에 기술된 종속성 그래프를 해석하고 토폴로지 순서로 각 패키지에 대한 특정 빌드 시스템을 호출한다.
빌드 툴은 ROS의 개발환경을 설정하고 빌드 시스템을 호출해 빌드된 패키지를 사용하도록 실행 환경을 구성한다.
ROS 빌드 툴로는 rosbuild, catkin_make_isolated, catkin_tools, ament_tools 그리고 ros2에서 많이쓰는 colcon이 있다.
▶ Build system
ROS1에서는 CMAKE를 통해 빌드를 했었다면, ROS2에서는 ament를 통해 빌드하며, 두 가지로 나뉘는 ament에서 많이 쓰는 ament_cmake는 ros1에서쓰던 catkin의 업그레이드 버전으로 CMake의 빌드 파일인 CMakeList.txt에 기술된 빌드 설정 기반으로 빌드를 수행한다.
catkin과 ament의 차이
- 파일 시스템에서 devlel공간을 사용하지 않는 것
- CMAKE_PREFIX_PATH가 아닌 AMENT_PREFIX_PATH처럼 고유 환경설정이 가능
- catkin이 CMake만을 지원했지만, ament는 ament_python으로 CMake를 쓰지 않는 파이썬 패키지도 관리
- ros1에서는 setup.py 파일이 CMake 내 사용자 정의 로직으로 처리됐으나, ROS2에서는 setup.py 파일의 모든 기능을 순수 파이썬 모듈과 동등한 수준으로 개발할 수 있게 됐다.
ROS 1(ROS Fuerte까지): rosbuild(CMake)
ROS 1(ROS Groovy 이후): catkin(CMake)
ROS 2: ament(CMake), Pthon setuptools(Full support)
▶ Build tools
공부하기 전까지 colcon(Collective construction)밖에 없는 줄 알았다.
ROS 2에서 colcon은 패키지 작성, 테스트, 빌디 등에 필수인 작업 흐름을 향상시키는 CLI타입의 명령어 도구이다.
colcon build와 같이 CLI형태 명령어로 터미널 창에 수행하게 되며 다양한 옵션과 함께 사용가능하다.
> catkin_make
ROS 패키지 catkin에서 제공하던 툴로 ROS Fuerte 버전 후 rosbuild의 대체 툴로 오랜 기간 사용된 ROS1의 대표 빌드 툴
> catkin_make_isolated
catkin_make와 마찬가지로 ROS 1 빌드 시스템을 포함하는 ROS 패키지 catkin에서 제공하던 기본 툴
하나의 CMake로 복수 패키지를 빌드 가능하게 했고 격리 빌드를 통해 모든 패키지를 별도 빌드하게 되었다.
해당 기능 변화로 설치용 폴더를 분리, 병합할 수 있게 됐다.
> catkin_tools
catkin_make, catkin_make,_isolated의 독립 사용에 불편함을 해결하고 파이썬으로 구성된 패키지도 관리가능하게한 툴
catkin_make의 부족한 부분을 제공
> ament_tools
ROS 2의 ament_cmake 및 ament_python, 순수 CMake 패키지를 모두 지원하는 툴
> colcon
ROS 1과 ROS 2 모두를 지원하기 위해 통합된 빌드 툴
ROS 2 Bouncy 이후 ROS 2의 기본 빌드 툴로 사용 중
https://veganwithbacon.tistory.com/351
'Language & Framework & GIT > ROS2' 카테고리의 다른 글
[ROS2] Underlay? Overlay? (85) | 2023.10.25 |
---|---|
ROS2 : BUILD SYSTEM & BUILD TOOLS - 2 (29) | 2023.07.13 |
[ROS2] ROS DOCTOR를 통한 시스템 진단 - 1 (42) | 2023.07.10 |
[ROS] ROS Doctor? (28) | 2023.07.07 |
[ROS] CMake Error at CMakeLists.txt: 22 (add_executable): Cannot find source file: (6) | 2023.07.06 |
댓글