姿勢制御検討 ードローンへの道2ー

Home > 電子工作 > 姿勢制御検討 ードローンへの道2ー
すき 2
うんこ 0

前回は Makerfabs 様よりいただいた基板 ESP32 6- Axis IMU を用いてドローン製作を決意いたしました。

ドローンへの道 爆誕 ードローンへの道1ー

ここではプロペラを制御してドローンの姿勢を制御するべく検討いたしましたので報告します。

 

 

モータ回転

ESP32 6- Axis IMU にモータとプロペラを接続し、回転動作を確認します。
モータ番号の配置と回転方向そしてIOピンの割り振りは以下の通りです。

 

使用したモータとプロペラは以下です。

動作

ESP32のモータ駆動ピンにPWM信号を入力して回転させてみました。
スマホアプリ Blynk を用いてBLE通信でPWM信号のデューティを指定しています。

 

このまま飛ばしてみました。

当然ただモータぶん回すだけじゃこうなりますよね。。。

ちなみにダイソーのワイヤーネットで飛行実験場をこしらえました。

 

姿勢制御

何となく飛びそうなことがわかりましたので、姿勢制御で安定飛行を目指します。

MPU6050

ESP32 6- Axis IMU には6軸IMUセンサ MPU6050が搭載されています。

 

軸は以下の通りです。

 

MPU6050のArduinoライブラリは以下を使用しました。
 https://github.com/jrowberg/i2cdevlib/tree/master/Arduino/MPU6050
 https://github.com/jrowberg/i2cdevlib/tree/master/Arduino/I2Cdev

 

ここではMPU6050のDMP (Digital Motion Processor) 機能を使用して姿勢角を検出することにします。
DMPは内部で何をしているかはよくわかりませんが品質の高い姿勢情報を容易に得ることができます、

モータ制御

XYZ軸の傾きに応じてモータを制御してドローンの姿勢を制御します。

各軸のフィードバック値はそれぞれの姿勢角と角速度を用いては以下のようにPID制御で求めることにしました。

$$軸のフィードバック値 = Kp × (θ – θ_{target}) + Ki × \sum{ (θ – θ_{target})} + Kd × ω$$

$θ$は各軸の角度、$θ_{target}$は目標とする姿勢角、$ω$は各軸の角速度、Kは各パラメータの係数です。

各軸のフィードバック値を組み合わせて4つのモータを制御します。
たとえばX軸に傾いた場合にはM2, M4の回転を上げて、M1, M3の回転を下げるなどします。

各軸のフィードバック値をx2, y2, z2、モータ全体の回転指定値をthr (スロットル)としてモータに与えるPWM信号を以下のようにしました。

M1pwm = thr – x2 + y2 + z2
M2pwm = thr  + x2 – y2 + z2
M3pwm = thr – x2 – y2- z2
M4pwm = thr + x2 + y2 – z2

参考

  • ESP32 6- Axis IMU 回路図
  • Interface 2020年 03 月号

 

Arduinoコード

BlynkアプリでBLE通信でPIDの各パラメータやモータスロットル、ドローンの姿勢角度の指定を行います。

 

動作

ゴムで吊るして動作確認しました。電源5Vは外部から供給しています。
割とよく姿勢制御ができています。

 

スマホのBlynkアプリからX軸の旋回とZ軸の回転を試してみました。

 

 

おわりに

姿勢制御の方針が決まり動作も確認できました。

以降はホバリング飛行を目指して調整進めていきたいと思います。

それでは次の道で!

コメントはこちらから

メールアドレスが公開されることはありません。コメントのみでもOKです。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください