2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

実習ROS 2 ROS 2パッケージのディレクトリ構成

Last updated at Posted at 2024-10-15

環境

本記事は以下の環境を想定して記述している。

項目
OS Ubuntu 22.04
ROS ROS 2 Humble

概要

ROS 2のパッケージには様々なファイル、ディレクトリがある。
この記事では、ROS 2ワークスペースの全体像と、パッケージに必要なファイル、慣例的に使われるディレクトリ名などを整理する。
また、ROS 1との違いについてもまとめる。

ROS 2のワークスペース構成

ROS 2のワークスペース構成について説明する。
初めに全体像を以下図に示す。
localとはローカルPCの任意の場所、ws1・ws2はそれぞれワークスペースを表す。
hello_packageとworld_packageはそれぞれパッケージを表す。各ファイル、ディレクトリについての詳細は以降で説明する。

local/
├── ws1           # ワークスペース1
    ├── build     # ビルドで生成される中間ファイル等が置かれる場所
    ├── install   # ビルド生成物がインストールされる場所
    ├── log       # ビルド時のログが置かれる場所
    ├── src       # 開発者がパッケージを実装する場所
        ├── hello_world               # パッケージでないただのディレクトリ。無くても動作に問題はない。
            ├── hello_package         # helloパッケージ
                ├── CMakeLists.txt    # ビルド設定ファイル
                ├── package.xml       # パッケージ情報ファイル
                ├── hello.launch      # launchファイル
                ├── hello.cpp         # ソースコード
                └── ...               # その他関連ファイル
            └── world_package         # worldパッケージ
                └── ...               # worldパッケージの関連ファイル
├── ws2           # ワークスペース2
    ├── ...       # 関連するファイル群
├── ...           # ワークスペース3以降

ROS 2では、ROS 1同様、関連する全てのファイルはワークスペース内に保存される。そのため、開発者はまずワークスペースを作成する必要がある。ワークスペースはローカルPCの任意の場所に作成でき、用途に応じて複数作成することも可能である。さらに、複数のワークスペースを組み合わせることができるため、柔軟な開発が可能になる。
また自分で作成したワークスペースだけでなく、ROS 2パッケージをビルドしてできたワークスペースもある。

ROS 2のワークスペース内部構成

ワークスペースの内部構成を説明する。

ワークスペースでビルドを行うと、ワークスペース直下にbuildinstalllogディレクトリが作られる。
開発者はワークスペース直下にsrcディレクトリを作成し、その中でパッケージ(ソースコード等を含む)を作成して開発を行う。またsrcディレクトリ内には、C++用のパッケージとPython用のパッケージを作成する事が出来る。そのため、1つのプロジェクト内で機能毎に異なるプログラミング言語のパッケージがあっても、1つのワークスペースで一括管理する事が出来る。

パッケージを作成する際は、ros2 pkg createコマンドを使用する。C++用のパッケージとPython用のパッケージでは、自動生成されるファイルやパッケージ構成が異なる。

以下に、ワークスペースのディレクトリ構成例を示す。この例ではワークスペースtest_wsに、C++パッケージsample_cpp_package、Pythonパッケージsample_python_packagehelloディレクトリを配置している。さらに、helloディレクトリにはC++パッケージhello_packageを配置している。

test_ws/
├── build       # ビルドで生成される中間ファイル等が置かれる場所
├── install     # ビルド生成物がインストールされる場所
├── log         # ビルド時のログが置かれる場所
└── src         # 開発者がパッケージを実装する場所
    ├── hello                       # パッケージではないただのディレクトリ
    │   └── hello_package           # C++パッケージhello_package
    │       └──...
    ├── sample_cpp_package          # C++パッケージsample_cpp_package
    │   └── ...
    └── sample_python_package       # Pythonパッケージsample_python_package
        └── ...

ROS 2パッケージ内のディレクトリ構成

多くのディレクトリ名は任意で、慣例的なものも多い。
ここでは、使用頻度が高いと思われるものを説明する。

必須ファイル

  • package.xml
    ROSパッケージであることを示すファイルであり、パッケージ作成時に自動生成される。
    詳細はこちらの記事を参照

C++パッケージでよく使うもの

いずれのファイル、ディレクトリも、パッケージ作成時に自動生成される。

  • CMakeLists.txt
    ビルドの設定を記述するファイルである。
    詳細はこちらの記事を参照
  • src/
    ソースコードを置く場所である。
    直下にソースコードを置いても、さらに深いディレクトリに置いてもよい。
    いずれにせよ、CMakeLists.txtでソースコードの場所を正しく記述する必要がある。
  • include/
    ヘッダファイルを置く場所である。
    他のパッケージからインクルードした際にわかりやすくなるよう、この下にパッケージ名のディレクトリを作ってヘッダファイルを置くことが多い。

Pythonパッケージでよく使うもの

いずれのファイル、ディレクトリも、パッケージ作成時に自動生成される。

  • setup.py
    ROSとは独立した、Pythonが持つパッケージングのために使われるファイルである。
    適切に記述することで、ROS 2パッケージを純粋なPythonパッケージとして扱うことができる。
    記述する情報は、package.xmlに似たものが多い。
    なお、setup.pyの代わりにsetup.cfgpyproject.tomlといったファイルを用いてパッケージ情報を記述する場合がある。(参考)
  • <package_name>/配下
    ここに開発者が実装するPythonスクリプトを置く。
    自動生成される__init__.pyは、このディレクトリがPythonのパッケージとして扱われることを示すためのファイルである。

起動・初期設定

カスタムメッセージ定義

独自のメッセージ型を定義してそれを利用する場合は、再利用性を高めるためにメッセージを定義するパッケージと利用するパッケージを分けることが多い。
メッセージを定義しているパッケージの具体例として、ROS 2公式リポジトリのexample_interfacesパッケージがある。
(参考:実習ROS 2 カスタムROSメッセージ)

  • msg/
    トピック通信で用いるメッセージ定義ファイルを置く場所である。
  • srv/
    サービス通信で用いるサービス定義ファイルを置く場所である。
  • action/
    アクション通信で用いるアクション定義ファイルを置く場所である。

モデル定義

ロボットモデルの定義のために使うファイルを置く場所や、シミュレーションのために用いるファイルを置く場所などがある。

  • urdf/
    ロボットモデルを定義するurdfファイルを置く場所である。
    (参考:実習ROS 2 URDFを記述する1)
  • xacro/
    マクロを用いてロボットモデルを記述するxacroファイルを置く場所である。
  • worlds/
    Gazebo上でシミュレーションを行う世界を定義するworldファイルを置く場所である。
  • models/
    Gazebo上でのモデルを表現するsdf等のモデルファイルを置く場所である。

設定・スクリプト

ROSで用いる様々なパラメータやスクリプトファイルを置く場所がある。

  • config/
    パラメータを記述するyamlファイル等を置く場所である。
  • rviz/
    Rvizの表示設定ファイルを置く場所である。
  • scripts/
    シェルスクリプト等のスクリプトファイルを置く場所である。

ROS 1との違い

ROS 1とROS 2でディレクトリ構成で大きく異なるのは以下の2点である。
いずれも、ビルドシステム、ビルドツールがROS 1とROS 2で異なることによる。

  • ワークスペースのトップにあるディレクトリが異なる。

    • ROS 1の場合
    ros1_workspace    # ワークスペース名
     ├──build
     ├──devel
     └──src
    
    • ROS 2の場合
    ros2_workspace    # ワークスペース名
     ├──build
     ├──install
     ├──log
     └──src
    
  • Pythonパッケージで必要なファイルが異なる。具体的な説明は上記の説明を参照。

参考

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?