Ubuntu ROS 실습(26)

zeusqoi·1일 전

개인공부 - ubuntu

목록 보기
45/52

ROS 2에서는 여러 개의 패키지를 효율적으로 빌드하고 관리하기 위해 다양한 빌드 및 패키지 관리 도구를 사용한다.

이번 실습에서는 colcon을 이용한 ROS 2 패키지 빌드 과정을 확인하고, C++과 Python 패키지를 직접 생성하여 빌드해보았다. 또한 여러 저장소를 관리하는 vcstool, 패키지 의존성을 관리하는 rosdep, ROS 패키지 릴리즈를 위한 bloom의 기본적인 사용 방법도 확인했다.


1. ROS 2의 빌드 시스템

ROS 2에서는 여러 패키지를 하나의 Workspace에서 관리하고 빌드할 수 있다.

이번 실습에서는 다음과 같은 Workspace를 사용했다.

~/robot_ws
├── src
├── build
├── install
└── log

각 디렉터리의 역할은 다음과 같다.

  • src : ROS 2 패키지의 소스 코드가 위치하는 공간
  • build : 패키지를 빌드하는 과정에서 생성되는 파일
  • install : 빌드된 패키지가 설치되는 공간
  • log : 빌드 과정에서 생성되는 로그

2. colcon

colcon은 ROS 2에서 여러 패키지를 빌드하고 관리하기 위한 빌드 도구이다.

먼저 Workspace에서 패키지 목록을 확인했다.

cd ~/robot_ws
colcon list

실행 결과 다음과 같이 teleop_twist_joy 패키지가 확인되었다.

teleop_twist_joy    teleop_twist_joy    (ros.ament_cmake)

이를 통해 colcon이 패키지를 인식하고 있으며 해당 패키지가 ament_cmake 빌드 시스템을 사용한다는 것을 확인할 수 있었다.


3. colcon을 이용한 패키지 빌드

Workspace 전체의 패키지를 빌드하기 위해 다음 명령어를 사용했다.

colcon build

이후 teleop_twist_joy 패키지가 정상적으로 빌드되었다.

Finished <<< teleop_twist_joy

Summary: 1 package finished

또한 --symlink-install 옵션을 사용하여 다시 빌드해보았다.

colcon build --symlink-install

--symlink-install은 개발 과정에서 소스 파일과 설치 공간을 연결하여 수정 사항을 보다 편리하게 반영할 수 있도록 사용하는 옵션이다.


4. ROS 2 패키지 생성

ROS 2에서는 ros2 pkg create 명령어를 이용해 새로운 패키지를 생성할 수 있다.

4-1. C++ 패키지

다음 명령어로 C++ 패키지를 생성했다.

ros2 pkg create my_first_ros_rclcpp_pkg \
--build-type ament_cmake \
--dependencies rclcpp std_msgs

ament_cmake를 빌드 시스템으로 사용하는 C++ 패키지가 생성되었다.

4-2. Python 패키지

Python 패키지는 다음과 같이 생성했다.

ros2 pkg create my_first_ros_rclpy_pkg \
--build-type ament_python \
--dependencies rclpy std_msgs

이 패키지는 ament_python을 빌드 시스템으로 사용한다.

따라서 이번 실습에서는 ROS 2 패키지를 생성할 때 사용하는 빌드 방식이 C++과 Python에서 다를 수 있다는 것을 확인했다.


5. 여러 패키지 빌드

두 패키지를 생성한 후 Workspace 전체를 다시 빌드했다.

cd ~/robot_ws
colcon build --symlink-install

실행 결과:

Starting >>> my_first_ros_rclcpp_pkg
Starting >>> my_first_ros_rclpy_pkg
Starting >>> teleop_twist_joy

Finished <<< teleop_twist_joy
Finished <<< my_first_ros_rclcpp_pkg
Finished <<< my_first_ros_rclpy_pkg

Summary: 3 packages finished

총 3개의 패키지가 정상적으로 빌드된 것을 확인할 수 있었다.

빌드 후에는 다음과 같이 build, install, log 디렉터리가 생성되어 있는 것을 확인했다.

ls
build
install
log
teleop_twist_joy

6. vcstool

vcstool은 여러 Git 저장소를 한 번에 관리할 수 있도록 도와주는 도구이다.

먼저 설치된 버전을 확인했다.

vcs --version

실습 환경에서는 다음과 같이 확인되었다.

vcs 0.3.0

또한 vcstool을 이용하여 ros2.repos 파일에 정의된 여러 ROS 2 저장소를 한 번에 가져왔다.

vcs import src < ros2.repos

실행 결과 ament, rclcpp, rclpy, rqt, rviz 등 다양한 ROS 2 관련 저장소가 src 아래에 clone되는 것을 확인했다.

즉, 여러 저장소를 하나씩 git clone하는 대신 .repos 파일을 이용하여 여러 저장소를 한 번에 관리할 수 있다.


7. rosdep

rosdep은 ROS 패키지가 필요로 하는 의존성을 관리하는 도구이다.

먼저 버전을 확인했다.

rosdep --version

실습 환경에서는 다음과 같이 확인되었다.

0.27.0

이후 의존성 정보를 업데이트했다.

rosdep update

그리고 src 아래에 있는 ROS 패키지들의 의존성을 확인하고 필요한 패키지를 설치했다.

rosdep install --from-paths src --ignore-src -r -y

각 옵션은 다음과 같다.

  • --from-paths src : src 아래의 패키지를 대상으로 함
  • --ignore-src : 소스 공간에 이미 존재하는 패키지는 제외
  • -r : 일부 의존성에 문제가 있어도 계속 진행
  • -y : 설치 여부를 자동으로 승인

이를 통해 ROS 2 패키지를 빌드하기 전에 필요한 의존성을 자동으로 관리할 수 있다는 것을 확인했다.


8. Bloom

Bloom은 ROS 패키지를 배포판에 맞게 릴리즈하기 위한 도구이다.

자료에서는 다음과 같은 명령어를 사용한다.

bloom-release --ros-distro humble --track humble awesome_pkg

각 옵션은 다음과 같이 볼 수 있다.

  • --ros-distro humble : ROS 배포판으로 Humble 지정
  • --track humble : Humble 릴리즈 트랙 지정
  • awesome_pkg : 릴리즈할 패키지

이번 실습에서는 실제 패키지를 릴리즈하지 않고 Bloom 명령어의 형식과 역할을 확인했다.


9. 빌드 시스템과 빌드 툴의 전체 과정

이번 실습을 통해 ROS 2 패키지 개발 과정에서 여러 도구가 서로 다른 역할을 담당한다는 것을 확인했다.

ROS 2 Workspace
       ↓
     src
       ↓
패키지 생성 / 소스 코드 관리
       ↓
     colcon
       ↓
     build
       ↓
    install
       ↓
ROS 2에서 패키지 사용

여기에 여러 저장소를 관리할 때는 vcstool, 패키지 의존성을 관리할 때는 rosdep, ROS 패키지를 릴리즈할 때는 bloom을 사용할 수 있다.


마무리

이번 실습에서는 ROS 2의 빌드 시스템과 관련 도구를 직접 사용해보았다.

colcon을 이용해 Workspace의 패키지를 빌드하고 build, install, log 디렉터리가 생성되는 과정을 확인했다. 또한 ros2 pkg create를 이용해 C++과 Python 패키지를 각각 생성하고 빌드해보았다.

추가로 vcstool을 이용한 여러 Git 저장소 관리, rosdep을 이용한 패키지 의존성 관리, bloom을 이용한 ROS 패키지 릴리즈 명령어의 기본 구조까지 확인했다.

이번 실습을 통해 ROS 2에서 패키지를 개발할 때 단순히 코드를 작성하는 것뿐만 아니라, Workspace와 빌드 시스템, 의존성 및 저장소를 함께 관리하는 과정이 중요하다는 것을 확인할 수 있었다.

0개의 댓글