制御工学

不変零点(invariant zero)と最適フィードフォワード

倒立振子運動方程式 a=9.24e+00; L1=7.00e-02; c2=1.12e-05; m2=3.95e-03; g=9.81e+00; l2=7.20e-02; J2=8.84e-06; a33=-a; a42=m2*g*l2/J2; a43=m2*L1*l2*a/J2; a44=-c2/J2; A = [0 0 1 0 0 0 0 1 0 0 a33 0 0 a42 a43 a44]; b=2.43e+00; B=[0 0 b -m2*L1*l…

零点と過渡特性

零点がz>0のとき、逆ブレを生じる: 不安定零点という 零点が極に近いとき、極零相殺(ダイポールの極と相殺する)で零点の影響は現れない ゼロ点が-1

マイコンでのPID制御の実装

http://penguinwalk1986.hatenablog.com/entry/2015/09/02/233542 PI制御の差分化 D制御をつけると最終的にこうなる 追記2018/2/18: http://penguinwalk1986.hatenablog.com/entry/2018/02/18/021231 D制御は偏差ではなく偏差の微分が必要

LQGレギュレータを使った倒立振子

http://minokura.net/works/wheelpendulum.html

Ziegler-Nichols限界感度法の前提条件

http://pid123.blogspot.jp/2015/02/pi-ziegler-nichols.htmlジーグラ・ニコルス法は、(むだ時間のない) 積分系・1次遅れ系・2次遅れ系に適用できない

バスから行列を生成する

Vector Concatenateを使う方法はまずいと思っていたが、Bus Creator+Reshapeでできそう。

SimulinkでVector Concatenateを使って定数から行列を作る

Pebbleの加速度データをMATLABで表示する

MATLABでカルマンフィルタを使う

http://jp.mathworks.com/help/control/ug/kalman-filtering.html

定常カルマンフィルタ

function lineartest clear all; close all; A=1; b=1; c=1; Q=1; R=2; N=300; v=randn(N,1)*sqrtm(Q); w=randn(N,1)*sqrtm(R); x=zeros(N,1); y=zeros(N,1); y(1)=c'*x(1,:)+w(1); for k=2:N x(k,:)=A*x(k-1,:)'+b*v(k-1); y(k)=c'*x(k,:)'+w(k); end xhat …

共分散行列

ここの説明を参考に http://stattrek.com/matrix-algebra/covariance-matrix.aspx列ベクトルで表現するか、行ベクトルで表現するかで結果が変わってくる。 MATLABのcov()関数のデフォルトは 試行回数1 カテゴリ1値 カテゴリ2値 カテゴリ3値 試行回数2 カ…

SimulinkでContnuousとDiscreteの違い

http://jp.mathworks.com/matlabcentral/answers/36663-what-are-continuous-and-discrete-states-in-simulink

最適サーボシステム

clear all; format compact; A = [ 0 1 0 0 -4 -2 4 2 0 0 0 1 2 1 -2 -1 ]; B = [0 2 0 0]'; C = [ 0 0 1 0]; x0 = [0 0 0.25 0]'; Ae = [ A zeros(4,1) -C zeros(1,1)]; Be = [B;zeros(1,1)]; Q11 = 100; Q22 = 600; Qe = [C'*Q11*C zeros(4,1) zeros(1,4)…

同次元状態オブザーバを使って出力フィードバック形式のコントローラを組む

C=[0 0 1 0]よりx3のみ観測しているので、誤差は(初期を除いて)生じていない。 M1=0.5; M2=1; k = 2; mu=1; A = [0 1 0 0 -k/M1 -mu/M1 k/M1 mu/M1 0 0 0 1 k/M2 mu/M2 -k/M2 -mu/M2 ]; B = [0 1/M1 0 0]; C = [0 0 1 0]; p = [-2+2j -2-2j -2+j -2-j]; K …

多入力他出力(MIMO)システムの時間応答

clear all; close all; A=[ 0 1 0 0 -2 -2 1 2 0 0 0 1 2 2 -2 -8 ]; B = [ 0 0 2 -2 0 0 -2 4 ]; C = [ 1 0 0 0 0 0 1 0 ]; D = [ 0 0 0 0 ]; sys = ss(A,B,C,D); t= 0:0.01:20; x0 = [1 0 -1 0]'; y=initial(sys,x0,t); y1=y(:,1); y2=y(:,2); subplot(3,1…

matlabで遷移行列を利用して零入力応答を求める

clear all; close all; A=[ 0 1 -10 -2 ]; c=[1 0]; x0 = [1 0]'; ts = 0:0.1:5; for idx=1:length(ts) t=ts(idx); y(idx) = c*expm(A*t)*x0; end plot(ts,y);

ステップ応答、零入力応答、時間応答の関係

零入力応答=自由応答=初期条件応答 -> initial() ステップ応答=零状態応答 -> step() 時間応答=ステップ応答+零入力応答 -> lsim() clear all; close all; drawResponse(1); drawResponse(2); drawResponse(3); function drawResponse(number) aa=[-11 -2 0…

状態空間モデルの初期条件応答(任意の初期値における零入力応答=自由応答)

http://jp.mathworks.com/help/control/ref/initial.html a = [-0.5572, -0.7814; 0.7814, 0]; c = [1.9691 6.4493]; x0 = [1 ; 0]; sys = ss(a,[],c,[]); initial(sys,x0)

伝達関数から状態空間表現を求める

http://www.me.saga-u.ac.jp/~sato/modern_control/mc_lec_no4.pdfhttp://www.ishikawa-nct.ac.jp/lab/E/y_kawai/www/course/CSD/15CSD/handouts/15CSD_lect02/15CSD_lect02_slide.pdf伝達関数→逆ラプラス変換→微分方程式→行列表現→状態空間でいいのかな要点…

制御のメモ

MATLABで関数ワークスペースからベースワークスペースの変数を呼び出す

http://jp.mathworks.com/matlabcentral/newsreader/view_thread/251927 ベースワークスペースにいるvarを呼び出したいとき function hoge v = evalin('base','var') end

MATLABで直流モーター速度制御系における時定数とゲインのパラメータ同定

A/D変換がボトルネックになっているのか、RoTHシミュレーションのタイムステップが効いてくるっぽい Arduino Mega2560で、timestep=1/30[sec]でうまくいった。同定結果 ==result== Time step = 0.050000 K = 0.665923 T = 3.466667 u_offset = 1.269975 ==re…

SimulinkでArduinoのA/D変換値をリアルタイムキャプチャする

http://www.element14.com/community/thread/32223/l/arduino-uno-serial-comms-to-simulink?displayFullThread=true2つのSimulinkブロック間でシリアル値を渡すらしい 1. Enable External Mode in Simulink. Note: Arduino Uno is not supported for exter…

SimulinkでArduino RoTHを使う

RoTH = Run on Target Hardware手順は 0. Prepare 1. Build(Deploy) 2. Simulate(Run)例(Scopeは不要だがつけてみた) SimulinkとArduinoの連携も最新のやり方は本家を参考にすると良い。 1. Prepare for Run 注意点:明示的にシリアルポートを指定する(/de…

ArduinoとMATLABの連携(MATLAB 2015a)

Target Hardwareのライブラリの追加 $ supportPackageInstallerMATLABおよびSimulinkライブラリを追加する次の書籍を参考にしたが、やり方が異なるので注意。 ちなみにAPIもかなり変わっているので、本家のサイトかヘルプ画面からArduinoチュートリアルを見…

matlabのPatchのメモ

FIRフィルタへのインパルス応答の畳込み

サンプリング・リバーブ アルゴリズム http://yukara-13.hatenablog.com/entry/2013/12/20/094926 http://www.ari-web.com/service/soft/reverb-4.htm

scikits.audiolabのインストール

ここを参考に。 http://sky-y.hatenablog.jp/entry/2013/11/15/183949

ゲイン余裕と位相余裕

2次遅れ系にPI制御系を入れた時の閉ループ伝達関数Tc s=%s G=1/(s^2+2*s+1) C=1+1/s Tc=G*C/(1+G*C) nyquist(syslin("c",Tc) #単位円プロット→show_margins(SISO,'nyquist')関数を使うときは不要 a = linspace(0, 2*%pi, 100); x=cos(a) y=sin(a) plot2d(x,y…

MatlabのControl System Toolbox

http://www.mathworks.co.jp/jp/help/control/index.html