概要
自作の ROS パッケージの作成方法について解説します。
パッケージ
ROS のすべてのプログラムはパッケージとして作成します。パッケージは以下の要件を満たす必要があります。
- 1つのディレクトリが1つのパッケージを構成する
- パッケージのメタ情報 が記載された
package.xml
を含むこと - catkin 形式のパッケージは CMakeLists.txt を含むこと
パッケージのディレクトリ構成
パッケージのディレクトリ構成は以下のようになります。package.xml 以外は必要に応じて作成します。
<パッケージ名>
├── include: C++ のコードの場合にヘッダーファイルを置く
├── src: C++ のコードの場合にソースファイルを置く
├── scripts: Python のような実行可能のスクリプトを置く
├── launch: launch ファイルを置く
├── msg: .msg ファイルを置く
├── srv: .srv ファイルを置く
├── bin: C++ の場合にコンパイル済みのバイナリを置く
├── CMakeLists.txt
└── package.xml
パッケージを作成する
パッケージを構成するディレクトリは catkin ワークスペースの src
以下に置きます。パッケージの雛形は catkin_create_pkg
コマンドで作成します。
cd ~/catkin_ws/src
catkin_create_pkg <パッケージ名> <依存ライブラリの一覧>
例
cd ~/catkin_ws/src
catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
実行すると、以下のようなディレクトリ構成でパッケージの雛形が作成されます。
beginner_tutorials/
├── CMakeLists.txt
├── include
│ └── beginner_tutorials
├── package.xml
└── src
作成した package.xml や CMakeLists.txt は必要に応じて、適宜編集しましょう。
catkin_create_pkg
パッケージの雛形を作成する catkin_create_pkg コマンドについて解説します。
catkin_create_pkg <name> [options] <dependencies>
- name: パッケージ名 (必須)
- dependencies: catkin 形式のパッケージの場合、依存ライブラリの一覧 (空白区切りで複数指定可)
- –meta: CMakeLists.txt は未編集のまま生成する
- -s, –sys-deps: catkin で管理されていない依存ライブラリの一覧 (空白区切りで複数指定可)
- -b, –boost-comps: 依存する Boost ライブラリのコンポーネントの一覧 (空白区切りで複数指定可)
- -V, –pkg_version: 初版のバージョンを major.minor.patch 形式で指定する (例: 0.1.0)
- -D, –description: 説明
- -l, –license: ライセンスの種類
- -a, –author: 作者
- -m, –mentainer: メンテナ
mentainer はこのパッケージを管理している人、author はこのパッケージの作成に貢献した人を記載します。
package.xml
パッケージ名やバージョンなどのメタ情報は以下のタグで指定します。
- name: パッケージ名 (必須)
- version: パッケージのバージョンを major.minor.patch 形式で指定する (例: 0.1.0) (必須)
- description: パッケージの説明 (必須)
- maintainer: パッケージのメンテナ (必須)
- license: パッケージのライセンス (例: MIT、BSD) (必須)
- author: パッケージの作者
- url: GitHub のレポジトリなどパッケージに関係する URL
パッケージの依存ソフトウェア、ライブラリは以下で指定します。
- build_depend: このパッケージのビルド時に必要となるライブラリを指定する
- build_export_depend: このライブラリのヘッダーをインクルードする際に必要となるライブラリを指定する
- exec_depend: このパッケージの実行時に必要となるライブラリを指定する
- test_depend: このライブラリのテストを実行するのに必要となるライブラリを指定する
- buildtool_depend: このライブラリをビルドするのに必要なビルドツールを指定する。通常は catkin のみを指定する。
- doc_depend: このライブラリのドキュメントを生成するのに必要となるライブラリを指定する
- depend: build_depend、exec_depend 両方を指定する場合と同じ
build_export_depend は、このパッケージのヘッダ内で外部ライブラリのヘッダをインクルードしていた場合、このパッケージのヘッダを利用するにはそのライブラリが必要になります。このライブラリのビルドには必要なくとも、このライブラリが提供するヘッダを使用する際には必要となるライブラリはこのタグで指定します。
属性でバージョンの制約を指定できます。
- version_lt=”VERSION”: 指定バージョン未満
- version_lte=”VERSION”: 指定バージョン以下
- version_eq=”VERSION”: 指定バージョン
- version_gte=”VERSION”: 指定バージョン以上
- version_gt=”VERSION”: 指定バージョンより上
例
<buildtool_depend>catkin</buildtool_depend>
<build_depend>roscpp</build_depend>
<build_depend>rospy</build_depend>
<build_depend>std_msgs</build_depend>
<build_export_depend>roscpp</build_export_depend>
<build_export_depend>rospy</build_export_depend>
<build_export_depend>std_msgs</build_export_depend>
<exec_depend>roscpp</exec_depend>
<exec_depend>rospy</exec_depend>
<exec_depend>std_msgs</exec_depend>
CMakeLists.txt
1 CMake のバージョンは 2.8.3 以上が必要です。
cmake_minimum_required(VERSION 2.8.3)
2 catkin 及びビルドに必要な catkin 形式のパッケージを指定します。
依存している catkin 形式のパッケージがない場合は catkin のみ必要です。
find_package(catkin REQUIRED)
依存している catkin 形式のパッケージがある場合は COMPONENTS のあとに記載します。
find_package(catkin REQUIRED COMPONENTS AAA BBB)
3 catkin_package() を呼び出します。
catkin_package()
は catkin 形式のパッケージ固有の情報を生成する CMake マクロです。
catkin_package()
4 include ディレクトリを追加します。
以下を必要に応じて追加します。
- このパッケージのインクルードディレクトリ
${catkin_INCLUDE_DIRS}
:find_package(catkin REQUIRED COMPONENTS [パッケージ])
で検索したパッケージの include ディレクトリのパス一覧が格納されている変数find_package(catkin REQUIRED COMPONENTS [パッケージ])
ではなく、find_package()
で検索したパッケージのインクルードディレクトリ
include_directories(
${catkin_INCLUDE_DIRS}
include
)
5 ビルドターゲットを指定します。
ライブラリを生成する場合は
add_library(<ライブラリ名>
<.cpp ファイルの一覧>
)
実行可能バイナリを生成する場合は
add_executable(<バイナリ名>
<.cpp ファイルの一覧>
)
6 依存ライブラリをリンクする
target_link_libraries(<ライブラリまたはバイナリ名>
<依存ライブラリのファイル名>
)
以下を必要に応じて追加します。
${catkin_LIBRARIES}
:find_package(catkin REQUIRED COMPONENTS [パッケージ])
で検索したパッケージのライブラリファイル名の一覧が格納されているパスfind_package(catkin REQUIRED COMPONENTS [パッケージ])
ではなく、find_package()
で検索したパッケージのライブラリファイル名
参考
- ja/ROS/Tutorials/CreatingPackage – ROS Wiki
- ja/Packages – ROS Wiki
- ja/catkin/CMakeLists.txt – ROS Wiki
- catkin/package.xml – ROS Wiki
- ros-infrastructure/catkin_pkg: Standalone Python library for the catkin build system.
- rep/rep-0149.rst at master · ros-infrastructure/rep
- ROS講座97 CMakeList.txtとpackage.xmlの書き方 – Qiita
- REP 127 — Specification of package manifest format (ROS.org)
コメント