ROS 2

ROS 2 Tutorials : Creating a package

정지홍 2025. 1. 13. 18:05

Creating a package — ROS 2 Documentation: Jazzy documentation

 

Creating a package — ROS 2 Documentation: Jazzy documentation

Inside ros2_ws/src/my_package, you will see the files and folders that ros2 pkg create automatically generated: CMakePython CMakeLists.txt include package.xml src my_node.cpp is inside the src directory. This is where all your custom C++ nodes will go in t

docs.ros.org

 

Goal

  • CMake or python을 이용하여 package를 만들고 이를 실행해보자.

 

Background

  • package는 ROS 2 코드의 조직 단위이다.
  • 코드 설치 or 다른 사람과 공유하고 싶다면, package로 정리해야한다.
  • package를 사용하면 ROS 2 작업물 배포 및 다른 사람들이 쉽게 빌드하고 사용할 수 있다.
  • ROS 2 에서 package 생성은 build system으로 ament를, build 도구로 colcon을 사용한다.
  • package는 CMake or python을 사용해서 생성하는 것이 가능하며, 이 두가지가 공식적으로 지원된다. 하지만 다른 빌드 유형도 존재한다.
  • ROS 2 파이썬과 CMake package들은 각각의 최소한의 필요 조건들이 존재한다. ( 아래 참고 )

CMake에서 필요한 파일들과 구조
이건 파이썬

  • single workspace는 원하는 만큼 많은 package들을 담을수있으며, 각각의 package들은 그들만의 folder가 존재한다.
  • 하나의 workspace 내에서 서로 다른 빌드 유형(CMake, Python 등)의 패키지를 함께 사용할 수 있다. 하지만 중첩된 패키지는 허용하지 않는다.
  • 가장 좋은건 workspace의 src 폴더에에서 나의 packages를 create하는게 제일 좋다.
    • 이는 상위 workspace를 clean하게 유지하기 위함이다.

이러한 구조로.....

 

 

Tasks

  • 1. 우선 다음과 같이 세팅한다.

  • 2. 다음의 명령어로 ROS 2의 새로운 package를 생성한다.
    • 이번 튜토리얼에서는, --node-name , --license ,  --node-name 옵션을 사용해서 simple Hello World type의 실행가능한 package를 만들었다. 그리고 --license는 패키지의 라이센스 정보를 선언하는데 사용한다.
# CMake
ros2 pkg create --build-type ament_cmake --license Apache-2.0 <package_name>
ros2 pkg create --build-type ament_cmake --license Apache-2.0 --node-name my_node my_package

# python
ros2 pkg create --build-type ament_python --license Apache-2.0 <package_name>
ros2 pkg create --build-type ament_python --license Apache-2.0 --node-name my_node my_package

다음과 같이 출력된다.
CMake의 경우 다음과 같이 출력될것임.
다음과 같이 잘 생성 되었음을 확인할 수 있다.

  • 3. package를 workspace안에 넣은 것은 매우 유용하다.
    • 왜냐하면 workspace의 root에 colcon build를 한번만 입력하면, 많은 package들을 build하는것이 가능하다.
      그렇지 않으면 각각의 모든 package에게 모두 build를 해야한다.
    • ( 아마 앞의 튜토리얼에서 사용한 turtlesim package도 같이 빌드 되었을 것이다. 약간의 조금의 package가 더 빌드 되는것을 괜찮겠지만, 많은 package들이 colcon build를 통하여 빌드되는 것은 오래걸릴것이다. 그럴때는 아래의 명령어 형식으로 입력하자. )
# 해당 코드는 모두 빌드하는 것이며...
colcon build

# 해당 코드는 특정한 패키지 하나만 빌드하는 것이다.
colcon build --packages-select my_package
  • 4. setup file를 source하기
    • 새로운 package를 사용하고 실행하기위해서, 우선 새로운 터미널을 열어주자. 그리고 main ROS2를 소스하자.
      • row2_ws의 내부에서 아래의 명령어를 입력해서 workspace를 소스하자.
      • 이제 이렇게 경로를 추가되었으니, 새로운 package의 실행 파일을 사용할수있다.
source install/local_setup.bash
  • 5. package생성중 --node-name인자를 사용해서 만든 package이름을 가지고 아래처럼 입력해보자.
ros2 run my_package my_node

CMake는 이렇게 나올것이다.

  • 6. package 내용 확인하기
    • ros2_ws/src/my_package안에는 ros pkg create 명령어로 자도적으로 생성된 파일과 폴더들이 존재한다.

파이썬의 경우
CMake의 경우

  • 7. package.xml파일 수정하기
    • package를 생성하고 반환된 메시지에서 description과 license필드에 TODO 노트가 포함된것을 보았을 것이다.
      이는 package설명과 라이센스 선언이 자동으로 설정된것은 아니지만, package를 배포하려면 이 field들이 필요하기 때문이다. 그래서 maintainer필드들을 채워야 할 수 도 있다.
    • maintainer 라인에 자동으로 채워지지 않았다면, 나의 이름과 이메일을 입력하고, description라인을 수정해서 package를 요약하는 내용을 추가해주자.
    • 다음에 license라인을 업데이트하자
    • license의 아래에는 _depend로 끝나는 태그들이 있으며, 이는 패키지의 다른 패키지 의존성을 나열하는 곳으로, colcon이 검색할 수 있게 한다.
      • my_package는 간단한 패키지라서 의존성이 없지만, 앞으로의 튜토리얼에서는 이 공간을 많이 사용할 것이다.

 

 

summary

  • 코드를 조직하고 다른 사람들이 쉽게 사용할 수 있게 패키지를 생성하였다.
  • 패키지는 필요한 파일들로 자동으로 채워졌으며, 이후에 colcon을 사용해서 빌드하요 local에서 실행파일을 사용할수있을것이다.