環境
この記事は以下の環境で動いています。
項目 | 値 |
---|---|
CPU | Core i5-8250U |
Ubuntu | 16.04 |
ROS | Kinetic |
インストールについてはROS講座02 インストールを参照してください。
またこの記事のプログラムはgithubにアップロードされています。ROS講座11 gitリポジトリを参照してください。
概要
ROSパッケージにはいろいろなファイルやディレクトリを含みます。それらについて一度整理してみます。
(随時書き足していきます)
基本的な構成
全てのROSのファイルはcatkinワークスペースの下に置かれます(catkin_init_workspaceで初期化したもの)。
ユーザーが各コードはその下のsrcディレクトリ以下に置きます。buildとdevelはcatkin_makeした時に生成されます。catkinワークスペースの名前はcatkin_wsが多く使われますが、なんでもかまいません。また複数のcatkinワークスペースを1つのPCの中で使うこともできます。
catkin_ws/
├ build
├ devel
└ src
├ meta_package1/
│ ├ packageA/
│ │ ├ src/
│ │ │ ├ code1.cpp
│ │ │ └ code2.cpp
│ │ ├ scripts/
│ │ │ ├ script1.py
│ │ │ └ script2.py
│ │ ├ launch/
│ │ │ ├ launch1.launch
│ │ │ └ launch2.launch
│ │ ├ CMakeList.txt
│ │ └ package.xml
│ └ packageB/
│ └.......
├ meta_package2/
│ └.......
└ packageC/
└.....
パッケージとメタパッケージ
ROSのプログラムの最小単位はパッケージです(上記の図でpackageAやpackageB、packageCとなっているもの)。パッケージの名前はユニークでないといけません。
また、これはcatkin_ws/src/の下に置きますが、直下でもよいですし直下でなくても構いません。間にディレクトリを挟むことができます。この時にこれ(meta_package1やmeta_package2)をメタパッケージと呼びます。2階層以上挟むこともできます。
ROSパッケージ内のディレクトリ
基本的に大体のディレクトリ名は任意です。ディレクトリーの分け方も一例と思ってください。
## よく使うもの
- src/
.cppや.hファイルを置きます。しかしファイルの位置は後でCMakeListで指定するので、実はsrcフォルダを作るのは必須ではありません。またsrcの中にフォルダを作ってその中に入れてもよいです。個人的には1つのノードが複数のファイルで構成されるなら、それらを1つのディレクトリーにまとめるのを推奨します。
※ROSwikiではsrc/package_name/
のようにパッケージ名のディレクトリを作ってその下に入れるのを推奨していますが、あまりそういうディレクトリ構成を見たことがありません。 - scripts/
スクリプトを置きます。主にpythonで書いたファイルを置くところですが、設定ようなどshell scriptを置くこともできます(.shでもrosrunで起動できます)。実行権限を付けるのを忘れずに。ROSが頑張ってファイルを探すので、これもscriptsという名前である必要はありません。 - launch/
roslaunch用のファイルを置いておくところです。これもROSが頑張って探すので実はlaunch/というディレクトリー名は必須ではありません。 - CMakeList.txt(名前固定・必須)
ディレクトリーではなくファイルですが。ビルド(=catkin_make)時に読み込まれるファイルです。cppファイルのコンパイルの条件などを書きます。 - package.xml(名前固定・必須)
ROSパッケージとして必須の情報が書いてあります。実はROSパッケージ名はディレクトリ名で決まるのではなくこのファイルの中のnameタグ(例えば<name>basic_lecture</name>
となっているところ)で決まります。なのでディレクトリ名を変えてもこのファイルを変えないと、ROSパッケージとして認識される名前は変わりません。
実行ファイル系
- include/package_name/
.hファイルを置く場所です。ほかのパッケージから読み込むものは上のようにパッケージ名のディレクトリの下に置くべきです。 - msg/(名前固定?)
カスタムROSメッセージファイルを置く場所です。 - srv/(名前固定?)
カスタムROSサービスファイルを置く場所です。
Rviz関連
- rviz
rvizのビューの設定ファイルを置きます。 - urdf
urdfファイルを置きます。 - xacro
xacroファイルを置きます。
gazebo関連
- worlds
gazeboのworldファイルを置きます。 - models
gazeboのモデルのsdfファイルを置きます。
他
- config
YAMLなどのROSのコンフィグファイルを置きます。 - cfg
Dynamic Reconfigure用のファイルを置きます(configと紛らわしいですね)。 - www
ROSWWWで参照するHTMLファイルを置きます。 - recources
rosbagやPDF等の参考ファイルを置きます。 - platformio
マイコン用のプロジェクトファイルを置きます。