線形適応制御入門

概要 制御対象のパラメータを同定しながら制御する制御法。 通常の制御法と違い、制御則の他に、適応則というのを設計する。 今回は、モデル規範型適応制御 (MRAC : Model Refference Adaptive Control) と呼ばれる手法を紹介する。 詳しくはJ. E. Slotine, W. Li, “Applied Nonlinear Control”, 1991を参照。 問題 次のシステムを制御したいとする。 $$a_ny^{(n)} + a_{n-1}y^{(n-1)} + \cdots +a_0y = u$$ ここで、状態$y,\dot y\cdots,y^{(n-1)}$は可測であるが、係数${\bf a} = [a_n \ \cdots \ a_1 \ a_0]^T$は未知であるとする。つまり、このシステムは、一次系、二次系などの構造はわかっているけれど、パラメータに不確かさを含むシステムである。ここで、$a_n$の符号のみは既知とする。 我々の制御目的は、$y$を望ましい参照モデルの応答 $$\alpha_ny_m^{(n)} + \alpha_{n-1}y_m^{(n-1)} + \cdots +\alpha_0y_m = r$$ に追従させることである。 制御則の選択 $z$を以下で定義する。 $$z := y_m^{(n)} - \beta_{n-1}e^{(n-1)} - \cdots - \beta_0e$$ ここで、$\beta_1, \cdots, \beta_n$は、多項式$s^n+\beta_{n-1}s^{n-1} + \cdots + \beta_0$がフルビッツになるよう選ばれた、設計パラメータである。 また、$e:=y-y_m$は追従誤差である。...

October 17, 2015

スライディングモード制御入門

対象システムが構造的不確かさをもつ場合に有効なロバスト制御法。 今回はSISOシステムのみ取り上げるが、MIMOにも拡張可能。 詳しくはJ. E. Slotine, W. Li, “Applied Nonlinear Control”, 1991を参照。 仮定 次のシステムを制御したいとする。 $$x^{(n)} = f({\bf x}) + b({\bf x})u$$ ここで、${\bf x}=[x \ \dot x \cdots x^{(n-1)}]^T$は状態ベクトル, $u$はスカラーの入力である。 また、$f$は不確かさを含む関数であるとする。 具体的には、我々は推定値$\hat f$のみを知ることができるものとし、これらの関数はある既知の関数$F({\bf x})$に対して $$\left|\hat f-f\right|\le F$$ を満たすとする。$b$もまた $$0 < b_{min} \le b \le b_{max}$$ の不確かさを持つとし、我々が知ることのできる値は推定値 $$\hat b = (b_{min} b_{max})^{1/2}$$ のみであるとする。 問題 ${\bf x}$を望ましい状態${\bf x}_d=[x_d \ \dot x_d \cdots x^{(n-1)}_d]$に追従させる$u$を設計せよ。 ただし、望ましい状態${\bf x}_d$は${\bf x}_d(0) = {\bf x}(0)$を満たすとする (テクニカルな仮定。ここでは説明しない) 。 導出 まずは簡単なシステムで 簡単のため$b$についての不確かさを一旦無視して$b({\bf x}) = 1$とし、対象システムは簡単な二次系 $$\ddot x = f({\bf x}) + u$$ であるとする。 また、これ以後、$\tilde{\bf x} := {\bf x}-{\bf x}_d$と定義する。 もしある正数$\lambda$を設計したうえで、状態フィードバック $$u = -\hat f({\bf x}) + \ddot x_d - \lambda \dot{\tilde{x}}$$ を生成すると、閉ループ系は $$\ddot{\tilde{x}} = - \lambda \dot{\tilde{x}}$$ と計算でき、$\dot{\tilde{x}}\rightarrow 0$すなわち${\bf x}\rightarrow{\bf x}_d$を満たす。 ただし、この結果が成り立つのは、$f$が不確かさを含まない (すなわち$\hat f=f$が成り立つ) ときであり、推定値が真値と一致しない場合はこの限りでない。...

October 8, 2015

ベルギーで働いて感じたこと

ヨーロッパに来て半年になるので、つらつらと思うことを書き残しておく。 #研修内容について 今年度は、ヴルカヌス・プログラムという奨学金付きのインターンシッププログラムに参加しており、ベルギーにあるシーメンスのソフトウェア部門で航空機の制御に関わる仕事をしている。 航空機への制御を学ぶためには、航空機自体がどのような動特性を持っているかを知らなければならないが、僕にはその知識が全くなかったため、研修は航空力学を勉強することから始まった。 物理の知識がラグランジュ方程式くらいで止まっている僕にとって、航空力学の理論は難しく感じられ、これまでのところとてもじゃないが全てを理解したとは言いがたい。 先日edXでMITxから提供されている、Introduction to Aerodynamicsという講義を見つけたので、是非受講しようと思っている。 話がそれるが、最近こういったオンラインの講義を受講するのにハマっており、先日は機械学習の講義を受け終えた。 各講義のクオリティはとても高く、この先大学のもつ教育機関としての側面は、こうしたサービスの登場により変わっていくんじゃないかと思う。 それはさておき、まだ航空機についての知識は足りていないものの、最近はようやく制御シミュレーションに取り掛かり始めている。 当然だが制御工学は自分の専門であるので、以前にもまして興味をもって取り組むことができている。 僕がこれまで学び、実装したことのある制御法は、その殆どが基礎的な線形制御法に過ぎなかったため (僕の研究内容は解析がメインだったと言い訳をしておく) 、モデル追従制御や入出力線形化など、今まで詳しく知らなかった制御理論を学べたのは嬉しい誤算だった。 制御理論を航空機にどう実装するかについても、上司からいろいろと面白い話を聞けた。 例えば、高度や速度などの飛行状態によって動特性が変わる航空機では、平衡点も変わるため、制御のための線形化はその都度おこなう必要がある。 しかしながら、線形化のためには平衡点を求めなくてはならず、計算には時間がかかる。 このため、いくつかの航空機では、予め数百もの状態の組み合わせに対する線形化モデル、またはモデルに対する制御器のパラメータを計算して、メモリに格納しておき、それを呼び出し、補完しながら制御するのだそうだ。 実はゲインスケジュール制御は航空分野から生まれた制御法であるらしく、こうした背景があったことを考えれば納得できる。 #ベルギーについて ここルーヴェンは、ベルギーで一番大きな大学街として知られる町だ。 にもかかわらず、深夜に開いているコンビニなどはなく、日曜はどこのお店も開いてない。 そのため、日本で暮らす感覚でいると、休みの日に食べるものがなくて詰む。 アイルランドでも同様の傾向は見られたが、向こうでは首都ダブリンに滞在していたためか、中心部は日曜も賑わっており、あまり不便しなかった。 はじめは暮らしにくい町だと感じたものだが、順応してきた今では、むしろ働く側に優しい仕組みなのかもしれないと思うに至っている。 実際、僕が働く会社では、仕事はどんなに遅くとも19:00で切り上げられるし、人々は日曜にピクニックやスポーツを思う存分楽しんでいるように見える。 不便さを受け入れることで享受できる暮らしのゆとりと、際限なく働くことで経済を循環させる資本主義の宿命。 世の中にはこうしたトレードオフが無数にあることに気づく。 ところで、シーメンスでは様々な国から来た人が働いており、僕のようなアジア人も少なからず見かける。 観測範囲ではイタリア人が最も多く、オランダ人、フランス人、中国人、インド人、日本人や韓国人、と続く。 ドイツ人を見かけないのは、おそらくだが、ドイツ人の労働環境はこちらより優れているのでわざわざ他国に出向く必要はないという理由によるのだろう。 彼らは皆、自国の人と話すときは自国語で、他国の人と話すときは英語でコミュニケーションをする。 語学学校の時と違い、彼らが全く言葉に詰まることなく、母国語のように英語を話す様には、はじめ驚いた。 また、町を歩いてみても、アジア人を多く見かけるし、僕のアパートには大学に通うためにスロベニアからやってきた学生が住んでいる。 周囲を他国に囲まれている地理的要因、EUの本部を首都に抱える政治的要因などが、こうした国際的な環境の形成を助けたのだろうか。 #今後について 正直、4月からここまであっという間だった。 良くも悪くも研究室とは違い、具体的な目標が課せられない毎日であり、自分で明確な目標をもつ必要性を日々感じている。 残り半年、無為に過ごして後悔の残らないよう、自戒しつつ過ごしていきたい。

September 25, 2015

Xcodeアップデート時に起きるMatlabのMexのエラーを修正

###概要 XCodeのバージョンを7にアップデートした際にMexがコンパイルエラーを吐くようになった。 こちらに解決法が載っていたので、そのまま紹介。 ###自分の環境 OSX Yosemite (10.10.5) Matlab R2014b ###解決法 Matlabのコンソールで edit ([matlabroot '/bin/maci64/mexopts/clang_maci64.xml']) とタイプ。出力されたファイルの後半 <dirExists name="$$/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk" /> の次の行に <dirExists name="$$/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk" /> <dirExists name="$$/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk" /> を追加、また <cmdReturns name="find $$ -name MacOSX10.9.sdk" /> の次の行に <cmdReturns name="find $$ -name MacOSX10.10.sdk" /> <cmdReturns name="find $$ -name MacOSX10.11.sdk" /> を追加 (それぞれ2箇所ある)。 これでMexでのコンパイルが復活する。 ただしこの方法は非公式なので、一応バックアップをとっておくのが吉。 自分はC++ (clang++_maci64.xml) 、gfortran (gfortran.xml) についても同様の変更を行った。

September 22, 2015

京大情報学研究科システム科学専攻入試攻略

概要 もう2年前のことになるが、当時大学院入試を控えていた僕は、いろいろ考えた末に京都大学の情報学研究科システム科学専攻を受験することに決めた。 そこで今日は自分がどのように入試に臨んだかを書き記しておく。 過去問 まずはなんといっても過去問。 システム科学専攻の公式HPに置いてある。 試験内容は 基礎科目 (微積分・線形代数) 専門科目 (論理回路・機械力学・工業数学・基本ソフトウエア・電気電子回路・確率統計・制御工学・オペレーションズリサーチから2問選択) からなる。 本番までに5年分は解いておきたいが、まずは雰囲気を掴むためにも1年分解いておくといい。 参考書 頭のいい人なら過去問だけでもなんとかなるのだろうけど、僕のような凡人は問題集を使って足りない頭を補強することにした。 基礎科目である数学は、専門科目に比べ難易度が高めなため、極めれば得点源になる。 自分は微積分と線形代数の勉強としてそれぞれ、演習大学院入試問題 <数学> Iの1章と2章を取り組んだ。 専門科目は制御工学と工業数学を選んだ (周りを見てもこの組み合わせが多かったように思う) 。 制御については フィードバック制御入門 (システム制御工学シリーズ) の各章の章末問題を解き、工業数学は 演習大学院入試問題〈数学〉II の2章をやった。また、万が一の予備科目として論理回路を 論理回路の基礎 で勉強した。 僕の場合、春休みまでに英語の試験を受け終え、4月から基礎にじっくり取り組み、専門は残り1ヶ月程度取り組んだ。 要領のいい人なら合計2ヶ月弱で終えられると思う。 また自分で言うのも何だが、ここでセレクトした参考書には少し自信がある。 基礎数学と制御工学に関しては、参考書そのままの問題が過去問に出て、「あ!これ進研ゼ (ry」となったこともある。 参考書選びで迷っている人には、強くお薦めします。 その他 下賤な話だが、本専攻の入試は他大学院に比べ設問自体少なく、各年の傾向も似通っているため、穴場だと思う。 とはいえ最も大事なのは、大学院で何をやりたいのか明確な目標をもつことだろう。 目標をもつことは試験勉強のモチベーションに繋がるし、進学後にやるべきことも明確になる。 具体的な目標をイメージしづらい人は、前もって研究室見学には行くといいだろう。 現在主にどのような研究をしているのか、どんな実験器具があるのか、研究室の雰囲気はどうなのか、といった、ネットでは中々わからない情報が手に入る。 研究室のメンバーも外部からの刺激に飢えている (?) ので、歓迎してくれるはず (もちろんアポは忘れないこと) 。 また余裕がある人は、研究室のメンバーが書いた論文を読んでみることをお薦めする。 漠然とした研究内容を具体的に把握でき、やる気が高まるし、研究内容のミスマッチを防ぐこともできる。 本専攻ヒューマンシステム論分野にご在任の加納学教授のブログには、大学院進学に関してたくさんのアドバイスが書かれている。 例えばこのエントリなどは大学院進学を決意するにあたってはじめに読んでおきたい。

September 22, 2015