1軸 姿勢制御モジュール の倒立に向けた準備 ーリアクションホイールへの道6ー
前回は1軸姿勢制御モジュールの筐体を製作し、簡単な動作確認を実施いたしました。
今回は姿勢制御モジュールの倒立実現に向けていくつか検討、改修を施したので
報告いたします。
目次
エンコーダ導入
前回の動作確認段階でP制御では倒立しそうもないことは、体感的に理解できました。
【ブログ更新】
1軸姿勢制御モジュールの筐体製作まだ倒立はしておりません。#リアクションホイールへの道#3Dプリンタ
☟ブログリンクはコチラhttps://t.co/u2y63R7Wya pic.twitter.com/O1ZdSh2puF
— HomeMadeGarbage (@H0meMadeGarbage) August 2, 2020
そこで詳細は次回以降で報告しますが、制御のフィードバックにモータの角速度も追加するべく
モータのエンコーダ出力を利用することにしました。
構成
エンコーダ出力とブレーキ端子をATOM Matrixに接続しました。
部品
- M5Stack ATOM Matrix
- フライホイール付きブラシレスモータ ID-549XW
以前 試したようにエンコーダ出力で割り込みしてモータの回転位置と方向を検知します。
しかし、エンコーダ出力を割り込み検出するべくArduinoコードにattachInterruptを追加したとたんLEDフル点灯(全白)しだし、ATOMが アツアツなってしまいました。
原因はよくわからないのですがM5 ATOM Matrixで attachInterruptとM5ライブラリの共存がうまくいかないようです。
とりあえずは
M5.begin(true, false, false); //SerialEnable ,I2CEnable , LEDEnable
でLEDオフで対応しています。
フルスケールレンジ変更
傾き検出の精度を高めるべく、M5 ATOM Matrix内蔵の6軸慣性センサ MPU6886の検出レンジを以下のように変更しました。
- 加速度:16bit ±8 g → ±4 g
- ジャイロ(角速度):16bit ±2000 deg/sec → ±500 deg/sec
Arduinoコードでsetup()に以下を追加し測定レンジを指定ました。
1 2 |
M5.IMU.SetGyroFsr(M5.IMU.GFS_500DPS); M5.IMU.SetAccelFsr(M5.IMU.AFS_4G); |
カルマン・フィルタ見直し
これまでカルマン・フィルタについて2019年7月号のトラ技のコードを参考に
使用してきました。
【ブログ更新】
カルマン・フィルタで ATOM Matrix 傾斜計#リアクションホイールへの道#M5Atom #m5stack☟ブログリンクはコチラhttps://t.co/CWLwFe5SxU pic.twitter.com/vb0Bvny9tB
— HomeMadeGarbage (@H0meMadeGarbage) July 31, 2020
しかし、なんだか応答がいまいち良くない気がしたので、
カルマン・フィルタによる姿勢角の推定値を改めて確認してみました。
全然倒立してくれないから
よくよくフィルタ出力みたら
応答性良くなかった。フィルタから見直そう pic.twitter.com/xdz3GxvQIf
— HomeMadeGarbage (@H0meMadeGarbage) August 2, 2020
すると角度を素早く変えるとオーバーシュートぎみで推定値が出力されていることが分かりました。
これはよくないので以下のカルマン・フィルタ ライブラリを使用することにいたしました。
以下の通り、応用性の改善を確認できました。
以下のカルマンフィルタライブラリ使用で
応答性は解決した。https://t.co/q4tsuonnS8 pic.twitter.com/tZgJxwucWo— HomeMadeGarbage (@H0meMadeGarbage) August 2, 2020
やはり、実績のある既存のライブラリは非常に有用でありがたいものですね。
参考
おわりに
現状はまだ倒立できておりませんが、準備は整ったかと思うので
制御の学習をすすめ倒立実現させたいと考えております。