So-net無料ブログ作成
検索選択
ロボットを作ってみる! ブログトップ
前の10件 | 次の10件

プロペラの推力を測定をしてみた! [ロボットを作ってみる!]

ついに念願のプロペラの推力測定をしてみました!

DSC04471.JPG


動画で見ると変化の様子が、よく分かります。





PWMのレンジは0-1000までを設定し、100ずつ変更して測定をしてみました。その結果がこちら。


プロペラ推力グラフ.png


最大でも1.4g程度。推力なさすぎ。。。OTZ... デューティ比50%を過ぎると推力がダウンしてしまっています。モータードライバーの使い方が悪いのかも知れません。もう少し調査が必要そうです。
ε=(-. ー )





ESPr Developer(ESP-WROOM-02開発ボード)

ESPr Developer(ESP-WROOM-02開発ボード)

  • 出版社/メーカー: スイッチサイエンス
  • メディア: エレクトロニクス






PXYNANOプロペラセット(8枚入)

PXYNANOプロペラセット(8枚入)

  • 出版社/メーカー: G-FORCE(ジーフォース)
  • メディア: おもちゃ&ホビー




プロペラの推力測定器を作ってみた。 [ロボットを作ってみる!]

この週末を利用して、プロペラ推力測定器を作りました。いくつか試作を経た後にようやく落ち着いたデザインがこちら。AutoDesk 123D Design で設計しました。


propella_thrust.png


こちらは完成形です。モーターは下向きにつけます。足の底には滑り止めと振動吸収のためにグルーガンでグルーをつけました。


DSC04477.JPG


滑り止めをつけるときに活躍したのが、3Dプリンターのホットベッドです。ホットベッドを加熱しておいて、グルーが固まらないようにして足をつけました。


DSC04465.JPG

DSC04466.JPG


こんな感じで精密秤において測定します。試運転をしてみたら、滑り止めがかなり効果を発揮し、プロペラの回転にも耐えていました。


DSC04470.JPG


さて、どんなデータがとれるか楽しみです。
(^_^)/~






自宅ではじめるモノづくり超入門 ~ 3DプリンタとAutodesk 123D Designによる、新しい自宅製造業のはじめ方 ~

自宅ではじめるモノづくり超入門 ~ 3DプリンタとAutodesk 123D Designによる、新しい自宅製造業のはじめ方 ~

  • 作者: 水野 操
  • 出版社/メーカー: ソフトバンククリエイティブ
  • 発売日: 2013/05/28
  • メディア: 大型本






スリーアキシス(three axis) 電池式コードレスグルーガン 20303

スリーアキシス(three axis) 電池式コードレスグルーガン 20303

  • 出版社/メーカー: ミツトモ製作所
  • メディア: Tools & Hardware




ESP8266(ESP-WROOM-02)とFET(モータードライバ)でコアレスモーターを駆動してみた [ロボットを作ってみる!]

ESP-WROOM-02 で、FET(モータードライバ)を使ってコアレスモーターを駆動をしてみました。手元にTPC8407というFETがあったので、それで試してみました。


TPC8407 データシート http://akizukidenshi.com/download/ds/toshiba/TPC8407_datasheet_ja_20140107.pdf


回路は下記のように組んでみました。本来は電源を3.3Vにレベルダウンする必要がありますが、動作確認なので端折ってしまっています。ESP-WROOM-02 は3.7V入力しても結構耐えてくれますね。


driving coreless motor.png


FETを保護するためのダイオード、コンデンサも手元になかったので省いてしまっています。実際に組むときは考えないといけませんね。

組み上がった回路がこちらです。


DSC04441.JPG


FETは恥ずかしながら空中配線です。(^^;


DSC04443.JPG


それでは動かしてみましょう。スケッチは前回と同じものを使っています。





ポートから駆動するよりもはるかに力強く回ってくれています。これなら飛びそうかなぁ。
σ(^. ^)















ドローンのシステム基礎を学ぶ(13) [ロボットを作ってみる!]

年越しテーマとなってしまいましたが、ドローンのシステム基礎の続きです。前回までプロポから、ロール目標速度(Φ target rate)、ピッチ目標速度(θ target rate)、ヨー目標速度(ψ target rate)を設定するようにしていました。


Drone-PID-system.png


しかし冷静に考えると、プロポでヨーの速度(Z軸回転:ψ)を設定するのはなんとなく分かりますが、ロール速度(X軸回転:Φ)、ピッチ速度(Y軸回転:θ)をプロポで設定するのは至難の業です。


drone.PNG


プロポからはロール(Φ)、ピッチ(θ)の目標角度を設定するのが現実的です。ということで、システム図をロール(Φ)、ピッチ(θ)の目標角度を設定するように変更してみました。


drone_basic_system.png


基本的な構成は二段階PID制御システムになります。目標角度(target angle)と測定角度(measured angle)から、目標角速度(target rate)をPID制御を使って算出し、それを後段のPID制御ブロックに渡してPWM値を求めます。

ここで、測定角度(measured angle)を算出には、ジャイロセンサーと加速度センサーを用いたセンサーフュージョンを使います。

センサーフュージョンは下記のような算出式と、DCM(Direction Cosign Matrix)もしくはQuaternion、Kalman Filter などのアルゴリズムで構成されています。

// preΦg、preθg、preψg は前回の測定角度
// Δt はジャイロセンサーの測定間隔
Φa = arctan(-ay/-az)
θa = arctan(ax/√(ay*ay + az*az))
Φg = preΦg + (Φ measured rate) * Δt 
θg = preθg + (θ measured rate) * Δt 
ψg = preψg + (ψ measured rate) * Δt 



センサーフュージョンは、最近は各センサーメーカーから提供されていることが多いので、利用するにあたって詳細まで知る必要はありません。

これで基本的な理論背景はだいたい整ったかな。あとは実践しながら考えていきたいと思います。
p(^ー^)q





SODIAL(R) GY-521 MPU-60503軸ジャイロ+3軸加速度センサ

SODIAL(R) GY-521 MPU-60503軸ジャイロ+3軸加速度センサ

  • 出版社/メーカー: SODIAL(R)
  • メディア: Personal Computers



ArduPilot -UAV Controller w/ ATMega328 [並行輸入品]

ArduPilot -UAV Controller w/ ATMega328 [並行輸入品]

  • 出版社/メーカー: SHANHAI
  • メディア: エレクトロニクス



Building Your Own Drones: A Beginners' Guide to Drones, UAVs, and ROVs

Building Your Own Drones: A Beginners' Guide to Drones, UAVs, and ROVs

  • 作者: John Baichtal
  • 出版社/メーカー: Que Publishing
  • 発売日: 2015/09/14
  • メディア: ペーパーバック




実証試験用のモーターとプロペラを購入 [ロボットを作ってみる!]

ドローンの理論がだんだん分かってくると、試してみたくなるのが人の常。ということで、実証試験するためのモーターとプロペラを購入しました。ちっさー。これ、まともに飛ばせるかな・・・。


DSC04396.JPG


あとはマイコンとモータードライバを決めて、6軸センサーのMPU6050をつければ電気部品はそろいます。筐体はなんで作ろうかなぁ・・・悩む。
(^_^;








PXYNANOプロペラセット(8枚入)

PXYNANOプロペラセット(8枚入)

  • 出版社/メーカー: G-FORCE(ジーフォース)
  • メディア: おもちゃ&ホビー



サインスマート(SainSmart) MPU-6050 3軸ジャイロスコープ モジュール for Arduino

サインスマート(SainSmart) MPU-6050 3軸ジャイロスコープ モジュール for Arduino

  • 出版社/メーカー: サインスマート(SainSmart)
  • メディア: エレクトロニクス




ドローンのシステム基礎を学ぶ(12) [ロボットを作ってみる!]

前回まで、PID制御の基礎理論について学びました。今回はこれをドローンに応用したいと思います。ドローンの制御系を振り返ってみます。詳しくはこちらを参照してください。


BasicDroneControl.png


この時K(-1) は、下記のように表現できます。詳しくはこちらを参照してください。


drone_control4.PNG


これにPID制御を加えると下記のようになります。システムを簡単化するために、Kr = Kp = Ky = Kt = 1/4k としました。また、p1, p2, p3, p4 はそれぞれのモーターのばらつきを補正する係数です。


Drone-PID-system.png


次はこれがどのようなプログラムになるのか確認してみたいと思います。
(^_^)/~





Building Your Own Drones: A Beginners' Guide to Drones, UAVs, and ROVs

Building Your Own Drones: A Beginners' Guide to Drones, UAVs, and ROVs

  • 作者: John Baichtal
  • 出版社/メーカー: Que Publishing
  • 発売日: 2015/09/14
  • メディア: ペーパーバック



ジーフォース G-FORCE PXY CAM ドローン オレンジ・GB301 1067656 【1点】

ジーフォース G-FORCE PXY CAM ドローン オレンジ・GB301 1067656 【1点】

  • 出版社/メーカー: UNderSell(アンダーセル)
  • メディア: ホーム&キッチン



HPHELI Batfly 250 Quad Racer Drone DIY Kit [並行輸入品]

HPHELI Batfly 250 Quad Racer Drone DIY Kit [並行輸入品]

  • 出版社/メーカー: HPHELI
  • メディア:




ドローンのシステム基礎を学ぶ(11) [ロボットを作ってみる!]

前回、PI制御について学びました。PI制御は精度は高いですが収束まで時間がかかります。動きの激しいシステムでは使えません。


PIsystem.png


収束まで時間がかかるのは、小さな値を積算してフィードバックをかけるためです。小さな値を累積させてフィードバックに意味ある値にするまで時間がかかるためです。

時間がかかるのであれば、変化に応じてフィードバック量を増やしてやればよいということで、変化量の微分値を加える方法が考えられました。これが微分制御(D制御)です。


pidformura.png


変化量の傾き(微分量)を加えることによって、変化がはげしいときはフィードバック量が増えターゲット値に早く近づけることができます。


d.png


しかし、ハンドル操作で容易に想像がつくように、変化が激しい状況でフィードバック量をあまりに大きくすると制御不能に陥ってしまいます。


実際にプログラムを作って試してみましょう。質量は1g、測定間隔は0.1秒、手始めに 比例係数Kp、積分項係数Ki、微分項係数Kd の値はすべて1.0にしてみました。

#include <stdio.h>

#define MASS 1
#define TIME_INTERVAL 0.1
#define Kp 1.0
#define Ki 1.0
#define Kd 1.0

void main()
{
    float Vt = 80.0;  // Target Velocity
    float Vm = 60.0;  // Measured Velocity
    float Time = 0.0;
    float err_integ = 0.0;
    float pre_err = 0.0;

    printf("%f, %f\n", Time, Vm);
    for (int i = 0; i < 500; i++) {
	
	float err = Vt - Vm;
	err_integ += err * TIME_INTERVAL;
	float derr = (err - pre_err) / TIME_INTERVAL;
	
	float force = Kp * err + Ki * err_integ + Kd * derr;
        float dAcc = force / MASS;

        Vm += dAcc * TIME_INTERVAL;
        Time += TIME_INTERVAL;

        printf("%f, %f\n", Time, Vm);

	pre_err = err;
    }
}



これをグラフにしてみました。なんと微分項係数Kd が大きすぎたのか発散をしてしまいました。


PID_Kp1Ki1Kd1.png


ということで、Kp、Ki、Kd の値を変えてみて収束の様子を観察をしてみました。


PID_adjustment.gif


どうやら、この制御系の場合は、Kp = 7.0、Ki = 0.2、Kd = 0.02 がもっともよいようです。各係数の求め方はいくつか手法が編み出されていますので、皆さんも試してみてください。

この系をシステムとして表現すると下記のようになります。


pidsystem.png


これが有名なPID制御系になります。いわゆる古典制御と言われているものですが、ドローン制御やロボット制御でも未だに使われている現役の制御理論です。

次はこれをドローンの制御系に適用してみたいと思います!
(^_^)/~





エンジニアのためのフィードバック制御入門

エンジニアのためのフィードバック制御入門

  • 作者: Philipp K. Janert
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2014/07/26
  • メディア: 単行本(ソフトカバー)






ArduinoとMATLABで制御系設計をはじめよう! (Physical Computing Lab)

ArduinoとMATLABで制御系設計をはじめよう! (Physical Computing Lab)

  • 作者: 平田光男
  • 出版社/メーカー: TechShare
  • 発売日: 2012/12/07
  • メディア: 単行本(ソフトカバー)




ドローンのシステム基礎を学ぶ(10) [ロボットを作ってみる!]

前回、比例制御(P制御)について学び、そこでP制御だけでは、マイコンの計算能力に限界によりターゲット値に正しく収束しないという問題に直面しました。


feedback_system3.png


誤差が出てしまうのは誤差の値が小さすぎるためです。小さければ積み上げればよいということで、誤差を累積させてフィードバックをかける方法が考えられました。これが積分制御(I制御)です。


PIformura.png


収束領域近傍では、ターゲット値と測定値の差はほんの僅かなので値としてはほぼ無視できます。その領域では積分値がそのまま補正値となり、正負の面積の差がほぼゼロとなるまで値を収束させます。


PIcontrol.png


では実際にプログラムで確認をしてみましょう。シミュレーションのプログラムを作ってみました。質量は1g、測定間隔は0.1秒、比例係数は1.0、積分項係数も 1.0 にしてみました。

#include <stdio.h>

#define MASS 1
#define TIME_INTERVAL 0.1
#define Kp 1.0
#define Ki 1.0

void main()
{
    float Vt = 80.0;  // Target Velocity
    float Vm = 60.0;  // Measured Velocity
    float Time = 0.0;
    float err_integ = 0.0;

    printf("%f, %f\n", Time, Vm);
    for (int i = 0; i < 500; i++) {
	
	float err = Vt - Vm;
	err_integ += err * TIME_INTERVAL;
	
	float force = Kp * err + Ki * err_integ;
        float dAcc = force / MASS;

        Vm += dAcc * TIME_INTERVAL;
        Time += TIME_INTERVAL;

        printf("%f, %f\n", Time, Vm);
    }
}



これをグラフにすると下記のようになります。最初は差が大きいので非常に大きな振れ幅となりますが、次第に収束していきます。


PIgraph.png


ターゲット値となっているか収束点を拡大をしてみました。確かに 80km/h ぴったりとなっています。


PIgraph2.png


これをシステムとして表現してみました。このフィードバック制御をPI制御と呼びます。


PIsystem.png


ただ、PI制御の問題点はターゲット値に収束するまでに非常に時間がかかることです。動きが激しい場面ではとても使い物になりません。

次は、PI制御の特性を生かしつつ、収束を早める方法について学びたいと思います。
(^_^)/~





エンジニアのためのフィードバック制御入門

エンジニアのためのフィードバック制御入門

  • 作者: Philipp K. Janert
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2014/07/26
  • メディア: 単行本(ソフトカバー)



Make: Drones: Teach an Arduino to Fly

Make: Drones: Teach an Arduino to Fly

  • 出版社/メーカー: Maker Media, Inc
  • 発売日: 2016/10/10
  • メディア: Kindle版







ドローンのシステム基礎を学ぶ(9) [ロボットを作ってみる!]

前回、速度差をベースとしたフィードバック制御について学びました。これを比例制御(P制御)と呼びます。


feedback_system3.png


せっかくなので、プログラムでこのP制御をシミュレーションをしてみましょう。質量は1g、測定間隔は0.1秒、比例係数は1.0にしてみました。

#include <stdio.h>

#define MASS 1
#define TIME_INTERVAL 0.1
#define K 1.0

void main()
{
    float Vt = 80.0;  // Target Velocity
    float Vm = 60.0;  // Measured Velocity
    float Time = 0.0;

    printf("%f, %f\n", Time, Vm);
    for (int i = 0; i < 500; i++) {
	
	float force = K * (Vt - Vm);
        float dAcc = force / MASS;

        Vm += dAcc * TIME_INTERVAL;
        Time += TIME_INTERVAL;

        printf("%f, %f\n", Time, Vm);
    }
}



これをグラフにすると下記のようになります。理論通り、80km/h に近づいています。


P_feedback.png


ただ収束値を拡大してみると、80km/h に限りなく近づいていますが 80km/h になっていません。これはマイコンの計算分解能の限界から出る誤差です。


P_feedback2.png


これは、わずかな違いのように見えますが、これが距離として累積されていくと次第に大きな誤差となって表れてきます。次は、このわずかな違いを補正する方法について学んでいきたいと思います。
(^_^)/~





エンジニアのためのフィードバック制御入門

エンジニアのためのフィードバック制御入門

  • 作者: Philipp K. Janert
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2014/07/26
  • メディア: 単行本(ソフトカバー)



Building Your Own Drones: A Beginners' Guide to Drones, UAVs, and ROVs

Building Your Own Drones: A Beginners' Guide to Drones, UAVs, and ROVs

  • 作者: John Baichtal
  • 出版社/メーカー: Que Publishing
  • 発売日: 2015/09/14
  • メディア: ペーパーバック



HPHELI Batfly 250 Quad Racer Drone DIY Kit [並行輸入品]

HPHELI Batfly 250 Quad Racer Drone DIY Kit [並行輸入品]

  • 出版社/メーカー: HPHELI
  • メディア:




ドローンのシステム基礎を学ぶ(8) [ロボットを作ってみる!]

今回は基本的なシステムを例にしてフィードバック制御理論について学んでみたいと思います。下記のような直線に走る車を考えます。

このドライバーは車を80km/hで走らせたいと思っています。一方車の速度は60km/hです。この時に車の速度差に応じたトルクを与えるとします。


feedback_system.png


これをフィードバック制御システムに置き換えると下記のようになります。


feedback_system2.png


このシステムで実測速度がターゲット速度に近づけられるか数学的に考えてみます。

まず、速度差に応じた力を与える式を考えます。Vt はターゲット速度(例では80km/h)。Vm は実測速度(例では60km/h)です。Vt はターゲット速度なので定数なのに注意してください。


formula1.png


一方で力は質量×加速度で表すことができますので、下記のように表現できます。


formula2.png


(1)と(2)の式から速度差と実測速度の関係が導けます。


formula3.png


(1)と(2)と(3)の式から、下記の式が求まります。


formula3-1.png


これを変数分離で変数を右辺左辺にまとめます。


formula3-2.png


両辺を積分します。これは未知の関数を求める数学的テクニックですね。


formula3-3.png


積分すると下記の式が導けます。ここで log の底はe、Cは積分定数になります。


formula3-4.png


形を整えるために指数に変換します。これで、Ev(t) の式が求まりました。


formula4.png


Cが不定なのは気持ち悪いので、ここで t=0 を代入します。eのC乗は速度差の初期値と等しくなります。


formula5.png


これで、Ev(t) の式が確定しました。


formula6.png


これは減衰関数を言われるもので、t →∞ でゼロに近づきます。


formula7.png


これは、(1)の式からターゲット速度 Vt と実測速度 Vm の差がゼロに近づくことを意味します。つまり、Vm が Vt にどんどん近づいていくということです。


formula8.png


これで、フィードバック制御システムはうまく働くということが数学的に証明されました。これをシステム的に表すと、下記のようになります。


feedback_system3.png


ここでは時間は連続的なものと扱いましたが、実際のシステムでは測定するのに時間がかかります。つまり飛び飛びの時間で測定されるので、k が大きいと、ターゲット速度を追い越してしまい振動が発生します。

次もそのようなフィードバック制御の特質について深堀したいと思います!
しかし、久しぶりの数学は頭が痛くなるなぁ。
σ(^_^;





エンジニアのためのフィードバック制御入門

エンジニアのためのフィードバック制御入門

  • 作者: Philipp K. Janert
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2014/07/26
  • メディア: 単行本(ソフトカバー)



Building Your Own Drones: A Beginners' Guide to Drones, UAVs, and ROVs

Building Your Own Drones: A Beginners' Guide to Drones, UAVs, and ROVs

  • 作者: John Baichtal
  • 出版社/メーカー: Que Publishing
  • 発売日: 2015/09/14
  • メディア: ペーパーバック







前の10件 | 次の10件 ロボットを作ってみる! ブログトップ