>100 Views
August 06, 25
スライド概要
RTミドルウェアサマーキャンプ2025講演資料
「分散シミュレーション・ハブ 箱庭とは?」
本資料は、ロボット開発における複数シミュレータの統合活用を支援する「箱庭シミュレーション・ハブ」の概要と、その思想・構成・実装事例について解説したものです。
主な内容:
- MuJoCo・Unity・PX4等の複数環境を統合するハブ構想
- 時刻同期・通信構造(PDU)の考え方と利点
- RTM(OpenRTM-aist)環境からの連携方法
実例に基づくドローン・ロボット連携デモ
「箱庭の思想」:フレームワークではなく設計の自由を支えるもの
箱庭は、既存RTC資産を活かしたまま、軽量・高速なシミュレーション統合を実現する新たな選択肢です。
本資料を通じて、その構造と可能性をご覧いただければ幸いです。
TOPPERS/箱庭WG活動でUnityやらAthrillやらmROSやら触ってます。 最近は仕事の関係でWeb系の技術に注力しつつ、箱庭への転用を模索しています。 2023年8月1日:合同会社箱庭ラボに移動しました
分散シミュレーション・ハブ 箱庭とは? 合同会社箱庭ラボ CTO 森崇
アジェンダ • デモ中心でいきます(まずは見て) • ロボットシミュレーションの壁と現実 • 箱庭のシミュレーション・ハブ構想 • 箱庭のアーキテクチャとコア機能とは? • RTMとの接続構成のイメージ • ROSとの違いは?そもそも箱庭ってどういう思想? 2
見て・触れて・わかる。箱庭のデモ集 PX4 & QGC & Unity 生成AI(Claude) / MCP連携 物流&ドローン (MuJoCo) バーチャルドローン観光 デジタルツイン MacBook Pro Virtual Real TurtleBot3 Virtual & Real Ubuntu 22.0.4
PX4 & QGC & Unity https://www.youtube.com/watch?v=IEYTQkZcwB0
バーチャルドローン観光
物流&ドローン(MuJoCo) https://www.youtube.com/watch?v=O0LY4j9NN9k
生成AI(Claude) / MCP連携 https://www.youtube.com/watch?v=hbdJr-2zLBs
デジタルツイン https://www.youtube.com/watch?v=N-kUh9P_jvI URG-04LX-UG01 (北陽電機) QUEST3 MacBook Pro
ロボットシミュレーションの壁と現実 システム全体の統合が難しい ・非統合状態 - 各システムが孤立している・・ バーチャル空間 ・コミュニケーションの壁 - システム間のデータ共有が困難 - システム間の時刻同期が困難 ・相互運用性の壁 - バーチャル世界のシミュレーション - リアル世界での実証実験との統合 - リアルとバーチャル間の相互運用 箱庭はこれらを解決し、 スムーズなシミュレーション連携を実現を 目指している Simulator1 Simulator2 実証実験場1 実証実験場2 リアル空間 9
箱庭のシミュレーション・ハブ構想 多様なシミュレーションを統合するプラットフォーム →分散シミュレーションハブ - 単一のシミュレータではありません - 異なる機能やプログラム、シミュレータなどを統合します 環境 モデ ル 3Dモデル コントローラ Unity等 3Dシミュレータ 制御アプリケーション 通信ミドル 箱庭 ランタイム 箱庭 アセット アセット管理・制御 アセット間通信 スケジューリング・時間管理 シミュレーション制御 10
箱庭のアーキテクチャとコア機能とは? [Legend] External System Hakoniwa Component Cloud Hakoniwa API Hakoniwa Asset Hakoniwa Asset Hakoniwa Conductor Simulation Time Load Balancing Computer Hakoniwa PDU Data Hakoniwa time Hakoniwa Core Personal Computer Hakoniwa PDU Communication existing simulators and programs Hakoniwa Core Real System Hakoniwa Bridge
箱庭ハブ構造を支える5つの技術要素 カテゴリ ユーザ機能 コア機能 コア機能 コア機能 拡張機能 構成要素 説明 箱庭アセット 既存のシミュレータやプログラムを箱庭APIを通して箱庭アセット化することで、異なるシミュ レータやシステム間の通信を統一的に扱えるようにする。例えば、Gazeboで物理シミュレー ションを行いながら、Unityでのビジュアライズを統合的に運用できる環境を構築することが可 能である。 箱庭API 箱庭APIは、モジュール性を実現するための中核的な役割を果たしている。また、APIは、異 なるプログラミング言語や環境に依存しない設計(例: Python、C/C++、C#、Rust、 Elixirなどへの対応)を採用しており、幅広いカスタマイズニーズに応えることができる。 箱庭時刻同期 箱庭アセット間のシミュレーション整合性を保つためには、時刻の同期が必要である。箱庭は 分散シミュレーションを可能にする独自の「時刻同期機能」を備えており、リアルタイム性と再 現性のあるシミュレーションを実現する。 箱庭PDUデータ 箱庭アセット間の通信データの形式を標準化している。特に、ROS IDL(Interface Definition Language)を用いることで通信データの構造を共通化し、各システム間でス ムーズなデータ交換を実現する。また、箱庭は多様な通信プロトコル(例: ROS、Zenoh、 MQTT、UDP、共有メモリ)に対応しており、異なる環境や要件に柔軟に適応できる。 箱庭コンポーネント 箱庭コンダクタや箱庭ブリッジといった主要なコンポーネントを提供する。箱庭コンダクタは、シ ミュレーション環境全体の制御を担い、時刻同期や負荷分散を実現する。一方、箱庭ブリッ ジは、仮想空間と現実空間を繋ぐ中継役として機能し、リアルタイム通信を円滑に行う。 12
箱庭ブリッジ 箱庭ブリッジを通して、様々な機能拡張する方法を解説します。 箱庭コア機能 箱庭PDU 箱庭PDU ARゲーム 空間 箱庭PDU 箱庭PDU (ARゲーム側) 箱庭アセット 箱庭PDU 箱庭PDU Web空間 ROS システム 箱庭ブリッジ (SHM) 箱庭ブリッジ 箱庭ブリッジ (Web側) 箱庭ブリッジ (MAVLINK) 箱庭PDU 箱庭PDU 箱庭ブリッジ (MCP) 箱庭PDU AIエージェント 箱庭PDU Mission Planner
箱庭構成要素とOSSリポジトリマップ 最新の箱庭ソフトウェアスタックと開発リポジトリマップです! 箱庭 コンダクタ 箱庭SIM Unreal Engine プラグイン 箱庭SIM Unityパッケージ Athrill (マイコンシミュレータ) 箱庭MuJoCo アセット Athrill Device 箱庭ドローン シミュレータ (Unity) 箱庭ドローン シミュレータ (Engine) 無償版 PRO版 (周辺デバイス) 箱庭ROS ブリッジ 箱庭AR ブリッジ 箱庭PDU通信 Unreal Engine プラグイン 箱庭 MAVLINK ブリッジ 箱庭Web サーバー 箱庭PDU通信 Unityパッケージ 箱庭API(言語バインディング向け) 箱庭PDUデータ バイナリ変換機能 箱庭コア機能 [凡例] 箱庭アセット 箱庭コンポーネント 箱庭コア 箱庭ライブラリ群 14
箱庭コア機能とは? • 箱庭時刻とは? • 箱庭PDUとは? 15
シミュレーション時刻と時刻同期の背景 16 • はじめに • 様々なシミュレータが混在を許す環境を想像してみてください • 各シミュレータはそれぞれ固有のシミュレーション時間を持ちます • どんな問題が起きる? • 各シミュレータが独立して動作するとシミュレーション実行タイミングがズレてしまいます • 何があれば良いか? • 全てのシミュレータが時間同期できる機能が必要ですね シミュレーション時間同期 シミュレーション時間1 シミュレーション時間2 シミュレーション時間3 シミュレータ1 シミュレータ2 シミュレータ3
既存の時間同期方式 17 • FMI(Functional Mock-up Interface) • 欧州の公的プロジェクトが規格化 • シミュレーションツールに依存しないモデル接続のための共通インターフェース • FMIのシミュレーション時間同期方式 • ME(Model Exchange) FMI tool1 tool2 tool3 supplier1 supplier2 supplier3 • 完全に時間同期が可能 • CS(Co-Simulation) • シミュレータ間の遅延時間(固定)を許容 • 適切な遅延時間をユーザが選択する • 考察 • いずれも中央制御方式であるため,精度調整は容易であるがシステム構 成要素が増えると処理オーバーヘッドが高くなると考えられる.
箱庭の時刻同期方式 18 • 箱庭の時間同期方式 • 中央制御方式ではなく,並列化が容易な分散制御方式でのシ ミュレーション時間同期方式 • 仕組み(ハーモニー) • 各シミュレータは 箱庭時間(マエストロ)をみながら, シミュレーション時間調整し時間同期する(ハーモニー) シミュレーション時間同 期のためのピンポンはし ない.ミュレータのベス ト・エフォートでの並列 同期を実施 箱庭時間 • 箱庭時間より早い場合 • シミュレーション時間を遅くする • 箱庭時間より遅い場合 • シミュレーション時間を早くする • 各シミュレータ時間を可視化 • 時間同期の程度を定量化 • 環境スペックの妥当性を評価・調整 シミュレーション時間1 シミュレーション時間2 シミュレーション時間3 シミュレータ1 シミュレータ2 シミュレータ3 各シミュレータは箱庭 時間に対して自分のシ ミュレーション時間の進 め方を調整する
シミュレーション時刻の分布 T (simulation time) T1 T2 T3 Tc ... Core lives in this timezone. (1) max Ti ≦ Tc ≦ min Ti + dmax TN All Assets live within dmax time difference. min Ti max Ti dmax (2) |Ti - Tj | ≦ dmax for ∀ i, j 全ての箱庭アセットは、最大許容遅延時間 d_max の範囲に収まります(数学的に証明可能) 19
箱庭PDUとは何か • 箱庭PDU(Protocol Data Unit)は、箱庭アセットが互いに通信するためのデータ単位です。 • PDUデータ型の定義: ROS IDL (Interface Definition Language) というインターフェース記述言語 • PDUデータは、様々な通信プロトコルを介してデータ交換されます。 • UDP, MQTT, ROS, Zenoh, 共有メモリ 20
箱庭の通信プロトコル・アーキテクチャ(1/4) • UDP通信 21
箱庭の通信プロトコル・アーキテクチャ(2/4) • MQTT通信 22
箱庭の通信プロトコル・アーキテクチャ(3/4) • ROS通信 23
箱庭の通信プロトコル・アーキテクチャ(3/4) • 共有メモリ 24
RTMとの接続構成のイメージ 共有メモリベースで接続する方式: RTC RTC 箱庭ブリッジ RTC/箱庭アセット 箱庭 コンダクタ RTM Unity 箱庭コア機能 OpenRTM-aist RT-Middleware(RTM) MuJoCo 箱庭-TOPPERS RT要素のインテグレーション 箱庭コア機能 のためのミドルウエア RT-Component (RTC) RT-Middlewareにおける ソフトウエアの基本単位 箱庭アセット 箱庭要素のインテンテグレーションの ためのミドルウェア 箱庭における ソフトウェアの基本単位 25
ROSとの違いは? そもそも箱庭ってどういう思想? • ROS側: • 全体像 • 通信ランタイム・アーキテクチャ • 通信まわりの開発フロー • 通信プログラム • 箱庭側: • 全体像 • 通信ランタイム・アーキテクチャ • 通信まわりの開発フロー • 通信プログラム ROS vs 箱庭 26
ROSの全体像 通信ランタイム (rclcpp, rmw, dds..) 通信記述形式 (ROS IDL) 通信構成の可視化 ロボット記述形式 (URDF) (rqt_graph) ログ/デバッグ機能 (rosbag, rostopic..) ROS Message ロボット可視化 (rviz) ロボットシミュレータ ロボット定義 (gazebo) 各種ツール群 (MoveIt!, Navigation Stack..) ビルドシステム パッケージツール (ros2 pkg..) (colcon build..) 管理ツール群 起動システム (ros2 launch..) 27
箱庭の全体像 • 箱庭は、 • 通信をROS IDLで定義 • 箱庭PDUを中心にしたモジュール連携 • を目指しています。 ロボット 通信構成定義 通信記述形式 (ROS IDL) 通信ランタイム (udp, websocket, mqtt, zenoh...) 通信構成の可視化 ログ/デバッグ機能 (箱庭コマンド..) • 最小構成で、 • 既存のシステムへの適合を目的とし、 • 管理ツール群も必要最小限で 箱庭PDU ロボット可視化 (Unity, Unreal..) ロボットシミュレータ • と考えてます。 (MuJoCo, 箱庭ドローン..) 各種ツール群 ビルドシステム パッケージツール 管理ツール群 起動システム 28
ROSの通信ランタイム・アーキテクチャ ROSのアプリケーション ロボット制御 プログラム msgクラス インタスタンス クライアントライブラリ (rclcpp, rclpy, rcljava, ...) クライアントライブラリAPI (ノード管理、状態管理, ...) 通信ミドルウェア API (rmw) DDS CDR RTPS (バイナリ変換) (通信プロトコル) 通信(UDP, TCP,..) ROSの通信ランタイム 29
箱庭の通信ランタイム・アーキテクチャ ROS 2は階層的な関数呼び出しで通信の複雑さを隠蔽する 箱庭は共有メモリを介してシミュレーションと通信の役割を完全に分離する 箱庭アセット msgクラス インタスタンス 箱庭PDU変換 ライブラリ (バイナリ変換) 箱庭アセット ロボット制御 プログラム 箱庭ブリッジ (WebSocket) 箱庭アセットAPI 箱庭ブリッジ (Zenoh) ・・・ 箱庭ブリッジ (Mqtt) 箱庭アセットAPI (C/C++, Python..) (C/C++, Python..) 箱庭アセットライブラリAPI 箱庭アセットライブラリAPI (箱庭アセット時刻管理、状態管理, ...) (箱庭アセット時刻管理、状態管理, ...) 箱庭PDUデータ (共有メモリ) 箱庭のシミュレーション・ランタイム 箱庭の通信ランタイム 30
ROSの開発フロー(通信まわり) アプリ設計 情報 通信設計 情報 ROS Message 定義 msgファイル プロジェクト作成 プロジェクト ROS Message ビルド msgヘッダ ファイル ROS プログラム 作成 アプリ ビルド アプリ実装 実行バイナリ 31
箱庭の開発フロー(通信まわり) 通信設計 情報 通信方式選定 (箱庭ブリッジ選定) 箱庭ブリッジ アプリ設計 情報 ロボット 通信構成定義 ROS Message 定義 csvファイル msgファイル msgヘッダ ファイル 箱庭アセット作成 箱庭PDU生成 箱庭PDU変換 ライブラリ 箱庭アセット 通信構成定義 アプリ ビルド jsonファイル 実行バイナリ アプリ実装 32
ROSのプログラム pub 側のROSノード sub側のROSノード msgヘッダ ファイル msgクラス インタスタンス ROS トピック pub API ユーザ アプリケーション (pub側) ROSトピック ROS通信 ROS トピック sub callback msgクラス インタスタンス ユーザ アプリケーション (sub側) クライアント ライブラリ・ヘッダ 33
箱庭のプログラム pub 側の箱庭アセット sub側の箱庭アセット msgヘッダ ファイル 箱庭アセット API (write) msgクラス インタスタンス 箱庭PDU 箱庭アセット API (read) 箱庭PDU変換 ライブラリ msgクラス インタスタンス 箱庭PDU変換 ライブラリ ユーザ アプリケーション (pub側) 共有メモリ / 箱庭ブリッジ通信 箱庭アセットAPI ヘッダ ユーザ アプリケーション (sub側) 34
ROS vs 箱庭 項目 ROS 2 箱庭 (Hakoniwa) 全体像 ロボット開発向けに最適化 された巨大なフレームワーク 箱庭PDUを中心に横の繋がりを目指す 部品化の仕組み 通信ランタイム・ アーキテクチャ 階層的な関数呼び出し によるトップダウン構造 共有メモリを介した 疎結合な水平分離構造 通信まわりの 開発フロー ROS Messageをベースにして、 バイナリ変換、通信方式は ROSツールチェーンが対応 ROS Messageをベースにして、 バイナリ変換、通信方式は ユーザが生成/選択 通信プログラム バイナリ変換と通信方式を隠蔽化 バイナリ変換と通信方式を選択 35
ROS vs 箱庭(サマリ) • ROS • ROSは、ロボット開発者向けの課題に向き合って最適化されたフレームワーク • 箱庭 • 箱庭は、特定の目的のために設計されたフレームワークではない。 • まだ見ぬ未来のシステムに向けて、開かれている。 • そのため、さまざまな技術を部品化し、ユーザに選択を委ねる思想のもとに作られている。 • だから、難しいし、利用する技術に対する知識が求められる。 • しかし、それこそが、ユーザの技術育成につながる。 • そして、おそらく、それこそが技術の民主化と呼べるのではないか。 36