So-net無料ブログ作成
検索選択

風邪をひいてしまいました・・・(T_T) [徒然日記]

ここ最近、仕事を根を詰めてやっていたのが祟ったのか、風邪をひいてしまいました。昨日くらいから喉が痛くなりはじめ、今日は筋肉痛が出てきました。


neru.gif


明日あたり熱出るのかなー。いやだなぁ。インフルではなければよいのですが・・・。最近はちょっと無理をすると、すぐに体調を崩します。やっぱり年ですねぇ。今日は早めに寝ることにします。








《明日は風邪で休みます》バカんバッチ☆公式バカTグッズ(面白缶バッジ)通販☆/

《明日は風邪で休みます》バカんバッチ☆公式バカTグッズ(面白缶バッジ)通販☆/

  • 出版社/メーカー: カネコトレーディング
  • メディア: おもちゃ&ホビー







ドローンのシステム基礎を学ぶ(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
  • メディア: 単行本(ソフトカバー)




スマホサイズのドローン登場!? [徒然日記]

究極のセルフィーはドローンで!というのはよく言われていましたが、商品にするには厳しいだろうなー。と思っていたら、ついに現実にした強者が現れました!


AirDrone.png
http://www.airselfiecamera.com/


すごいなー。世の中にはすごい人がたくさんいるなぁ。キックスターターなので商品というにはちょっと早いですが、それでもすごい進歩です。

実際の動きも上記サイトの動画で確認できます。詳細のスペックはまだ分かりませんが、動画から分かる範囲でまとめてみました。

・バッテリー 240mh@3.7V
・5MPixel カメラ
・Micro USB 充電、内蔵メモリー参照
・ジャイロ、気圧、地磁気センサー
・2.4G WiFi
・姿勢センサー(ALTITUDE SENSOR) (←なんかよくわからず)
・姿勢制御用カメラ(STABILITY CAMERA)
・ブラシレスモーター
・内蔵SDカードメモリ 4GB
・アルミ筐体 52g

動画を見ると2つのプロペラの距離が近いので制御がやや不安定ですね。カメラがついている方向なので、ブレは大丈夫なのでしょうか。動作が不安定なだけに横方向の動きは厳しそうです。

筐体だけでも52gなので、それにモーター4個、バッテリーがつくので全体で100g弱くらいでしょうか。その重さを240mAh のバッテリーで動かすとなると、持続時間はそれほど期待できそうにないですね。

しかし、この大きさのドローンにリモートカメラ機能を詰め込んだのはすごい技術力です。早く市場に出るのが楽しみです。
(^_^)
















タグ:Drone QuadCoptor

ドローンのシステム基礎を学ぶ(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
  • メディア:




初めて骨折したでござる・・・(T_T) [徒然日記]

実は先々週のことなのですが、生まれて初めての骨折をしました。骨折したのはここ。


DSC_0637.JPG

そう指なんです。実はいい年をして、いまだに空手をやっていまして、、、組手の最中にやってしまいました。

実はその日は骨折をしたのが全然分からなくて、突き指かな?くらいに思っていたのですが。。。次の朝に指先が真っ黒になっていて病院に行ったら「残念なお知らせです。骨折です。」と先生に言われ、初めて骨折と知りました。

骨折した場合って、ほんとに何もしないのですね。添え木のようなものをして固定して終わり。「一か月もすればつながりますよー」だそうです。拍子抜けです。

しかし、こんなところを骨折するなんて年を感じますねぇ。いままでオープンフィンガーのグローブを好んで使っていましたが、


openfinger.jpg


身の安全のために、キックボクシング用のスパーリンググローブを発注しました。


sparing_glove.jpg


そろそろ骨もくっついてきたし、早く届かないかなー。
(*^. ^*)








空手リフォーム教室 - 歳を重ねるごとに強くなる (MyISBN - デザインエッグ社)

空手リフォーム教室 - 歳を重ねるごとに強くなる (MyISBN - デザインエッグ社)

  • 作者: 橋本よしゆき
  • 出版社/メーカー: デザインエッグ社
  • 発売日: 2016/11/15
  • メディア: オンデマンド (ペーパーバック)



右脳の空手

右脳の空手

  • 作者: 大坪英臣
  • 出版社/メーカー: 風雲舎
  • 発売日: 2016/04/01
  • メディア: 単行本




ドローンのシステム基礎を学ぶ(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
  • メディア: ペーパーバック







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

ドローンを精度よく制御するには、ドローンがどのような姿勢(Attitude)となっているか検出する必要があります。姿勢を検出するために、ジャイロセンサーや加速度センサーを使います。

基本的なドローンのシステムは、マイクロプロセッサーに、モータードライバー、プロポのレシーバー、そしてジャイロセンサー、加速度センサーがつきます。


BasicDroneSystem.png


マイクロプロセッサーは、ターゲットの{Φ、θ、ψ、T}をプロポから受信する一方、センサーから{Φ、θ、ψ、T}を取得することでドローンの状態を把握し、それらの結果からモーターへの指示に変換をします。


BasicDroneControl.png


ドローンの推力は、部品のばらつきや環境、経年によって、与えたPWM値と推力Tの関係が一定ではないことを前回述べました。

例えば、プロポから秒速4cmの上昇が指示され、モーターをそのように制御したとしても、実際は秒速3cmの可能性があります。

そのため、センサーで現在の状態を把握し、必要であればモーターへの指示を上げ下げしながらターゲットの値に近づけていきます。

次は、そのようなフィードバック制御理論について学習したいと思います!
(^_^)/~





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
  • メディア: ペーパーバック






Diy Drone and Quadcopter Projects: A Collection of Drone-based Essays, Tutorials, and Projects (Make)

Diy Drone and Quadcopter Projects: A Collection of Drone-based Essays, Tutorials, and Projects (Make)

  • 作者:
  • 出版社/メーカー: Maker Media, Inc
  • 発売日: 2016/05/05
  • メディア: ペーパーバック




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

ドローンの実際の制御システム系について、これから学習していきたいと思います。ドローンが推力(THRUST)を得るにはモーターを動かさなければなりません。モーターを制御するのはマイクロプロセッサーの仕事です。


motor_control.png


マイクロプロセッサーは、モータードライバーにPWM(パルス幅変調信号)を送ります。モータードライバはモーターに対して電力を供給し、モーターはトルクを発生させ、プロペラを回し推力(THRUST)を得ます。

一般的に PWM とトルク(ω)は比例関係にあり、トルク(ω)の二乗と推力(TRUST)が比例関係にあるといわれます。最終的にはPWMと推力(TRUST)の関係が重要になってきます。

実際の測定例がありました。PWMと推力(THRUST)の関係は二次関数で近似されています。


pwm_to_thrust.png
https://www.bitcraze.io/2015/02/measuring-propeller-rpm-part-3/


ドローンの場合は、4つのモーターを一つのマイクロプロセッサーで制御します。マイクロプロセッサーはそれぞれのモーターに対し同じPWMを与えれば、同じ推力が得られるのが理想的です。


drone_control.png


しかし、現実にはプロペラの形状のばらつき、モーターの特性のばらつきにより同じ推力を得ることはできません。しかも、温度や湿度、経年によってそのばらつきは変化していきます。

すなわち、ドローンのシステム基礎を学ぶ(4)で導き出した魔法陣は現実的にはそのままでは使えないということになります。

さて困りましたー。次回はいよいよ制御工学の領域に足を踏み入れていきます!
(^_^)/~






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
  • メディア: ペーパーバック






DIY Drones for the Evil Genius: Design, Build, and Customize Your Own Drones: Design, Build, and Customize Your Own Drones

DIY Drones for the Evil Genius: Design, Build, and Customize Your Own Drones: Design, Build, and Customize Your Own Drones

  • 出版社/メーカー: McGraw-Hill Education TAB
  • 発売日: 2016/12/02
  • メディア: Kindle版




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

ドローンを操作をすると、その指示は制御速度の指示となり、それをモーターのトルクに反映します。今回は、制御速度からトルクに変換する制御について学びます。

ドローンのシステム基礎を学ぶ(3)で、ドローンの動きとモーターのトルクの関係について学びました。今回は、プロポからの指示がどのようにモーター制御につながるか見てみたいと思います。

まずはスロットルから。上昇を操作すると"THROTTLE UP"が指示されます。このときの上昇速度とモーターのトルクの関係式は下記のようになります。


Throttle.PNG


次は回転。右回転を操作すると"YAW R"が指示されます。この時の回転速度とモーターのトルクの関係式は下記のようになります。


Yaw.PNG


次は左右。右移動を操作すると”ROLL R”が指示されます。この時の姿勢制御速度とモーターのトルクの関係式は下記のようになります。


Roll.PNG


最後は前後。前進を操作すると”PITCH DOWN”が指示されます。ちょっと分かりにくいですが、図を見て理解してください。この時の姿勢制御速度とモーターのトルクの関係式は下記のようになります。


Pitch.PNG


これらを行列にまとめてみました。左辺が指示制御速度で、右辺がトルクの関係式になります。


drone_control1.PNG


分かりやすくするために行列を K で表しました。


drone_control2.PNG


姿勢制御からトルクを割り出すには、指示制御速度にKの逆行列をかけてやればよさそうです。


drone_control3.PNG


大変でしたが、逆行列を求めてみました。(合ってるかな・・・)


drone_control4.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
  • メディア: ペーパーバック



Introduction to Quadcopter: A Pocket Guide (English Edition)

Introduction to Quadcopter: A Pocket Guide (English Edition)

  • 出版社/メーカー:
  • 発売日: 2016/02/12
  • メディア: Kindle版



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

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

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