[ROS2] (13)-ROS2 패키지 만들기

패키지란

패키지는 ROS2 코드를 포함하고 있는 용기라고 생각할 수 있다. 패키지를 만들면 ROS2 작업물을 쉽게 배포할 수 있고, 다른 사람들이 쉽게 빌드해서 사용할 수 있다. ROS2에서는 패키지를 만들 때, ament를 빌드 시스템으로 사용하고 colcon을 빌드 툴로 사용한다. CMake 또는 Python을 이용해서 패키지를 만들 수 있다.

CMake 또는 Python 패키지는 최소한으로 포함해고 있는 파일이 있다.

CMake

  • package.xml: 패키지의 meta information을 포함하는 파일
  • CMakeLists.txt: 패키지 안에서 코드를 어떻게 빌드할지를 설명하는 파일

Python

  • package.xml: 패키지의 meta information을 포함하는 파일
  • setup.py: 패키지 설치방법을 설명하는 파일
  • setup.cfg: 패키지가 실행파일을 갖고 있을 때 필요한 파일
  • /<package_name>: 패키지와 이름이 같은 폴더이며, __init__.py 파일을 포함

하나의 workspace는 여러 개, 그리고 다른 빌드 타입의 패키지를 포함할 수도 있다. 일반적으로 workspace의 src 폴더 내에 패키지를 만들면, workspace 폴더를 깔끔하게 유지할 수 있다.

workspace 예시이다.

workspace_folder/
    src/
      package_1/
          CMakeLists.txt
          package.xml

      package_2/
          setup.py
          package.xml
          resource/package_2
      ...
      package_n/
          CMakeLists.txt
          package.xml

패키지 만들기

이전 포스팅에서 만든 dev_ws 폴더 내에 새로운 패키지를 만들어보자. 먼저, src 폴더로 이동한 뒤, CMake와 Python을 각각 이용해서 패키지를 만든다. 패키지를 만드는 명령어는 다음과 같다.

# Cmake
$ ros2 pkg create --build-type ament_cmake <package_name>
# Python
$ ros2 pkg create --build-type ament_python <package_name>
$ cd dev_ws/src
$ ros2 pkg create --build-type ament_cmake --node-name my_node my_package_cmake
$ ros2 pkg create --build-type ament_python --node-name my_node my_package_python

여기서는 --node-name argument를 이용해서 노드파일(실행파일)도 만들어주었다.

패키지 빌드하기

workspace에 패키지를 만들게 되면 여러 개의 패키지를 colcon build 명령어를 통해 한 번에 빌드할 수 있는 장점이 있다. workspace 내의 특정 패키지만 빌드하고 싶을 때는 colcon build --package-select <package_name> 을 사용한다. 여기서는 패키지의 수가 몇 개 없기 때문에 아래와 같이 전체를 빌드해보자.

$ cd ~/dev_ws
$ colcon build

이렇게 빌드한 패키지와 실행파일을 실행하기 위해서는 dev_ws workspace를 source 해주어야 한다. 새로운 터미널 창에서 아래의 명령어를 입력하자.

$ cd ~/dev_ws
$ source install/setup.bash

이제 아래 명령어를 통해 새로 만든 노드(실행파일)을 실행해보자.

$ ros2 run my_package_cmake my_node
$ ros2 run my_package_python my_node

각각 아래와 같이 출력한다.

hello world my_package package
Hi from my_package.

package.xml 파일에서 버전, 설명, 라이센스 등에 대한 정보를 입력할 수 있다. Python으로 빌드한 경우 setup.py 파일 내에도 유사하게 설명, 라이센스 등에 대한 정보를 입력할 수 있다. 이 경우에는 package.xml 파일 내의 정보와 일치시킬 필요가 있다.

댓글남기기