패키지 만들기

목표: CMake 또는 Python을 사용하여 새로운 패키지를 만들고 해당 실행 파일을 실행합니다.

배경 지식

1 ROS 2 패키지란 무엇인가요?

패키지는 ROS 2 코드의 구성 단위입니다. 코드를 설치하거나 다른 사람과 공유하려면 패키지에 코드를 구성해야 합니다. 패키지를 사용하면 ROS 2 작업을 배포하고 다른 사람이 쉽게 빌드하고 사용할 수 있게 됩니다.

ROS 2의 패키지 생성은 빌드 시스템으로 ament를 사용하고 빌드 도구로 colcon을 사용합니다. 공식으로 지원되는 CMake 또는 Python을 사용하여 패키지를 만들 수 있으며 다른 빌드 유형도 존재합니다.

2 ROS 2 패키지는 무엇으로 이루어져 있나요?

ROS 2 Python 및 CMake 패키지는 각각 자체 최소 요구 사항을 갖습니다.

  • 패키지 내의 코드를 빌드하는 방법을 설명하는 CMakeLists.txt 파일

  • 패키지의 공개 헤더를 포함하는 include/<패키지 이름> 디렉터리

  • 패키지에 대한 메타 정보를 포함하는 package.xml 파일

  • 패키지의 소스 코드를 포함하는 src 디렉터리

가장 간단한 패키지는 다음과 같은 파일 구조를 가질 수 있습니다.

my_package/
     CMakeLists.txt
     include/my_package/
     package.xml
     src/

3 작업 공간의 패키지

단일 작업 공간에 여러 패키지를 포함할 수 있으며 각 패키지는 자체 폴더에 있어야 합니다. 한 작업 공간에 다양한 빌드 유형의 패키지 (CMake, Python 등)를 가질 수 있습니다. 중첩된 패키지는 사용할 수 없습니다.

최상위 디렉토리를 “깔끔하게” 유지하기 위한 최선의 방법은 작업 공간 내에 src 폴더를 가지고 패키지를 만드는 것입니다.

간단한 작업 공간은 다음과 같을 수 있습니다.

workspace_folder/
    src/
      cpp_package_1/
          CMakeLists.txt
          include/cpp_package_1/
          package.xml
          src/

      py_package_1/
          package.xml
          resource/py_package_1
          setup.cfg
          setup.py
          py_package_1/
      ...
      cpp_package_n/
          CMakeLists.txt
          include/cpp_package_n/
          package.xml
          src/

전제 조건

이전 튜토리얼 의 지침을 따르면 ROS 2 작업 공간을 보유하게 됩니다. 이 작업 공간에서 패키지를 만들 것입니다.

작업

1 패키지 만들기

먼저, ROS 2 설치 를 소스화하세요.

새 패키지를 위해 이전 튜토리얼 에서 생성한 작업 공간인 ros2_ws 를 사용합니다.

패키지 생성 명령을 실행하기 전에 src 폴더에 있는지 확인하세요.

cd ~/ros2_ws/src

ROS 2에서 새 패키지를 만드는 명령 구문은 다음과 같습니다.

ros2 pkg create --build-type ament_cmake --license Apache-2.0 <package_name>

이 튜토리얼에서는 --node-name 옵션을 사용하여 패키지 내에서 간단한 “Hello World” 유형의 실행 파일을 만듭니다.

터미널에서 다음 명령을 입력하세요.

ros2 pkg create --build-type ament_cmake --license Apache-2.0 --node-name my_node my_package

이제 작업 공간의 src 디렉터리에 my_package 라는 새 폴더가 생겼을 것입니다.

명령을 실행한 후 터미널에 다음 메시지가 표시됩니다.

going to create a new package
package name: my_package
destination directory: /home/user/ros2_ws/src
package format: 3
version: 0.0.0
description: TODO: Package description
maintainer: ['<name> <email>']
licenses: ['TODO: License declaration']
build type: ament_cmake
dependencies: []
node_name: my_node
creating folder ./my_package
creating ./my_package/package.xml
creating source and include folder
creating folder ./my_package/src
creating folder ./my_package/include/my_package
creating ./my_package/CMakeLists.txt
creating ./my_package/src/my_node.cpp

새 패키지의 자동으로 생성된 파일을 확인할 수 있습니다.

2 패키지 빌드

패키지를 작업 공간에 넣는 것은 colcon build 를 사용하여 한 번에 여러 패키지를 빌드할 수 있기 때문에 특히 가치가 있습니다. 그렇지 않으면 각 패키지를 개별적으로 빌드해야 합니다.

작업 공간의 루트로 이동하세요.

cd ~/ros2_ws

이제 패키지를 빌드할 수 있습니다.

colcon build

마지막 튜토리얼에서 ros2_wsros_tutorials 패키지가 있는 것을 기억하셨을 것입니다. colcon build 를 실행하면 turtlesim 패키지도 빌드된 것을 볼 수 있을 것입니다. 작업 공간에 패키지가 몇 개 없을 때는 이러한 상황이 괜찮지만 패키지가 많을 때는 colcon build 가 오래 걸릴 수 있습니다.

다음에 my_package 패키지만 빌드하려면 다음 명령을 실행할 수 있습니다.

colcon build --packages-select my_package

3 설정 파일 소스화

새 패키지와 실행 파일을 사용하려면 먼저 새 터미널을 열고 주요 ROS 2 설치를 소스화하세요.

그런 다음 ros2_ws 디렉터리 내에서 다음 명령을 실행하여 작업 공간을 소스화합니다.

source install/local_setup.bash

작업 공간이 경로에 추가되었으므로 새 패키지의 실행 파일을 사용할 수 있게 됩니다.

4 패키지 사용

패키지 생성 중에 --node-name 인수를 사용하여 만든 실행 파일을 실행하려면 다음 명령을 입력하세요.

ros2 run my_package my_node

이 명령은 터미널에 메시지를 반환합니다.

hello world my_package package

5 패키지 내용 검사

ros2_ws/src/my_package 내에서 ros2 pkg create 가 자동으로 생성한 파일과 폴더를 볼 수 있습니다.

CMakeLists.txt  include  package.xml  src

my_node.cppsrc 디렉터리 내에 있습니다. 이곳은 향후 사용자 정의 C++ 노드를 모두 넣을 위치입니다.

6 package.xml 사용자 정의

패키지 생성 후 메시지에서 descriptionlicense 필드에 TODO 노트가 포함되어 있는지도 모릅니다. 이는 패키지 설명과 라이선스 선언이 자동으로 설정되지 않지만 패키지를 배포하려면 필요한 정보입니다. maintainer 필드도 수동으로 작성해야 할 수 있습니다.

ros2_ws/src/my_package 에서 선호하는 텍스트 편집기로 package.xml 을 엽니다.

<?xml version="1.0"?>
<?xml-model
   href="http://download.ros.org/schema/package_format3.xsd"
   schematypens="http://www.w3.org/2001/XMLSchema"?>
<package format="3">
 <name>my_package</name>
 <version>0.0.0</version>
 <description>TODO: Package description</description>
 <maintainer email="user@todo.todo">user</maintainer>
 <license>TODO: License declaration</license>

 <buildtool_depend>ament_cmake</buildtool_depend>

 <test_depend>ament_lint_auto</test_depend>
 <test_depend>ament_lint_common</test_depend>

 <export>
   <build_type>ament_cmake</build_type>
 </export>
</package>

이메일 주소와 함께 maintainer 행에 이름을 입력하고 패키지를 요약하는 데 사용할 수 있는 description 행을 편집하세요.

<description>Beginner client libraries tutorials practice package</description>

그런 다음 license 행을 업데이트하세요. 오픈 소스 라이선스에 대해 더 자세히 알아보려면 여기 를 읽어보세요. 이 패키지는 연습용이므로 어떤 라이선스를 사용해도 안전합니다. 우리는 Apache License 2.0 을 사용할 것입니다.

<license>Apache License 2.0</license>

작업이 끝나면 반드시 저장하세요.

라이선스 태그 아래에는 _depend 로 끝나는 몇 가지 태그 이름이 있습니다. 여기에는 colcon이 검색할 패키지에 대한 package.xml 의 종속성이 나열됩니다. my_package 는 간단하며 종속성이 없지만, 이 공간이 향후 튜토리얼에서 사용될 수 있음을 알게될 것입니다.

이제 모든 작업이 완료되었습니다!

Summary

패키지를 만들어 코드를 구성하고 다른 사람들이 쉽게 사용할 수 있도록 만들었습니다.

패키지는 필요한 파일로 자동으로 채워져 colcon 을 사용하여 빌드하여 로컬 환경에서 해당 실행 파일을 사용할 수 있습니다.

다음 단계

다음으로 패키지에 의미 있는 내용을 추가해보겠습니다. 간단한 publisher/subscriber 시스템을 시작하며 이를 C++ 또는 Python 중 하나로 작성할 수 있습니다.