MultiWii ALL IN ONE PRO  Gimbal



MultiWii ALL IN ONE PROで二軸ジンバルを制御してみました。
取り付けたジンバルはCM102 2-Axis Carbon Fiber Camera Gimbal Mountと言うものでスペックはこんな感じです。
サーボはアナログの金属ギャータイプが付属で可動部分にベアリングは使用していませんが動きはガタもなくスムーズ、
素材がカーボンなので組みあがると剛性が大きくカッチリした印象です。(実測の重さは115gぐらいです。)

Specification
Product: CM102-DS 2-axis Camera Gimbal Frame
Material: Carbon Fiber ( thickness 1.2mm)
Weight: 75g (2pcs Servos not included)
Weight: 103g (2pcs Servos included)
The Depth of Inner Frame: 68mm
Dimension: 170mm(Width) x 158mm(Depth) x 110mm Height)
Rolling angle: 60 degree
Pitch angle: 80 degree
Max load: <500g


 





  • 取り付けた機体は軸間550mmのオリジナルクワッドXです。
    まずはジンバルを組み立てて機体に取り付けますが取り付けは直に取り付けるのではなく
    10mmのスポンジフォームを 挟んで接着、フレームとはフローティングにしています。
    小さな振動はここで吸収する構造です。次にサーボをコントロールボードに繋ぎますが
    MultiWii ALL IN ONEボード の場合はピン44,45を使います。



      

      
     





ファームウェアの編集

def.hの編集はCRIUS_AIO_PRO_V1のところをこのように追加します。

#if defined(CRIUS_AIO_PRO_V1)
  #define MPU6050
  #define HMC5883
  #define MS561101BA
  #define ACC_ORIENTATION(X, Y, Z) {accADC[ROLL] = -X; accADC[PITCH] = -Y; accADC[YAW] = Z;}
  #define GYRO_ORIENTATION(X, Y, Z) {gyroADC[ROLL] = Y; gyroADC[PITCH] = -X; gyroADC[YAW] = -Z;}
  #define MAG_ORIENTATION(X, Y, Z) {magADC[ROLL] = X; magADC[PITCH] = Y; magADC[YAW] = -Z;}
  #define MPU6050_I2C_AUX_MASTER // MAG connected to the AUX I2C bus of MPU6050
  #undef INTERNAL_I2C_PULLUPS
  #define I2C_SPEED 400000L         //400kHz fast mode
  //servo pins on AIO board is at pins 44,45,46, then release pins 33,34,35 for other usage
  //eg. pin 33 on AIO can be used for LEDFLASHER output
  #define SERVO_1_PINMODE            pinMode(44,OUTPUT);        // TILT_PITCH
  #define SERVO_1_PIN_HIGH           PORTL |= 1<<5;
  #define SERVO_1_PIN_LOW            PORTL &= ~(1<<5);
  #define SERVO_2_PINMODE            pinMode(45,OUTPUT);        // TILT_ROLL
  #define SERVO_2_PIN_HIGH           PORTL |= 1<<4;
  #define SERVO_2_PIN_LOW            PORTL &= ~(1<<4);
  #define SERVO_3_PINMODE            pinMode(46,OUTPUT);        // CAM TRIG
  #define SERVO_3_PIN_HIGH           PORTL |= 1<<3;
  #define SERVO_3_PIN_LOW            PORTL &= ~(1<<3);
#endif



config.hの編集はこの部分をこのように修正。

 /***********************          Cam Stabilisation             ***********************/
    /* The following lines apply only for a pitch/roll tilt stabilization system. Uncomment the first or second line to activate it */
    //#define SERVO_MIX_TILT
    #define SERVO_TILT
    #define TILT_PITCH_MIN    1020    //servo travel min, don't set it below 1020
    #define TILT_PITCH_MAX    2000    //servo travel max, max value=2000
    #define TILT_PITCH_MIDDLE 1500    //servo neutral value
    #define TILT_PITCH_PROP   25      //servo proportional (tied to angle) ; can be negative to invert movement
    #define TILT_ROLL_MIN     1020
    #define TILT_ROLL_MAX     2000
    #define TILT_ROLL_MIDDLE  1500
    #define TILT_ROLL_PROP    -30

ここではSERVO_TILTを定義することによりサーボが動作、
コントロールボードの傾きに対してのサーボの動作量の増減、リバースの設定は
 #define TILT_PITCH_PROP
#define TILT_ROLL_PROP
で行います。
数値の大きさでサーボの動作量、+-でサーボの正転、逆転を指令します。

  /***********************             HW PWM Servos             ***********************/
    /* HW PWM Gimbal for Arduino Mega.. moves:
      Pitch = pin 44
      Roll  = pin 45
      this reduces the PWM resolution for all other servos to 8 bit */
    #define MEGA_HW_GIMBAL


  /***********************         Servo Refreshrates            ***********************/
    /* Default 50Hz Servo refresh rate*/
    #define SERVO_RFR_50HZ

サーボはアナログの場合50HZで快適に動きますがデジタルサーボにするときは数値を変更します。


コンフィングツールの設定
ジンバルを動作させるにはAUXでCAMSTABを指令します。

サーボは2個動作させていますが受信機のチャンネルの追加は必要ありません。
サーボの制御はコントロールボードでするので受信機側はAUX1か2で
CAMSTABのオン、オフ、を指令するだけです。
ジンバルを動作したままで良ければCAMSTABのチェックを入れっぱなしにすれば良いわけです。



 
実際にフライトした感想は当然ですが機体の前後左右の揺れはかなり押さえられています。
テストの日は低気圧がきていて少し荒れた天気で風もそこそこ吹いていましたが
全体的にしっとり?した感じの映像になり今度はお天気の良い風が穏やかな日にフライトしてみたいです。
フローティングのスポンジダンパーの効果はかなりありジンバルオフでも振動が吸収されているのがわかります。


風の穏やかな早朝の撮影です。まだ小さな揺れが画面から感じられますがサーボ2個付きで約5000円の価格
からすれば上出来だと思います。例えばガタが無く高速なサーボや更に剛性のあるリンケージなどまだ改良点は
ありますが一番効果があるのはは自分の操縦スキル向上かもしれませんo(^-^)o。

 


まだ小さな振動が残っていますがお手軽にyoutubeのブレ補正をかけてみました。
小さな振動なのでかなり補正できているようで滑らかな動画になっています。


こちらは補正なし、小さな揺れはありますがシャープさはこちらのほうが上です。
後半の水上フライト動画はCANON IXYのものです。





SONY DSC-WX50を載せてみました。CamTriggerのコマンド
でサーボでシャッターコントロールをしていてインターバルシャッターも切れて
1600万画素の静止画を高画質で撮影できます。






SONY DSC-WX50で撮影した静止画、リサイズしてありますが原画もかなりシャープです。



CamTrigger

CamTriggerはシャッターのコントロールをするコマンドです。
config.hのCam Stabilisationの下にこのような記述があります。
 #define CAMTRIGを定義してコンフィングツールCAMTRIGにチェック
を入れるとAUXのスイッチのON,OFFでサーボによるシャッターが切れます。
動作はスイッチのON,OFFで1枚撮影、ONのままだと指定した時間間隔で
インターバル撮影になり自動的に撮影が続行されます。


 /* camera trigger function : activated via Rc Options in the GUI, servo output=A2 on promini */
    #define CAMTRIG(シャッターコントロールの指令)
    #define CAM_SERVO_HIGH 1130  // the position of HIGH state servo(サーボの動作位置、HIGH,LOWを入れ替えることでリバース)
    #define CAM_SERVO_LOW 1600   // the position of LOW state servo(サーボの動作位置、HIGH,LOWを入れ替えることでリバース)
    #define CAM_TIME_HIGH 4000   // the duration of HIGH state servo expressed in ms(サーボアップ時の停止時間/4000=4秒)
    #define CAM_TIME_LOW 1500    // the duration of LOW state servo expressed in ms
(サーボダウン時の停止時間/1500=1.5秒)





MultiWii SE Standard Edition(CRIUS)

MultiWii SE V1.0、MultiWii SE V0.2の場合の設定

接続はコントローラーの A0ピンにピッチ用サーボ、A1ピンにロール用サーボを接続します。




ファームウェアの編集

MultiWiiファームウェアV2.1のconfig.hの編集はこの部分をこのように修正。

 /***********************          Cam Stabilisation             ***********************/
    /* The following lines apply only for a pitch/roll tilt stabilization system. Uncomment the first or second line to activate it */
    //#define SERVO_MIX_TILT
    #define SERVO_TILT
    #define TILT_PITCH_MIN    1020    //servo travel min, don't set it below 1020
    #define TILT_PITCH_MAX    2000    //servo travel max, max value=2000
    #define TILT_PITCH_MIDDLE 1500    //servo neutral value
    #define TILT_PITCH_PROP   20      //servo proportional (tied to angle) ; can be negative to invert movement
    #define TILT_ROLL_MIN     1020
    #define TILT_ROLL_MAX     2000
    #define TILT_ROLL_MIDDLE  1500
    #define TILT_ROLL_PROP    -20

ここではSERVO_TILTを定義することによりサーボが動作、
コントロールボードの傾きに対してのサーボの動作量の増減、リバースの設定は
 
#define TILT_PITCH_PROP
#define TILT_ROLL_PROP
で行います。
数値の大きさでサーボの動作量、+-でサーボの正転、逆転を指令します。



    /* camera trigger function : activated via Rc Options in the GUI, servo output=A2 on promini */
    //#define CAMTRIG
    #define CAM_SERVO_HIGH 2000  // the position of HIGH state servo
    #define CAM_SERVO_LOW 1020   // the position of LOW state servo
    #define CAM_TIME_HIGH 1000   // the duration of HIGH state servo expressed in ms
    #define CAM_TIME_LOW 1000    // the duration of LOW state servo expressed in ms

コンフィングツールの設定
ジンバルを動作させるにはAUXでCAMSTABを指令します。

  サーボは2個動作させていますが受信機のチャンネルの追加は必要ありません。
サーボの制御はコントロールボードでするので受信機側はAUX1か2で
CAMSTABのオン、オフ、を指令するだけです。
ジンバルを動作したままで良ければCAMSTABのチェックを入れっぱなしにすれば良いわけです。


このようなジンバルの場合サーボがジンバルにダイレクトで取り付けられているのでリンケージで傾きを調整できません。



その場合はストローク中立の部分#define TILT_PITCH_MIDDLE 1500
#define TILT_ROLL_MIDDLE  1500の1500の数値を変更して角度を調整します。
プロポで言えばサブトリムのような感じですね。