MoriKen's Journal

MoriKen's Journal

アラサー社会人博士による徒然日記。技術についてつらつら。だけだとコンテンツが貧弱なので、会社公認で大学院博士課程進学したで経緯や、独学でTOEICを475→910にしたノウハウを共有します。気が向いたらエッセイとかも。

【ROS 2】Colcon によるパッケージのビルド(公式文書和訳)

Sponsored Link

ROS 2 公式文書(英語) 日本語訳シリーズです。

本ブログの日本語翻訳版のトップページは以下のリンクを参照下さい。

www.moriken254.com

ここでは、colconを使用して ROS ワークスペースを作成および構築する方法の簡単なチュートリアルを紹介します。これは実用的なチュートリアルであり、コアドキュメントを置き換えるようには設計されていません。

Bouncy より前の ROS 2リリースでは、amentチュートリアルで説明されている ament_tools(英語) が使用されていました。

背景

colconは、従来の ROS 1 ビルドツールcatkin_makecatkin_make_isolatedcatkin_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 インストール環境の上位に位置するオーバーレイとなります。一般に、すべてのパッケージを同じワークスペースに配置するのではなく、少数のパッケージを繰り返し処理する場合にはオーバーレイを使用することをお勧めします。

f:id:MoriKen254:20190505233552p:plain

ワークスペースをビルドする

注意

Windows でパッケージを構築するには、Visual Studio 環境で実行する必要があります。詳細については、ROS 2 コードの構築を参照してください。

手順

ワークスペースのルートで、colcon buildを実行してください。 ament_cmakeなどのビルドタイプはdevel空間の概念をサポートしておらず、パッケージのインストールが必須となるため、colcon はオプション--symlink-installをサポートします。これにより、src空間内のファイル(例えば、Python ファイルまたはコンパイルされていない他のリソース)を変更することによってインストールされたファイルが変更されるようになり、ビルドの順序実行を高速化できます。

colcon build --symlink-install

f:id:MoriKen254:20190506001523p:plain

ビルドが終了したら、buildinstalllogの各ディレクトリが表示されます。

.
├── build
├── install
├── log
└── src

4 directories, 0 files

テストを実行する

作成したパッケージに対してテストを実行するには、次のコマンドを実行します。

colcon test

f:id:MoriKen254:20190506001351p:plain

環境変数を設定する

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

パブリッシャとサブスクライバからのメッセージにおいて、インデックスがインクリメントされていくのが分かります。

f:id:MoriKen254:20190506002042p:plain

オリジナルパッケージの作成

colcon は REP 149 で定義されているpackage.xml仕様を使用します(フォーマット2もサポートされています)。

colcon は複数のビルドタイプをサポートしています。推奨されるビルドタイプはament_cmakeament_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

翻訳元文書

index.ros.org

関連記事

www.moriken254.com

www.moriken254.com