[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
파일 내의 정보와 일치시킬 필요가 있다.
댓글남기기