Help us understand the problem. What is going on with this article?

Identify Yourself!

どうも、待望のエアドロップがベレー帽だった幸福の制御工学です。

概要

表題の文言を最近知りました。ので、YouをIdentifyするゲーム(?)をMATLABで作りました。
MATLABのプロットウィンドウ上で同定用励起信号をマウス等でトラックすると、あなたの動特性が計算されます。
image.png

ダウンロード先

以下のファイルをダウンロードして"ident_you"を実行してください。
ダウンロードリンク

なお、以下の環境を前提としております。
* ご家庭のMATLAB
* PC
* ポインティングデバイス
* System Identification Toolbox(あれば)

コード解説

ここで取ってつけたような解説を書いておきます(Qiitaなので)。今回使用したボタンやらマウス位置取得はすべてMATLABグラフィックスオブジェクトのコールバック機能を用いて実装されています(参考 by @macht氏, MathWorks公式ドキュメント)。

GUIボタン

タイトル画面で励振信号をM系列/ランダムステップで切り替えるボタンはrectangleオブジェクトで実装しています。以下のサンプルコードの通り、rectangleオブジェクトはクリック時にButtonDownFcnで指定されたコールバック関数を呼び出すため、ここにボタンの動作を指定します。なお、デフォルトではPickablePartsプロパティが'visible'に設定されているため、FaceColorプロパティを指定して色を付けるか、PickablePartsプロパティを'all'に指定しないとエッジの部分にのみ「当たり判定」が発生します。

% ボタンの外見指定
pos_x = 0;
pos_y = 0;
width = 5;
height = 2;
color = [0.9, 0.1 0.1];

% クリック時のコールバック関数
OnBtnClicked = @(~,~) disp('Clicked!');

% rectangleを作成
rectangle('Position', [pos_x-width/2, pos_y-height/2, width, height], 'FaceColor', color, 'ButtonDownFcn', OnBtnClicked);

% 表示調整
xlim([-10, 10]);
ylim([-10, 10]);

axes上のマウスポインタ位置の取得

同定実験中にユーザのマウス操作をキャプチャするのにも、figureオブジェクトのWindowButtonMotionFcnコールバックを使用しています。以下のサンプルではさらにコールバック中にaxesオブジェクトのCurrentPointプロパティを参照して、タイトルにポインタ位置を表示しています。

% マウス移動時のコールバック
% 第1引数oは呼び出し元のオブジェクト(hf)
% Childrenで子オブジェクトのhaを参照
OnMouseMove = @(o,~) title(o.Children, string(o.Children.CurrentPoint(1,1:2)));

% figureオブジェクト
hf = figure('WindowButtonMotionFcn', OnMouseMove);
% axesオブジェクト
ha = axes(hf);

% 飾り
scatter(ha, rand(10, 1), rand(10, 1));

補遺

  • System Identificaton Toolboxが導入されている環境では入力むだ時間推定付きのarx、導入されていなければ自前の最小二乗法で同定を行います。
  • Toolboxの導入状況によらず、モデル次数はともに3としています。これは事前実験でN4SIDによる次数推定結果が概ね3となったためです。
  • 実応用上でも、Human in the loopな制御系においてはユーザのモデルを考えることは有用です。(Hidden Oscillations In The Closed-Loop Aircraft-Pilot System And Their Prevention)
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした