ROS2 Tutorials – Creating a package

はじめに

今回は自作パッケージを作る.

Creating a package — ROS 2 Documentation: Iron documentation

パッケージ周りの基礎(雑訳

パッケージとは

パッケージは 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 の場合はこれでおわり.

おわりに

これでパッケージを作れるようになった.

コメント

タイトルとURLをコピーしました