HELLO CYBERNETICS

深層学習、機械学習、強化学習、信号処理、制御工学、量子計算などをテーマに扱っていきます

【制御工学とは】基本とフィードバック制御の意義

 

 

follow us in feedly

f:id:s0sem0y:20180826215154p:plain

はじめに

今回は制御工学の基本的な考え方、そして制御工学の基本となるフィードバック制御の意義について完結にまとめておきます。

特に難しい議論は行いませんが、制御工学の言葉を(多少ごまかしながらも)完結に説明しながら使っていきます。また数式も天下り的に与えます。数式の意味がわからなくとも、説明を見てそういうもんだくらいに思ってもらうだけで、一応制御工学の動機などは把握できるかなと思われます。

制御工学を知っている方は優しい目で見守ってください。

制御工学について

制御の役割

この世界には様々な工業製品が溢れかえっており、それらほぼ全てに「制御」が導入されています。

完結に述べれば制御とは、対象を思い通りに動作させる仕組みのようなものです。制御工学とは、その仕組みをどのように作り上げるかということを議論した体系であると言えます。例えば、人を検知したら自動で電気をつけるようなシステムにも何らかの制御が入っております。具体的にはセンサーの値を読み取り、その値が何らかの数値となったときに電気を点けるような命令を発信し、しばらく点灯を続けた後にセンサーの値の変化が一定時間得られなければ消灯するような仕組みが考えられます。

静的システムと動的システム

先程述べたようなものも広義には「制御」と呼ばれていますが、制御工学だとか制御理論だとかいうときには、「動的システム」を扱うことが一般的です。

いきなり何のことかよくわからないと思われますが、例えば入力$x$に対して出力$y=ax$となるようなシステムは動的システムとは言いません。これは、現時点の入力のみに依存して出力が決まる「静的システム」と呼ばれるものです。$y=ax$というシステムにおいては、常に$x$が$a$倍だけされて出力されることになります。

例えば抵抗が1つだけ繋いである回路を想像すると、電圧を与えれば電流が得られますし、電圧を与えなければ電流は流れません。電圧を入力、電流を出力だと思えば、抵抗のみが繋いである回路は静的システムと言えます。

一方で動的システムでは、過去の状態に依存して現在の状態が決まります。このようなシステムでは一瞬だけ入力$x$をシステムに与えて、その後入力を切ってしまっても、何らかの値$y$が出力され続けたりします。バネに繋がれた物体なども動的システムです。例えば一瞬だけ物体に対して外力を与えてやれば、バネにつながれた物体は(その後外力を取り除いても)揺れ続けることが想像できるでしょう。

このような動的システムは一般的に微分方程式を用いて記述できます。 制御理論とは言わば動的システムを思った通りに動かすために、微分方程式をゴチャゴチャ考察し、具体的な解法得る学問体系だと言えます。

フィードバック制御

フィードバックを使わない制御

フィードバックを使わない制御を考えることで、フィードバック制御の有用性を理解できるはずです。

まずフィードバックを使わない制御というのは下記のような構造になっていると思われます。 この図は目標の手先位置を指示してやれば、制御器が上手く電圧を決めてくれて、ロボットアームの手先を思い通りに動作させてくれることを期待する図です。

f:id:s0sem0y:20180826213140p:plain

この図によれば、目標値$r(t)$を与えると、その$r(t)$を考慮して制御器が$u(t)$を決定し、ロボットアームの手先を$y(t)$としてくれるということです。そして制御の目的はロボットアームの手先$y(t)$を目標値$r(t)$へ一致させることでしたから、制御器はロボットアームと入出力関係を逆転したものになっていなければなりません。

f:id:s0sem0y:20180826213536p:plain

要は、フィードバックを使わない制御においては、制御したい対象(今回はロボットアーム)と入出力に関して全く逆の変換を行うように制御器を作ればよいということになります。

もしもこれが可能ならば、フィードバック制御は基本的に必要ないということになります。しかし、実際のシステムにおいては「ロボットアームの微分方程式を寸分の狂いもなく把握しておき、その逆システムを構築する」ということは困難を極めます。なぜなら、仮にロボットアームを自分で設計・製作していたとしても、実用時には外乱が混じっており、想定していた動きと異なる場合があるためです。

下の図ではロボットアームに対して外乱$w(t)$が混ざり込むせいで、$u(t)\rightarrow r(t)$と思い通りに変換されず$u(t)\rightarrow r_(t)$と別の値になってしまう様子を表しています。また、外乱$w(t)$がロボットアームの出力に対して混ざり込むのか(つまり手先がブレるのか)、あるいは入力に対して混ざり込むのか(電圧がぶれてしまうのか)など、影響している部位を特定することも通常は容易ではありません。

f:id:s0sem0y:20180826214345p:plain

もしも、今後ロボットアームに起こりうる外乱を、いつでも正確に予測できるというのであれば、それを織り込んだ制御器を作ってやれば良いということになりますが、恐らくそんな未来予知能力を実現することの方が、いい感じの制御方法を別に考えるより遥かに難しいはずです。

ちなみに、このような制御を考える場合には「フィードフォワード制御」と呼ぶのが一般的です。

フィードバック制御

そこでフィードバック制御の出番となります。 フィードバック制御では、出力の値を何らかの方法で検出し、その検出したい値を使って上手く制御を行おうと試みます。下記の図では、検出器(こいつは$y(t)$を物理的に取り出す装置のようなもので、値を変換したりはしない。よってわざわざ書かなくても良いかもしれない)が$y(t)$を取り出して、制御器の前まで値を持ってきている様子を表しています。

f:id:s0sem0y:20180826215154p:plain

典型的には $$ d(t) = r(t)-y(t) $$ のような値を算出しておき、この$d(t)$(すなわち、目標値と出力値の差)を制御器に与えて制御入力$u(t)$を決定するようにする方式が考えられます。すると制御器は「フィードバック制御を用いない制御(フィードフォワード制御)」のときとは異なり、ロボットアームの逆システムということではなくなります。言ってしまえば、ロボットアームのシステムを寸分の狂いもなく完全に把握する必要性が取り払えるかもしれないということです。

この場合には制御器が見ているのは、目標値と出力値の差(しかも出力値というのは外乱も加味されている)です。この値が$0$になってくれることを目指して、$u(t)$をゴニョゴニョと決定するのが制御器の役割ということになります。

最も活用されている制御器

上記の考えに基づいて最も活用されているフィードバック制御器として「PID制御器」があります。これはザッと下記の記事で解説しているので、是非参考にしてください。

www.hellocybernetics.tech

制御の進んだ話

今回はザッと制御についてお話をしました。 実はここでは結構大事なことを省いていたりします。

制御に求められる要件

対象を思い通りに動かすための体系を考えるのが制御理論の役割です。 例えば、今回はあたかもロボットアームの手先を思い通りに操作できるという前提で話を進めました。実際には、上手く制御器を設計したとしても、それが本当に「思い通りに操作できた」と言えるのかはマチマチです。

ここでは、「対象を思い通りに操作する」ということを幾つかの観点に分けて説明します。

素早く思い通りの状態にする

例えばロボットアームの手先をとある位置に移動したい時、とある位置にゆっくりゆっくり近づいていき、正確な場所でピタリと止まってくれればそれで良いのでしょうか?できれば、素早くとある位置までロボットアームの手先が移動してくれる方が嬉しいのではないでしょうか?

慌てて行きすぎない

さて、ロボットアームの例を続けましょう。素早く手先を目標の位置に移動しようと焦るあまり、目標の位置を通り越してしまうということも起こってしまうでしょう。通り越しても戻って来れば良いと言うのであれば問題ありませんが、実質、通り越してから戻ってくるために使った電力は単なる無駄でしかありません。

行ったり来たりふらつかない

さて、ロボットアームが目標の位置を通り越したら戻ってこなければなりません。 行き過ぎる量を小さくしても、僅かに目標の位置からずれながら振動的に行ったり来たりしているようでは、ちゃんと手先が定まらないので、これも制御を考える上で重要な観点となります。

これら3つの観点を踏まえながら、ロボットアームのモータにどの程度の電圧を与えてやれば(電圧は強くしたり弱くしたりする必要があるだろう)目標の位置へ手先が移動してくれるのかを考えるのが制御設計ということになります。

そもそも制御できるのか

更に基本的な部分に立ち返ってみると、電圧をあれこれ操作したところで、ロボットアームは思い通りの位置に移動してくれるのでしょうか。 例えば腕の長さが30cmだとしましょう。さて、現在の位置から100cm離れたところに腕を伸ばすための制御を考えてください。無理ですね。

これならば無理と分かりやすいのですが、より複雑なモデルでは、行ったり来たりを繰り返して、全く目標値に到達できなかったりするということも考えられます。つまり、そもそもシステム上、今やりたい制御が達成できるのか否かということを十分に吟味しなければなりません。これは言わば、目標値$r(t)$に出力値$y(t)$を収束させるような制御器が存在するのかを考えるということです(実際は、特定の範疇のみを扱っている限りは、だいたい制御自体は可能だが、上述の要件を上手いこと調整することはいつでも必要である)。

理論と現実の差異

現在、制御というのは電子的に達成されており、コンピュータを用いてデジタルに取り扱われています(昔は本当にアナログ回路を使ったり、マス・バネ・ダンパを使ったりして、望みの制御器をアナログに実装していた)。すなわち、コンピュータが値を検出するサイクルによって必ず遅れが生じるのです。

制御理論自体は長らくアナログの世界で発展してきたため、どうやらディジタルで制御をしなければならないという現実と照らし合わせた場合の不整合にも注意が必要です。

更に、理論上、制御器のとある値を「100」にしておけば良い!という場合においても、その「100」という数字が物理的にどのような量であるのかを考えると、現実的にはそれができないということもあります。例えば、フィードバックで「比例制御」を入れる場合、「検出された値を『無限倍』するのが理論的に最も性能が良い」という結果が得られてしまったりしますが、当然、検出したものは電圧であったり速度であったり、何らかの物理量であるため、これを無限にすることは不可能です。

制御設計の道具

制御設計ではシミュレーションによって理論と現実の折り合いを付けていくのが一般的です。

その際には制御器であったり、あるいはシステムの構造であったりを手当たり次第に試行錯誤するというわけにはいきません(PID制御は完成された一つの方法であるため、実際にはパラメータを試行錯誤的に決めているに等しいですが、それでも各パラメータの役割くらい把握したいところです)。

制御理論は言わば(線形)微分方程式をゴチャゴチャ弄って、その解の形を操作する学問であるとも言えます(非線形制御理論もありますが)。そして、線形微分方程式を簡単に操作するツールとして「ラプラス変換」を用います。

コレは簡単に言えば「指数関数の微分は簡単」、「線形微分方程式の解は指数関数の線形結合で書ける」ということに着目して、「どのような指数関数がどのような重みで結合されているのか」に議論をすり替えるテクニックのようなものとしてとりあえず見ておくと良いように思います。

こちらの議論では微分方程式を考えることが代数方程式を考えることにすり替わり、取扱が非常に楽になります。また、「周波数応答」という概念を考え、制御設計をより詳細に行う手がかりも得られます。

制御理論はたしなみ程度に勉強するだけでも面白いと思われます。

www.hellocybernetics.tech