제가 작성하는 이 글은 제가 공부하기 위해 작성하고 제 학교 후배들에게 조금이라도 ros에 대해서 접하게 하고자 작성하게 되었습니다. 그러니 만약 틀린내용이나 그러니 제가 부족한 부분이 있을수 있으니 주의해주면서 봐주시면 감사하겠습니다 -Happy Lee-
py_test/
│
├── package.xml
├── py_test/
│ └── init.py
│
├── resource/
│ └── py_test
│
├── setup.cfg
├── setup.py
│
└── test/
├── test_copyright.py
├── test_flake8.py
└── test_pep257.py
여기는 이제 기본 패키지 부분입니다.
<?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>py_test</name>
<version>0.0.0</version>
<description>TODO: Package description</description>
<maintainer email="happy@todo.todo">happy</maintainer>
<license>TODO: License declaration</license>
<test_depend>ament_copyright</test_depend>
<test_depend>ament_flake8</test_depend>
<test_depend>ament_pep257</test_depend>
<test_depend>python3-pytest</test_depend>
<export>
<build_type>ament_python</build_type>
</export>
</package>
<?xml>
: 문서문법을정의하는문구로아래의내용은xml 버전1.0을따르고있다는것을알린다.
<package>
: 이구문부터맨끝의 </package까지가 ROS 패키지설정부분이다. 세부사항으로format="3" 이라고패키지설정파일의버전을기재한다. ROS 2는3를사용하면된다.
<name>
: 패키지의이름이다. 패키지를생성할때입력한패키지이름이사용된다. 다른옵션도마찬가지지만이는사용자가원할때언제든지변경할수있다.
<version>
: 패키지의버전이다. 자유롭게지정할수있는데나중에패키지를바이너리패키지로공개한다면버전관리에사용되므로신중할필요가있다.
<description>
: 패키지의간단한설명이다. 보통2~3 문장으로기술한다.
<maintainer>
: 패키지관리자의이름과이메일주소를기재한다.
<license>
: 라이선스를기재한다. Apache 2.0, BSD, MIT, BoostSoftwareLicense, 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 태그등이있다.
<depend>
: ROS 2 패키지가 실행되거나 빌드될 때 필요한 다른 패키지를 선언하는 데 사용됨(빌드 타임 의존성, 런타임 의존성, 테스트 의존성)
exec_depend> : 태그는 해당 ROS 패키지가 실행되기 위해 필요한 의존성을 지정하는데 사용

[develop]
script_dir=$base/lib/py_test
[install]
install_scripts=$base/lib/py_test
develop
script_dir : 개발 모드에서 스크립트가 저장될 경로를 설정
$base : 설치의 기본 경로를 의미
install
install_scripts : 패키지를 설치할 때 스크립트가 저장될 경로를 설정합니다.
$base/lib/py_test : 설치 시 스크립트가 복사될 경로입니다.
from setuptools import find_packages, setup
package_name = 'py_test'
setup(
name=package_name,
version='0.0.0',
packages=find_packages(exclude=['test']),
data_files=[
('share/ament_index/resource_index/packages',
['resource/' + package_name]),
('share/' + package_name, ['package.xml']),
],
install_requires=['setuptools'],
zip_safe=True,
maintainer='happy',
maintainer_email='happy@todo.todo',
description='TODO: Package description',
license='TODO: License declaration',
tests_require=['pytest'],
entry_points={
'console_scripts': [
],
},
)
name=package_name,
version='0.0.0',
name: 패키지의 이름입니다. 여기서는 py_test로 설정
version: 패키지 버전 (0.0.0은 기본 값으로 나중에 수정해야 함)
packages=find_packages(exclude=['test']),
data_files=[
('share/ament_index/resource_index/packages',
['resource/' + package_name]),
('share/' + package_name, ['package.xml']),
],
find_packages() : 프로젝트 디렉토리에서 패키지를 자동으로 찾아냄
(exclude=['test']: test 디렉토리를 제외)
data_files : ROS 2 관련 설정 파일을 설치할 위치를 정의
share/ament_index/resource_index/packages: ROS 2 패키지 인덱스용 파일 설치 경로
share/py_test: package.xml 파일을 설치할 경로
install_requires=['setuptools'], : 패키지를 설치할 때 필요한 의존성
zip_safe: 패키지를 .zip 형태로 설치할 수 있는지 여부를 지정
maintainer='happy',
maintainer_email='happy@todo.todo',
description='TODO: Package description',
license='TODO: License declaration',
maintainer / maintainer_email: 패키지 유지 보수자의 이름과 이메일입니다.
description: 패키지에 대한 설명
license: 라이선스를 명시 (예: Apache-2.0 또는 MIT)
tests_require : 테스트에 필요한 종속성을 정의 (pytest를 사용하여 테스트를 실행함)
entry_points={
'console_scripts': [
],
},
console_scripts: 패키지 설치 후 실행 가능한 스크립트를 정의
여기에 ROS 2 노드나 실행 가능한 Python 스크립트를 추가 가능
추가
DDS : 퍼블리시-서브스크라이브(pub-sub) 기반의 분산 데이터 통신 표준으로 그것을 담당함
RMW : DDS 구현체를 독립적으로 사용할 수 있도록 인터페이스를 제공합니다