hakoniwa-drone-environment

430 Views

September 16, 25

スライド概要

## 📘 概要

本資料は、**箱庭ドローンシミュレータにおける環境シミュレーション拡張**について解説したチュートリアルです。
従来の温度・気圧・風・境界などの環境要素に加え、**電波強度(Signal Strength)** を新たにモデル化する方法を整理しました。

環境シミュレータとドローンシミュレータの **PDU(Protocol Data Unit)通信を介した相互作用** を中心に、

* 基本構成
* 環境データの伝搬仕組み
* Disturbance PDU の構造
* 処理フロー(環境側/ドローン側)
* 電波強度拡張の具体例(dBm, GPS SNR/DOP)

を段階的に解説しています。

---

## 🎯 想定する読者

* 箱庭ドローンシミュレータを使った研究・開発を始めたい方
* 環境シミュレーションを拡張し、独自要素(電波・降雨・霧など)を追加したい方
* PDU通信を理解し、実装へつなげたい技術者・研究者

---

## 🔧 この資料で得られること

* 箱庭ドローン環境シミュレータの基本構造を理解できる
* 環境データが PDU を通じてドローンシミュレータに渡る仕組みを把握できる
* 電波強度を例に、環境シミュレーションを拡張する設計手法を学べる

---

## 🔗 関連リンク

* [箱庭ドローンシミュレータ (GitHub)](https://github.com/toppers/hakoniwa-drone-core)
* [環境シミュレータ ドキュメント](https://github.com/toppers/hakoniwa-drone-core/blob/main/docs/environment/README-ja.md)
* [PDU 解説資料](https://www.docswell.com/s/kanetugu2015/ZQ8VN7-hakoniwa-pdu)

profile-image

TOPPERS/箱庭WG活動でUnityやらAthrillやらmROSやら触ってます。 最近は仕事の関係でWeb系の技術に注力しつつ、箱庭への転用を模索しています。 2023年8月1日:合同会社箱庭ラボに移動しました

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

ダウンロード

関連スライド

各ページのテキスト
1.

箱庭ドローン・デモシリーズ 環境シミュレーションの作り方 環境シミュレーションを自作する ― 風・温度・電波を定義する方法 合同会社箱庭ラボ CTO 森崇

2.

アジェンダ • 本資料の位置付け • 環境シミュレーションの基本構成 • 環境とドローンの相互シミュレーションの構成要素 • 環境データの設定例 • 環境シミュレーションの実行方法 • 環境データの拡張方法 2

3.

本資料の位置付け • 本資料は、箱庭ドローンシミュレータ(hakoniwa-drone-core) と 環境シミュレーション(hakoniwa-envsim) を連携させる上で必要となる 技術的情報を整理したものです。 • 本資料では、環境シミュレーションの基本構成、定義方法、実行手順、 • および拡張方法を体系的に示します。 • これにより、以下を実現できるようになります。 • 箱庭上で環境データ(風・温度・気圧など)を設定できる • ドローンシミュレーションと環境シミュレーションの相互作用を実行できる • 環境シミュレーションを拡張し、独自の物理・外界モデルを構築できる (箱庭ドローンのセンサ拡張には箱庭ドローンPROライセンスが必要となります) ※用語: 箱庭ドローンとは、無償版の箱庭ドローンシミュレータ(hakoniwa-drone-core)の省略名です。 箱庭ドローンPROは、有償版の箱庭ドローンシミュレータ(hakoniwa-drone-pro)を指します。 3

4.

なぜ環境シミュレーションが必要か? その環境でもちゃんと動くの? 物理環境 自然環境 電波・通信環境 うまくいかない時ってどうなるの? 箱庭の環境シミュレーションの目的: 現実を再現するためではなく、現実におき得るリスクを考察・体感し、 もしのリスクを自由に設定して、頑健な設計と円滑な合意形成を目指すこと 4

5.

環境シミュレーションの基本構成 • 箱庭で定義できる環境データと設定イメージ (2025/10/14時点) 1. 風、温度、気圧 2. バウンダリ(境界) 3D空間を下図のようにブロックで区切り、それぞれ 空間IDを定義します。 風、温度、気圧は、各空間のプロパティとして定義します。 シミュレーション空間内の物理的な境界 (地面、天井など)を定義できます。 天井 空間 ID=1 空間 ID=9 空間プロパティ (風、温度、気圧) 壁 床 5

6.

環境情報のデータ構造 • 環境情報は、json形式で定義します。座標系はROS座標系です。 空間情報 (area.json) space_areas 1..* area_properties 空間の識別ID 風の速度(m/s)をfloatで定義 AABB(最小点、最大点) による空間の範囲 ・temperature:float 温度を°Cで定義 ・sea_level_atm:float 海面気圧をatmで定義 ・gps_strength: float GPS電波強度 1 area_id 1 境界情報(矩形) (boundary.json) 0..* 0..* ・id: string プロパティの識別ID ・wind_velocity: (x, y, z) ・area_id: string ・bounds: AABB 空間プロパティ情報 (property.json) ・name: string 境界の名前 ・position: (x, y, z) 境界の中心位置を(m)を floatで定義 ・size: (x, y) 2Dとしての境界の 広さ(m)をfloatで定義 ・rotation: (roll, pitch, yaw) 境界の傾きをdegで定義 area_property_id 空間と空間プロパティの接続情報 (link.json) 6

7.

補足:AABBとは? AABB(axis-aligned bounding box) AABBはゲームエンジンやシミュレーションで最も使われる衝突判定の基本方式 ・軸に平行な最小点と最大点でボックスを定義する ・3次元でも「(min_x, min_y, min_z)」と「(max_x, max_y, max_z)」の2点で表現可能 ・点(ドローン位置など)がAABBに含まれるかどうかは、座標が min ≤ x ≤ max の範囲にあるか判定すれば良い ・ボックス間の重なり判定も、AABBの最小点・最大点を比較するだけでできる 最大 x ボックスAとボックスBの重なり判定: •A.max_x >= B.min_x かつ A.min_x < B.max_x •A.max_y >= B.min_y かつ A.min_y < B.max_y •A.max_z >= B.min_z かつ A.min_z < B.max_z この3つがすべて成立 → 重なりあり 入ってる 入っていない 最小 y 7

8.

アジェンダ • 環境シミュレーションの基本構成 • 環境とドローンの相互シミュレーションの構成要素 • 環境データの設定例 • 環境シミュレーションの実行方法 • 環境データの拡張方法 8

9.

環境データのデータ伝搬の仕組み(箱庭PDU) • 環境データだけあっても、シミュレーションとして成立しません。 • なぜか、データは入力であって、出力(ドローンの位置・姿勢)変換が必要 • だから、その入力データを箱庭ドローンに伝搬する仕組みが必要になる • それが、箱庭PDUなのだ! Drone’s Disturbance (環境データ) ドローンシミュレーション 環境シミュレーション Drone’s Pose/Orientation (ドローンの位置・姿勢) 箱庭PDU 9

10.

Disturbance PDUとは • 箱庭PDUデータであり、環境データを伝播する役割をになっています。 • Disturbance は複数のサブメッセージで構成されます。 • Disturbanceのメッセージ構造: • hako_msgs/DisturbanceTemperature d_temp • value: (float64) 気温 (℃) • hako_msgs/DisturbanceWind d_wind • value: (Vector3) 風速ベクトル [x, y, z] (m/s) • hako_msgs/DisturbanceAtm d_atm • sea_level_atm: (float64) 海面気圧 (atm) • hako_msgs/DisturbanceBoundary d_boundary • boundary_point: (Point) ドローンに最も近い境界上の点 • boundary_normal: (Vector3) その点の法線ベクトル 10

11.

環境シミュレーション処理フロー ドローンの位置を リアルタイム監視 空間情報と付き合わ せする 空間プロパティ を取得する 当該ドローンへ 環境情報を通知 Drone’s Pose/Orientation 空間 ID=1 空間 ID=9 Drone Simulation 空間プロパティ (風、温度、気圧) Drone’s Disturbance Environment Simulation 環境シミュレーションを箱庭アセットとして定義 (Python実装) 11

12.

ドローンシミュレーション処理フロー Drone’s Pose/Orientation センサー Environment Simulation ドローン制御 処理 温度 ドローン物理 処理 気圧 アクチュエータ Drone’s Disturbance 風 Drone Simulation 12

13.

ドローン物理処理における風の影響 入力: - ドローンの速度 u, v, w (機体座標系のx, y, z方向) - 風の速度 wind.x, wind.y, wind.z - 機体の角速度 p, q, r - 質量 m、抗力係数(d1, d2) 中間変数: - air_u = u - wind.x - air_v = v - wind.y - air_w = w - wind.z →機体速度 − 風速度 = 空気に対する相対速度 入力: - 機体座標系での加速度 dot_u, dot_v, dot_w この式は「ドローンが空気の中でどんな加速度を受けるか」を計算しています。 ポイントは『空気に対してどう動いているか』を基準にしていることです。 相対速度(機体速度−風速度)をもとに、以下の3つを足し合わせています。 1️⃣ 重力の影響:機体の傾きに応じて重力が分解される 2️⃣ 回転の影響(コリオリ力):機体が回転していると見かけの力が加わる 3️⃣ 空気抵抗:相対速度に比例&速度²に比例した抵抗が働く

14.

環境とドローンの相互シミュレーションのシステム構成 • 環境シミュレータを箱庭アセットとして配置し、ドローンの位置情報を監視する。 • ドローンが環境情報の空間に入った場合、Disturbanceとして箱庭ドローンに干渉情報を通知する(箱庭PDUの仕組みを利用) • 箱庭ドローンは、干渉データセンサや物理系に入力し、ドローンの挙動に影響を与える • 結果として、ゲームエンジン側で、その動きをビジュアライズされる Hakoniwa Drone Simulation (Sensor/Physics) Drone’s Disturbance Game Engine (Unity/Unreal) Drone’s Pose/Orientation Hakoniwa PDU Hakoniwa Environment Simulation (Hakoniwa Asset/Python) 環境情報 (json) 14

15.

アジェンダ • 環境シミュレーションの基本構成 • 環境とドローンの相互シミュレーションの構成要素 • 環境データの設定例 • 環境シミュレーションの実行方法 • 環境データの拡張方法 15

16.

環境データの設定例 • 環境定義ファイル • 空間情報 • 空間プロパティ情報 • シミュレーション・デモ 16

17.

Y:4m, Z:10mの6個のエリアを作ります。 空間情報定義例: X:4m, 下図は、定義イメージです。 X 6 2 area_6 5 4 1 6 2 +4 3 area_1 5 +6 area_4 area_2 area_5 Y +6 +2 4 area_3 -2 -4 +2 0 3 1 0 +4 -6 -2

18.

空間プロパティ情報定義例: 各エリアに風、温度、気圧を設定します。 下図は、定義イメージです。 X +6 area_6 area_2 area_4 風: (1m/s) 温度:55度 気圧:1.2 風: (1m/s) 温度:-15度 気圧:1.1 風: (1m/s) 温度:55度 気圧:0.97 +4 +2 area_5 area_1 area_3 風: (1m/s) 温度:55度 気圧:1.0 風:無風(0m/s) 温度:10.5度 気圧:0.98 風: (1m/s) 温度:55度 気圧:0.8 0 -2 Y +6 +4 +2 0 -2 -4 -6

19.

シミュレーション・デモ(風に流されるドローン) デモ内容: 1. area_5へ移動 ドローンを操作して左の領域に入れ ます。 2. area_5->6->2 すると、その領域では風で吹いてい るので、ドローンが風に流されていき ます。そのまま放っておくと、風に流 されるままに漂流していきます。 area_6 area_2 風: (1m/s) 温度:55度 気圧:1.2 風: (1m/s) 温度:-15度 気圧:1.1 area_1 風:無風(0m/s) 温度:10.5度 気圧:0.98 area_5 風: (1m/s) 温度:55度 気圧:1.0 https://www.youtube.com/watch?v=vP5UL88570E 19

20.

アジェンダ • 環境シミュレーションの基本構成 • 環境とドローンの相互シミュレーションの構成要素 • 環境データの設定例 • 環境シミュレーションの実行方法 • 環境データの拡張方法 20

21.

環境シミュレーション実行方法 • ここでは、ArduPilotを前提として、 箱庭環境シミュレーション(hakoniwa-envsim)を動作させるための 一連の手順を説明します。 1. 箱庭環境シミュレーション用リポジトリのクローン 2. 箱庭環境シミュレーションプログラム構成 3. 箱庭Launcherの説明 4. 各種設定ファイルのサマリ 5. 箱庭環境シミュレーションの実行例(デモ) ※補足(開発経緯): ArduPilot連携編および複数機体連携編においても、試作段階の箱庭環境シミュレータが動作していました。 しかし、より本格的かつ広域的な環境データの生成・管理を総合的に行うため、専用リポジトリによる一元管理体制へ移行しました。 そのため、本資料では改めて構成および手順を再整理した内容として説明しています。 21

22.

箱庭環境シミュレーション用リポジトリのクローン • 実行環境は、ArduPilot連携編を参照ください。 • クローンするリポジトリは、${HOME}/hakoniwa 直下としてください。 cd ${HOME}/hakoniwa git clone –recursive https://github.com/hakoniwalab/hakoniwa-envsim.git 22

23.

箱庭環境シミュレーションプログラム構成(1/2) • hakoniwa-envsimのプログラム構成は以下のとおりです。 箱庭環境 モデル情報 環境データ Creator できるだけ直感的に環境デー タを作成できるようにしたモデ ル(jsonファイル) 箱庭のシミュレーションで実際に利用するデータ (jsonファイル) ※area/property/link 箱庭のareaデータはjsonでフラットなので、大容量 になるとシミュレーション負荷が高くなる。そのため、高 速検索できるライブラリが必要 作成した環境データを色や矢 印などで直感的に理解できる 形にビジュアル化するツール 箱庭シミュレーション 環境情報 環境データ FastSearcher 環境データ Visualizer 箱庭アセット群の一部として、 環境シミュレーションの処理を 担当します 箱庭環境 シミュレーション 23

24.

箱庭環境シミュレーションプログラム構成(2/2) • hakoniwa-envsimのファイル構成は以下のとおりです。 • examples • 環境データのサンプル集です • simple_room:手書きで作れるレベルのシンプルなデータセットです • area.json, link.json, area_property.json • kobe:神戸港を舞台にした大規模(704エリア)のデータセットです • environment_model.json:自動生成用の方針定義ファイル • generated:自動生成ファイルを格納するディレクトリ • area.json, link.json, area_property.json • src/hakoniwa_envsim • envasset.py:箱庭環境シミュレータです • asset:箱庭アセットとしての機能実装 • creator:環境データCreatorの機能実装 • fastsearch:環境データFastSearcherの機能実装 • schemas:環境データ(jsonファイル)のスキーマ • model:環境データのモデル (注)本リポジトリは Python モジュールとして構成されており、各ディレクトリの詳細は README.md にも記載されています。 24

25.

箱庭Launcherの説明 • 箱庭環境シミュレータは箱庭アセットとして起動する必要があります。 • 箱庭のシミュレーションでは、複数の箱庭アセットを連携して起動しますので、箱庭標準のLauncherの概要 および設定方法を説明します(詳細はこちら)。 • 箱庭Launcherは、hakoniwa_pduという箱庭のPythonパッケージをインストールすることで利用できます。 • 箱庭ドローンのdockerイメージに組み込み済みですので、特別なインストールは不要です。 箱庭アセット群 箱庭アセット 起動定義ファイル (json) 起動 箱庭 Launcher 起動定義ファイルのイメージ: 1. 箱庭ドローンを起動 2. 箱庭環境シミュレータを起動 3. 箱庭WebServerを起動 : プロセス監視 終了 箱庭ドローン 箱庭環境シミュレータ 箱庭WebServer 25

26.

各種設定ファイルのサマリ 箱庭環境シミュレーションに関連する主要設定ファイルの一覧を示します。 各ファイルの役割を理解することで、環境定義や拡張設定を容易に行うことができます。 分類 設定ファイル 設定例 備考 箱庭環境モデル情報 environment_model.json 大規模なエリアの場合利用 (利用は必須ではない) 空間情報 area.json 空間内のエリアを定義 空間プロパティ情報 property.json 各エリアのプロパティ(風、温度など)を 定義 環境データ 空間と空間プロパティの 接続情報 link.json エリアとプロパティのリンク設定 箱庭 Launcher 箱庭アセット 起動定義ファイル drone-apiubuntu.launch.json 箱庭アセットの起動設定 環境データ 環境データ 環境データ 26

27.

箱庭環境シミュレーションの実行例(デモ1) 1) Ardupilot(WSL2) bash -x hakoniwa-drone-core/tools/ardupilot/run.bash \ ardupilot-controllers/c1/ardupilot/ <HOST_IP> 2) 箱庭(Docker/hakoniwa-drone-{core/pro}直下) bash docker/tools/launcher.bash config/launcher/docker-slow-ardupilot-1.launch.json 27

28.

デモ1 https://www.youtube.com/watch?v=gHVakzBzP4o 28

29.

箱庭環境シミュレーションの実行例(デモ2) 1) Ardupilot(WSL2) bash -x hakoniwa-drone-core/tools/ardupilot/run.bash \ ardupilot-controllers/c1/ardupilot/ <HOST_IP> 0 bash -x hakoniwa-drone-core/tools/ardupilot/run.bash \ ardupilot-controllers/c1/ardupilot/ <HOST_IP> 1 2) 箱庭(Docker/hakoniwa-drone-{core/pro}直下) bash docker/tools/launcher.bash config/launcher/docker-slow-ardupilot-2.launch.json 29

30.

デモ2 https://www.youtube.com/watch?v=SXAIuIo9dgU 30

31.

アジェンダ • 環境シミュレーションの基本構成 • 環境とドローンの相互シミュレーションの構成要素 • 環境データの設定例 • 環境シミュレーションの実行方法 • 環境データの拡張方法 31

32.

環境データの拡張方法 • 電波強度を例にして、環境データの拡張方法を紹介します。 • 電波強度の種類 • Wi-Fi / LTE / 5G / 専用無線リンクの通信品質に直結 • 単位は dBm(デシベルミリワット) • 通信機器が受信できる電波の強さを示す指標 • 値が大きいほど強い(例: -40dBmは強い、-90dBmは弱い) • GPS • 衛星数・信号強度 (SNR)・位置精度 (DOP値) GPS • 電波強度によって影響を受けるセンサ • 通信モジュール(Wi-Fi, LTE, 5G, 無線LAN) • FPVカメラの映像伝送装置(電波が弱いと映像が途切れる) • テレメトリリンク(飛行制御用の送信/受信データが欠落) • GPS受信機(干渉や遮蔽で位置精度が低下) • ドローンが受ける影響 テレメトリ FPVカメラ • 通信途絶や遅延による 操縦不能リスク • リアルタイム映像が途切れ、操縦者の視認性低下 • 安全性低下に伴う フェールセーフ動作(リターンホーム、ホバリング) • GPS信号ロストによる 航法精度の低下 32

33.

シミュレーション改造内容 • 改造の全体像 電波強度によるセンサ/物理挙動の再現 電波強度のビジュアライズ 電波強度として ・gps_strength を追加 電波強度を通知 電波強度として ・dBm ・DOP値 を追加 33

34.

Disturbance PDUの改造例 • Disturbanceに、DisturbanceSignalStrengthを追加 • hako_msgs/DisturbanceTemperature d_temp • hako_msgs/DisturbanceWind d_wind • hako_msgs/DisturbanceAtm d_atm • hako_msgs/DisturbanceBoundary d_boundary • hako_msgs/DisturbanceSignalStrength d_signal • gps_strength: GPS 系の信号品質。 float で表現。0-1として、値が大きい方が電波強度が高い 箱庭PDUデータの拡張方法詳細は、こちらを参照ください。 →hakoniwa-pdu 34

35.

環境シミュレーション処理フロー ドローンの位置を リアルタイム監視 Drone’s Pose/Orientation 空間 ID=1 空間情報と付き合わ せする 空間 ID=9 空間プロパティ を取得する Drone Simulation 空間プロパティ (風、温度、気圧) 電波強度を通知 当該ドローンへ 環境情報を通知 Environment Simulation 環境シミュレーションを箱庭アセットとして定義 (Python実装) Drone’s Disturbance 電波強度を通知 35

36.

ドローンシミュレーション処理の改造例 電波強度に応じて、 GPSノイズを付与 Drone’s Pose/Orientation センサー Environment Simulation ドローン制御 処理 電波 強度 温度 ドローン物理 処理 気圧 アクチュエータ Drone’s Disturbance ※箱庭ドローンのセンサ拡張には ※箱庭ドローンPROライセンスが必要となります 風 Drone Simulation 36

37.

最新のDisturbanceのPDUデータについて • 最新のDisturbanceは、利用者毎に様々な拡張を考慮して、 DisturbanceUserCustomを可変長配列で定義していますので、様々な 環境データを追加できます。 • また、DisturbanceUserCustomは、float64の可変長配列ですので、1 つの環境データの中に、複数のデータを設定できます。 37

38.

箱庭ドローンPROでの機能改修ポイント(1/2) • DisturbanceのPDUデータは、箱庭ドローン内部のaircraftコンポーネントに伝搬されます。 • aircraftコンポーネントの内訳は、以下の通りです。 • Drone Dynamics(body) • Acceleration Sensor(acc) • Gyro Sensor(gyro) • Geomagnetism Sensor(mag) • Barometric Pressure Sensor(baro) • GPS Sensor(gps) • Rotor Dynamics(rotor) • Thrust Dynamics(thruster) • Disturbanceデータのアクセス方法 • body: • run() 引数(AircraftInputType input) 図:aircraftコンポーネントのアーキテクチャ • body以外: • クラスメンバ変数(IAirCraftInputAccessor aircraft_input_accessor) • run()実行時に、aircraft_input_accessor->get_input()で、AircraftInputTypeを取得する 本資料はPRO版内部構造を示す参考情報 38

39.

箱庭ドローンPROでの機能改修ポイント(2/2) • DisturbanceUserCustomのPDUデータは、可変長配列です。 • このデータは、箱庭ドローンPRO内の以下の構造体にコピーされます(固定長配列)。 • この際、箱庭ドローンPROの配列長を超えたデータはコピーされませんので、以下のマクロ 値をDisturbanceUserCustomの配列長に合わせて、リコンパイルしてください。 • USER_DEFINED_CUSTOM_DATA_NUM • USER_DEFINED_CUSTOM_DATA_FLOAT64_NUM • ※リコンパイル方法は、「 hakoniwa-drone-build.pptx 」を参照ください。 本資料はPRO版内部構造を示す参考情報 39