앞서 패키지를 만들고 빌드하는 과정에서 볼 수 있었던 패키지 파일들을 좀 더 자세히 살펴보는 시간을 갖겠다. 총 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
복사
빌드 설정 파일 (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
복사
- `ROS`에서는 주로 `resource` 폴더 내에 있는 `ament_index`를 위한 패키지의 이름의 빈 파일이나 `package.xml`, `*.launch.py`, `*.yaml` 등을 기입한다.
- `ROS`에서는 `pip`로 설치하지 않기에 `setuptools`, `launch`만을 기입해준다.
파이썬 패키지 환경 설정 파일 (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)
패키지의 부가 설명을 적는 파일이며, 마크다운 파일이다. 개발 환경, 의존성 패키지, 설치 방법, 사용 방법들을 기재한다.