ROS2 Tutorials – Using colcon to build packages

はじめに

今回は colcon を使ったパッケージのビルドをトレースする.ここからのチュートリアルは徐々に実践的な内容になる.

ROSのビルド環境は歴史的にはいくつかのビルドツールを経て colcon に至っているらしいが,面倒なのでここでは省略.

Using colcon to build packages — ROS 2 Documentation: Iron documentation

ビルド環境の基礎

ディレクトリ構造

ROS2 のワークスペースは次のようなディレクトリ構造となる.

./workspace/
├ build/
├ install/
├ log/
└ src/
    └ package/
dir name説明
buildビルド時の中間ファイルが格納される.
installパッケージのインストール先.
logcolcon を呼び出した際のログが格納される.
src各パッケージのソースコードを格納する.

overlay and underlay

ここまでにバイナリもしくはソースコードからビルドして ROS2 環境を導入したと思うが,ワークスペースではそこで導入していたツールやバイナリを依存関係として利用する.

最初に導入した ROS2 環境を underlay,各ワークスペースを overlay と呼ぶ.

すべてのパッケージを同じワークスペースに入れるのではなく,オーバーレイを利用して適宜ワークスペースを小分けにする事が推奨されている.

colcon を使ってビルド

まずは underlay となる ros2 の環境変数を設定しておく.

$ source ~/ros2_iron/install/setup.bash

ワークスペースを作る.

$ mkdir -p ros2-ws/src
$ cd ros2-ws
$ tree -L 1
.
└── src

2 directories, 0 files

サンプルファイルを src に配置する.

$ git clone https://github.com/ros2/examples src/examples -b iron
$ tree -L 3
.
└── src
    └── examples
        ├── CODEOWNERS
        ├── CONTRIBUTING.md
        ├── LICENSE
        ├── README.md
        ├── launch_testing
        ├── rclcpp
        └── rclpy

6 directories, 4 files

colcon でビルドする.ビルドが終わると基礎のセクションで説明した src 以外のディレクトリも生成される.

$ colcon build --symlink-install
-- 中略 --
Summary: 22 packages finished [1min 15s]
  10 packages had stderr output: examples_rclpy_executors examples_rclpy_guard_conditions examples_rclpy_minimal_action_client examples_rclpy_minimal_action_server examples_rclpy_minimal_client examples_rclpy_minimal_publisher examples_rclpy_minimal_service examples_rclpy_minimal_subscriber examples_rclpy_pointcloud_publisher launch_testing_examples
$ tree -L 1
.
├── build
├── install
├── log
└── src

5 directories, 0 files

ちなみに –symlink-install をつけると,ファイルをコピーする代わりにシンボリックリンクを利用するようになる.python 等のコンパイルされないソースの変更を即時反映できるようになり,反復作業を高速化できる.

  --symlink-install     Use symlinks instead of copying files where possible

作成したパッケージをテストする.

$ colcon test
-- 中略 --
Summary: 22 packages finished [48.8s]
  10 packages had stderr output: examples_rclpy_executors examples_rclpy_guard_conditions examples_rclpy_minimal_action_client examples_rclpy_minimal_action_server examples_rclpy_minimal_client examples_rclpy_minimal_publisher examples_rclpy_minimal_service examples_rclpy_minimal_subscriber examples_rclpy_pointcloud_publisher launch_testing_examples

ここまででワークスペース内のビルドが完了したので,overlay を設定してデモを動かしてみる.

$ source install/setup.bash
$ ros2 run examples_rclcpp_minimal_subscriber subscriber_member_function
[INFO] [minimal_subscriber]: I heard: 'Hello, world! 0'
[INFO] [minimal_subscriber]: I heard: 'Hello, world! 1'
[INFO] [minimal_subscriber]: I heard: 'Hello, world! 2'
$ source install/setup.bash
$ ros2 run examples_rclcpp_minimal_publisher publisher_member_function
[INFO] [minimal_publisher]: Publishing: 'Hello, world! 0'
[INFO] [minimal_publisher]: Publishing: 'Hello, world! 1'
[INFO] [minimal_publisher]: Publishing: 'Hello, world! 2'

独自パッケージを作成する

colcon では REP149 に基づいた package.xml を利用してパッケージを定義できる.

また推奨されるビルドタイプは ament_cmakeament_python となっている.cmake パッケージも利用できる.

ament_cmake を利用した例は demo_nodes_cpp を参照.

ament_python を ament_index_python を参照.

ros2 pkg create コマンドを利用するとテンプレートからパッケージを作成できる.ここではこんなコマンドがあるよという紹介だけ.

$ cd ros2-ws/src
$ ros2 pkg create my_package
going to create a new package
package name: my_package
destination directory: /path/to/row2-ws/src
package format: 3
version: 0.0.0
description: TODO: Package description
maintainer: ['*****']
licenses: ['TODO: License declaration']
build type: ament_cmake
dependencies: []
creating folder ./my_package
creating ./my_package/package.xml
creating source and include folder
creating folder ./my_package/src
creating folder ./my_package/include/my_package
creating ./my_package/CMakeLists.txt

[WARNING]: Unknown license 'TODO: License declaration'.  This has been set in the package.xml, but no LICENSE file has been created.
It is recommended to use one of the ament license identifiers:
Apache-2.0
BSL-1.0
BSD-2.0
BSD-2-Clause
BSD-3-Clause
GPL-3.0-only
LGPL-3.0-only
MIT
MIT-0

おわりに

今回は colcon を使ったビルドの流れをトレースした.パッケージの依存関係とか細かい話は以降のチュートリアルで説明する.

コメント

タイトルとURLをコピーしました