Identify Yourself!

아무래도 대망의 에어드롭이 베레모였던 행복의 제어공학입니다.

개요



표제의 문언을 최근에 알았습니다. 그래서 You를 Identify하는 게임(?)을 MATLAB에서 만들었습니다.
MATLAB의 플롯 윈도우에서 동정 여기 신호를 마우스 등으로 트랙하면 동적 특성이 계산됩니다.


다운로드 대상



아래 파일을 다운로드하고 "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]);

축에서 마우스 포인터 위치 얻기



확인 실험 중에 사용자의 마우스 조작을 캡처하기 위해도 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 )
  • 좋은 웹페이지 즐겨찾기