amentの概要
amentはcatkinの進化形。※catkinはROS1時代のビルドシステム。
複数のパッケージに分かれたアプリケーションのビルドを効率化するためのシステム。
- パッケージを設定、ビルド、インストールするためのシステム (例:CMakeやPython setuptools)
- 依存関係を考慮し、パッケージを正しい順番でビルドするためのツール
各パッケージは独立してビルドされ、他のパッケージがその成果物を利用できるように環境を整える。
成果物が一般的な場所(例: /usr)にインストールされる場合、特別な設定は不要。
amentコマンドラインツール
パッケージのビルド、テスト、インストール、アンインストールを行うPythonツール。
ワークスペース内のパッケージを順番にビルドする。異なるビルドシステムにも対応できる柔軟性を持つ。
(異なるビルドシステム:現在はCMakeとPythonがサポートされている)
ビルドタイプ:ament_cmake
CMakeを使ってパッケージを簡単に作成するためのツール。
- インクルードディレクトリやライブラリの情報を他のパッケージに伝える設定ファイルを自動生成。
CMakeLists.txt - テストの登録を簡単にし、テスト結果をJUnit形式で出力。
- PATHなどの環境変数を自動で拡張。
- パッケージ情報を管理するリソースインデックスを作成。
- アンインストール機能も利用可能。
これらの機能はモジュール化されており、新しい機能を追加できる。
ビルドタイプ:ament_python
- ‘setup.py’を使用してsetuptoolsでパッケージをビルド
- 標準のPythonパッケージビルドのワークフローを使用。
- パッケージのマニュフェストをインストール先にコピー
- 環境変数’PYTHONPATH’と’PATH’を拡張し、パッケージのPythonモジュールと実行可能ファイルを含める。
環境設定
- インストール先:一般的にFilesystem Hierarchy Standard(FHS)に従うべきですが、
amentでは矯正されていない - 環境設定の必要性:パッケージがインストールされる場所によって、リソースを見つけるために環境を設定する必要があります。
- パッケージ固有のスクリプト:各パッケージは、自分の環境設定に合わせたシェルスクリプトを提供できます。これらのスクリプトは
<prefix>/share/<pkg-name>
フォルダにあり、local_setup.*
ファイルが環境変数を更新します。 - amentツールの役割:インストール先のルートには、amentツールが生成する異なるシェルスクリプトがあります。
local_setup.*
ファイルは、すべてのパッケージの固有の設定ファイルを読み込みます。setup.*
ファイルは、このインストール先の外にあるワークスペースも考慮し、その設定ファイルを読み込んでからlocal_setup.*
ファイルを読み込みます。
シンボリックリンクによるインストール (オプション)
- 開発効率の向上: コードの変更、ビルド、インストール、実行を効率的に行うために、シンボリックリンクを利用することが重要です。通常、インストール時にはリソースをソーススペースから最終的なインストール場所にコピーしますが、amentではシンボリックリンクを使用するオプションを提供しています(プラットフォームがサポートしている場合)。
- シンボリックリンクの利点::ソーススペース内のリソースを変更し、インストールステップをスキップできるため、開発効率が向上します。
- CMakeパッケージ::
install()
関数をオーバーライドすることでシンボリックリンクを使用できます。 - Pythonパッケージ: 開発モードを利用してパッケージをインストールします。
- 有効化方法::シンボリックリンクによるインストールはオプション機能であり、コマンドラインオプション
--symlink-install
を使用して明示的に有効にする必要があります。
実行例
前提条件
- Raspberry pi 4
- ubuntu 22.04
- ROS2 humble インストール済
- colconインストール済
- pythonでコーディングしていく
開発専用のワークスペースというディレクトリ(trial_ws)を~/の直下に作る。
cd ~/
mkdir trial_ws
ROS2では、プログラムコードをパッケージ単位でまとめて扱う。
パッケージは機能単位ごとにまとめて作る。
パッケージはワークスペースの直下に作るディレクトリsrcに配置される。
cd ~/trial_ws
mkdir src
ターミナルでROS2のコマンドが使えるようにし、ROS2の環境設定をするため、次のコマンドを入力する。
source /opt/ros/hubmle/setup.bash
パッケージ ‘dummy_package’をsrcディレクトリの中に作る。
cd src
ros2 pkg create --build-type ament_python dummy_package
Pythonでコーディングしていくので、ament_python
パッケージ名はdummy_package
dummy_packageディレクトリ内に下記が作成されているか確認する。
- dummy_package:パッケージと同名のディレクトリ
- package.xml:ソースファイルをビルドするためのファイル
- resource
- setup.cfg
- setup.py:ソースファイルをビルドするためのファイル
- test
colconでビルドする。 ※colcon build するときは、必ずワークスペースで実行する
cd ~/trial_ws
colcon build
trial_wsの中を確認
- build:作成されたディレクトリ
- install:作成されたディレクトリ
- log:作成されたディレクトリ
- src:もともとあったディレクトリ
ビルド後は、ワークスペースの環境変数が変わっているので、ワークスペースとターミナルの設定するため
次のコマンドを入力する。このコマンドもワークスペースのディレクトリで入力する。
今回は ~/trial_ws
. install /setup.bush
一連の流れ
- パッケージ作成
- Pythonのソースファイル作成
- setup.pyを書き換え
- package.xmlを書き換え
- ビルド
コメント