0次ホールダとは・プログラムの書き方

制御工学

みなさん,こんにちは.
おかしょです.

数値シミュレーションはパソコン上で制御器などの性能を検証するために行うものです.

そのため,数値シミュレーションは実際の世界と同じ環境,もしくはそれに近い環境を模擬する必要があります.

この記事で解説する0次ホールダはそのために必要な技術です.

この記事では,「0次ホールダとは何なのか」に始まり,「プログラムの書き方」について解説していきます.

この記事を読むと以下のようなことがわかる・できるようになります.

  • 0次ホールダとは
  • 0次ホールダのプログラムの書き方

 

この記事を読む前に

この記事では基本的な数値シミュレーションのプログラムは書けていることを前提としています.

数値シミュレーションのプログラムの書き方は以下の記事で解説しているので,先に読んでおくことをおすすめします.

 

0次ホールダとは

まずは0次ホールダとは何なのかについて解説します.

さて,0次ホールダについて理解するには連続時間系と離散時間系の違いについて理解しておく必要があります.

連続時間系というのは,現在私たちが生活しているような世界のことを言います.
時間の流れに切れ目がなく,滑らかに動いている状態のことです.

しかし,ロボットは動作するのに一定の時間が必要です.
そのため,動きは離散的でカクカクしていしまいます.

計算速度が非常に速いロボットの場合は,動作するまでの時間が非常に短いため,離散的には見えないかもしれませんが,厳密に見れば離散的な動作をします.

このような離散的な動きは制御性能に大きな影響を及ぼします.
制御工学の入門書の多くは,制御系を連続時間システムとして解説しています.
そのため,入門書でしか学習していない人は実機に制御系を適用した際に思った通りの動きをせずに戸惑ってしまいます.
(入門書でも離散時間系を扱っている場合もあります.)

さて,話を0次ホールダに戻します.
ロボットは動作するのに一定の時間が必要がと言いましたが,その間の動作はどうなるのでしょうか.
例えば,モータに3Vの電圧を加えていた場合,次の動作をするまでの時間はどうなるでしょうか.

答えは3Vの電圧をかけ続けます.
つまり,次の動作を開始するまではそれまでの動作を続けます.

これを数値シミュレーション上で表現するのが0次ホールダです.

例えば,ロボットに加えたい入力電圧が連続時間系で左のように表されたとします.

しかし,実際のロボットに加えられる入力電圧は左のようになってしまいます.

このように実際にロボットに入力される電圧は連続時間系と離散時間系で大きく異なります.
そのため,連続時間系で設計した制御系を実際のロボットに適用しても,うまく制御できない可能性があります.

そのようなことを知るためにも,数値シミュレーション上で0次ホールダを考慮する必要があります.

 

0次ホールダのプログラム

ここからは0次ホールダを数値シミュレーション上で考慮するには具体的にどのようにしたらいいのかを解説していきます.

結論から述べると,以下のようなプログラムをメインループ文に組み込むことで0次ホールダを考慮することが可能になります.

    td  = t(i)/ts-n;
    if td>=0
        % 0次ホールド
        u(i) = 0;                                                           % 制御器によって求める
        for k=1:ts/dt
            if i+k>time/dt
                break;
            end
            u(i+k) = u(i);
        end
        n = n+1;
    end    

まず,第1文目のtdは割り込ませるためのタイミングを表しています.
t(i)は現在時間を表しています.
それをサンプリング時間であるtsで割ります.
このようにすることで,現在時間がサンプリング時間を超えた場合は1以上の値となります.
nはサンプリングを行った回数を表しています.
このnを引くことによって,現在時間がサンプリング時間でない時はtdが負になるようにしています.

そのため,tdはサンプリング時間になった時は0よりも大きくなるので次の行からif文で0次ホールダが起動するようにしています.
if文内のu(i)は制御入力を表していて,設計した制御系によって決定されます.

次の行のfor文ではサンプリング時間の間,制御入力を一定にするように配列の中に同じ値を格納しています.
for文の中のif文では,0次ホールドする時間がシミュレーション時間を超えないようにbreakしています.

0次ホールドが完了したら,nを更新してサンプリング回数を記録します.

以上のような処理をすることで,数値シミュレーションに0次ホールダを適用することができます.

このとき,nの初期値は0とすることに注意してください.

 

まとめ

今回の0次ホールダを数値シミュレーションで考慮することによって,実際のマイコンなどを使った環境に近づけることができます.

このようにすると,連続時間系で設計した制御系の性能は劣化してしまうかもしれません.
そのようなときは,離散時間系で制御系を設計する必要があります.

 

続けて読む

数値シミュレーションを実際の環境に近づけるにはこの記事で解説した0次ホールダの他に理想サンプラというものがあります.

以下の記事で0次ホールダについて解説しているので,参考にしてください.

Twitterでは記事の更新情報や活動の進捗などをつぶやいているので気が向いたらフォローしてください.

それでは最後まで読んでいただきありがとうございました.

コメント

タイトルとURLをコピーしました