AIエージェント Codex で ドローン2
MuJoCo で シミュレーション

Home > 電子工作 > AIエージェント Codex で ドローン2MuJoCo で シミュレーション

本記事にはアフィリエイト広告が含まれます。

すき 0
うんこ 0

前回はAIエージェント Codex を活用してドローンの学習を開始しました。

AIエージェント Codex で ドローン

 
Codex先生のおかげで姿勢制御やゲームコントローラによる位置制御を数日で実現できてしまいました。

しかし実機のコントローラ操作が非常に難しく、Codex先生に提案いただいたIMUフィルタや姿勢制御方式の評価をするまでに至りませんでした。

現状の実機の制御方式は以下の通りです。Codex先生 誠にありがとうございます。
・IMU (MPU6050) のフィルタ:Complementary Filter (相補フィルタ)
・Roll, Pitch 姿勢制御:PD制御
・Yaw 姿勢制御:P制御

いきなり実機はさすがに無謀だったと反省し、ここではMuJoCo によるシミュレーションでドローン制御の検証を行います。

 

AudiostockでBGM・効果音を販売中!

MuJoCo

この時点でMuJoCoでのドローンのシミュレーション方法について私自身はノーアイディアでした。

Codex先生に以下のようにお願いしました。
“コントローラで位置制御できるドローンシミュレーションを実現して”
すると、以下が生成されました。

Codex先生ヤバすぎる。一発でコレ↑が生成されたのです。

ドローンモデルの MJCF(MuJoCo XML Format)と、ゲームコントローラによる制御用 Python コードが本当に一瞬で生成されました。

 MuJoCo の motor アクチュエータは、プロペラの回転そのものを物理的に再現しなくてもモデルに対して指定方向の力やトルクを与えることができます。
 今回生成されたシミュレーションでは、4つのモータそれぞれに付与した motor アクチュエータの推力をPD 制御で調整することで Roll、Pitch の姿勢制御と高さ維持を実現しています。Yaw については機体の Z 軸まわりにトルクを直接与える motor アクチュエータを用意し、こちらも PD 制御で旋回させています。
なるほど!ドローンの場合はこうやって MuJoCo でモデリングすればよいのですね。非常に勉強になりました。

プロペラを回して推力を得る物理モデリングをしているわけではないのでSim2Real には相当苦労しそうです。
しかしドローンの制御方式の比較検証には十分使えそうです。

 このシミュレーションでよくわかったのは、センサなしで位置や高度を安定させるのは非常に難しいということです。ゲームコントローラで Roll、Pitch の目標角を変えて操作しているのですが、実機と同じように機体がフラフラと流れていきます。
 特に高度センサは必須レベルだと感じました。後述しますが、シミュレーション上でも高さ情報を使わない場合はほぼ制御不能だったため、以降のシミュレーションでは高さセンサありの構成で実施します。

 

MJCF(MuJoCo XML Format)

ドローンのMuJoCoシミュレーション方法を理解することができましたので、実機に近いモデルを制作します。

プロペラガードやモータ固定具を設計した際のAutodesk Fusion モデルをもとにSim.モデルを作ります。
プロペラガードを含む機体やモータ、バッテリのSTLを出力して、プロパティで慣性モーメントを取得します。

 

Codex先生に各パーツのSTLファイルと慣性モーメント情報、そして実機で計測した重さを渡してMJCFを生成してもらいました。

これまた一瞬で生成されました。
パーツの慣性モーメントは実機の重さで換算して、推力用や旋回用のmotorアクチュエータもモータや機体にええ感じに付与してくださいました。

 

もう二度とMJCFファイルを手書きすることはないかな。
AIの恩恵を大いに受けています。先生本当にありがとうございます。

 

PD制御

Sim.モデルができたので実機同様の制御で飛行の検証を行います。
・Roll, Pitch 姿勢制御:PD制御
・Yaw 姿勢制御:P制御
・高度:PD制御 (実機は高度センサないけど便宜上)

 

各ゲインはCodex先生に別途ゲイン探索コードを生成してもらって安定度評価により決定しました (以後の各制御のゲインも同様です)。

やはり水平位置制御はSim.上でも難しいですね。

 

PID制御

Roll, Pitch 姿勢制御をPDからPIDに変更してみます。
・Roll, Pitch 姿勢制御:PID制御
・Yaw 姿勢制御:P制御
・高度:PD制御 (実機は高度センサないけど便宜上)

 

ホバリング時の位置の流されが低減されたように感じます。

 

カスケード制御

モノの本にかいてあるカスケード制御を試してみます。

Roll/Pitch目標角→P制御 (アウターループ)→目標角速度→PID制御 (インナーループ)→モータ推力
・Yaw:P制御
・高度:PD制御 (実機はセンサないけど便宜上)

 

ホバリング時の安定性やコントローラへの応答もいい印象です。

 

高さセンサ

これまでは高さセンサも模擬してPD制御して高度を保ってシミュレーションしてきました。

実機同様にセンサなしでジョイスティックでモータ推力を手動制御してみます (姿勢制御はカスケード)。

センサなしでの高さ維持が非常に難しいことを強く実感しました。

前回はかなり無謀なことをしていたようです。。
無知は恐ろしいですね。

 

おわりに

ここではAIエージェント Codexを活用してMuJoCoシミュレーションによるドローン制御方式の検証を実施しました。

しかし、ドローン制御方式の検証そのものよりもやはりAIエージェントの有用性に大きく感動しました。
感動ポイントと気づきをまとめて本ブログを閉じさせていただきます。

  • ドローンSim.環境が一瞬で構築され、その手法も非常に勉強になった
  • モデル MJCFも正確に生成された。私はもう二度と MJCFを手書きすることはないでしょう
  • 高度センサなしでの飛行は無謀。位置センサもあれば尚いい

 

コメントはこちらから

メールアドレスが公開されることはありません。コメントのみでもOKです。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください