これから数回に分けて、箱庭の技術とその応用先について解説したいと思います。
第一回目となる今回は、箱庭のコア技術についてです(下図)。
箱庭コア機能
箱庭の中核をなす機能(箱庭コア機能)は、非常にシンプルで、以下の4つに集約されます。
- スケジューリング
- 同期・通信
- 時間管理
- アセット管理
箱庭コア機能の利用者は「箱庭アセット(後述)」であり、箱庭のAPIを呼び出して箱庭の機能を呼び出しする構成です。
これらの機能セット、実はOSが一般的に準備する機能であることにお気づきでしょうか。OSの場合は、利用者はタスク(汎用OSの場合はプロセス)であり、OSはそれらのタスク管理、スケジューリング、同期・通信、時間管理などを行います。
箱庭の機能セットは、そのアナロジーから、箱庭として必要なものをピックアップ・導出しています(各機能の詳細解説は別のブログで説明します)。
箱庭アセット
箱庭アセットの定義は、箱庭WG内でも議論しきれていないのですが、少なくとも
『箱庭のAPIを利用して作成された再利用可能なアプリケーション』
であると考えています。
では、その箱庭アセットとは、具体的にどういうものが想定されているのか興味ありませんか。
箱庭アセットは、とっても大事な概念でありますが、あまり解説されている記事がないので、ここで具体的に説明したいと思います。
箱庭アセットの具体例
箱庭は全体結合シミュレーション環境ですので、箱庭の利用者大きく分けて以下に分類されます。
- 被制御対象
- ロボット、ドローン、信号機、踏切、電車、車などなど
- 制御プログラム
- 被制御対象を制御するためのプログラムであり、様々な言語で開発されたプログラム(Python, C/C++, Rust, Ruby, Elixir,..)
- シミュレータ
- 被制御対象向けのシミュレータ(Unity, Unreal Engine, Gazebo, PyBullet など)
- 制御プログラム向けのシミュレータ(マイコンシミュレータAthrillなど)
- シミュレーション自動化機能
- 箱庭のAPIには、シミュレーションを実行、停止、リセットする機能があります。
- これらの機能を利用する、以下のような自動化機能が実現できます。
- ロボットの強化学習(アクション→評価→再実行を繰り返す)
- 物理シミュレーションを含めた全体結合テスト自動実行(CI/CD環境として)
- ビジュアライズ機能
- 箱庭アセットとして、Unity等を利用すれば被制御対象であるロボット等を容易に可視化できます。
- また、制御プログラムとの間の通信データは、箱庭の通信データ(PDU)を参照することで、データの流れを可視化できます。
- さらに、そのデータをROS2のデータとしても可視化できるようになります。
- さらなる応用機能
- 箱庭の上では、様々な制御プログラムを利用できますので、箱庭アセットの可能性はとても広いと考えています。
- 特に、Pythonはその応用範囲は広く、AIとの連携が期待できます。
- 例えば、Python上でAIエージェントを作成して、箱庭APIを使ってシミュレーション連携させるようなことも容易に実現できます。
このように、箱庭のアセットはシミュレーションを基点として、再利用可能なアセットがプラグ&プレイできるところが特徴的なところであり、様々なアセットを組み合わせることができることがウリの1つです!
組み合わせによって、その可能性はどんどん広がっていきます。下図はそのようなイメージ図です。
箱庭コア機能の実装技術と目指すところ
箱庭コア機能の実装技術ですが、プログラミング言語はC/C++を採用しています。理由はいくつかあります。
- 実行性能面で有利であること
- 多言語対応が容易であること
- 箱庭コア機能を共有ライブラリ化することで、ゲームエンジン等、他のアプリケーションからも利用できること
上図は、箱庭コア機能のプログラミング言語を C/C++ にすることで見えてくるビジョンです(UNIXカーネルのシェルのイメージに似ていますよね)。
- 多言語向け
- 箱庭のAPIはC言語の関数として公開できますので、それを別言語向けに変換するラッパーコード(C言語)を作ることで多言語化が容易に実現できます
- ゲームエンジン向け
- 箱庭コア機能は共有ライブラリ(.so, .dylib)で提供できますので、ゲームエンジンから呼び出すことは容易に実現できます
- テスト自動化向け
- 箱庭のコマンドを利用することで、シェルスクリプト(Bashなど)でもシミュレーション実行制御できますので、スクリプトベースのテスト自動化も容易に実現できます
- 箱庭デーモン
- 箱庭コア機能を別のノード(マシン)で利用するには、遠隔から箱庭のAPIを呼び出す必要があります。そのために、RPC(リモート・プロシージャ・コール)実行するための箱庭デーモン(箱庭コンダクタ)を用意しています。RPCの実装技術としては、Web系でよく使われている gRPC を採用しています。gRPC は、プロトコル定義さえしておけば、様々なプログラミング言語にRPCの通信プログラムを自動生成してくれますので、箱庭のRPC通信部分は様々な言語に対応することが容易にできます。
- 現時点では、RustとC#向けに実装されています。
このように、箱庭は様々な箱庭アセットを色々な言語で作成することができますし、すでにあるプログラムでも、箱庭のAPIを利用することで、ほぼそのまま箱庭アセットとして利用することが可能になります。
さらに、箱庭は分散シミュレーション環境も志向しており、箱庭デーモンを通して、遠隔にいる箱庭アセットとも通信してシミュレーションすることが可能になります。
コメントを残す