箱庭ドローンの強化学習

1.8K Views

February 22, 25

スライド概要

# **箱庭ドローンの強化学習 - OpenAI Gym 統合検討**

## **概要**
本資料は、箱庭ドローンの制御最適化における **強化学習(SAC)を用いた手法** についてまとめたものです。
従来の **PID パラメータ調整の課題** を解決するため、**OpenAI Gym 環境との統合** を行い、自動最適化を目指しました。

## **内容**
- **課題**: ドローンごとの制御パラメータ調整が大変
- **制御アーキテクチャ**: 36個の PID パラメータ最適化
- **強化学習の適用方法**: OpenAI Gym + 箱庭シミュレータを利用
- **評価指標**: 整定時間、遅延時間、オーバーシュート、定常偏差
- **実験結果**: 強化学習により最適な制御パラメータを取得
- **気づきと課題**:
- 姿勢角と移動制御の学習を統合した方が効率的
- 学習中の最適パラメータを保持する仕組みが必要

## **対象読者**
- **ドローン制御・ロボティクスに興味がある方**
- **強化学習による制御最適化を考えているエンジニア**
- **OpenAI Gym / Stable-Baselines3 を活用したい方**

本資料が、強化学習を活用した **制御最適化のヒント** になれば幸いです!🚀

profile-image

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

シェア

またはPlayer版

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

関連スライド

各ページのテキスト
1.

箱庭ドローンのOpen AI Gym統合検討 • 背景 • 箱庭ドローンの機体バリエーションが増えてきた • 今後、もっと増やしていく予定 • 課題 • 機体毎のチューニングが大変 • 特に制御パラメータ調整が課題 1

2.

箱庭ドローンの制御アーキテクチャ 制御は全てPID制御 36パラメータ:12x3 目標高度 高度制御 目標速度 高度速度 制御 推力 デューティ1 デューティ2 目標水平位置(y) 水平位置 制御(y) 水平位置 制御(x) 目標姿勢角度(ψ) 目標水平 速度(vy) 目標水平 速度(vx) 水平速度 制御(vy) 水平速度 制御(vx) 目標姿勢 角度(θ) 目標姿勢 角度(φ) ヨー角度制 御 水平姿勢 角度制御 (θ) 水平姿勢 角度制御 (φ) 目標姿勢 角速度(r) 目標姿勢 角速度(q) 目標姿勢 角速度(p) ヨー角速度 制御 トルク(Tz) モータ プロペラ系 モデル ミキサー デューティ3 水平姿勢 角速度制 御(q) 水平姿勢 角速度制 御(p) トルク(Ty) 物理 モデル (MuJoCo) デューティ4 トルク(Tx) 電圧 目標水平位置(x) 物 理 モ デ ル I / F 物理 モデル (質点) 補足:赤字部分は評価ツールから直接入力可能 電流 バッテリーモデル

3.

PIDパラメータのイメージ https://github.com/toppers/hakoniwa-px4sim/blob/main/drone_control/config/param-api-mixer.txt 3

4.

強化学習で解決できないか? • 強化学習モデルにアクションにPIDパラメータのサブセット作ってもらい、 • 箱庭ドローンシミュレータでシミュレーションを実行 • 実行結果を報酬関数で定量化することを繰り返す 環境 アクション モデル 箱庭ドローンシミュレータ SACとかPPOとか 報酬 評価関数 4

5.

箱庭・強化学習のアーキテクチャ 各PIDゲインの範囲を適切に制約(例): Kp ∈ [0, 10] Ki ∈ [0, 5] Kd ∈ [0, 10] 機体 パラメータ PIDパラメータ 変更 PIDパラメータ 最適化 評価関数 (目標値追従性) 物理モデル 制御モデル 箱庭ドローンシミュレータ 制御モデル 目標値 物理モデル 実測値 PIDパラメータ 評価 シミュレーション 実行 Python APIでシ ミュレーション実行 順番に試していく 強化学習 アルゴリズム (SAC) 評価シナリオ

6.

評価関数 古典制御理論で使われている指標を利用 オーバー シュート量 整定時間±5% 定常偏差 90% 10% 立ち上がり時間 6

7.

評価シナリオ 全てのパラメータを一度に強化学習することは現実的ではない →依存性が低いPIDパラメータから順番に強化学習を積み重ねていく 1. 上空で安定してホバリングできる高度制御のPIDパラメータを調整 2. 上空でホバリングできている状態から、ヨー角制御のPIDパラメータを調整 3. 上空で水平速度制御のPIDパラメータを調整 1. X方向 ステップ2: ステップ1: 2. Y方向 安定してホバリング ヨー角回転 ステップ3: X方向移動 Y方向移動

8.

Open AI Gymのフレームワークを利用 gym.Env 継承 実験完了後、オーバーシュート量 や遅延時間などの指標をベースに 報酬を計算 HakoDroneEnv 与えられたPIDパラメータで、 ステップ応答実験を行う step() ドローンの内部状態(位置、速度等) PIDパラメータ observation action reward アクション評価結果 強化学習モデル load Stable-Baselines3 様々な強化学習モデル SAC, PPO, ...

9.

強化学習の風景 • https://www.youtube.com /watch?v=b_jP57hutHw 9

10.

強化学習結果 BEFORE AFTER 10

11.

気づきや工夫したところ等 • 気づき • Open AI Gymは使いやすかった • パラメータのとりえる値の範囲は経験ベースで入れるしかないような • 工夫したところ • 姿勢角制御と移動制御のパラメータは、一度に学習させたほうが良い • 最初はロール角の2パラメータを最適化してから、水平速度制御の3パラメータを最適化していた • でも、5パラメータだけなら、一度にやった方が効率的だと気づいた • 悪のPIDパラメータは固定値にして、探索からは外しました • まだ苦労しているところ • 学習中に最高のPIDパラメータができたとしても、学習中のデータなので消えてしまう • 学習後に、PIDパラメータセットを生成しても、制御として成り立つものが出るとは限らない • 調査中(やり方が間違っている?学習が足りてない??) 11

12.

ここからが本番 • それぞれの制御について、それ単体でのステップ応答は良いけど、 • 全体として制御が成り立っているかは別問題。 12

13.

でも動画(上昇) BEFORE: https://www.youtube.com/watch?v=iQBKou4AiNg PID_YAW_Kp 0.9299530982971191 PID_YAW_Ki 0.17777666449546814 PID_YAW_Kd 0.6158142685890198 PID_YAW_RATE_Kp 0.8161411285400391 PID_YAW_RATE_Ki 0.35235244035720825 PID_YAW_RATE_Kd 0.5419761538505554 AFTER: https://www.youtube.com/watch?v=Q-ntytUzv3I PID_YAW_Kp 2.7070183753967285 PID_YAW_Ki 0.008221190422773361 PID_YAW_Kd 0.0037256197538226843 PID_YAW_RATE_Kp 1.1107832193374634 PID_YAW_RATE_Ki 0.009345252066850662 PID_YAW_RATE_Kd 2.1629395484924316 上昇のPIDパラメータ値に対して、ヨー角のPID値が釣り合ってない 13

14.

ヨー角の学習調整 • ステップ値:10°→1° • パラメータ範囲: 14

15.

でも動画(ヨー角) https://www.youtube.com/watch?v=jX-lvPBuhzU 15

16.

水平移動 AFTER: BEFORE: https://www.youtube.com/watch?v=b7BM17grxcw https://www.youtube.com/watch?v=10Yyanrph3A # 水平速度制御のPIDパラメータ PID_POS_VX_Kp 12.940427780151367 PID_POS_VX_Ki 4.012768268585205 PID_POS_VX_Kd 4.2381978034973145 PID_POS_VY_Kp 15.795845031738281 PID_POS_VY_Ki 4.079137325286865 PID_POS_VY_Kd 4.740286827087402 ## ロール角度とロール角速度制御のPIDパラメータ PID_ROLL_Kp 2.3472726345062256 PID_ROLL_RATE_Kp 1.7110514640808105 ## ロール角度とロール角速度制御のPIDパラメータ PID_ROLL_Kp 1.4871772527694702 PID_ROLL_RATE_Kp 13.485973358154297 ## ピッチ角度とピッチ角速度制御のPIDパラメータ PID_PITCH_Kp 0.2191523015499115 PID_PITCH_RATE_Kp 1.559105634689331 ## ピッチ角度とピッチ角速度制御のPIDパラメータ PID_PITCH_Kp 1.4871772527694702 PID_PITCH_RATE_Kp 13.485973358154297 ロール、ピッチ角の角速度のゲインが小さすぎた 16

17.

角度制御の学習調整 • パラメータ範囲: 17

18.

コントローラ操作テストしたら動かなかった • 現象と原因 • 上昇させようとすると、吹っ飛ぶ • 上昇のPIDパラメータ値に対して、ヨー角のPID値が釣り合ってない。 • ホバリングすると振動する • ロール、ピッチ角の角速度のゲインが小さすぎた。。 • 気づき • 制御間の辻褄が合ってない • 上昇とヨー角度制御 • ロール、ピッチ制御と水平移動制御 • スティック操作だと、どうしてもノイズが乗る • 上昇させようとすると、ヨー角の操作が若干入る • 前進させようとすると、横方向の操作が若干入る 18

19.

まとめと課題、今後について • まとめ • 各制御についてはパラメータチューニングできるようになった • 課題と今後について • 制御間のパラメータチューニングが必要 • ノイズが入った場合の学習が必要 • プロ操縦士の操縦ログからの学習をやった方が良い • パラメータ範囲やステップ入力の強さも自動調整してもらいたい • 出口 • 人間のノウハウを評価シナリオや評価関数として与えたら勝手にやってくれる感じにしたい 19