かわロボで入れてる制御の話をさくっとしか流していなかったので詳しく描いていこうかと思いました。
外から見てると制御入れてるのかよくわからない
↓
制御について理解してもらえない
↓
かなしい!!!!むなしい!!!!
書いたから理解しろ!!!
ハードウェア的な仕様
これは過去の記事を参照して欲しいところでもありますね
ロボットについているセンサー類は
・ジャイロ3軸
・加速度3軸
・アーム用ポテンショメータ
ですね
ジャイロと加速度は中華MPU6050で、データはArduino側で読んでシリアルでSTMに送ってます、10ms周期とかだった気がする
このクラスのロボットとしてはちょっと遅い気がするけど、そもそもプロポからの信号周期がもっと遅いので・・・・・
(そういえやキャチロボも制御周期10msのガバガバ制御だったけどわりと余裕でしたね)
モードの切替/操縦
プロポのトグルスイッチで停止-ジャイロなし-ジャイロありの3モードを切り替えられるようになっています。 ジャイロなしモードは、もしジャイロ関係が正常に動いていなくても試合に支障が出ないように用意しましたが、今の所お世話になったことはないです。
もう1つのトグルスイッチで、足回りのモーター出力を40%、75%、100%の3段階に切り替えられます。操縦の慣れや足回りの耐久性に応じて出力を抑えるようにしていましたが、最近はフルパワーでもなんとかなりますね
アームの制御
かわロボ本戦の時点では、プロポ入力+ジャイロのピッチ+ポテンショによる角度制限をしています。
ジャイロ補正は速度フィードバックでアームが水平を保つ方向に動きます(水平に角度制御しているわけではない)。立命杯、のとロボの時点では実装していなかったんですが、アームが変更されて動作速度が劇的に改善されたので、本戦前に立命館での練習会から実装しています。これによって、アームを大きく上げずに走り回れるようになるのでスキを減らせるんじゃないかと思っていますが、そもそも操縦スキルが全然足りていないのでうまく使いこなせていません。
角度制限は機構限界に近付くと、機構限界方向へのプロポ入力を0にして、めちゃくちゃなゲインのD制御で制動を入れるようになっています。もう少し賢い方法がありそうだけどいいのが思いつかないので暫定的にこれでやってます。モーターのブラシがめっちゃ光るよ。
いざという時に機構限界まで動かせるように、制動領域に入ってもプロポ入力が小さければ通すようにもなってます。
足回りの制御
プロポ入力(マイコン側でVテールにしている)+ジャイロ入れてます。
ジャイロ入力に適当なゲインかけてモーター出力に足しているだけなので速度フィードバックですね。おそらく凹凸への引っかかりに対して多少安定するんじゃないでしょうか。最善は角度フィードバックなんですが、操縦性との両立が難しいですね。うまい方法があれば試してみたいですね
ボイス周り
電源投入、モード変更、出力変更、アームの動作、転倒検出、転倒復帰時に自動的に適切な内容を喋るようになっています。
操縦に使っていないトグルスイッチ2つはボイス出力用に割り振っているので任意のタイミングで喋らせることもできますが、バトルしつつボイス出力操作するのは人間業ではないので、練習試合を含めて試合中に使ったことはないですね
転倒検出と転倒復帰は加速度を見て一定時間以上重力加速度が負になったら転倒していると判断するようになっています。ジャイロは使わなくても十分な精度を得られています。
今後
アームの角度制御は難易度が低そうかつ実用性が高そうなので実装したいですね。
余裕があれば転倒復帰自動化したいし半自動攻撃や半自動回避や半自動旋回も実装したいところです。
かわロボ基板ver3.0
なんかかわロボやりたいって人が増えているので、保護回路増やしたり、初回電源投入時にモーターが回らないNCP5359に起因する問題を修正して、扱いやすいユーザーフレンドリー感を醸し出していきたいですね。
今はコプロセッサ(?)としてArduino化ATmega328Pを使っているので性能が低いんですが、次はESP32にして処理能力の強化や周辺機器の拡充に努めたり、基板内バスをシリアルからCANに変更したり、本戦でボイス音量が足りなかったのでアンプ出力上げたり・・・・・・うーんまあいろいろやりたいですね。