はじめに
今回は自作パッケージを作る.
パッケージ周りの基礎(雑訳
パッケージとは
パッケージは ROS2 のコードをまとめる単位.パッケージの形式でソースを管理することで,自身で開発したパッケージを公開し,他の人も簡単にビルドできるようになる.
パッケージの構成
CMake パッケージの最小構成は次のような形をとる.
my_package/
├ CMakeLists.txt
├ include/my_package/
├ package.xml
└ src/
file or directory | 説明 |
---|---|
CMakeLists.txt | パッケージ内のソースコードをビルドする方法を定義するファイル |
include/<package_name>/ | パッケージで利用するヘッダファイルを格納するディレクトリ |
package.xml | パッケージのメタ情報を定義するファイル |
src/ | パッケージのソースコードを格納するディレクトリ |
Python パッケージの最小構成は次の通り.
my_package/
├ package.xml
├ resource/my_package
├ setup.cfg
├ setup.py
└ my_package/
file or directory | 説明 |
---|---|
package.xml | パッケージののメタ情報を定義するファイル |
resource/<package_name> | パッケージのマーカーファイルを格納する |
setup.cfg | パッケージに実行ファイルがある場合は必ず必要になる. ros2 run コマンドの実行ファイルを指定する. |
setup.py | パッケージのインストール方法を定義するファイル |
<package_name>/ | パッケージ名と同じディレクトリ名. ros2 の各ツールがパッケージを見つけるために利用される. |
ワークスペースとパッケージ
1つのワークスペースにはフォルダ毎に複数のパッケージを格納することができる.また1つのワークスペースには異なるビルドタイプのパッケージを格納することもできる.ただし,パッケージはネストできない.
ワークスペースの src ディレクトリ内にパッケージを格納し,ワークスペースのトップレベルがきれいな状態を保つことを推奨する.
workspace_folder/
src/
cpp_package_1/
CMakeLists.txt
include/cpp_package_1/
package.xml
src/
py_package_1/
package.xml
resource/py_package_1
setup.cfg
setup.py
py_package_1/
...
cpp_package_n/
CMakeLists.txt
include/cpp_package_n/
package.xml
src/
パッケージを作る
とりあえずパッケージをビルドしてみる
これまでと同様にアンダーレイをソースしておく.ついでに colcon-argcomplete もソースしておく.
$ source ~/ros2_iron/install/setup.sh
$ source /usr/share/colcon_argcomplete/hook/colcon-argcomplete.bash
これまでと同様にワークスペースのディレクトリを作る.
$ mkdir -p ros2-ws/src
$ cd ros2-ws/src/
チュートリアルでは CMake と Pyhon 両方の説明が記載されているが,今回は CMake でチュートリアルを進めてみる.
次のコマンドでパッケージのベースを作る.
$ ros2 pkg create --build-type ament_cmake --license Apache-2.0 --node-name my_node my_package
going to create a new package
package name: my_package
destination directory: /path/to/ros2-ws/src
package format: 3
version: 0.0.0
description: TODO: Package description
maintainer: ['***** <*****@todo.todo>']
licenses: ['Apache-2.0']
build type: ament_cmake
dependencies: []
node_name: my_node
creating folder ./my_package
creating ./my_package/package.xml
creating source and include folder
creating folder ./my_package/src
creating folder ./my_package/include/my_package
creating ./my_package/CMakeLists.txt
creating ./my_package/src/my_node.cpp
ワークスペースのルートに戻ってビルドする.
$ cd ..
$ colcon build --symlink-install
Starting >>> my_package
Finished <<< my_package [3.72s]
Summary: 1 package finished [4.04s]
ビルドできたので,ワークスペースのオーバーレイをソースする.
$ source install/local_setup.bash
ビルドしたパッケージを実行してみる.
$ ros2 run my_package my_node
hello world my_package package
package.xml をカスタマイズしてみる
package.xml を見ると次のような内容になっている.これは ros2 pkg create
でパッケージを作成した際に設定した内容で,いくつかの項目は TODO となっている.また description と license の項目はパッケージリリース時に必要なため自動で設定されない.
$ cat src/my_package/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="*****@todo.todo">*****</maintainer>
<license>Apache-2.0</license>
<buildtool_depend>ament_cmake</buildtool_depend>
<test_depend>ament_lint_auto</test_depend>
<test_depend>ament_lint_common</test_depend>
<export>
<build_type>ament_cmake</build_type>
</export>
</package>
lisence の下に _depend で終わるいくつかのタグがあり,これはこのパッケージの依存関係を表す.ただし,今回はチュートリアル用に記載しているだけで,実際には依存関係は無い.
Pythonの場合は setup.py も同様に変更する必要があるが,CMake の場合はこれでおわり.
おわりに
これでパッケージを作れるようになった.
コメント