SSブログ

ドローンのシステム基礎を学ぶ(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版







nice!(27)  コメント(0)  トラックバック(0) 
共通テーマ:趣味・カルチャー

nice! 27

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0