進化する倒立振子ねこびっとくんの開発経緯
AIと一緒に作った倒立振子ねこびっとくん、2026年3月にメイカーズながおかまつりで初公開しました。

<br />
#倒立振子ねこびっとくん が自分のバランスを取りながら会場内をおさんぽしていますよ〜🐾necobitブースでは仕組み解説パネル・@shi3z さん作小冊子販売もあります👨🦲キテネ
それから約4ヶ月経過するあいだに、秋葉原ロボットほこ天、NT金沢と2回出展🤖✨イベントのたびに新しい機能が増えていった、倒立振子ねこびっとくんの開発経緯をまとめます✏
3月 バランスを取って立つところまで
メイカーズながおかまつりでは「ただ立つ」機能しかありませんでした。ここで超簡単に倒立振子の仕組みをさらいましょう。

日にちギリギリで完成したメイカーズながおかまつりの時点では、自分でバランスを取ってその場で立つ(=止まって逆さ箒を立たせ続けているのとおなじ状態) が精一杯🤖💦
転倒防止のヒモを人が持ち、このヒモを引っ張られた先でバランスを取って止まる

この繰り返しで、行きたい方向になんとか誘導していました。
操縦とはなかなかに程遠くこれは大変でした(会場内でのウケは良かった)…まだ前後はいいのですが、曲げるのは絶妙な引っ張り方が必要で大きなカーブ径が必要ですし、何かあるとすぐにコケるので気が抜けません。
4月 コントローラー操縦で移動可能に
そこで、倒立振子を制御している M5Stack Stamp S3(ESP32 S3)と
手に持ったコントローラーを無線(ESP NOW)で接続して自分で前後左右を
制御できるようにしました。

もちろん倒立振子ですから、操縦されながらもバランスを取って倒れない事も頑張ってます🤖💦Xポストリンク先👇では実際に動いている様子が動画で見られます👀
これは劇的な進化で、動画をご覧の通りシレっとスイスイ動けるようになりました。かなりよかったのですが………
秋葉原ロボットほこ天は、街中での屋外イベントでした。外に出てはじめて身にしみる大問題
💥「道はけっこうかなり平坦ではない」!!!
6月 坂道でもバランスが取れる
普段なんとなくあるいているあの道もこの道も、実はちょっと登ったり降ったりしている。そしてそれは一様ではなく、ちょっとだけ登っていると思ったらどこかを頂点に下り始める。
実はそれに対応するのってかなり難しいということが、対応を始めてからわかりました。
やる内容としては、計測した傾斜に合わせてまっすぐ立っていられるように傾きをずらす(オフセットする)だけなのですけど、

この「傾斜に合わせて」がポイントで、普段から倒立振子はほんのちょっとだけユラユラと動いています。バランス取るために。
その時の傾きは地面の傾斜なのか?それとも動きによる傾斜なのか?
それを判別するために使ったのがPID制御の「I」です。

わかっているひとからすると何を当たり前のことをと思うかもしれませんがこれが大変だった。
I は積分。つまり、正立しているはずなのに何故かずっと傾いている誤差を溜めて(積分)その分補正をかけてあげるパラメーターです。
じゃあそれを合わせればいいんだねと思いきやこれがうまくいかない。
正しく立とうとしているところに I が「いやここは違う、逆」とかいうもんだから制御が破綻してすぐ倒れてしまう、というのを繰り返した。
そしてNT金沢1週間前にようやく坂道を登ったり降りたり、そして坂の途中で静止したりできるようになったのです。
具体的に何したかというと………
ロボットは坂の角度を知らないので、どうにかして自動で獲得したいが、モーターの出力に位置誤差を足したら発振して転倒してしまう。
そこで、基本の姿勢(角度)制御の他に位置だけを調整する制御を追加。
実はこれは3月の時点で挑戦済みの内容だったが、位置に対して PD だけでやっていたのが原因でその時はうまくいっておらず、今回 I 項目を追加するだけで全てが解決した。
あらためてよく見直してみると…メイカーズながおかまつり直前のコミットメッセージには "次のステップで超低速積分器に置き換え予定" と書いてありました。最初から問題は明らかだったんだ...焦りすぎてログを見てなかったんだね。カワヅが👨🦲💦
坂道問題が解決したついでに、自分のまっすぐな姿勢も勝手に割り出せるようになったので、人間にはわからないようなわずかな傾斜があっても基本的にその場に居続けることもできるようになりました🤖✨
これとは別に、モーターの電源電圧を20V→40Vに昇圧してモーターの反応速度を上げたので全体の制御がとても楽になったというのもあります。よかったね。
この改良は我ながらめちゃめちゃ嬉しくて、 NT金沢の会場隣接のスロープ側で一人何度も何度も登ったり降りたりしてニヤニヤしていたカワヅなのでした...。

もうヒモは本当に転倒防止としての役割しかありません。コントローラー操縦されながら地面の傾斜にまで対応して、しっかりバランスを取ってスイスイ動けるようになりました✌️🤖
ここまでやって理解したこと
数ヶ月の間倒立振子を作りながら、色々逆引き学習してきた necobit カワヅですが、
よく言われる
PID制御って何?
内側ループ、外側ループって何?
くらいまでは理解することができました。
ちなみに倒立振子ねこびっとくんは、傾きのPIDが内側ループで、位置のPIDが外側ループにいます。一定の傾きを維持しながら、位置を制御することで移動するわけですね。

なので現在の状態では、初期バージョンの「ヒモでひっぱる」ができません。やろうとすると傾きの誤差が蓄積して、ヒモを離した瞬間に逆向きに突っ走ります。
そういう差異を感じ取るのも面白い。
「制御ってなんぞ?」と思い立ってここまでやってきましたが、やはり面白い世界っぽいということはわかったので、引き続きここまで理解したこととソースコードを元に、すこしずつ制御を身につけていこうと思います。
各出展イベントのまとめ動画も合わせてどうぞ!🤖ミテネ
✉ ご意見・ご質問を necobit に送る✉
匿名で送りたい方はコチラ👇
X(旧ツイッター)で送りたい方はコチラ👇
メールで送りたい方はコチラ👇
***
すでに登録済みの方は こちら
