サーボモータでジャンプに挑戦4
前回はシリアルサーボ STS3032を用いての屈伸倒立振子を製作し、ジャンプ動作の確認を行いました。
しかし残念ながらジャンプ後の着地は実現できませんでした。
目次
ホイール用モータ
倒立振子のホイール用モータとしてシリアルサーボ STS3032を採用したのですが、あまり応答もよくなくジャンプ後の着地もうまくいきませんでした。
STS3032ちょっと回転速度足りないな。。#倒立振子 #電子工作 pic.twitter.com/uV5S5OYiM8
— HomeMadeGarbage (@H0meMadeGarbage) August 11, 2023
本家の倒立振子も動作音から察するに、ホイール用のモータとしてサーボを使用していると思うのだが。。
ホイールにはどんなモータつこてはるんやろ https://t.co/wXRImrKxWL
— HomeMadeGarbage (@H0meMadeGarbage) August 12, 2023
なんとご本家様から金言をいただく!
same as 3032, but we will update to bushless
— XGO (@luwu_dynamics) August 12, 2023
動画の倒立振子はSTS3032を使用しているとのこと!
ってことは私の使用方法に問題があるということですね(;^ω^)
非常にありがたいアドバイス(というか答え)をいただき感謝感謝!
このまま路頭に迷うところだった。
STS3032動作モード
STS3032で応答よく倒立振子ホイール制御できることが分かったので、腰を据えてサーボの制御方法を勉強し直します。
実は前々から気にはなっていたのですがSTSシリーズは動作モードがいくつかあるんですよね。
一つ一つ丁寧に見ていきましょう。
サーボの動作モードはFeetechのサーボデバッグ用ソフトで変更可能です。
”Programming”タブのWork Mode (ID 33)の数字を変更
Operation Mode 0
通常のサーボモード
STS3032 Operation Mode = 0
通常のサーボモード
回転位置を360°を0-4095で指定
最大スピードは7500 [単位は恐らくstep/sec] pic.twitter.com/oZZTiauIHD— HomeMadeGarbage (@H0meMadeGarbage) August 13, 2023
Operation Mode 1
回転速度を指定するモータモード。
これまではこのモードで倒立振子動作をさせていた。
STS3032 Operation Mode = 1
モータモード クローズドループ制御らしい
回転速度を10~9999 [-10~ -9999] で指定
最大スピードは7500 [単位は恐らくstep/sec]反転時にちょっともたつく
私はこのモードで倒立振子してた pic.twitter.com/x0poAhpfE0— HomeMadeGarbage (@H0meMadeGarbage) August 13, 2023
Operation Mode 2
トルクを指定するモータモード。
応答もよくこのモードで倒立振子動作させるのが正解のよう。
Timeを指定して回転させるがデバッグソフトを観るとトルク(0~1000)を指定して回転させている。
STS3032 Operation Mode = 2
モータモード オープンループ制御らしい
Timeを50~1000 [-50~ -1000] で指定
最大スピードは9500 [単位は恐らくstep/sec]速いし反転時の応答もいい!
このモードで倒立振子するべきだった。… pic.twitter.com/zbjV7TZ2Xk— HomeMadeGarbage (@H0meMadeGarbage) August 13, 2023
Operation Mode 3
回転移動量を指定するステップモード。
STS3032 Operation Mode = 3
ステップモード
回転量を指定 負の値で反転 (最大指定ステップ数は不明 無限??)
最大スピードは7500 [単位は恐らくstep/sec] pic.twitter.com/NlszDX6LNM— HomeMadeGarbage (@H0meMadeGarbage) August 13, 2023
参考
STS3032 Operation Mode 2
倒立振子のホイール用に適切であろうサーボの動作モードがわかりましたので早速展開します。
Operation Mode = 2のTime設定がSTSサーボのArduino用ライブラリでは出来なかったので、ライブラリをちょこっと修正しました。
反転時も速度調整できるようになりました。
反転ビットは10ビット目でした。
(マニュアルには15ビットと書いてあったが。。) pic.twitter.com/GlhDlxqCij— HomeMadeGarbage (@H0meMadeGarbage) August 13, 2023
倒立動作
STS3032のOperation Mode = 2ではモータのトルクを指定しているので、モータの回転速度を指定している前提のこれまでの制御方法では倒立できませんでした。
STS3032の回転速度センシング機能をもちいて速度の実測値をフィードバックすることでやっと倒立できました。
機体角度のPIDでもうまくいかず
サーボ速度フィードバックが正解のようだった
推定値ではなく実値なので安定感が違う(気がする)屈伸も足踏みもよりダイナミックに
これからギュンギュン移動させて夢のジャンプに挑む pic.twitter.com/Gc4WQu8EC8
— HomeMadeGarbage (@H0meMadeGarbage) August 14, 2023
この時点の制御でフィードバックしている項目は以下のとおり
- 機体の傾きの角度 (ATOMS3内蔵のIMUセンサで計測)
- 機体の傾きの角速度 (ATOMS3内蔵のIMUセンサで計測)
- ホイール回転速度 (STS3032内蔵センサで計測)
- ホイール回転量 (回転速度の積算で算出)
気をよくして、移動動作も試したのですが上手くいきませんでした。
このモータならもっとギュンギュン移動できるはずだけど、速度実値フィードバックしながらの回転制御の仕方に俺の思考が及んでない。
回転速度に変数重畳して制御してみたけどちょっとイマイチ
ジャンプ動作が気になりすぎるから移動については後で再度検討しなおす(なんか書物に答えあるだろ… pic.twitter.com/FvxFu0fcC2— HomeMadeGarbage (@H0meMadeGarbage) August 14, 2023
ホイール回転速度を実測値として倒立動作させたのが今回が初めてなのですが、この場合の移動動作って難しくないですか?
上の動画ではフィードバックする速度に変数付与して動かしてますが、その動作の速度がセンシングされてまたフィードバックされてしまうので。。。
うーんちょっと考えないとな。恐らくちゃんとした書籍を紐解けば答えがあるはず。
移動に関しては引き続き調べることとします。
ジャンプ動作
さてお目当てのジャンプ動作です。
ちょっと飛んだ#電子工作 #倒立振子 pic.twitter.com/3CzK4kUtqf
— HomeMadeGarbage (@H0meMadeGarbage) August 14, 2023
ちょっと飛んで着地できた!!
しかし着地後の安定性がイマイチですね。
安定性向上
さらなる安定性向上を目指して、測定回転速度の積算によって算出していたホイール回転量をSTS3032のホイール位置センサの実値から導出することにしました。
安定性を向上
ホイール移動量もサーボ回転ポジションからセンシングしてフィードバック
インテリジェンスなサーボは最高ですね pic.twitter.com/5ZJ8GHbVlg
— HomeMadeGarbage (@H0meMadeGarbage) August 15, 2023
足の屈伸量を増やすことに成功し、それなりにジャンプできるようになりました。
まだ改善の余地はありそうですが、夢のジャンプ実現が達成できました。
おわりに
ここではシリアルサーボ STS3032の動作モードの再検討を実施し、夢の倒立振子のジャンプ動作を実現しました。
本家のXGO様の幾度もアドバイスをいただき実現に至りました。本当にありがとうございます。
本家の機体はホイール用にブラシレスモータが採用される予定とのことです。デザインもめっちゃカッコいい。
AIロボット犬同様に機能やソフトも洗練されているものと予想されます。
販売が凄く楽しみですね。
The final design draft of XGO-Rider, a desktop-grade open-source wheel-legged robot, uses Raspberry Pi or micro:bit as the main controller, aiming to bring more fun to global developers and robot enthusiasts. pic.twitter.com/blrifNtL29
— XGO (@luwu_dynamics) August 2, 2023
また自作の倒立振子についてはギュンギュンと移動動作させたいので引き続き検討いたします。
それではまた
追記
2023/8/17
ジャンプ動作や屈伸・足踏み動作を一連で実行できるようにしました。
homemade wheeled-leg robot pic.twitter.com/yRZSVa077M
— HomeMadeGarbage (@H0meMadeGarbage) August 16, 2023
移動も色々検証したのですが、前進/後進が全然うまくできない。。
上の動画では旋回動作も実施
旋回時は回転速度とホイール移動量の測定を止めてを値をゼロとして左右のタイヤの指定値にそれぞれスピード加算して実行。
このやり方では前進/後進ができない。
旋回ももっとグルグル回したいのだが。。
引き続き勉強が必要だ。
動作のさせ方に興味がわきます。サーボモータでジャンプに挑戦の製作レシピの販売もしてほしいです。
コードでサーボの動作モードがいまいちわからないのでOperation Mode = 2のTime設定のライブラリを修正したの含めてSTS3032サーボの解説だけでも販売してほしいな
ありがとうございます。
STS3032につきましては別途ブログ記事にまとめてみようと思います。
宜しくお願い致します。