Linear Algebra
🏏

022 패키지 파일 (환경 설정, 빌드 설정)

앞서 패키지를 만들고 빌드하는 과정에서 볼 수 있었던 패키지 파일들을 좀 더 자세히 살펴보는 시간을 갖겠다. 총 7가지이며 각각에 대해서 상세히 살펴보도록 하겠다.

패키지 설정 파일 (package.xml)

지난 번 포스팅에서 명령어를 통해 만든 ‘my_first_ros_rclcpp_pkg’ 패키지에 기본으로 생성되는 파일을 살펴본다.
<?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_first_ros_rclcpp_pkg</name> <version>0.0.0</version> <description>TODO: Package description</description> <maintainer email="pyo@robotis.com">pyo</maintainer> <license>TODO: License declaration</license> <buildtool_depend>ament_cmake</buildtool_depend> <depend>rclcpp</depend> <depend>std_msgs</depend> <test_depend>ament_lint_auto</test_depend> <test_depend>ament_lint_common</test_depend> <export> <build_type>ament_cmake</build_type> </export> </package>
XML
복사
<?xml> 문서 문법을 정의하는 문구로 아래의 내용은 xml 버전 1.0을 따르고 있다는 것을 알린다.
<package> 이 구문부터 맨 끝의 </package>까지가 ROS 패키지 설정 부분이다. 세부 사항으로 format="3" 이라고 패키지 설정 파일의 버전을 기재한다. ROS 2는 3를 사용하면 된다.
<name> 패키지의 이름이다. 패키지를 생성할 때 입력한 패키지 이름이 사용된다. 다른 옵션도 마찬가지지만 이는 사용자가 원할 때 언제든지 변경할 수 있다.
<version> 패키지의 버전이다. 자유롭게 지정할 수 있는데 나중에 패키지를 바이너리 패키지로 공개한다면 버전 관리에 사용되므로 신중할 필요가 있다.
<description> 패키지의 간단한 설명이다. 보통 2~3 문장으로 기술한다.
<maintainer> 패키지 관리자의 이름과 이메일 주소를 기재한다.
<license> 라이선스를 기재한다. Apache 2.0, BSD, MIT, Boost Software License, GPLv2, GPLv3, LGPLv2.1, LGPLv3, Proprietary 등을 기재하면 된다.
<url> 패키지를 설명하는 웹 페이지 또는 버그 관리, 소스 코드 저장소 등의 주소를 기재한다. 이 종류에 따라 type에 website, bugtracker, repository를 대입하면 된다.
<author> 패키지 개발에 참여한 개발자의 이름과 이메일 주소를 적는다. 복수의 개발자가 참여한 경우에는 바로 다음 줄에 <author> 태그를 이용하여 추가로 넣어주면 된다.
<buildtool_depend> 빌드 툴의 의존성을 기술한다.
<build_depend> 패키지를 빌드할 때 필요한 의존 패키지 이름을 적는다.
<exec_depend> 패키지를 실행할 때 필요한 의존 패키지 이름을 적는다.
<test_depend> 패키지를 테스트할 때 필요한 의존 패키지 이름을 적는다.
<export> 위에서 명시하지 않은 확장 태그명을 사용할 때 쓰인다. 빌드 타입을 적는 <build_type>, RViz 플러그인에 사용되는 <rviz>, RQt 플러그인에 사용되는 <rqt_gui>, deprecated되는 패키지일 경우 유저에게 알릴 수 있는 <deprecated> 태그 등이 있다.

빌드 설정 파일 (CMakeLists.txt)

ROS2의 빌드 시스템인 ament에서는 CMake를 사용하며 패키지 폴더의 ‘CMakeLists.txt’ 라는 파알에 빌드 환경을 기술한다. 여기에 실행파일 생성, 의존성 패키지 우선 빌드, 링크 생성 등을 설정하게 되어 있다.
cmake_minimum_required(VERSION 3.5) project(my_first_ros_rclcpp_pkg) # Default to C99 if(NOT CMAKE_C_STANDARD) set(CMAKE_C_STANDARD 99) endif() # Default to C++14 if(NOT CMAKE_CXX_STANDARD) set(CMAKE_CXX_STANDARD 14) endif() if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") add_compile_options(-Wall -Wextra -Wpedantic) endif() # find dependencies find_package(ament_cmake REQUIRED) find_package(rclcpp REQUIRED) find_package(std_msgs REQUIRED) if(BUILD_TESTING) find_package(ament_lint_auto REQUIRED) # the following line skips the linter which checks for copyrights # uncomment the line when a copyright and license is not present in all source files #set(ament_cmake_copyright_FOUND TRUE) # the following line skips cpplint (only works in a git repo) # uncomment the line when this package is not in a git repo #set(ament_cmake_cpplint_FOUND TRUE) ament_lint_auto_find_test_dependencies() endif() ament_package()
TypeScript
복사
하나하니씩 뜯어보며 살펴보면,
cmake_minimum_required(VERSION 3.5)
운영체제에 설치된 cmake의 최소 요구 버전이다.
project(my_first_ros_rclcpp_pkg)
패키지의 이름이며, package,xml에서 입력한 패키지의 이름과 같아야한다.
CMAKE_C_STANDARD, CMAKE_CXX_STANDARD
c / c++ 사용 시 기준이 되는 버전 기재 (c → 99, c++ → 14)
# Default to C99 if(NOT CMAKE_C_STANDARD) set(CMAKE_C_STANDARD 99) endif() # Default to C++14 if(NOT CMAKE_CXX_STANDARD) set(CMAKE_CXX_STANDARD 14) endif()
TypeScript
복사
find_package
ament 빌드 시 요구되는 구성요소 패키지이다. rclcpp을 사용하는 경우 ament_cmake와 rclcpp는 기본으로 포함시켜야하며, std_msgs과 같은 인터페이스 패키지나 의존성 패키지를 기술하게 된다. 필요한 패키지가 없다면 colcon 빌드할 때 사용자에게 에러를 표시된다. 사용자가 만든 패키지가 의존하는 다른 패키지를 먼저 설치하게 만드는 옵션이다.
find_package(ament_cmake REQUIRED) find_package(rclcpp REQUIRED) find_package(std_msgs REQUIRED)
TypeScript
복사

파이썬 패키지 설정 파일 (setup.py)

ROS2 Python 패키지에서만 사용하는 배포를 위한 설정파일이며, C++ 에서의 ‘CMakeLists.txt’ 와 ‘package.xml’ 의 기능을 한다.
from setuptools import setup package_name = 'my_first_ros_rclpy_pkg' setup( name=package_name, version='0.0.0', packages=[package_name], data_files=[ ('share/ament_index/resource_index/packages', ['resource/' + package_name]), ('share/' + package_name, ['package.xml']), ], install_requires=['setuptools'], zip_safe=True, maintainer='minje', maintainer_email='minje@todo.todo', description='TODO: Package description', license='TODO: License declaration', tests_require=['pytest'], entry_points={ 'console_scripts': [ ], }, )
Python
복사
`name`: 패키지의 이름
`version`: 패키지의 버전
`packages`: 의존하는 패키지, 하나씩 나열해도 되지만 `find_packages()`를 기입해주면 자동으로 의존하는 패키지를 찾아준다.
`data_files`: 이 패키지에서 사용되는 파일들을 기입하여 함께 배포한다.
- `ROS`에서는 주로 `resource` 폴더 내에 있는 `ament_index`를 위한 패키지의 이름의 빈 파일이나 `package.xml`, `*.launch.py`, `*.yaml` 등을 기입한다.
`install_requires`: 의존하는 패키지, 이 패키지를 `pip`을 통해 설치할 때 이곳에 기술된 패키지들을 함께 설치하게 된다.
- `ROS`에서는 `pip`로 설치하지 않기에 `setuptools`, `launch`만을 기입해준다.
`tests_require`: 테스트에 필요한 패키지, `ROS`에서는 `pytest`를 사용한다.
`zip_safe`: 설치시 zip 파일로 아카이브할지 여부를 설정한다.
`author`, `author_email`, `maintainer`, `maintainer_email`: 저작자, 관리자의 이름과 이메일을 기입한다.
`keywords`: 이 패키지의 키워드, Python Package Index (PyPI) [8] 배포시 검색하여 이 패키지를 찾을 수 있도록 한다.
`classifiers`: PyPI에 등록될 메타 데이터 설정으로 `PyPI` 페이지의 좌측 Meta란에서 확인 가능하다.
`description`: 패키지 설명을 기입한다.
`license`: 라이선스 종류를 기입한다.
`entry_points`: 플랫폼 별로 콘솔 스크립트를 설치하도록 콘솔 스크립트 이름과 호출 함수를 기입한다.

파이썬 패키지 환경 설정 파일 (setup.cfg)

ROS2 파이썬 패키지에서만 사용하는 배포를 위한 구성 파일이다.
[develop] script-dir=$base/lib/my_first_ros_rclpy_pkg [install] install-scripts=$base/lib/my_first_ros_rclpy_pkg
TypeScript
복사
이 파일에 [develop] [install] 옵션을 설정하여 스크립트의 저장 위치를 설정한다.

패키지 변경로그 파일 (CHANGELOG.rst)

패키지의 업데이트 내역을 기술하는 파일이다.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Changelog for package example_rqt_package ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 0.0.2 (2020-10-22) ------------------ * Added new indicators to view message * Contributors: cont_name 0.0.1 (2020-10-21) ------------------ * Added example_rqt_package as rqt plugin for visualizing messages and services * Contributors: cont_name
TypeScript
복사

라이선스 파일 (LICENSE)

패키지의 코드에 사용된 라이선스를 기술하는 파일이다. 오픈 소스 라이선스에는 `Apache 2.0`, `BSD`, `MIT`, `Boost Software License`, `GPLv2`, `GPLv3`, `LGPLv2.1`, `LGPLv3` 등이 있다.

패키지 설명 파일 (README.md)

패키지의 부가 설명을 적는 파일이며, 마크다운 파일이다. 개발 환경, 의존성 패키지, 설치 방법, 사용 방법들을 기재한다.

Reference