Bazel and ROS 2のインストールと動作確認
海洋ロボコンをやってた人です。
今回はBazel と ROS 2について調べたことと、動作確認についてのチップスを備忘録として記載していきます。
記事を書いた理由は以下です。
- Bazelとは?を知る
- ROS 2での利用も検討されているので、実際に使ってみたい
何かコメントあれば積極的に募集します。
また、適宜更新あれば追記します。
1. Bazel
「Bazel」は、Google開発のオープンソースビルドツールで動画からは「ベイゾル」と発音されています。
なので、私も本家に発音を合わせています。
Full Event | Bazel Day 2023 on Google Open Source Live
First things, What is Bazel?
Bazel is an open source build test tool used by orgnaizations of all sizes and technical complexity with a unique set of attributes and behaviros.
Bazel is highly scalable.
With Bazel, you can build large code bases very quickly using parallel execution, remote caching and remote execution.
1.1 Install
基本は上述の通りにインストールします。今回はUbuntu 22.04 LTSを使用してテストします(2024/08現在)
sudo apt install apt-transport-https curl gnupg -y
curl -fsSL https://bazel.build/bazel-release.pub.gpg | gpg --dearmor >bazel-archive-keyring.gpg
sudo mv bazel-archive-keyring.gpg /usr/share/keyrings
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/bazel-archive-keyring.gpg] https://storage.googleapis.com/bazel-apt stable jdk1.8" | sudo tee /etc/apt/sources.list.d/bazel.list
sudo apt update && sudo apt install bazel
bazel --version # bazel 7.3.1
1.2 Tutorial
bazelのバージョン確認までできたら、実際にテストコードを作成しbazelでビルド/実行してみます。
テストコードは以下を参照して作成しました、ありがとうございます。
mkdir -p bazel_ws/hello_world
cd ~/bazel_ws/hello_world
bazel build //main:helloworld
bazel run //main:helloworld
実際にテストコードを走らせると上述のようになるはずです。
2. Bazel ROS 2 & Ignition
調べるとROS 2をBazelで使用するためのOSSは様々あります。
このSecctionでは、BazelをROS 2で使用しようとしている利点およびコミュニティ、使い方についても記載していきます。
2.1 Comparing Colcon/CMake vs. Bazel
よく比較対象として挙げられるのがColcon/CMake vs. Bazelのようです。
以下でもBazel と ROS 2のビルドについて言及されています。
Bazel and ROS 2 – building large scale safety applications
上述動画内の06:30〜のComparingから引用して記載します。
Feature | Colcon/CMake | Bazel |
---|---|---|
Build Language | Imperative macro language, different definitions 命令型のマクロ言語、異なる定義 |
Declarative, abstract definition of build 宣言的で抽象的なビルド定義 |
Build Tool Variety | Various different build tools (CMakeLists.txt, setuptools, Make) さまざまなビルドツール (CMakeLists.txt, setuptools, Make) |
Full programming language (Starlark) for extension/customization 拡張・カスタマイズのためのプログラミング言語 (Starlark) |
Programming Language Support | C/C++ as (main) target language C/C++を主なターゲット言語としてサポート |
Multi-language support (Android/C/C++/Java/Python/C#/Go/Rust) 複数言語のサポート (Android/C/C++/Java/Python/C#/Go/Rust) |
Caching | Caching not safe, due to potentially missing dependencies 依存関係が欠けている可能性があるため、キャッシュが安全でない |
(Almost) Hermetic build in sandboxes ほぼ完全なサンドボックスビルド |
Dependency Management | Compile time and runtime dependency discovery コンパイル時および実行時に依存関係を発見 |
Explicit (full) dependency tree 明示的な(完全な)依存関係ツリー |
2.2 Others Community
またコニュニティとしての活動もあるようです。
Bazel は、make や cmake の代わりに使用できるオープンソースのビルドおよびテスト ツールです。Bazel はビルドの決定論に重点を置いており、高速で信頼性の高いビルド ツールとなっています。
Ignition リポジトリに Bazel ビルド サポートを追加するプロセスについて説明するとともに、bazel をビルド ツールとして使用する利点がいくつか紹介されています。
Ignition Community Meeting February 2022 — ROS 2 Control and Bazel Builds
2.3 How to use Bazel ROS 2
せっかくなので、Bazelを使用したROS 2のサンプルプログラムも動かしてみましょう。
使用するのはApexAIのrules_rosを使用します。
ApexAIのrules_rosは.bazelversion == 6.5.0でないと動かないようなので、バージョン指定してインストールをします。
sudo apt update && sudo apt install bazel-6.5.0
git clone https://github.com/ApexAI/rules_ros.git
cd ~/bazel_ws/rules_ros
bazel build @rules_ros//examples/hello_world
bazel run @rules_ros//examples/hello_world
bazel build @rules_ros//examples/bazel_simple_example:publisher
bazel build @rules_ros//examples/bazel_simple_example:subscriber
キャッシュのクリアは直接削除するか、bazel cleanコマンドを使用する
bazel clean --expunge
sudo rm -r /home/ubuntu/.cache/bazel/_bazel_ubuntu/*
となった場合は上述を参照してください。(これは私も解決できませんでした)
Python Interpreterの機能を追加する場合、therdpartyパッケージを追加するために以下を実行する必要があります。
bazel run @rules_ros//thirdparty/python:requirements_lock.update
bazel run @rules_ros//repos/config:repos_lock.update
元の ROS 2 リポジトリから知られている ros2.repos ファイルで指定された名前を持つ外部依存関係として利用する場合は以下を実行する必要があります。
bazel run @rules_ros//repos/config:repos_lock.update
他に以下でも動作確認ができたものは以下になります。
以上です。
Likeいただけると大変励みになりますので、よろしくお願いいたします。
Discussion