ROS2でプログラミングするために勉強したメモです.
ここでは,packageの作成方法を書きます.
packageに関する説明
packageは,Pythonとc++(CMake)で必要な構成要素が異なる.
構成に必要な要素
Python
-
package.xml
:packageに関するメタ情報を含むファイル. -
setup.py
:packageのインストール方法の説明が含まれている. -
setup.cfg
:packageに実行可能ファイルがある場合に求められる.このファイルのおかげで,ros2 run
はpackageを見つけることができる. -
<package_name>
:ROS 2ツールがパッケージを見つけるために使用するファイル
CMake
-
package.xml
:packageに関するメタ情報を含むファイル. -
CMakeLists.txt
:package内のコードをビルドする方法が記述されたファイル.
例) workspaceの中のpackageの様子
workspace_folder/
src/
package_1/
CMakeLists.txt
package.xml
package_2/
setup.py
package.xml
resource/my_package
...
package_n/
CMakeLists.txt
package.xml
packageの作成
[Note]
以降は,Pythonについて記述する.必要に応じてC++(CMake)についても記述する.
packageを作成
<workspace_name>
のフォルダの中の,src
フォルダでpackageを作成する.
ros2 pkg create --build-type ament_python <package_name>
nodeを作成する場合は,以下のコマンドを使用する.
ros2 pkg create --build-type ament_python --node-name <node_name> <package_name>
これで,src
フォルダに新しい<package_name>
のフォルダが追加されている.
packageをビルド
# workspaceのルートに移動
cd ~/dev_ws
# colconでビルド
colcon build
[Note]
上記のコマンドではすべてのpackageがビルドされてしまうので,長時間かかるデメリットがある.
特定のpackageだけをビルドする方法は以下のコマンドである.
colcon build --packages-select <package_name>
作成したpackageの編集
packageの説明とライセンス宣言は,packageをリリースする場合は必須となる.
package.xml
ファイルを編集
package.xml
<?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_package</name>
<version>0.0.0</version>
<description>TODO: Package description</description>
<maintainer email="user@todo.todo">user</maintainer>
<license>TODO: License declaration</license>
<buildtool_depend>ament_python</buildtool_depend>
<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>
ここで,
-
my_package
は<package_name>
である. -
<description>TODO: Package description</description>
にpackageの説明を
記述する. -
<maintainer email="user@todo.todo">user</maintainer>
に名前とe-mailアドレスを記述する. -
<license>TODO: License declaration</license>
にライセンス情報を記述する. -
setup.py
の中にも同様の記載項目があり,package.xml
と正確に一致させる必要がある.
setup.py
from setuptools import setup
package_name = 'my_py_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,
author='ROS 2 Developer',
author_email='ros2@ros.com',
maintainer='TODO',
maintainer_email='TODO',
keywords=['foo', 'bar'],
classifiers=[
'Intended Audience :: Developers',
'License :: TODO',
'Programming Language :: Python',
'Topic :: Software Development',
],
description='TODO: Package description',
license='TODO: License declaration',
tests_require=['pytest'],
# Like the CMakeLists add_executable macro, you can add your python
# scripts here.
entry_points={
'console_scripts': [
'my_node = my_py_pkg.my_node:main'
],
},
)
setup.cfg
を編集する.
setup.cfg
[develop]
script-dir=$base/lib/<package-name>
[install]
install-scripts=$base/lib/<package-name>