본문 바로가기
Language & Framework & GIT/ROS2

ROS2 : BUILD SYSTEM & BUILD TOOLS - 2

by veganwithbacon 2023. 7. 13.
반응형

🔔패키지 생성

- ROS 2 패키지 생성 방법에는 두 가지가 있다.

1. 직접 패키지 폴더를 만들어 그 안에 필수적인 파일 시스템에 필수적인 package.xml이나 CMakeLists.txt나 setup.py 등을 포함시켜 소스코드를 작성

2. ros2cli 명령어를 이용하는 것

 

보통은 주로 사용하는 기능을 중심으로 기본 패키지를 복사, 붙여넣기로 패키지를 만든 후 이름과 몇 가지 설정만 변경해 사용하는 방법이 편하다. 초반에는 익숙하지 않기에 ros2cli 명령어를 통한 작업이 더 편할 수도 있다.

 

ros2 pkg create [패키지이름] --build-type[빌드 타입] --dependencies [의존패키지1] [의존패키지n]

 

빌드 타입에서 RCL로 C++을 사용한다면  ament_cmake를 설정하고, 파이썬을 사용하면 ament_python을 입력한다.

GUI 프로그램 작성이 필요하면 파이썬을 쓰더라도, rqt plugin 계열을 사용해야 하기 때문에 ament_cmake를 입력하면 된다. 

찾아서 적으니까 뭔 말을 이렇게 어렵게 했나 싶다;

그냥 GUI 프로그램 필요하면 C++이나 파이썬이나 ament_cmake 입력하자

$ ros2 pkg create test_pkg_rclcpp --build-type ament_cmake
$ ros2 pkg create test_pkg_rclpy --build-type ament_python

 

ros2 pkg create

 : 사용자가 패키지 작성 시 ament  빌드에 필요한 CMakeLists.txt와 package.xml을 포함한 패키지 폴더를 생성한다

 

CTRL + ALT + T키를 통해 새로운 터미널을 열 수 있다.(여지껏 다른 프로그램 다운받아서 이 키가 새 터미널이 열리는줄..)

ROS 패키지 이름은 모두 소문자를 사용하며 공백이 있으면 안된다.

밑줄을 통해 각 단어를 잇는 것을 스타일 규칙으로 삼는다.

 

막론하고 

$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 rclpy std_msgs

1번이 c++, 2번이 python용 이다.

 


패키지 빌드

ROS2에서는 특정 패키지/전체 패키지를 빌드할 때는 colcon 빌드 툴을 사용한다.

코드가 있는 workspace로 이동하고 colocn build 명령어를 통해 전체를 빌드하게 된다.

 

빌드 옵션을 추가해 사용하는 게 일반적지만 특정 패키지만을 선택해 빌드하고자 하면

--packages-select나 --packages-up-to 옵션을 이용해, symlink를 이용하려면 --symlink-install 옵션을 붙여주면 된다.

 

 

✅자주 쓰는 빌드 명령어

1. 전체 패키지 빌드시 사용

$ cd ~/robot_Ws && colcon build --symlink-install

2.  --packages-select옵션을 이용해 명령어 마지막에 특정패키지명을 기재해 해당 패키지만 빌드 시 사용

$ cd ~/robot_ws && colcon build --symlink-install --packages-select [패키지 이름]

3. --packages-up-to 옵션을 이용해 특정 패키지의 의존성 패키지들까지도 함께 빌드할 때 사용

$ cd ~/robot_ws && colcon build --symlink-install --packages-up-to [패키지 이름]

 


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

- vcstool : ROS의 버전 컨트롤 시스템 툴

- rosdep : 의존성 관리 툴

- bloom : 바이너리 패키지 관리 툴

 

1️⃣ vcstool(버전 컨트롤 시스템 툴)

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

wget : 특정 리포지터리의 파일을 내려받음

vcs : Version Control System의 약자로 ROS 커뮤니티에서 사용하는 vcstool의 실행 명령어

 

ROS1에서는 rosws가 포함된 wstool을 이용하다가 ROS2에서는 vcstool을 사용한다.

vcstool은 여러 리포지터리 작업을 보다 쉽게 관리할 수 있도록 설계된 버전 관리시스템(vcs) 툴이다.

 

2️⃣ rosdep(의존성 관리 툴)

앞서 언급한 빌드 툴들은 각 패키지의 의존성을 고려한 빌드는 해결하지만, 의존성 자체를 해결하지는 못한다.

때문에 ROS에서 사용하는 rosdep 툴은 package.xml에 기술된 의존성 정보를 가지고 의존성 패키지들을 설치해 주는 역할을 한다.

$ 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"

rosdep은 예시로 /ros2_foxy/src에 설치된 패키지들의 의존성을 보고 패키지들을 설치하거나 특재어 패키지는 의존성 문제를 무시한다. 각 패키지마다 package.xml의 의존성 옵션을 보고 직접 의존성 패키지들을 설치할 수도 있으나 간단하게 rosdep툴을 통해 해당 패키지의 의존성 환경을 해결하는 방법이 더 수월하다.

 

3️⃣ bloom(바이너리 패키지 관리 툴)

ROS에서는 바이너리 패키지 배포 및 관리를 위한 툴을 bloom이라고 한다.

해당 툴을 사용 시 바이너리 패키지를 관리하기 위한 메타 데이터를 생성하며 dpkg-buildpackage같은 플랫폼 종속 도구가 바이너리 패키지를 빌드하는데 사용된다. 

 

1️⃣2️⃣번은 개발 과정에서 많이 사용되나 bloom은 개발이 모두 끝난 후 배포하고 유지 관리할 때 사용한다.

 

 

끄읕~

반응형

댓글