ジンバルコントローラーとしてのMultiwiiについて
1 現在の状況について
色々やった割には、一番つまらない結果に落ち着いています。
結局、弄っているのは、config.hのみです。
基本文体がですます調でない所は、個人的な一人ごと というか、妄想ぎみな所もあり、赤裸々な自分の思いを綴り誠にお恥ずかしいですが恥をさらします。存分にツッこんでいただければ幸いです。
現在使用しているボート:ZMR Multiwii SE(Cirusのパチもの?)
現在使用しているジンバル:GAUI CRANE III
現在使用しているサーボ:ロール JR NES2700G ティルト Futaba S9204
(いずれも大昔のアナログサーボ)
現在使用しているMultiwiiのバージョン: 2.1
なお、FCはNAZA-Mで、Multiwiiは防振ゲルで防振した後のプレートに固定し、ジンバルコントロール専用に使っています。
2 Config.h変更箇所
基本的な所
27行目 #define GIMBAL コメントアウト外す
109行目 #define CRIUS_SE コメントアウト外す
194行目 #define SERVO_TILT コメントアウト外す
ジンバルゲインの設定
(GAUI CRANE III使用 Roll軸JR製サーボ、Pitch軸Futaba製アナログサーボ)
198行目 #define TILT_PITCH_PROP 32(オリジナル10を32に変更)
202行目 #define TILT_ROLL_PROP -65(オリジナル10を-65に変更)
Gyroのローパスフィルタの設定
全てコメントアウトのまま変更せず。(=256Hz?)
サーボのリフレッシュレート
オリジナルのまま。50Hz(800行目を生かす。)
以上です。まったくもって参考になっていないと思われます、、、(>_<)
3.試してみたこと
NAZAのファームウエアがVer2.02になったころから、サーボの動きがガクガクし始め、色々見当違いのこと ((見当違いその1) (見当違いその2) (見当違いその3) (見当違いその4) )をやった結果、サーボ周波数50Hzでアナログサーボを使う設定に落ち着き、それなりに満足していたが、ジンバルに標準でついてくる(というか抱き合わせ販売?)のロールサーボGS-504(デジタル 333Hz 電圧4.8~7.4V)を何とか使いたい欲望を抑えきれず、NAZAのジンバルコントロールをやめて、他のボードに手を出した。
一枚目 KK2.0+OpenAero2
Camstabモードでサーボリフレッシュレート300Hzを試す。
ゲインを上限まで上げても私のジンバルに必要なサーボの動作量に達せず。アウト。
ジンバル専用のコントローラーを、防振した後のプレートに固めに固定したら、サーボが動く度に発生する振動をセンサーが拾い、共振するのを発見した。
モーターからの振動対策はばっちりな場所だったけれど、ジンバルからの振動対策も必要なのが分かったのが収穫。
二枚目 Multiwii
防振した後のプレートに、ヘリ用のジャイロシートを2枚重ねて貼り付け(ジンバルからの振動をセンサーに伝えない為)
http://www.rcgroups.com/forums/showthread.php?t=1710318
ここには、Output.inoの934行目935行目の16で割り算している所も変えて(16を6にしたり)調整みたいなことが書いてあるが、IMU.inoと併せてOutput.inoを斜め読みしても、config.hのTILT_PITCH_PROP,TILT_ROLL_PROPを変えるのと、どこが違うのかよく分からず、いじるのはconfig.hの書き換えのみにした。
試したのは、、、
- ジンバルサーボに電力を供給する外部BECの供給電圧を7.4V~5.0Vの範囲で変更。
- ジャイロのローパスフィルタ(#define ITG3200_LPFxxHZ)を色々変える。
- サーボ周波数(#define SERVO_RFR_xxHZ)を300,160,50で試す。
以上の条件で、ジャイロのローパスフィルタに関係なく、サーボ周波数が高ければ高いほど、そして、サーボに供給する電圧が高ければ高いほど、サーボのピクピクが激しいことを確認。
妥協していったら、サーボの電圧は5.0vかつ周波数は50Hzと落ちる所まで落ちて、(ただしそれでもNAZA Ver2.02+デジタルサーボよりはまし。)これなら、デジタルサーボ使わないで、NAZAで使っていたアナログサーボの方がまだましだろうということになり、現在に至る。
その後、秒間400コマで動画が撮影出来るデジカメで、ジンバルの動きを撮影してみた。
見た感じ、NAZAのジンバルサーボの計算が遅すぎて(=デジタルサーボの動きが速すぎて)、NAZAが次のサーボの位置を計算し終えるまでに、サーボが移動を終え、急停止、急加速を繰り返しているように見えなくもない。
Multiwii SE+デジタルサーボだとそこまでひどくないが、サーボの電圧を上げてゆくと若干その傾向あり。ただ、NAZAと違って、静止時にブルブルとジッタ気味なのと、いきなりピョコンと動いたりする傾向は、サーボの周波数を上げたり、電圧を上げてゆくと顕著。
なので、Multiwiiでも、移動距離(回転角度)が小さいとあまり力がかからない、10年前のアナログサーボの方が、気になる所を打ち消して、スムーズなジンバルの動きになるのだと、理屈を付けて現在に至る。
その後アナログサーボでまあまあ妥協出来たのと、新しいモーターとかアームを試して機体を調整するのに忙しくて、ジンバルのことに手が回っていないが、落ち着いた所で、以下のことを試してみたいと考えている所。
4.Multiwiiでやりのこしたこと
やりのこしその1
どうもMegaじゃない我がMultiwii SEでは、ハード的にサーボにパルスを作る機能(以下HWPWMと略)が6個しかなくて、それらは、(ジンバル制御にしか使わないのであれば)まったく不要な、ESCにパルスを送る為に予約されているようだ。
なので、ジンバルサーボのパルスは、我がMultiwiiでは、ソフトウエアで作られている。PCに繋げてシリアル通信させながらだとサーボのガチャガチャがひどくなるのを経験していたが、それだけでなく、内部で処理が重くなるとサーボのパルス出力が乱れるのかも知れない。。。
でも、どうせジンバル専用のコントローラーにするなら、Output.inoあたりを少し書き換えて、ジンバルサーボのパルスを作るのに、HWPWMを使うようにすれば、サーボへの角度を指示するパルスが綺麗になって、ガチャガチャが直るかもしれない。
実際、MegaなMultiwiiの基板だと、今の2.1でもジンバルサーボの出力先がソフトウエアでなく、HWPWM使うようになっているので、これを買ってしまうのも手ではあるけど、、、
なお、Megaな基板では(ジンバルサーボにHWPWM使うなら)、config.hの445行目、
446行目にある、#define MMSSERVOGIMBAL(ジンバルサーボの動きを平滑化するオプション)が必須だと、Output.inoにコメントが入っていた。
やりのこしその2
現状のMultiwiiのコードを変えてHWPWMにするのは時間がかかりそうだが、問題を切り分ける為に、Output.inoの934行目の直後に、
servo[0] = 1500;
と書いて、ソフトウエアのパルス生成に身を任せ、ピクピクするか試したい。それでもピクピクしたら、ジンバル制御に不要な気圧センサーとMagセンサーあたりの計算が実行されないように、def.hの717行目HMC5833とBMP085の#defineを外したらどうなるだろう。負荷が軽くなって、ソフトウエアでパルスを生成するにしても、ピクピクが少なくならないだろうか。
やりのこしその3
その他やっていないことで、効果がありそうな設定
ただしここに書いたことは、サーボのパルスが綺麗に出力されることが前提だけど、、、
すべてconfig.h内
Accセンサーにローパスフィルタを入れる。
824行目 #define ACC_LPF_FACTOR 100のコメントアウトを外す。
IMUで角度を推定するときにGyroとAccのセンサーの結果の重み付けの比率をかえる。
834行目 #define GYR_CMPF_FACTOR 400.0fの400.0fを適当にいじる。
Gyroセンサー値の平滑化
449行目 #define GYRO_SMOOTHING {20, 20, 3} のコメントアウトを外す。
5.それでもダメなら
Hoverfly Gimbalコントローラー、買ってもいいことにしようかな、、、