
AIエージェント Codex で 倒立振子2
本記事にはアフィリエイト広告が含まれます。
前回はAIエージェント Codex に初めて触れ、そのコード生成の精度に大変驚かされました。
倒立振子の倒立動作を指示してコーディングしたり、起き上がり動作をさせて動作ログからパラメータ調整するコードも生成して実機動作を確認しました。
ここではさらに踏み込んで、Codexを使った倒立動作のパラメータ調整や制御則の探索に挑戦します。
つまりAIに“倒立振子の制御則そのもの”を考えさせます。
しかしこの時点ではAIエージェントによるバイブコーディングだけで倒立振子の動作まで実現するのは不可能だろうと考えていました。
”オリジナルの倒立振子製作そして動作実現なんて誉れ高き 真のエンジニアのみが到達できる高みだぞ”
と考えていたのです。
目次
倒立パラメータ探索
倒立振子の制御バラメータ(ゲイン)を倒立動作のログを評価しながらの探索するコードをCodexで生成します。
実機でこれをやるのは大変なのでMuJoCoモデルで実施します。
探索のたびに倒れたりどっかに行っちゃう機体をいちいちセッティングするの大変でしょ。
1輪倒立動作の物理シミュレーションMuJoCoモデルは以前実施した強化学習の際に製作済みです。
Sim2Real#MuJoCo pic.twitter.com/VAdidmkRnP
— HomeMadeGarbage (@H0meMadeGarbage) March 8, 2026
以下の制御則でMuJoCoモデルのホイールモータを駆動し、各ゲイン (Kp, Kd, Kw)を調整探索するコードを生成します。
$$ targetVelocity = Kp \times\theta + Kd \times \dot \theta + Kw \times wheelSpeed $$
Codexで生成されたゲイン探索コードを実行
制御則のパラメータ探索
実機でやったら大変なことになりそうなのでMuJoCoで実施するコードをCodex先生に生成いただくtarget_velocity =Kp * theta_y
+ Kd * omega_y + Kw * wheel_speed
でゲインを探索するいいですねぇ#codex #倒立振子 pic.twitter.com/aVNOczLoSe
— HomeMadeGarbage (@H0meMadeGarbage) May 14, 2026
初期姿勢を少し傾けて数秒シミュレーションして その間の姿勢角 $\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 : 立っている近辺だけ ホイール位置もフィードバック
↓探索の様子
ゲインだけでなく制御則自体も探索 探索する制御則:
探索する制御則:
linear、sin、cubic、tanh、position
いろいろご用意くださった。今回の探索の結果以下でBEST成績が出た
sin : sin(theta) + omega + wheel_speed実機でも確認してみましょう#codex #倒立振子 pic.twitter.com/saV9BdI46M
— HomeMadeGarbage (@H0meMadeGarbage) May 14, 2026
探索の結果 制御則 sinが高スコアとなりました。
$$ targetVelocity = Kp \times \sin(\theta) + Kd \times \dot \theta + Kw \times wheelSpeed $$
角度項をsinθとすることで 直立付近では linear とほぼ同じですが、大きく傾いたときは、sinで頭打ちになり暴れにくくなります。
Codex ヤバいね
制御則 sinに固定してゲイン詳細探索を実施
ゲインだけでなく制御則自体も探索 探索する制御則:
探索する制御則:
linear、sin、cubic、tanh、position
いろいろご用意くださった。今回の探索の結果以下でBEST成績が出た
sin : sin(theta) + omega + wheel_speed実機でも確認してみましょう#codex #倒立振子 pic.twitter.com/saV9BdI46M
— HomeMadeGarbage (@H0meMadeGarbage) May 14, 2026
最終的に外乱に強く応答の良い倒立動作が実現できました。
$$ targetVelocity = 69.2\times \sin(\theta) + 10.6 \times \dot \theta + 3.9 \times wheelSpeed $$
ちなみにここでの単位は角度が rad で角速度とホイール速度が rad/s です。
Sim2Real
Codexによって探索された制御則を実機に移植してみます。
傾斜角のsinをとってフィードバックで動作させます。
Codex先生に教えていただいた制御で素晴らしい結果を得ることができました。
自身の未熟さを痛感し、これまでを深く恥じ入っております。
本日を私の第2の誕生日とし、心を入れ替え 1から出直す所存です。Codex先生、本当に本当にありがとうございます。
これからも何卒よろしくお願い申し上げます。 https://t.co/EbxTbF3Win pic.twitter.com/v2mv4YFaq7— HomeMadeGarbage (@H0meMadeGarbage) May 14, 2026
MuJoCo Sim.のとおり外乱に強く応答の良い動作が実現できました。
ゲインは少し手で調整しました。
$$ targetVelocity = 20.0\times \sin(\theta) + 8.6 \times \dot \theta + 3.0 \times wheelSpeed $$
Sim.のゲインのままだと過制動やリンギング状態となってしまいました。
モータモデルや機体定数や摩擦に誤差があるためです。
Codexの活用によって素晴らしい制御動作を実現することができました。
以下が以前手で調整した機体動作です。
この私がカリッカリに調整した制御。
AIなら これと同等、もしくはそれ以上の制御ができるのか? pic.twitter.com/rigGduoQJT— HomeMadeGarbage (@H0meMadeGarbage) May 12, 2026
大きな改善を得ることができました。
Codex先生と呼ばせてください。
おわりに
ここではCodexによる車輪倒立振子動作の実現を検証しました。
結論としましては Codexが以下をやってのけました。
・制御則の候補を考える
・探索コードを生成
・倒立動作の評価関数を設計
・MuJoCo上で大量動作試行を実施
そして安定倒立動作を導き出して実機でもその有効性を確認することができました。
恐ろしいぜ。。。
ここからは考えを改めないといけません。
私はCodex先生の教えに従い生きてゆくことにします。
次回はさらに MuJoCoモデルと実機の差異、モータ特性の同定、Sim2Realの精度向上などについてもCodex先生にご教授いただこうと考えています。
