AIエージェント Codex で 倒立振子2

アバター画像 お父ちゃん  2026.5.15 
Home > 電子工作 > AIエージェント Codex で 倒立振子2

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

すき 0
うんこ 0

前回はAIエージェント Codex に初めて触れ、そのコード生成の精度に大変驚かされました。

AIエージェント Codex で 倒立振子

倒立振子の倒立動作を指示してコーディングしたり、起き上がり動作をさせて動作ログからパラメータ調整するコードも生成して実機動作を確認しました。

ここではさらに踏み込んで、Codexを使った倒立動作のパラメータ調整や制御則の探索に挑戦します。
つまりAIに“倒立振子の制御則そのもの”を考えさせます。

しかしこの時点ではAIエージェントによるバイブコーディングだけで倒立振子の動作まで実現するのは不可能だろうと考えていました。
”オリジナルの倒立振子製作そして動作実現なんて誉れ高き 真のエンジニアのみが到達できる高みだぞ”
と考えていたのです。

 

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

倒立パラメータ探索

倒立振子の制御バラメータ(ゲイン)を倒立動作のログを評価しながらの探索するコードをCodexで生成します。

実機でこれをやるのは大変なのでMuJoCoモデルで実施します。
探索のたびに倒れたりどっかに行っちゃう機体をいちいちセッティングするの大変でしょ。

1輪倒立動作の物理シミュレーションMuJoCoモデルは以前実施した強化学習の際に製作済みです。

 

以下の制御則でMuJoCoモデルのホイールモータを駆動し、各ゲイン (Kp, Kd, Kw)を調整探索するコードを生成します。
$$ targetVelocity = Kp \times\theta + Kd \times \dot \theta + Kw \times wheelSpeed $$

Codexで生成されたゲイン探索コードを実行

初期姿勢を少し傾けて数秒シミュレーションして その間の姿勢角 $\theta$、角速度 $\dot \theta$、ホイール速度 $wheelSpeed $、モータ制御量 $targetVelocity $ から評価スコアを計算します。
探索中もMuJoCoで動作確認できるようにしており、評価スコアがベスト更新するたびに探索が中断され外乱印加などをして動作確認が可能です。エンターキーで探索再開

上の動画のとおり最終的に安定するゲインが探索できています。

評価内容は以下の通り
 姿勢が立っているほど良い
 角速度が小さいほど良い
 車輪が暴れないほど良い
 制御量が小さいほど良い
 倒れたら大きく減点

 

倒立制御則探索

ゲイン探索が可能であることが確認できましたので、次はさらに制御則も探索させてみます。

Codexに用意してもらった制御則は以下
 linear    : theta + omega + wheel_speed (前節の基本形)
 sin       : sin(theta) + omega + wheel_speed
 cubic     : theta + theta^3 + omega + wheel_speed
 tanh      : tanh(…) で速度指令をなめらかに飽和
 position  : 立っている近辺だけ ホイール位置もフィードバック

↓探索の様子

探索の結果 制御則 sinが高スコアとなりました。
$$ targetVelocity = Kp \times \sin(\theta) + Kd \times \dot \theta + Kw \times wheelSpeed $$

 角度項をsinθとすることで 直立付近では linear とほぼ同じですが、大きく傾いたときは、sinで頭打ちになり暴れにくくなります。
Codex ヤバいね

 

制御則 sinに固定してゲイン詳細探索を実施

最終的に外乱に強く応答の良い倒立動作が実現できました。
$$ targetVelocity = 69.2\times \sin(\theta) + 10.6 \times \dot \theta + 3.9 \times wheelSpeed $$

ちなみにここでの単位は角度が rad で角速度とホイール速度が rad/s です。

 

Sim2Real

Codexによって探索された制御則を実機に移植してみます。
傾斜角のsinをとってフィードバックで動作させます。

MuJoCo Sim.のとおり外乱に強く応答の良い動作が実現できました。

ゲインは少し手で調整しました。
$$ targetVelocity = 20.0\times \sin(\theta) + 8.6 \times \dot \theta + 3.0 \times wheelSpeed $$

Sim.のゲインのままだと過制動やリンギング状態となってしまいました。
モータモデルや機体定数や摩擦に誤差があるためです。

 

Codexの活用によって素晴らしい制御動作を実現することができました。
以下が以前手で調整した機体動作です。

大きな改善を得ることができました。
Codex先生と呼ばせてください。

 

おわりに

ここではCodexによる車輪倒立振子動作の実現を検証しました。

結論としましては Codexが以下をやってのけました。
・制御則の候補を考える
・探索コードを生成
・倒立動作の評価関数を設計
・MuJoCo上で大量動作試行を実施

そして安定倒立動作を導き出して実機でもその有効性を確認することができました。
恐ろしいぜ。。。

ここからは考えを改めないといけません。
私はCodex先生の教えに従い生きてゆくことにします。

次回はさらに MuJoCoモデルと実機の差異、モータ特性の同定、Sim2Realの精度向上などについてもCodex先生にご教授いただこうと考えています。

 

コメントはこちらから

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

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