ドローンのシステム基礎を学ぶ(11) [ロボット]
前回、PI制御について学びました。PI制御は精度は高いですが収束まで時間がかかります。動きの激しいシステムでは使えません。
収束まで時間がかかるのは、小さな値を積算してフィードバックをかけるためです。小さな値を累積させてフィードバックに意味ある値にするまで時間がかかるためです。
時間がかかるのであれば、変化に応じてフィードバック量を増やしてやればよいということで、変化量の微分値を加える方法が考えられました。これが微分制御(D制御)です。
変化量の傾き(微分量)を加えることによって、変化がはげしいときはフィードバック量が増えターゲット値に早く近づけることができます。
しかし、ハンドル操作で容易に想像がつくように、変化が激しい状況でフィードバック量をあまりに大きくすると制御不能に陥ってしまいます。
実際にプログラムを作って試してみましょう。質量は1g、測定間隔は0.1秒、手始めに 比例係数Kp、積分項係数Ki、微分項係数Kd の値はすべて1.0にしてみました。
これをグラフにしてみました。なんと微分項係数Kd が大きすぎたのか発散をしてしまいました。
ということで、Kp、Ki、Kd の値を変えてみて収束の様子を観察をしてみました。
どうやら、この制御系の場合は、Kp = 7.0、Ki = 0.2、Kd = 0.02 がもっともよいようです。各係数の求め方はいくつか手法が編み出されていますので、皆さんも試してみてください。
この系をシステムとして表現すると下記のようになります。
これが有名なPID制御系になります。いわゆる古典制御と言われているものですが、ドローン制御やロボット制御でも未だに使われている現役の制御理論です。
次はこれをドローンの制御系に適用してみたいと思います!
(^_^)/~
収束まで時間がかかるのは、小さな値を積算してフィードバックをかけるためです。小さな値を累積させてフィードバックに意味ある値にするまで時間がかかるためです。
時間がかかるのであれば、変化に応じてフィードバック量を増やしてやればよいということで、変化量の微分値を加える方法が考えられました。これが微分制御(D制御)です。
変化量の傾き(微分量)を加えることによって、変化がはげしいときはフィードバック量が増えターゲット値に早く近づけることができます。
しかし、ハンドル操作で容易に想像がつくように、変化が激しい状況でフィードバック量をあまりに大きくすると制御不能に陥ってしまいます。
実際にプログラムを作って試してみましょう。質量は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 が大きすぎたのか発散をしてしまいました。
ということで、Kp、Ki、Kd の値を変えてみて収束の様子を観察をしてみました。
どうやら、この制御系の場合は、Kp = 7.0、Ki = 0.2、Kd = 0.02 がもっともよいようです。各係数の求め方はいくつか手法が編み出されていますので、皆さんも試してみてください。
この系をシステムとして表現すると下記のようになります。
これが有名なPID制御系になります。いわゆる古典制御と言われているものですが、ドローン制御やロボット制御でも未だに使われている現役の制御理論です。
次はこれをドローンの制御系に適用してみたいと思います!
(^_^)/~
シミュレーションで学ぶ自動制御技術入門―PID制御/ディジタル制御技術を基礎から学ぶ (計測・制御シリーズ)
- 作者: 広井 和男
- 出版社/メーカー: CQ出版
- 発売日: 2004/09
- メディア: 単行本
ArduinoとMATLABで制御系設計をはじめよう! (Physical Computing Lab)
- 作者: 平田光男
- 出版社/メーカー: TechShare
- 発売日: 2012/12/07
- メディア: 単行本(ソフトカバー)
コメント 0