[[Matlab]]
*概要 [#xac115a1]
-Matlabの制御系オプション
--制御のGUI設計ツール、シミュレーション、自動組み込み用Cコード作成
-プログラムは非公開サーバに置いてある。
*注意 [#dfc0a264]
-Simulinkには型の概念がある!
*制御系設計手順 [#de3d0e0a]
-MBDプロセス(大きなところから小さいところへ、小さいところから大きいところへV字プロセス(制御系設計の))
--vプロセスに沿った形で商品を出している。
++要求分析-製品検査
++システム設計-結合検査
++詳細設計-単体検査
++コーディング
*MATLAB ~規格 B方式 [#l2bc9deb]
-JMAABというMatlabのコーディングルールがある
--A方式とB方式がある
-B方式
--上から順番に、トップレイヤ・トリガーレイヤ(割り込み)・構造レイヤ(アルゴリズムの構造)・データフローレイヤ(アルゴリズムそのもの)の順番にする。
*制御設計の手順 [#j563cf30]
+目標設定
+システム分析とプラントモデリング
+未知パラメータの同定
--データシートから決め打ち、パラメータ推定、それらのハイブリッドの方法も学び、どれがよいかをきちんと把握
+モデルの変換特性解析
+制御系設計
--制御則の決定
--離散化・量子化(sからzへ。劣化評価)
+制御系の評価
--きちんと実機で計測してその応答性を判断する
--必要があれば不足部分を考慮して制御を変更・追加して、制御器設計に戻る。
--式で作っておいて、実際にうごかして合わなかったところは何が足りなかったのかを数式でさらに追加した、など。
-''一般的な制御設計の流れ''
--プラント<-ループ->線形化->制御設計(連続)<-ループ->離散化(必ず劣化するので連続との比較をする)->…
--R&Dでは何も言わなくてもこういう流れになる。ボード線図ナイキスト線図はすべての要素で使う。
--量産では「…」部分を重点的に行う。
--物があればもう少し実機と合っているか、どうあっているか、制御系でどれくらいまでやるか、という詳しい調査が可能になる。
*目標設定 [#yff9f402]
-制御仕様関連事項(つまり偏差から調節部への話)
--制御装置に対する仕様・制限事項
---NXT本体:サンプリングタイム、演算精度single(必ずsingleに!)
---入力:単位deg
--ユースケースに対するシステム要求事項
---出力:操作部への操作信号範囲
-制御仕様関連事項=コントローラ制御目標
--立ち上がり時間、遅れ時間、制定時間、安定時間、精度(定常偏差)
*プラントモデル [#lade50f6]
-プラントモデルは、制御設計屋さんが使えるように作る
--入出力は何?プラント入力は制御器から出力できる?プラント出力は計測できる?負荷トルクは必要?詳細なモータのデータシートにはブレーキモードがあるが考慮必要?
--必要な精度は?制御器のロバスト性を上げるためにわざと精度を悪くすることもある。超詳細モデルでないと動かない制御器に意味はない
--失っている精度は?何をモデル化できていないかをk把握。
-対象物の動きを机上で確認=シミュレーション
--試作不要。実機ベースと異なり、抽象度が高くていいからモデル化してシミュレーションできる
--周波数応答など事前に確認できる
--柔軟性高い。数値を変えればいろんなモータに変更可能
*制御設計 [#u94bcd9a]
-実装にあたって:システム図は必ずまず書く
--検出部:大量生産性の場合は小さく、R&Dはめっちゃ高性能にやる傾向がある。いろんな種類がある。
-制御設計はパラメータを設定することではない
--プラントモデルがあるからパラチュンができる。
--チューニングの前の段階は、NXT Motorのボード線図を利用する。
*Simulink [#k8cb1772]
**操作方法 [#u85df880]
-slxファイルを開く(ダブルクリックかbasenameを入力)
-①みたいなところから①みたいなところへ行くようなブロックが存在する
-playを押すとシミュレーション、オートスケールにするとそれっぽい時間に
-commonly usedのスコープを当てるとそこのシミュレーションが見れるようになる。(スコープには複数の入力を突っ込むこともできる)
-Terminator:つながっていない出力端子の警告防止
-ブロック内部ではImportとoutportの両方を計算
-2変数->Mux->Scopeとすると同じスコープで見れて便利
-RateTransitionを使うと連続時間から離散時間に変換することになる
-選択->Comment Throughにすると、値がそのまま透過する(コメントアウトではない)
-Ctrlを押しながらにすると線を引き出せる
-デフォルトはDOUBLEになっている。端子の型があるので、それをクリックすると型を変更可能
-ボード線図の書き方
++開ループのボード線:線を右クリック->線形解析ポイント->開ループの入力をプラントの前に。線を右クリック->線形解析ポイント->開ループの出力をプラントの後に。
++閉ループのボード線図:線を右クリック->線形解析ポイント->入力の摂動をTarget Sigに。線を右クリック->線形解析ポイント->出力の測定値をdegに。
--その後、解析->制御設計->線形解析、を押すとボード線図やナイキスト線図を計算できる
-SimulinkブロックもCtrl+Uすれば中身が見られる
**状態空間形式 [#dbf5267d]
-状態空間形式
--sys=ss(A, B, C, D)をオブジェクトすることができる
--sys=ss(A, B, C, D, 0.01)を''離散化して計算して''オブジェクトする
--tf(sys);でラプラス表現できる。
--離散化を普通に.01sでやると''結構劣化する''。必ず確認しないとする。
**なるべく自分で [#qc45fc12]
-離散化したときにきちんと動くように、自分で微分器を作っている
-企業では絶対にPID関数を使わない。なぜなら、中身をきちんと見ていないものは使わない。何が間違っているかを自分でコントロールできる部分が少なくなる。
**自動書き込み [#k6f0e858]
-自動書き込み手順
++nxtbuildがCのプログラムを作る
++RTOS(OZEC用のコード)用の設定ファイルを生成
++GCCでコンパイル
++書き込み
// Simlink 表記ぶれ用