hakoniwa-drone-environment

297 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.

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

4.

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

5.

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

6.

補足: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 6

7.

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

8.

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

9.

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) その点の法線ベクトル 9

10.

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

11.

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

12.

ドローン物理処理における風の影響 入力: - ドローンの速度 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️⃣ 空気抵抗:相対速度に比例&速度²に比例した抵抗が働く

13.

環境とドローンの相互シミュレーションのシステム構成 • 環境シミュレータを箱庭アセットとして配置し、ドローンの位置情報を監視する。 • ドローンが環境情報の空間に入った場合、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) 13

14.

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

15.

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

16.

Y:4m, Z:10mの6個のエリアを作ります。 空間情報定義例: X:4m, 左:jsonファイルでの定義、下図は、定義イメージです。 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

17.

空間プロパティ情報定義例: 各エリアに風、温度、気圧を設定します。 左:jsonファイルでの定義、下図は、定義イメージです。 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

18.

シミュレーション・デモ(風に流されるドローン) デモ内容: 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 18

19.

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

20.

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

21.

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

22.

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 22

23.

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

24.

ドローンシミュレーション処理の改造例 電波強度に応じて、 GPSノイズを付与 Drone’s Pose/Orientation センサー Environment Simulation ドローン制御 処理 電波 強度 温度 ドローン物理 処理 気圧 アクチュエータ Drone’s Disturbance 風 Drone Simulation 24

25.

実際の環境への適用・実験を考えみてる • 舞台:神戸港 • 検証内容:物流ドローンの航路最適化を検証 • 環境データ: • 箱庭の環境情報として再現。 • 0.2km四方で、704エリア • 環境プロパティ:風と電波強度 • 航路最適化: • 粘菌アルゴリズムを利用 • OSSで公開中 6.4km 4.4km 25

26.

この実験の目的とゴール • 目的:『現実の再現』ではなく、『現実を思考する実験場』の構築 • 我々の目的は、神戸港の風や電波を100%正確に再現することではありません。 • むしろ、「もしも」の状況(What-if)を自由に設定し、ドローン航路に潜む目に見えな いリスクを可視化することが目的です。 • ゴール:データだけでは不可能な『3つの価値』の創出 • リスクの体感: • 設計者が机上の空論では気づけないリスクを「自分事」として体感する。 • 頑健な設計: • 最適ルートが突風や電波障害に耐えられるかを検証し、より現実的で安全な航路を設計する。 • 円滑な合意形成: • なぜそのルートが危険かをビジュアルで示し、関係者の納得を得る。 26

27.

環境データと地図をマッピングした例 • 環境データのスキーマ • 神戸港の設定例 • 10エリアに分割 • 都市部 • 電波強度低い • 風はランダム方向 • 海近辺 • 電波強度高い • 風は一定方向 27

28.

今後の予定 • 年内に環境シミュレーション環境を一般公開 • デモ内容 • 神戸港を舞台にしたQGC/PX4環境での物流シミュレーション • 環境シミュレーションデータに基づく最適経路作成 • 最適航路での物流シミュレーション評価 28