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들은 각각의 최소한의 필요 조건들이 존재한다. ( 아래 참고 )


- 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



- 3. package를 workspace안에 넣은 것은 매우 유용하다.
- 왜냐하면 workspace의 root에 colcon build를 한번만 입력하면, 많은 package들을 build하는것이 가능하다.
그렇지 않으면 각각의 모든 package에게 모두 build를 해야한다. - ( 아마 앞의 튜토리얼에서 사용한 turtlesim package도 같이 빌드 되었을 것이다. 약간의 조금의 package가 더 빌드 되는것을 괜찮겠지만, 많은 package들이 colcon build를 통하여 빌드되는 것은 오래걸릴것이다. 그럴때는 아래의 명령어 형식으로 입력하자. )
- 왜냐하면 workspace의 root에 colcon build를 한번만 입력하면, 많은 package들을 build하는것이 가능하다.
# 해당 코드는 모두 빌드하는 것이며...
colcon build
# 해당 코드는 특정한 패키지 하나만 빌드하는 것이다.
colcon build --packages-select my_package
- 4. setup file를 source하기
- 새로운 package를 사용하고 실행하기위해서, 우선 새로운 터미널을 열어주자. 그리고 main ROS2를 소스하자.
- row2_ws의 내부에서 아래의 명령어를 입력해서 workspace를 소스하자.
- 이제 이렇게 경로를 추가되었으니, 새로운 package의 실행 파일을 사용할수있다.
- 새로운 package를 사용하고 실행하기위해서, 우선 새로운 터미널을 열어주자. 그리고 main ROS2를 소스하자.
source install/local_setup.bash
- 5. package생성중 --node-name인자를 사용해서 만든 package이름을 가지고 아래처럼 입력해보자.
ros2 run my_package my_node


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


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

summary
- 코드를 조직하고 다른 사람들이 쉽게 사용할 수 있게 패키지를 생성하였다.
- 패키지는 필요한 파일들로 자동으로 채워졌으며, 이후에 colcon을 사용해서 빌드하요 local에서 실행파일을 사용할수있을것이다.
'ROS 2' 카테고리의 다른 글
| ROS 2 Tutorials : Writing a simple service and client (Python) (0) | 2025.01.15 |
|---|---|
| ROS 2 Tutorials : Writing a simple publisher and subscriber ( python ) (0) | 2025.01.14 |
| ROS 2 Tutorials : Creating a workspace (0) | 2025.01.13 |
| ROS 2 Tutorials : Using colcon to build packages (0) | 2025.01.13 |
| ROS 2 Tutorials : Recording and playing back data (0) | 2025.01.12 |