참고 : 이것은 MATLAB S- 함수를 처음 사용하는 경우이며, Simulink를 몇 번 사용했습니다.s 함수 직접 피드 스루
S- 함수에서 입력 변수 inp
을 사용하려고하면 3
에 NaN
을 반환합니다. 시스템에 대한 입력은 버스 생성자를 통해 시스템에 연결된 세 가지 간단한 단일 단계 기능입니다. 시스템을 시뮬레이트 할 때 오류 메시지가 나타납니다. inp
에서 테스트 인쇄를 수행하여 NaN 만 발견했습니다. 어떤 아이디어?
세부 사항 :
나는 세그웨이를 클래스 프로젝트로 시뮬레이션 중이다. Simulink에서 액츄에이터 (DC 모터)와 플랜트 (Segway 자체)를 별도의 S- 기능 블록으로 시뮬레이션하고 있습니다. 모터는 전압, 세그웨이의 속도 및 피치 축에 대한 세그웨이 (역기전력으로 인한) 세 입력을받습니다. 출력은 전기자 전류입니다.
이것은 단순한 선형, 비 차동 시스템입니다. 그런 이유로, 국가가 없습니다. 수행되는 유일한 계산은 입력에서 출력으로의 피드 스루 (feed-through)입니다.
function [sys,X0]=nl_pend(time,state,inp,FLAG,ICs);
% actuator parameters:
% R_m: motor armature resistance
% K_b: motor back emf constant
% K_t: motor torque constant
% r: radius of the wheel
global R_m K_b K_t r;
if FLAG == 0, % initialize system parameters and states
% Call file that initializes parameters
segway_dcmotor_pars;
% This system has:
% 0 states (theta,thetatheta_dot),
% 3 input (v,x_dot,theta_dot),
% 1 outputs (i)
nx = 0; % # of states
nu = 3; % # of inputs
ny = 1; % # of outputs
sys = [nx; 0; ny; nu; 0; 0];
% Initial Conditions (will be passed as and argument)
X0 = ICs;
elseif FLAG == 1, % states derivatives
%blank
elseif FLAG == 3, % system outputs
%inp(1) = motor voltage
%inp(2) = segway velocity
%inp(3) = segway pitch angular velocity
display(inp);
y(1) = (1/R_m)*inp(1) - (K_b/(r*R_m))*inp(2) + (K_b/R_m)*inp(3);
sys = y;
else,
sys = [];
end
음을 설정해야하므로, 그것을 직접 피드 스루, 나는 해결책을 발견했습니다이며, 다음과 같이 코드입니다. 나는 상태를 갖지 않고 시스템이 뼈대에서 차지하는 단일 상태 인 q를 가지도록 변경했습니다. 이것은 해결책이 아닌 해결책이기 때문에 첫 번째 방법이 효과가 없었던 이유에 대한 아이디어를 공개 할 것입니다. – Ataraxia