1. Package
Package = Node들의 집합(src) + 실행 방법(Launch file)
src폴더 아래에 두 가지 파일이 필수적으로 들어간다.
- package.xml: 저자 + 패키지 설명
- CMakeLists.txt or setup.py 1
위의 파일을 수동으로 만들거나 아래 명령어로 만들 수 있다.ros2 pkg create [pkg_name] --build-type [ament_cmake ament_python] --dependencies [rclcpp rclpy std_msgs ...]
2. Build System vs Build tools
Build System = 단일 패키지를 빌드하는 것.
Build Tools = 복수의 패키지를 빌드 하는 것. 각 패키지에 기술되어있는 종속 graph의 토폴로지 순서대로 빌드 시스템 호출.
빌드 시스템에는 rosbuild, catkin(ROS1), ament_cmake, python setuptools가 있다.
빌드 툴에는 catkin_make(ROS1) , catkin_make_isolated() 2, catkin_tools(ROS1) 3, ament_tools(ament_cmake + ament_python), colcon이 대표적이다. 4
CMake와 ament는 버드나무의 화수(꽃의 모음)이다.
버드나무 | 화수 |
---|---|
3. 특징
- multiple workspace
즉, 사용자 정의 워크스페이스를 여러 만들 수 있다. - No non-isolated build
즉, 모든 패키지를 별도로 독립된 빌드 가능 - No devel space
즉, catkin_make_isolated dev에 직접 설치하지 않고source ~/usr_workspace/install/*.sh
를 통해 install 한다.--symlink-install
명령어를 통해 한번에 dev에 넣을 수도 있다.
ROS1 catkin일 때에는 install 없이 가능 했음. - --pacakage-select를 통해서 특정 패키지만 빌드 가능
4. 부가 빌드 기능
4.1 vcstool
- git bitbucket등등 다양한 버전 관리 tool들을
.repos 파일로 import 한다.
```
wget https://githubusercontent.com/ros2/ros2/foxy/ros2.repos
vcs import src < ros2.repos
``` 5
4.2 rosdep
- 사용자가 package.xml에 depend를 읽고 자동으로 설치해준다.
sudo rosdep init
sudo rosdep update
4.3 bloom
- binary package 관리 tool이다.
- 유지보수 배포하는데 쓰인다.
5. 파일 시스템
기본 설치 폴더 -> install location: opt/ros/VERSION_NAME/
사용자 작업 폴더 -> 설정가능 workspace
기본설치 폴더에는 apt로 설치된 파일들이 binary로 저장된다.
CMakeLists와 setup.py, setup.cfg는 build system 설정에 관한 문서
CHANGLOG.rst: 변경사항 버전별로 공개하는 파일. 선택임. 필수는 아님
LICENSE: 라이센스 파일
plugin.xml: RQT 설정파일
ref.
https://discourse.cmake.org/t/what-is-cmake-build-system-or-build-tool/4219
https://asa9874.tistory.com/297
- python만 사용한다면 setup.py를 쓰자. 요즘에는 pyproject.toml로 쓴다고 들었는데? [본문으로]
- ROS1에서 오랫동안 써오던 빌드 툴. [본문으로]
- 하나의 cmake로 복수의 패키지 빌드해서, 설치용 폴더를 분리하거나 병합 가능 [본문으로]
- catkin_make에 python으로 된 패키지도 관리 가능하도록 만든것 [본문으로]
- githubusercontent.com domain으로 .https://raw.githubusercontent.com/{레포지터리사용자이름}/{레포지터리이름}/{branch}/{file_path} [본문으로]
'Engineering > ROS' 카테고리의 다른 글
ROS2 Node Interface, Parameter, Namespace (0) | 2025.01.14 |
---|---|
ROS2 표준 시간, 좌표계 (0) | 2025.01.12 |
ROS2 참고 사이트 (0) | 2025.01.10 |
Docker로 ROS를 사용하면 안 되는 이유 (0) | 2025.01.06 |
ROS2, DDS와 QoS (0) | 2025.01.04 |