ROS 2 公式文書(英語) 日本語訳シリーズです。
本ブログの日本語翻訳版のトップページは以下のリンクを参照下さい。
- 背景
- 前提要件
- 基礎
- ワークスペースの作成
- ソースの追加
- アンダーレイを取得する
- ワークスペースをビルドする
- テストを実行する
- 環境変数を設定する
- デモを試す
- オリジナルパッケージの作成
- ノウハウ
- 翻訳元文書
- 関連記事
ここでは、colcon
を使用して ROS ワークスペースを作成および構築する方法の簡単なチュートリアルを紹介します。これは実用的なチュートリアルであり、コアドキュメントを置き換えるようには設計されていません。
Bouncy より前の ROS 2リリースでは、ament
チュートリアルで説明されている ament_tools(英語) が使用されていました。
背景
colcon
は、従来の ROS 1 ビルドツールcatkin_make
、catkin_make_isolated
、catkin_tools
、および ROS 2 のament_tools
の機能を統一したものです(※追記:ROS 1 と ROS2 のビルドシステムはこれまで別々だったのですが、colcon 一本で両方行けるようにしたようです)。 colcon の設計に関する詳細はこちら(英語)を参照してください。
ソースコードは colcon GitHub Organization にあります。
前提要件
ROS 2 のインストール
インストール手順(本ブログ和訳版)に従って ROS 2 をインストールしてください。
注意
- Debian パッケージからインストールする場合、このチュートリアルには「デスクトップインストール」が必要です。
colcon のインストール
Linux
sudo apt install python3-colcon-common-extensions
OS X
python3 -m pip install colcon-common-extensions
Windows
pip install -U colcon-common-extensions
基礎
ROS ワークスペースは決まった構造を持つディレクトリです。一般的にはsrc
サブディレクトリがあります。そのサブディレクトリの中に、ROS パッケージのソースコードが配置されます。通常、ディレクトリはそれ以外の場合は空が初期状態です。
colcon はソースビルドを行いません。デフォルトでは、src
ディレクトリのお仲間くんとして次のディレクトリを作成します。
build
ディレクトリは中間ファイルが格納される場所になります。各パッケージに対してサブフォルダーが作成されます。 CMake が呼び出されています。install
ディレクトリは、各パッケージのインストール先です。デフォルトでは、各パッケージは別々のサブディレクトリにインストールされます。log
ディレクトリには、各 colcon 呼び出しに関するさまざまなログ情報が含まれています。
注意
- catkin のときに使用していた
devel
ディレクトリはありません。
ワークスペースの作成
まず、ワークスペースを格納するディレクトリ(ros2_example_ws)を作成します。
Linux/OS X
mkdir -p ~/ros2_example_ws/src cd ~/ros2_example_ws
Windows
md \dev\ros2_example_ws\src
cd \dev\ros2_example_ws
この時点で、ワークスペースには単一の空ディレクトリsrc
があります。
. └── src 1 directory, 0 files
ソースの追加
examples リポジトリをワークスペースのsrc
ディレクトリに複製しましょう。
git clone https://github.com/ros2/examples src/examples
これで、ワークスペースに ROS 2 のサンプルコードが追加されました。
. └── src └── examples ├── CONTRIBUTING.md ├── LICENSE ├── rclcpp ├── rclpy └── README.md 4 directories, 3 files
注意
インストールされた ROS のバージョンと互換性のあるブランチ(例:crystal)をチェックアウトすることをお勧めします。
cd ~/ros2_example_ws/src/examples/ git checkout ROSDISTRO cd ~/ros2_example_ws
アンダーレイを取得する
ここで重要なことは、既存の ROS 2 インストール環境をセットアップできたことです(サンプルパッケージに必要なビルド依存関係をワークスペースに提供するために必要な要件です)。これは、バイナリインストール(※追記:apt 等)またはソースインストール(※追記:git clone 等)によって取得するセットアップスクリプトによって実現されます。※例:別の colcon ワークスペース(インストール(本ブログ和訳版)を参照)
上記の環境をアンダーレイと呼びます(※追記:ROS 2 のベースとしてインストールしたパッケージは、アンダーレイになる)。
本ワークスペースros2_examples_ws
は、既存の ROS 2 インストール環境の上位に位置するオーバーレイとなります。一般に、すべてのパッケージを同じワークスペースに配置するのではなく、少数のパッケージを繰り返し処理する場合にはオーバーレイを使用することをお勧めします。
ワークスペースをビルドする
注意
Windows でパッケージを構築するには、Visual Studio 環境で実行する必要があります。詳細については、ROS 2 コードの構築を参照してください。
手順
ワークスペースのルートで、colcon build
を実行してください。 ament_cmake
などのビルドタイプはdevel
空間の概念をサポートしておらず、パッケージのインストールが必須となるため、colcon はオプション--symlink-install
をサポートします。これにより、src
空間内のファイル(例えば、Python ファイルまたはコンパイルされていない他のリソース)を変更することによってインストールされたファイルが変更されるようになり、ビルドの順序実行を高速化できます。
colcon build --symlink-install
ビルドが終了したら、build
、install
、log
の各ディレクトリが表示されます。
. ├── build ├── install ├── log └── src 4 directories, 0 files
テストを実行する
作成したパッケージに対してテストを実行するには、次のコマンドを実行します。
colcon test
環境変数を設定する
colcon がビルドを完了すると、出力ファイルはinstall
ディレクトリに格納されます。実行ファイルとライブラリを使うには、例えばパスにinstall/bin
ディレクトリを追加します。 colcon はinstall
ディレクトリに bash / bat ファイルを生成して環境をセットアップします。これらのファイルはワークスペースやライブラリパスの情報を追加するだけでなく、パッケージによってエクスポートされた bash やシェルコマンドを提供します。
Linux/OS X
. install/setup.bash
Windows
call install\setup.bat
デモを試す
環境が整っていれば、colcon によって構築された実行可能ファイルを実行できます。サンプルからサブスクライバノードを実行しましょう。
ros2 run examples_rclcpp_minimal_subscriber subscriber_member_function
別のターミナルで、パブリッシャノードを実行しましょう(セットアップスクリプトのソースを忘れないでください)。
ros2 run examples_rclcpp_minimal_publisher publisher_member_function
パブリッシャとサブスクライバからのメッセージにおいて、インデックスがインクリメントされていくのが分かります。
オリジナルパッケージの作成
colcon は REP 149 で定義されているpackage.xml
仕様を使用します(フォーマット2もサポートされています)。
colcon は複数のビルドタイプをサポートしています。推奨されるビルドタイプはament_cmake
とament_python
です。純粋なcmake
パッケージもサポートされています。
ament_python
ビルドの例は、ament_index_python パッケージです。ここで、setup.pyがビルドの主なエントリポイントです。
demo_nodes_cpp などのパッケージは、ament_cmake
ビルドタイプを使用し、ビルドツールとして CMake を使用します。
便宜上、ros2 pkg create
ツールを使用してテンプレートに基づいて新しいパッケージを作成できます。
(※catkin ユーザーの場合、これは catkin_create_package と同等です。)
ノウハウ
特定のパッケージをビルドしたくない場合は、
COLCON_IGNORE
という名前の空のファイルをディレクトリに配置してください。インデックスが作成されません。CMake パッケージでテストを設定したりビルドしたりしたくない場合は
--cmake-args -DBUILD_TESTING = 0
を渡します。パッケージから特定の1つのテストだけを実行したい場合は、次のコマンドを実行して下さい。
colcon test --packages-select YOUR_PKG_NAME --ctest-args -R YOUR_TEST_IN_PKG