Engineering/ROS

ROS2 빌드, 파일 시스템

luckydipper 2025. 1. 8. 15:29

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) [각주:2], catkin_make_isolated()[각주:3], catkin_tools(ROS1) [각주:4], ament_tools(ament_cmake + ament_python), colcon이 대표적이다.

CMake와 ament는 버드나무의 화수(꽃의 모음)이다.

버드나무 화수

3. 특징

  1. multiple workspace
    즉, 사용자 정의 워크스페이스를 여러 만들 수 있다.
  2. No non-isolated build
    즉, 모든 패키지를 별도로 독립된 빌드 가능
  3. No devel space
    즉, catkin_make_isolated dev에 직접 설치하지 않고
    source ~/usr_workspace/install/*.sh
    를 통해 install 한다.
    --symlink-install
    명령어를 통해 한번에 dev에 넣을 수도 있다.
    ROS1 catkin일 때에는 install 없이 가능 했음.
  4. --pacakage-select를 통해서 특정 패키지만 빌드 가능

4. 부가 빌드 기능

4.1 vcstool

- git bitbucket등등 다양한 버전 관리 tool들을 
.repos 파일로 import 한다. 
``` 
wget https://githubusercontent.com/ros2/ros2/foxy/ros2.repos [각주:5]
vcs import src < ros2.repos
```

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

  1. python만 사용한다면 setup.py를 쓰자. 요즘에는 pyproject.toml로 쓴다고 들었는데? [본문으로]
  2. ROS1에서 오랫동안 써오던 빌드 툴. [본문으로]
  3. 하나의 cmake로 복수의 패키지 빌드해서, 설치용 폴더를 분리하거나 병합 가능 [본문으로]
  4. catkin_make에 python으로 된 패키지도 관리 가능하도록 만든것  [본문으로]
  5. 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