Kariya Micro Maker Faire 2026に出展しました。
Nidec 24Hモーターやその使用例、様々なロボットを展示したのですが、その中に2輪の倒立振子ロボットがありました。
キャチロボの時のように一気に仕上げて間に合わせようとしたのですが、間に合いませんでした。
当日朝にハードウェアが完成しましたが、倒立振子を立たせるためのコードを考えておらず、立たせた状態での展示は叶いませんでした。
悔しいので次の日に少しコード書いたら立ちました。
Nidec 24Hモーター2個を使用しています。📄Nidec 24H BLDCモーターの仕様まとめ
最初は減速比10の自作QDDギアヘッドで(ぎりぎり)立たせましたが、すぐに外してダイレクトドライブ(DD)にしました。
バッテリーはGreenWorks(互換)バッテリーで24Vです。📄ずぼら向けロボット用24Vバッテリーの開拓~GreenWorks~
IMUはDAMIAOです。CANから読みます。📄DAMIAOのIMUをCAN通信で使う
基板は「Nidec 24Hモーター4個動かす基板」です。
Raspberry Pi Pico Wが載っています。
Nidec 24Hモーターに繋げるPWMピンは、Pico WのPWMスライス(PWM 数字 AかB)が重複しないように繋げています。他は直結です。https://picow.pinout.xyz ここで確認すると便利です。
基板単体でロボットとして使えるように、Pch MOS-FETによる電流スイッチ(表面実装したXL-10AH)やCANトランシーバでRP2040PIO_CANからCAN通信ができるようになっています。Nidec 24Hモーターに限らず、CANから制御するBLDCモーターが簡単に動かせる汎用と専用の中途半端基板です。
Arduino IDEで書きます。
展示中に後輩たちと話しながらコードを考えていたのですが、姿勢角と姿勢角速度はIMUから取れるとして、位置制御をどうやって行うのかというのが問題でした。
車輪のエンコーダを読むだけではダメで、姿勢角の分を打ち消して移動量に変換する必要があると気づきました。
図にしました。
これで、姿勢角と姿勢角速度と本体位置と本体速度にそれぞれゲインを掛けて出力にすればいいことになりました。
こちらのページに書かれている手順で行いました。立ちました。
ここで、減速比10のギアボックスのバックラッシが大きく、不感帯が発生して制御に悪影響が出ていたため、出力にローパスフィルタを掛けました。
暇だったので起動時にロボマスの音が出るようにしました。
減速比10のガタありQDDを辞めて、理論上はガタなしのDDにしました。
トルクが1/10になるのが不安でしたが、姿勢がほぼ水平の状態から微小な角度を補正するのであればトルクは殆ど要らないだろうと信じてやってみました。
ちょっとした悲劇も発生しましたが、うまくいきました。
減速比10のときのゲインのままで特にいじらずそのまま立ちました。
最終的にはラジコン化したいと思ってたので、位置制御を消して一番安定しそうなゲインを探しましたが、結局同じくらいのゲインになりました。一旦これでおしまいです。
また時間があるときにラジコン化したいです。
あと1日か2日早くできていれば、Kariya Micro Maker Faire 2026に展示できていたのになぁという後悔が大きいです。
パパっと書いた状態ですがコードを置いておきます。
